import { bindActionCreators } from 'redux'; const bindNavigationActionCreator = (actionCreator, navigator) => (...args) => ({...actionCreator.apply(this, args), navigator}); export const bindNavigationActionCreators = (actionCreators, dispatch, navigator) => { if (typeof actionCreators === 'function') { const boundActionCreator = bindNavigationActionCreator(actionCreators, navigator); return bindActionCreators(boundActionCreator, dispatch); } if (typeof actionCreators !== 'object' || actionCreators === null) { throw new Error( `bindActionCreators expected an object or a function, instead received ${ actionCreators === null ? 'null' : typeof actionCreators }. ` + `Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?` ) } const boundActionCreators = Object.keys(actionCreators).reduce((actions, key) => { const actionCreator = actionCreators[key]; if (typeof actionCreator === 'function') { actions[key] = bindNavigationActionCreator(actionCreator, navigator); } return actions; }, {}); return bindActionCreators(boundActionCreators, dispatch); };