Posts
Installation
You can install via yarn
yarn add @khanghoang/redux-modal
or npm
npm install @khanghoang/redux-modal
Usage
Simple example
Example code at examples/simple/
Define your modal
./MyConnectedModal.js
import React, { Component } from 'react';
import { Modal, Text } from 'react-native';
import { connectModal } from '@khanghoang/redux-modal';
const MyModal = ({ isOpen }) => {
return (
<Modal
open={isOpen}
>
<Text>This is a modal</Text>
</Modal>
);
}
export default connectModal('mymodal')(MyModal);
Set the input
Add the modal
to the view heirarchy as usually
import React, { Component, View, Text } from 'react';
import MyConnectedModal from './MyConnectedModal.js'
const MyView = () => (
<View>
<View>
<Text>Dummy view</Text>
<View>
<MyConnectedModal />
</View>
)
Set the output
In the place you want it to display, usually it’s your root view.
import React, { Component, View } from 'react';
import { Provider } from 'react-redux';
import { combineReducers, createStore } from 'redux';
import { reducer as modalReducer, ModalPortal } from '@khanghoang/redux-modal';
const store = createStore(combineReducers(modalReducer));
const App = () => {
<Provider store={store}>
<ModalPortal wrapComponent={View}/>
</Provider>
};
To open the modal
Then you want to open
mymodal
component from somewhere else in your app.
import React, { Component } from 'react';
import { View, TouchableOpacity } from 'react-native';
import { connect } from 'react-redux';
import { open } from '@khanghoang/redux-modal';
const OpenPopupButton = ({ open }) => (
<TouchableOpacity
onPress={() => {
open('mymodal');
}}
>
<Text>Tap Me</Text>
</TouchableOpacity>
);
export default connect(null, { open });
Advanced example
In some apps, you may want to have multilple portals which are at different places. We support them as well.
Define your modal.
import React, { Component } from 'react';
import { Modal, Text } from 'react-native';
import { connectModal } from '@khanghoang/redux-modal';
const MyModal = ({ isOpen }) => {
return (
<Modal
open={isOpen}
>
<Text>This is a modal</Text>
</Modal>
);
}
export default connectModal('mymodal', {}, 'gate_1')(MyModal);
Get your portal for that modal.
import React, { Component, View } from 'react';
import { Provider } from 'react-redux';
import { combineReducers, createStore } from 'redux';
import { reducer as modalReducer, getPortalByGate } from '@khanghoang/redux-modal';
const PortalOne = getPortalByGate('gate_1');
const store = createStore(combineReducers(modalReducer));
const App = () => {
<Provider store={store}>
<PortalOne wrapComponent={View}/>
</Provider>
};
Then you can open
the modal with the same action as what we discuss above in simple
example
FAQ
Q: Can I have 2 or more modal with the same name?
A: No, we use name as unique id for each modals.
Q: I really need your help now, how can I ping you?
A: I always want to listen to your feedbacks and help you out. Just ping my twitter @khanght
subscribe via RSS