Giter Club home page Giter Club logo

react-native-native-dialog's Introduction

react-native-native-dialog

A React Native module that exposes some of the common native dialogs to React Native.

Latest Stable Version NPM Downloads GitHub issues Used Languages

✨ Features

  • ✅ Native support for the most commonly used Dialogs on iOS and Android.
  • ✅ Dark mode 🌓 and Accent Color 🌈.
  • ✅ Easy to use Api with support for both Callback and Promise.

🚧 Table of Contents

🚀 Motivation

The issue with trying to mock native components using <View />s is that no matter how much time and effort you spend to make it look like the real-deal, You end up with janky looking results (I spent hours taking screenshots of the real Android dialog and trying to imitate it, And didn't get a satisfying result). But to be fair, using react-native <View />s offers a lot of customization which is something you cannot simply just get with native libraries. So there is a decision that needs to be made.

Anyways I decided to make a library for some of the commonly used dialogs using native APIs.

⬇️ Installation

npm install react-native-native-dialog --save

cd ios && pod install   # Only if you're building for iOS

Or if you're using yarn:

yarn add react-native-native-dialog

cd ios && pod install   # Only if you're building for iOS

⚠️ The library only works with [email protected] and up.

⚒️ Additional Setup

Since this library only works with [email protected] and up there is no need to manually link the library, But there still some additional setup you need to do.

iOS

This library is written in Swift so we need to create a bridging header in your XCode project (If you've already done it you can skip this section).

Create Bridging Header

  1. First of all make sure you run pod install in Terminal inside ios folder.
  2. In XCode, in the project navigator, right click [your project's name]New File...
  3. Select Swift File, click Next and then click Create.
  4. XCode will ask you whether you want to create bridging header, Click Create Bridging Header.
  5. Build your project (Cmd+B), And you're ready to go.

Android

Unfortunately Android doesn't support changing the accentColor dynamically, the only way to use a custom accentColor is to define your style statically in res/values/styles.xml (If you're ok with using the default accentColor #009688 in Android you can skip this section).

  1. Open android/app/src/main/res/values/styles.xml
    • If you don't have one create a new file in the exact same path.
    • Add those tow styles to the bottom of your styles.xml file and replace colorPrimary, colorPrimaryDark and colorAccent with your own colors:
    <resources>
        ...
    
    +    <style name="AlertDialog" parent="Theme.AppCompat.Dialog.Alert">   <!--This theme is used for dark dialog-->
    +        <item name="colorPrimary">#FFB300</item>       <!--Replace the these colors with your own colors-->
    +        <item name="colorPrimaryDark">#FFB300</item>
    +        <item name="colorAccent">#FFB300</item>
    +    </style>
    
    +    <style name="LightAlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert">   <!--This theme is used for light dialog-->
    +        <item name="colorPrimary">#E6A100</item>       <!--Replace the these colors with your own colors-->
    +        <item name="colorPrimaryDark">#E6A100</item>
    +        <item name="colorAccent">#E6A100</item>
    +    </style>
    
    </resources>
  2. Next open up android/app/src/main/java/[...]/MainAppliction.java
    • Add import com.github.mohaka.nativedialog.RNNativeDialogPackage; to the imports at the top of the file
    • Add RNNativeDialogPackage.setDialogTheme(R.style.AlertDialog, R.style.LightAlertDialog); to the bottom of onCreate() method.
    ... 
    
    import android.app.Application;
    import android.content.Context;
    
    + import com.github.mohaka.nativedialog.RNNativeDialogPackage;
    
    ...
    
    @Override
    public void onCreate() {
        super.onCreate();
        SoLoader.init(this, /* native exopackage */ false);
    +   RNNativeDialogPackage.setDialogTheme(R.style.AlertDialog, R.style.LightAlertDialog);
        initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
    }
    
    ...
  3. Build your project and start using react-native-native-dialog.

☘️ Example

import NativeDialog from 'react-native-native-dialog';

NativeDialog.showDialog({
   title: 'Do you want to update your iCloud Backup before erasing?',
   message: 'If you erase without updating your backup, you may lose photos and other data that are not yet uploaded to iCloud.',

   positiveButton: 'Back Up Then Erase',
   negativeButton: 'Erase Now',
   neutralButton: 'Cancel',

   negativeButtonStyle: 'default',
   neutralButtonStyle: 'cancel',

   theme: 'dark',
   accentColor: '#ff4a9e',

   onPositivePress: () => console.warn('positive'),
   onNegativePress: () => console.warn('negative'),
   onNeutralPress: () => console.warn('neutral'),

   onDismiss: () => console.warn('dismiss'),
});

🔌 Component API

NativeDialog.showDialog() API

NativeDialog.showInputDialog() API

NativeDialog.showItemsDialog() API

NativeDialog.showNumberPickerDialog() API

NativeDialog.showRatingDialog() API

🤝 Contributing

We would love to have community contributions and support! A few areas where could use help right now:

  • Bug reports and/or fixes
  • Writing tests
  • Creating examples for the docs

If you want to contribute, please submit a pull request, or contact [email protected] for more information. When you commit your messages, follow this convention:

Main changes subject
- Optional message
- Another optional message

If you do a breaking change, add an explanation preceded by BREAKING CHANGE: keyword. For example:

BREAKING CHANGE: Main changes subject
- Optional message
- Another optional message

💡 FAQ

👍 Support

  • Heysem Katibi - Initial work
  • Yaman Katby

See also the list of contributors who participated in this project.

📝 License

This library is licensed under the MIT License - see the LICENSE.md file for details.

react-native-native-dialog's People

Contributors

mohakapt avatar yamankatby avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.