Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | import { createContext } from 'react'; import { FrontendUserObject } from '@/types/api/users'; import { UserActions, UsersState } from '@/types/frontend/users'; export const UsersDispatchContext = createContext< React.ActionDispatch<[action: UserActions]> >(() => {}); export const defaultUsersState: UsersState = { users: [], }; function sortUsers(users: FrontendUserObject[]): FrontendUserObject[] { return users.sort((a, b) => { if (a.lName === b.lName) { return (a.fName || '') > (b.fName || '') ? 1 : -1; } return (a.lName || '') > (b.lName || '') ? 1 : -1; }); } export function usersStateReducer( state: UsersState, action: UserActions ): UsersState { switch (action.action) { case 'SetUsers': { return { ...state, users: sortUsers(action.users), }; } case 'UpdateUser': { return { ...state, users: sortUsers(state.users.map(u => ({ ...u, ...u.phone === action.phone ? action.user : {}, }))), }; } case 'ReplaceUser': { return { ...state, users: sortUsers(state.users.map(u => u.phone === action.phone ? { ...action.user, } : u)), }; } case 'DeleteUser': { return { ...state, users: state.users.filter(u => u.phone !== action.phone), }; } case 'AddUser': { return { ...state, users: sortUsers([ ...state.users, action.user, ]), }; } case 'SetDeleteModal': { return { ...state, deleteUserModal: action.user, }; } case 'ClearDeleteModal': { return { ...state, deleteUserModal: undefined, }; } } } |