UNPKG

@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.

92 lines (84 loc) 3.44 kB
import { Reducer } from 'redux'; import { IGetManageUsersAction, IGetManageUsersInfoAction, ILockManageUsersAction, IManageUsersActionTypes, IManageUsersState, IPostManageUsersAction, IPutManageUsersAction, IUnlockManageUsersAction, IUserProfile, IPostManageUsersSubAction, IPostManageUsersAppAcctAction, IManageUsersActions, ILogoutActionTypes, IGetManageUsersByIdAction, IGetManageUsersBySubAction } from 'awayto'; const initialManageUsersState: IManageUsersState = {}; function reduceGetManageUsers(state: IManageUsersState, action: IGetManageUsersAction): IManageUsersState { return { ...state, users: [...action.payload] }; } function reducePostManageUsers(state: IManageUsersState, action: IPostManageUsersAction): IManageUsersState { state.users = Array.prototype.concat(state.users, action.payload); return { ...state }; } function reducePutManageUsers(state: IManageUsersState, action: IPutManageUsersAction | IPostManageUsersSubAction | IPostManageUsersAppAcctAction | IGetManageUsersByIdAction | IGetManageUsersBySubAction): IManageUsersState { const payload = action.payload; state.users = state.users?.map((user: IUserProfile) => { if (user.sub === payload.sub) { return { ...user, ...payload } } return user; }) as IUserProfile[]; return { ...state }; } function reduceManageUsersInfo(state: IManageUsersState, action: IGetManageUsersInfoAction): IManageUsersState { const payload = action.payload; const { users } = state; if (users) { payload.forEach((up: IUserProfile) => { const user = users.find((u: IUserProfile) => u.sub == up.sub) as IUserProfile; if (user) { Object.assign(user, up); } }) } return { ...state, users: Object.assign(state.users, users) } } function reduceLockState(state: IManageUsersState, action: ILockManageUsersAction | IUnlockManageUsersAction, locked: boolean): IManageUsersState { const { users } = state; if (users) { action.payload.forEach(user => { const u = users.find(u => u.username == user.username); if (u) u.locked = locked; }) } return { ...state, ...{ users: Object.assign(state.users, users) } }; } const manageUsersReducer: Reducer<IManageUsersState, IManageUsersActions> = (state = initialManageUsersState, action) => { switch (action.type) { case ILogoutActionTypes.LOGOUT: return initialManageUsersState; case IManageUsersActionTypes.GET_MANAGE_USERS: return reduceGetManageUsers(state, action); case IManageUsersActionTypes.POST_MANAGE_USERS: return reducePostManageUsers(state, action); case IManageUsersActionTypes.GET_MANAGE_USERS_BY_ID: case IManageUsersActionTypes.GET_MANAGE_USERS_BY_SUB: case IManageUsersActionTypes.POST_MANAGE_USERS_APP_ACCT: case IManageUsersActionTypes.POST_MANAGE_USERS_SUB: case IManageUsersActionTypes.PUT_MANAGE_USERS: return reducePutManageUsers(state, action); case IManageUsersActionTypes.LOCK_MANAGE_USERS: return reduceLockState(state, action, true); case IManageUsersActionTypes.UNLOCK_MANAGE_USERS: return reduceLockState(state, action, false); case IManageUsersActionTypes.GET_MANAGE_USERS_INFO: return reduceManageUsersInfo(state, action); default: return state; } }; export default manageUsersReducer;