reedx
Version:
Like redux but with less code
28 lines (21 loc) • 766 B
JavaScript
import invariant from 'invariant'
import createActions from './utils/createActions'
import createReducer from './utils/createReducer'
import createTypes from './utils/createTypes'
import createSelectors from './utils/createSelectors'
const model = ({ name: modelName, state = {}, computed = {}, reducers = {} }) => {
invariant(
model && typeof modelName === 'string',
'You need to set a name as a string for your state'
)
const selectors = createSelectors(modelName, { state, computed })
const types = createTypes(modelName, reducers)
const actions = createActions(types, reducers)
const reducer = createReducer(state, types, reducers)
return Object.assign(reducer, {
modelName,
actions,
selectors
})
}
export default model