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