2020-11-03 13:05:40 +00:00
|
|
|
import { createImmerReducer } from "utils/AppsmithUtils";
|
2021-01-12 01:22:31 +00:00
|
|
|
import { ReduxActionTypes, ReduxAction } from "constants/ReduxActionConstants";
|
2021-03-09 14:35:42 +00:00
|
|
|
import { DSL } from "reducers/uiReducers/pageCanvasStructureReducer";
|
2020-11-03 13:05:40 +00:00
|
|
|
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) => {
|
2020-11-03 13:05:40 +00:00
|
|
|
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;
|