123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { AnyAction, combineReducers } from 'redux';
- import sharedReducers from 'app/core/reducers';
- import ldapReducers from 'app/features/admin/state/reducers';
- import alertingReducers from 'app/features/alerting/state/reducers';
- import apiKeysReducers from 'app/features/api-keys/state/reducers';
- import panelEditorReducers from 'app/features/dashboard/components/PanelEditor/state/reducers';
- import dashboardReducers from 'app/features/dashboard/state/reducers';
- import dataSourcesReducers from 'app/features/datasources/state/reducers';
- import exploreReducers from 'app/features/explore/state/main';
- import foldersReducers from 'app/features/folders/state/reducers';
- import invitesReducers from 'app/features/invites/state/reducers';
- import importDashboardReducers from 'app/features/manage-dashboards/state/reducers';
- import organizationReducers from 'app/features/org/state/reducers';
- import panelsReducers from 'app/features/panel/state/reducers';
- import { reducer as pluginsReducer } from 'app/features/plugins/admin/state/reducer';
- import userReducers from 'app/features/profile/state/reducers';
- import serviceAccountsReducer from 'app/features/serviceaccounts/state/reducers';
- import teamsReducers from 'app/features/teams/state/reducers';
- import usersReducers from 'app/features/users/state/reducers';
- import templatingReducers from 'app/features/variables/state/keyedVariablesReducer';
- import { CleanUp, cleanUpAction } from '../actions/cleanUp';
- const rootReducers = {
- ...sharedReducers,
- ...alertingReducers,
- ...teamsReducers,
- ...apiKeysReducers,
- ...foldersReducers,
- ...dashboardReducers,
- ...exploreReducers,
- ...dataSourcesReducers,
- ...usersReducers,
- ...serviceAccountsReducer,
- ...userReducers,
- ...invitesReducers,
- ...organizationReducers,
- ...ldapReducers,
- ...importDashboardReducers,
- ...panelEditorReducers,
- ...panelsReducers,
- ...templatingReducers,
- plugins: pluginsReducer,
- };
- const addedReducers = {};
- export const addReducer = (newReducers: any) => {
- Object.assign(addedReducers, newReducers);
- };
- export const createRootReducer = () => {
- const appReducer = combineReducers({
- ...rootReducers,
- ...addedReducers,
- });
- return (state: any, action: AnyAction) => {
- if (action.type !== cleanUpAction.type) {
- return appReducer(state, action);
- }
- const { stateSelector } = action.payload as CleanUp<any>;
- const stateSlice = stateSelector(state);
- recursiveCleanState(state, stateSlice);
- return appReducer(state, action);
- };
- };
- export const recursiveCleanState = (state: any, stateSlice: any): boolean => {
- for (const stateKey in state) {
- if (!state.hasOwnProperty(stateKey)) {
- continue;
- }
- const slice = state[stateKey];
- if (slice === stateSlice) {
- state[stateKey] = undefined;
- return true;
- }
- if (typeof slice === 'object') {
- const cleaned = recursiveCleanState(slice, stateSlice);
- if (cleaned) {
- return true;
- }
- }
- }
- return false;
- };
|