UNPKG

redux-security

Version:
49 lines (38 loc) 2.19 kB
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 } }