UNPKG

nsgm-cli

Version:

A CLI tool to run Next/Style-components and Graphql/Mysql fullstack project

107 lines (97 loc) 2.48 kB
import * as types from './types' import _ from 'lodash' const initialState = { firstLoadFlag: true, template: { totalCounts: 0, items: [], }, } export const templateManageReducer = (state = initialState, { type, payload }) => { const { template } = state const { totalCounts, items } = template let newItems: any = [] switch (type) { case types.UPDATE_SSR_TEMPLATE: return { ...state, firstLoadFlag: true, template: payload.template, } case types.GET_TEMPLATE_SUCCEEDED: return { ...state, firstLoadFlag: false, template: payload.template, } case types.SEARCH_TEMPLATE_SUCCEEDED: return { ...state, firstLoadFlag: false, template: payload.template, } case types.ADD_TEMPLATE_SUCCEEDED: newItems = [...items] newItems.push(payload.template) return { ...state, firstLoadFlag: false, template: { totalCounts: totalCounts + 1, items: newItems, }, } case types.MOD_TEMPLATE_SUCCEEDED: const modItem = payload.template _.each(items, (item: any) => { if (item.id == modItem.id) { newItems.push(modItem) } else { newItems.push(item) } }) return { ...state, firstLoadFlag: false, template: { totalCounts: totalCounts, items: newItems, }, } case types.DEL_TEMPLATE_SUCCEEDED: const delItemId = payload.id _.each(items, (item: any) => { if (item.id != delItemId) { newItems.push(item) } }) return { ...state, firstLoadFlag: false, template: { totalCounts: totalCounts - 1, items: newItems, }, } case types.BATCH_DEL_TEMPLATE_SUCCEEDED: const delItemIds = payload.ids const allIds = _.map( _.map(items, (item) => _.pick(item, ['id'])), 'id' ) const diffIds = _.xor(allIds, delItemIds) newItems = _.filter(items, (item: any) => _.includes(diffIds, item.id)) let newTotalCounts = totalCounts - delItemIds.length if (newTotalCounts < 0) newTotalCounts = 0 return { ...state, firstLoadFlag: false, template: { totalCounts: newTotalCounts, items: newItems, }, } default: return state } }