feat: add configurable sidebar and top navigation layout modes commit

This commit is contained in:
mengstabketemaw
2026-06-19 16:17:01 +03:00
parent ddd91b6125
commit 1f27a36b90
6 changed files with 196 additions and 67 deletions

View File

@@ -9,6 +9,7 @@ import {
logout,
} from '@ema-platform/auth';
import type { AuthUser } from '@ema-platform/auth';
import { preferencesReducer } from './preferences.slice';
configureAuthStorage('ema-backoffice');
@@ -25,6 +26,7 @@ export const store = configureStore({
reducer: {
auth: authReducer,
signup: signupReducer,
preferences: preferencesReducer,
[baseApi.reducerPath]: baseApi.reducer,
},
preloadedState: preloadedAuth ? { auth: preloadedAuth } : undefined,

View File

@@ -0,0 +1,39 @@
import { createSlice, type PayloadAction } from '@reduxjs/toolkit';
export type LayoutMode = 'top' | 'sidebar';
interface PreferencesState {
layoutMode: LayoutMode;
}
const PREFERENCES_KEY = 'ema-backoffice-preferences';
const loadPreferences = (): PreferencesState => {
try {
const stored = localStorage.getItem(PREFERENCES_KEY);
if (stored) return JSON.parse(stored);
} catch {}
return { layoutMode: 'top' };
};
const savePreferences = (state: PreferencesState) => {
try {
localStorage.setItem(PREFERENCES_KEY, JSON.stringify(state));
} catch {}
};
const initialState: PreferencesState = loadPreferences();
const preferencesSlice = createSlice({
name: 'preferences',
initialState,
reducers: {
setLayoutMode(state, action: PayloadAction<LayoutMode>) {
state.layoutMode = action.payload;
savePreferences(state);
},
},
});
export const { setLayoutMode } = preferencesSlice.actions;
export const preferencesReducer = preferencesSlice.reducer;