@keybittech/awayto
Version:
Deploy a fully-featured application in about 10 minutes that is primed for quick development. Do business, impress a client with a quick demo, finish your poc with time to spare; all easily achievable with Awayto.
76 lines (68 loc) • 2.62 kB
text/typescript
import { Reducer } from 'redux';
import {
IGroup,
IGetManageGroupsAction,
IManageGroupsActionTypes,
IManageGroupsState,
IPostManageGroupsAction,
IPutManageGroupsAction,
IDeleteManageGroupsAction,
IManageGroupsActions,
ILogoutActionTypes,
IDisableManageGroupsAction
} from 'awayto';
const initialManageGroupsState: IManageGroupsState = {
isValid: true
};
function reduceGetManageGroups(state: IManageGroupsState, action: IGetManageGroupsAction): IManageGroupsState {
return { ...state, groups: [...action.payload as IGroup[]] };
}
function reducePostManageGroups(state: IManageGroupsState, action: IPostManageGroupsAction): IManageGroupsState {
state.groups = Array.prototype.concat(state.groups, action.payload);
return { ...state };
}
function reducePutManageGroups(state: IManageGroupsState, action: IPutManageGroupsAction): IManageGroupsState {
const payload = action.payload as IGroup;
state.groups = state.groups?.map((user: IGroup) => {
if (user.id === payload.id) {
return { ...user, ...payload }
}
return user;
});
return { ...state };
}
function reduceDeleteState(state: IManageGroupsState, action: IDeleteManageGroupsAction): IManageGroupsState {
const { groups } = state;
if (groups) {
state.groups = groups.filter(group => group.id !== action.payload.id);
}
return state;
}
function reduceDisableState(state: IManageGroupsState, action: IDisableManageGroupsAction): IManageGroupsState {
const { groups } = state;
if (groups) {
state.groups = groups.filter(g => !action.payload.some(gr => gr.id == g.id))
}
return state;
}
const manageGroupsReducer: Reducer<IManageGroupsState, IManageGroupsActions> = (state = initialManageGroupsState, action) => {
switch (action.type) {
case ILogoutActionTypes.LOGOUT:
return initialManageGroupsState;
case IManageGroupsActionTypes.GET_MANAGE_GROUPS:
return reduceGetManageGroups(state, action);
case IManageGroupsActionTypes.POST_MANAGE_GROUPS:
return reducePostManageGroups(state, action);
case IManageGroupsActionTypes.PUT_MANAGE_GROUPS:
return reducePutManageGroups(state, action);
case IManageGroupsActionTypes.DELETE_MANAGE_GROUPS:
return reduceDeleteState(state, action);
case IManageGroupsActionTypes.DISABLE_MANAGE_GROUPS:
return reduceDisableState(state, action);
case IManageGroupsActionTypes.CHECK_GROUP_NAME:
return { ...state, ...action.payload }
default:
return state;
}
};
export default manageGroupsReducer;