UNPKG

nsgm-cli

Version:

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

107 lines (97 loc) 2.51 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; } };