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