Passed
Push — feature/azure-webapp-pipeline-... ( f7c88d...cc7783 )
by Grant
05:46 queued 13s
created

resources/assets/js/store/User/userReducer.ts   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 85
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 1
eloc 66
c 0
b 0
f 0
dl 0
loc 85
rs 10
mnd 1
bc 1
fnc 0
bpm 0
cpm 0
noi 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