| Total Complexity | 1 |
| Complexity/F | 0 |
| Lines of Code | 85 |
| Function Count | 0 |
| Duplicated Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
| 1 | import { User } from "../../models/types"; |
||
| 2 | import { |
||
| 3 | UserAction, |
||
| 4 | FETCH_USER_SUCCEEDED, |
||
| 5 | FETCH_ALL_USERS_SUCCEEDED, |
||
| 6 | FETCH_USER_STARTED, |
||
| 7 | FETCH_USER_FAILED, |
||
| 8 | FETCH_ALL_USERS_STARTED, |
||
| 9 | FETCH_ALL_USERS_FAILED, |
||
| 10 | } from "./userActions"; |
||
| 11 | import { mapToObject, getId } from "../../helpers/queries"; |
||
| 12 | |||
| 13 | export interface UserState { |
||
| 14 | usersById: { |
||
| 15 | [id: number]: User; |
||
| 16 | }; |
||
| 17 | userIsUpdating: { |
||
| 18 | [id: number]: boolean; |
||
| 19 | }; |
||
| 20 | allUsersUpdating: boolean; |
||
| 21 | } |
||
| 22 | |||
| 23 | export const initUserState = (): UserState => ({ |
||
| 24 | usersById: {}, |
||
| 25 | userIsUpdating: {}, |
||
| 26 | allUsersUpdating: false, |
||
| 27 | }); |
||
| 28 | |||
| 29 | export const userReducer = ( |
||
| 30 | state = initUserState(), |
||
| 31 | action: UserAction, |
||
| 32 | ): UserState => { |
||
| 33 | switch (action.type) { |
||
| 34 | case FETCH_USER_STARTED: |
||
| 35 | return { |
||
| 36 | ...state, |
||
| 37 | userIsUpdating: { |
||
| 38 | ...state.userIsUpdating, |
||
| 39 | [action.meta.id]: true, |
||
| 40 | }, |
||
| 41 | }; |
||
| 42 | case FETCH_USER_FAILED: |
||
| 43 | return { |
||
| 44 | ...state, |
||
| 45 | userIsUpdating: { |
||
| 46 | ...state.userIsUpdating, |
||
| 47 | [action.meta.id]: false, |
||
| 48 | }, |
||
| 49 | }; |
||
| 50 | case FETCH_USER_SUCCEEDED: |
||
| 51 | return { |
||
| 52 | ...state, |
||
| 53 | usersById: { |
||
| 54 | ...state.usersById, |
||
| 55 | [action.payload.id]: action.payload, |
||
| 56 | }, |
||
| 57 | userIsUpdating: { |
||
| 58 | ...state.userIsUpdating, |
||
| 59 | [action.meta.id]: false, |
||
| 60 | }, |
||
| 61 | }; |
||
| 62 | case FETCH_ALL_USERS_STARTED: |
||
| 63 | return { |
||
| 64 | ...state, |
||
| 65 | allUsersUpdating: true, |
||
| 66 | }; |
||
| 67 | case FETCH_ALL_USERS_FAILED: |
||
| 68 | return { |
||
| 69 | ...state, |
||
| 70 | allUsersUpdating: false, |
||
| 71 | }; |
||
| 72 | case FETCH_ALL_USERS_SUCCEEDED: |
||
| 73 | return { |
||
| 74 | ...state, |
||
| 75 | usersById: { |
||
| 76 | ...state.usersById, |
||
| 77 | ...mapToObject(action.payload, getId), |
||
| 78 | }, |
||
| 79 | allUsersUpdating: false, |
||
| 80 | }; |
||
| 81 | default: |
||
| 82 | return state; |
||
| 83 | } |
||
| 84 | }; |
||
| 85 |