All files / utils/frontend usersState.ts

0% Statements 0/75
0% Branches 0/1
0% Functions 0/1
0% Lines 0/75

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,
      };
    }
  }
}