PromucFlow_constructor/app/client/src/utils/canvasStructureHelpers.ts
2021-03-09 20:05:42 +05:30

45 lines
1.3 KiB
TypeScript

import { WidgetTypes } from "constants/WidgetConstants";
import {
CanvasStructure,
DSL,
} from "reducers/uiReducers/pageCanvasStructureReducer";
export const compareAndGenerateImmutableCanvasStructure = (
original: CanvasStructure,
current: DSL,
) => {
const newStructure = getCanvasStructureFromDSL(current);
if (JSON.stringify(newStructure) === JSON.stringify(original)) {
return original;
}
return newStructure;
};
const getCanvasStructureFromDSL = (dsl: DSL): CanvasStructure => {
let children = dsl.children;
let structureChildren: CanvasStructure[] | undefined = undefined;
if (dsl.type === WidgetTypes.TABS_WIDGET) {
if (children && children.length > 0) {
structureChildren = children.map((childTab) => ({
widgetName: childTab.tabName,
widgetId: childTab.widgetId,
type: WidgetTypes.TABS_WIDGET,
children: childTab.children,
}));
}
} else if (children && children.length === 1) {
if (children[0].type === WidgetTypes.CANVAS_WIDGET) {
children = children[0].children;
}
}
return {
widgetId: dsl.widgetId,
widgetName: dsl.widgetName,
type: dsl.type,
children:
structureChildren ||
children?.filter(Boolean).map(getCanvasStructureFromDSL),
};
};