PromucFlow_constructor/app/client/src/reducers/uiReducers/pageWidgetsReducer.ts

41 lines
1.3 KiB
TypeScript
Raw Normal View History

import { createImmerReducer } from "utils/AppsmithUtils";
2021-01-12 01:22:31 +00:00
import { ReduxActionTypes, ReduxAction } from "constants/ReduxActionConstants";
import { DSL } from "reducers/uiReducers/pageCanvasStructureReducer";
import { WidgetProps } from "widgets/BaseWidget";
import CanvasWidgetsNormalizer from "normalizers/CanvasWidgetsNormalizer";
export interface PageWidgetsReduxState {
[pageId: string]: {
[widgetId: string]: WidgetProps & { children: string[] };
};
}
const initalState: PageWidgetsReduxState = {};
const pageWidgetsReducer = createImmerReducer(initalState, {
[ReduxActionTypes.FETCH_PAGE_DSLS_SUCCESS]: (
state: PageWidgetsReduxState,
action: ReduxAction<Array<{ pageId: string; dsl: DSL }>>,
) => {
2020-12-24 04:32:25 +00:00
action.payload.forEach((entry) => {
state[entry.pageId] = CanvasWidgetsNormalizer.normalize(
entry.dsl,
).entities.canvasWidgets;
});
},
[ReduxActionTypes.FETCH_PAGE_DSL_SUCCESS]: (
state: PageWidgetsReduxState,
action: ReduxAction<{ pageId: string; dsl?: DSL }>,
) => {
if (!action.payload.dsl) {
delete state[action.payload.pageId];
} else {
state[action.payload.pageId] = CanvasWidgetsNormalizer.normalize(
action.payload.dsl,
).entities.canvasWidgets;
}
},
});
export default pageWidgetsReducer;