All files / src/store/login slice.ts

72.72% Statements 48/66
66.66% Branches 2/3
28.57% Functions 2/7
72.72% Lines 48/66

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 671x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x   1x               1x 1x 1x 1x 1x 1x 1x 1x             1x 1x 1x 1x 1x 1x         1x 1x 1x 1x  
import _ from 'lodash';
import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit';
import { queryMenu } from './api';
 
export interface ILoginState {
  menu: Array<any>;
  accessToken: any;
  permissions: any;
}
 
export interface IUpdateAuthPayload extends Pick<ILoginState, 'accessToken' | 'permissions'> {}
 
const initialState: ILoginState = {
  menu: [],
  accessToken: '',
  permissions: ''
};
 
export const loginSliceName = 'login';
const slice = createSlice({
  name: loginSliceName,
  initialState,
  reducers: {
    updateMenu: (state: ILoginState, { payload }: PayloadAction<{ menu: any[] }>) => {
      const { menu } = payload;
      if (Array.isArray(menu)) {
        return { ...state, menu };
      }
      return state;
    },
    updateAuth: (state: ILoginState, { payload }: PayloadAction<IUpdateAuthPayload>) => {
      const { accessToken, permissions } = payload;
      return {
        ...state,
        accessToken,
        permissions
      };
    }
  }
});
 
export const { updateMenu, updateAuth } = slice.actions;
 
// #region -------- async thunk ----------
 
export const queryMenuAsyncThunk = createAsyncThunk('/menu/list', async (params: any) => {
  const res = await queryMenu(params);
  const { data } = res;
  return {
    menu: data
  };
});
 
// #endregion -------- async thunk ---------
 
// #region -------- custom thunk -----------
 
export const queryMenuThunk = () => async (dispatch: any, getState: any) => {
  const params = {};
  const { menu } = await dispatch(queryMenuAsyncThunk(params)).unwrap();
  dispatch(updateMenu({ menu }));
};
 
// #endregion -------- custom thunk -----------
 
export default slice.reducer;