redux-security
Version:
49 lines (38 loc) • 2.19 kB
JavaScript
import cuid from 'cuid'
import { types } from './actions'
const initial = {
config: {
docsMax: 2,
docsMaxOverRemove: true
},
docs: [],
status: { value: '', error: '' }
}
export const reducer = (state = initial, action) => {
const { payload, __ns__ } = action
const { config, status, docs } = state
const doStatus = (value) => Object.assign({}, { config, docs }, { status: { value }})
const doFail = (value, error) => Object.assign({}, { config, docs }, { status: { value, error }})
const doDocs = (docs) => Object.assign({}, { config, status }, { docs })
switch (action.type) {
case types.CODE_CONFIRM_REQUEST: return doStatus(types.CODE_CONFIRM_REQUEST)
case types.CODE_CONFIRM_SUCCESS: return doStatus(types.CODE_CONFIRM_SUCCESS)
case types.CODE_CONFIRM_FAILURE: return doFail(types.CODE_CONFIRM_FAILURE, payload.error)
case types.CODE_EMAIL_REQUEST: return doStatus(types.CODE_EMAIL_REQUEST)
case types.CODE_EMAIL_SUCCESS: return doStatus(types.CODE_EMAIL_SUCCESS)
case types.CODE_EMAIL_FAILURE: return doFail(types.CODE_EMAIL_FAILURE, payload.error)
case types.LOGIN_REQUEST: return doStatus(types.LOGIN_REQUEST)
case types.LOGIN_SUCCESS: return doStatus(types.LOGIN_SUCCESS)
case types.LOGIN_FAILURE: return doFail(types.LOGIN_FAILURE, payload.error)
case types.LOGOUT_REQUEST: return doStatus(types.LOGOUT_REQUEST)
case types.LOGOUT_SUCCESS: return doStatus(types.LOGOUT_SUCCESS)
case types.LOGOUT_FAILURE: return doFail(types.LOGOUT_FAILURE, payload.error)
case types.SIGNUP_REQUEST: return doStatus(types.SIGNUP_REQUEST)
case types.SIGNUP_SUCCESS: return doStatus(types.SIGNUP_SUCCESS)
case types.SIGNUP_FAILURE: return doFail(types.SIGNUP_FAILURE, payload.error)
case types.INSERT: return doDocs([ { ...payload, ns: __ns__, _id: payload._id ? payload._id : cuid() }, ...state.docs ])
case types.UPDATE: return doDocs(state.docs.map((doc) => doc._id === payload._id ? { ...doc, ...payload } : doc))
case types.REMOVE: return doDocs(state.docs.filter(doc => doc._id !== payload._id))
default: return state
}
}