Files
bigcapital/packages/webapp/src/store/dashboard/dashboard.reducer.tsx
Ahmed Bouhuolia 5eafd23bf8 wip
2025-11-19 22:59:30 +02:00

171 lines
4.1 KiB
TypeScript

// @ts-nocheck
import { createReducer } from '@reduxjs/toolkit';
import { isUndefined, isNumber, omit } from 'lodash';
import t from '@/store/types';
import { persistReducer, purgeStoredState } from 'redux-persist';
import storage from 'redux-persist/lib/storage';
const initialState = {
pageTitle: '',
pageSubtitle: '',
pageHint: '',
preferencesPageTitle: '',
sidebarExpended: true,
dialogs: {},
alerts: {},
drawers: {},
topbarEditViewId: null,
requestsLoading: 0,
backLink: false,
splashScreenLoading: null,
appIsLoading: true,
appIntlIsLoading: true,
sidebarSubmenu: { isOpen: false, submenuId: null },
features: {},
autofill: {},
};
const STORAGE_KEY = 'bigcapital:dashboard';
const CONFIG = {
key: STORAGE_KEY,
whitelist: [],
storage,
};
const reducerInstance = createReducer(initialState, {
[t.CHANGE_DASHBOARD_PAGE_TITLE]: (state, action) => {
state.pageTitle = action.pageTitle;
},
[t.ALTER_DASHBOARD_PAGE_SUBTITLE]: (state, action) => {
state.pageSubtitle = action.pageSubtitle;
},
[t.CHANGE_DASHBOARD_PAGE_HINT]: (state, action) => {
state.pageHint = action.payload.pageHint;
},
[t.CHANGE_PREFERENCES_PAGE_TITLE]: (state, action) => {
state.preferencesPageTitle = action.pageTitle;
},
[t.OPEN_DIALOG]: (state, action) => {
state.dialogs[action.name] = {
isOpen: true,
payload: action.payload || {},
};
},
[t.CLOSE_DIALOG]: (state, action) => {
state.dialogs[action.name] = {
...state.dialogs[action.name],
isOpen: false,
};
},
[t.OPEN_ALERT]: (state, action) => {
state.alerts[action.name] = {
isOpen: true,
payload: action.payload || {},
};
},
[t.CLOSE_ALERT]: (state, action) => {
state.alerts[action.name] = {
...state.alerts[action.name],
isOpen: false,
};
},
[t.OPEN_DRAWER]: (state, action) => {
state.drawers[action.name] = {
isOpen: true,
payload: action.payload || {},
};
},
[t.CLOSE_DRAWER]: (state, action) => {
state.drawers[action.name] = {
...state.drawers[action.name],
isOpen: false,
};
},
[t.CLOSE_ALL_DIALOGS]: (state, action) => { },
[t.SET_TOPBAR_EDIT_VIEW]: (state, action) => {
state.topbarEditViewId = action.id;
},
[t.SIDEBAR_EXPEND_TOGGLE]: (state, action) => {
const { toggle } = action.payload;
state.sidebarExpended = isUndefined(toggle)
? !state.sidebarExpended
: !!toggle;
},
[t.SET_DASHBOARD_BACK_LINK]: (state, action) => {
const { backLink } = action.payload;
state.backLink = backLink;
},
[t.SPLASH_START_LOADING]: (state) => {
if (isNumber(state.splashScreenLoading)) {
state.splashScreenLoading += 1;
} else {
state.splashScreenLoading = 1;
}
},
[t.SET_FEATURE_DASHBOARD_META]: (state, action) => {
const { features } = action.payload;
const _data = {};
features.forEach((feature) => {
_data[feature.name] = feature.is_accessible;
});
state.features = _data;
},
[t.SPLASH_STOP_LOADING]: (state) => {
state.splashScreenLoading -= 1;
state.splashScreenLoading = Math.max(state.splashScreenLoading, 0);
},
[t.SIDEBAR_SUBMENU_OPEN]: (state, action) => {
state.sidebarSubmenu.isOpen = true;
state.sidebarSubmenu.submenuId = action.payload.submenuId;
},
[t.SIDEBAR_SUBMENU_CLOSE]: (state, action) => {
state.sidebarSubmenu.isOpen = false;
state.sidebarSubmenu.submenuId = null;
},
[t.RESET]: () => {
purgeStoredState(CONFIG);
},
[t.ADD_AUTOFILL_REF]: (state, action) => {
state.autofill[action.payload.ref] = action.payload.payload || null;
},
[t.REMOVE_AUTOFILL_REF]: (state, action) => {
state.autofill = omit(state.autofill, [action.payload.ref]);
},
[t.RESET_AUTOFILL_REF]: (state, action) => {
state.autofill = {};
},
});
export default persistReducer(CONFIG, reducerInstance);
export const getDialogPayload = (state, dialogName) => {
return typeof state.dashboard.dialogs[dialogName] !== 'undefined'
? state.dashboard.dialogs[dialogName].payload
: {};
};
export const getDialogActiveStatus = (state, dialogName) => {
return true;
};