45 lines
1.3 KiB
TypeScript
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),
|
|
};
|
|
};
|