PromucFlow_constructor/app/client/src/reducers/uiReducers/pageCanvasStructureReducer.ts
2021-03-09 20:05:42 +05:30

66 lines
1.8 KiB
TypeScript

import { createImmerReducer } from "utils/AppsmithUtils";
import {
ReduxActionTypes,
ReduxActionErrorTypes,
ReduxAction,
} from "constants/ReduxActionConstants";
import { WidgetProps } from "widgets/BaseWidget";
import { compareAndGenerateImmutableCanvasStructure } from "utils/canvasStructureHelpers";
import { WidgetType } from "constants/WidgetConstants";
export interface CanvasStructure {
widgetName: string;
widgetId: string;
type: WidgetType;
children?: CanvasStructure[];
}
export interface DSL extends WidgetProps {
children?: DSL[];
}
export interface PageCanvasStructureReduxState {
[pageId: string]: CanvasStructure;
}
const initialState: PageCanvasStructureReduxState = {};
const pageCanvasStructureReducer = createImmerReducer(initialState, {
[ReduxActionTypes.FETCH_PAGE_DSLS_SUCCESS]: (
state: PageCanvasStructureReduxState,
action: ReduxAction<
Array<{
pageId: string;
dsl: DSL;
}>
>,
) => {
action.payload.forEach((entry) => {
state[entry.pageId] = compareAndGenerateImmutableCanvasStructure(
state[entry.pageId],
entry.dsl,
);
});
},
[ReduxActionTypes.FETCH_PAGE_DSL_SUCCESS]: (
state: PageCanvasStructureReduxState,
action: ReduxAction<{ pageId: string; dsl?: DSL }>,
) => {
if (!action.payload.dsl) {
delete state[action.payload.pageId];
} else {
state[action.payload.pageId] = compareAndGenerateImmutableCanvasStructure(
state[action.payload.pageId],
action.payload.dsl,
);
}
},
[ReduxActionErrorTypes.FETCH_PAGE_DSL_ERROR]: (
state: PageCanvasStructureReduxState,
action: ReduxAction<{ pageId: string }>,
) => {
return { ...state, [action.payload.pageId]: false };
},
});
export default pageCanvasStructureReducer;