0.1.2 ā€¢ Published 7 years ago

redux-popper v0.1.2

Weekly downloads
4
License
ISC
Repository
github
Last release
7 years ago

redux-popper

šŸŽˆ redux state management for popup components

Installation

npm install redux-popper --save-dev

Setup

Combine the redux-popper reducer with your own application reducers

import { reducer as popperReducer } from 'redux-popper';
const reducers = combineReducers({
    /* ... */
    poppers: popperReducer
})

Usage

Here's an example using material-ui/Dialog as the integrating component

import reduxPopper from 'redux-popper'

@reduxPopper('coolDialog')
class CoolDialog extends Component {
    render() {        
        const {isOpen, data, close, open, assign} = this.props
        const someData = {comparedTo:'a cucumber'}
        return (
            <div>
                <button onClick={()=> {assign(someData);open()}}>
                    Open Dialog
                </button>

                <Dialog open={isOpen} onRequestClose={close} >
                    Cool as...{data.comparedTo}
                </Dialog>
            </div>
        )
    }
}

// and alternatively, without the '@' decorator syntax:
CoolDialog = reduxPopper('coolDialog',CoolDialog)

To open / close / assign a registered popper from outside this component, simply call dispatch with the corresponding built-in action creator:

import {openPopper, closePopper, assignPopper} from 'redux-popper'

/* ... */

dispatch(openPopper('coolDialog'))
dispatch(closePopper('coolDialog'))
dispatch(assignPopper('coolDialog',{comparedTo:'a cup of cold-brew'}))

State Shape

Here's the state resulting from the example above:

//how the state looks
{
    /* ... */
    poppers: {
        'coolDialog': {
            isOpen: true, /* bool: (true|false) */
            data: {comparedTo:'a cucumber'}
        }
    }
}

Dev Dependencies

License

ISC