All files / client/src/views/login loginSlice.ts

100% Statements 10/10
100% Branches 2/2
100% Functions 5/5
100% Lines 10/10

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 90 91 92 93                    363x 1131x   1131x                           363x         318x                                       9x                   12x                     24x                               363x   363x  
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { LoginState } from "client/types/reduxTypes";
import { UserGroup } from "shared/types/models/user";
import { loadSession } from "client/utils/localStorage";
import { EventLogItem } from "shared/types/models/eventLog";
import {
  PostFinalizeLogin,
  PostVerifyKompassiLoginPayload,
} from "shared/types/api/login";
 
const initialState = (): LoginState => {
  const persistedState = loadSession();
 
  return {
    username: "",
    loggedIn: false,
    jwt: persistedState?.login?.jwt ?? "",
    userGroup: UserGroup.USER,
    serial: "",
    eventLogItems: [],
    kompassiUsernameAccepted: false,
    kompassiId: 0,
    email: "",
    emailNotificationPermitAsked: false,
  };
};
 
const loginSlice = createSlice({
  name: "login",
  initialState,
  reducers: {
    submitLoginAsync(state, action: PayloadAction<LoginState>): LoginState {
      return {
        ...state,
        username: action.payload.username,
        loggedIn: action.payload.loggedIn,
        jwt: action.payload.jwt,
        userGroup: action.payload.userGroup,
        serial: action.payload.serial,
        eventLogItems: action.payload.eventLogItems,
        kompassiUsernameAccepted: action.payload.kompassiUsernameAccepted,
        kompassiId: action.payload.kompassiId,
        email: action.payload.email,
        emailNotificationPermitAsked:
          action.payload.emailNotificationPermitAsked,
      };
    },
 
    submitUpdateEventLogItemsAsync(
      state,
      action: PayloadAction<EventLogItem[]>,
    ): LoginState {
      return {
        ...state,
        eventLogItems: action.payload,
      };
    },
 
    submitVerifyKompassiLoginAsync(
      state,
      action: PayloadAction<PostVerifyKompassiLoginPayload>,
    ): LoginState {
      return {
        ...state,
        username: action.payload.username,
        kompassiUsernameAccepted: action.payload.kompassiUsernameAccepted,
        jwt: action.payload.jwt,
      };
    },
    submitFinalizeLoginAsync(
      state,
      action: PayloadAction<PostFinalizeLogin>,
    ): LoginState {
      return {
        ...state,
        email: action.payload.email,
        emailNotificationPermitAsked:
          action.payload.emailNotificationPermitAsked,
        jwt: action.payload.jwt,
      };
    },
  },
});
 
export const {
  submitLoginAsync,
  submitUpdateEventLogItemsAsync,
  submitVerifyKompassiLoginAsync,
  submitFinalizeLoginAsync,
} = loginSlice.actions;
 
export const loginReducer = loginSlice.reducer;