nsgm-cli
Version:
A CLI tool to run Next/Style-components and Graphql/Mysql fullstack project
107 lines (97 loc) • 2.51 kB
text/typescript
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;
}
};