UNPKG

@elastic-suite/gally-admin-components

Version:
75 lines (67 loc) 1.98 kB
import { PayloadAction, createSlice } from '@reduxjs/toolkit' import { IFetch, IMenu, LoadStatus } from '@elastic-suite/gally-admin-shared' import { RootState } from './store' export interface IMenuState { menu: IFetch<IMenu> menuItemActive: string sidebarState: boolean sidebarStateTimeout: boolean childrenState: Record<string, boolean> } const initialState: IMenuState = { menu: { status: LoadStatus.IDLE, data: { hierarchy: [], }, }, menuItemActive: '', sidebarState: true, sidebarStateTimeout: false, childrenState: {}, } const menuSlice = createSlice({ name: 'menu', initialState, reducers: { setChildState( state, action: PayloadAction<{ code: string; value: boolean }> ) { state.childrenState[action.payload.code] = action.payload.value }, setMenu(state, action: PayloadAction<IFetch<IMenu>>) { state.menu = { ...state.menu, ...action.payload, } }, setMenuItemActive(state, action: PayloadAction<string>) { state.menuItemActive = action.payload }, setSidebarState(state, action: PayloadAction<boolean>) { state.sidebarState = action.payload }, setSidebarStateTimeout(state, action: PayloadAction<boolean>) { state.sidebarStateTimeout = action.payload }, }, }) export const { setChildState, setMenu, setMenuItemActive, setSidebarState, setSidebarStateTimeout, } = menuSlice.actions export const menuReducer = menuSlice.reducer export const selectChildrenState = ( state: RootState ): Record<string, boolean> => state.menu.childrenState export const selectMenu = (state: RootState): IMenu => state.menu.menu.data export const selectMenuItemActive = (state: RootState): string => state.menu.menuItemActive export const selectSidebarState = (state: RootState): boolean => state.menu.sidebarState export const selectSidebarStateTimeout = (state: RootState): boolean => state.menu.sidebarStateTimeout