at the end of the day, it was inevitable
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import { connect } from 'react-redux'
|
||||
import { rootActions } from '../root'
|
||||
|
||||
//This is recursive version of standard redux bindActionCreators
|
||||
function bindActionCreatorsRecursive (actions, dispatch) {
|
||||
if (typeof dispatch !== 'function') {
|
||||
throw new TypeError('Action wrapper needs a dispatch function')
|
||||
}
|
||||
return Object.keys(actions).reduce(function (acc, key) {
|
||||
if (typeof actions[key] === 'function') {
|
||||
acc[key] = function () {
|
||||
return dispatch(actions[key].apply(null, arguments))
|
||||
}
|
||||
} else if (actions[key] !== null && typeof actions[key] === 'object') {
|
||||
acc[key] = bindActionCreatorsRecursive(actions[key], dispatch)
|
||||
}
|
||||
|
||||
return acc
|
||||
}, {})
|
||||
}
|
||||
|
||||
export default function reduxConnect (storePropName = 'store', storePath) {
|
||||
return (component) => {
|
||||
|
||||
const mapStateToProps = (state) => ({
|
||||
[storePropName]: storePath ? state.getIn(storePath).toJS() : state.toJS()
|
||||
})
|
||||
|
||||
const mapDispatchToProps = (dispatch) => ({
|
||||
actions: bindActionCreatorsRecursive(rootActions, dispatch)
|
||||
})
|
||||
|
||||
return connect(mapStateToProps, mapDispatchToProps)(component)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export function reduxActions () {
|
||||
return (component) => {
|
||||
const mapDispatchToProps = (dispatch) => ({
|
||||
actions: bindActionCreatorsRecursive(rootActions, dispatch)
|
||||
})
|
||||
|
||||
return connect(null, mapDispatchToProps)(component)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user