reedx
Version:
Like redux but with less code
33 lines (22 loc) • 776 B
JavaScript
import reduce from './reduce'
const { assign, keys } = Object
const isError = (prop) => prop instanceof Error
const isUndefined = (prop) => !prop && prop === undefined
export const createFSA = (type) => (payload, meta) => {
let action = { type }
if (isError(payload)) {
action = assign({}, action, { payload, error: true })
}
if (payload && !isUndefined(payload)) {
action = assign({}, action, { payload })
}
if (!isUndefined(meta)) {
action = assign({}, action, { meta })
}
return action
}
const createActionsObject = (types) => (obj, reducer, idx) =>
assign({}, obj, { [reducer]: createFSA(types[idx]) })
const createActions = (types, reducers) =>
reduce(keys(reducers), createActionsObject(types), {})
export default createActions