diff --git a/packages/datalib/src/PerspectiveConfig.ts b/packages/datalib/src/PerspectiveConfig.ts
index fb4bfc49d..9d1e89e05 100644
--- a/packages/datalib/src/PerspectiveConfig.ts
+++ b/packages/datalib/src/PerspectiveConfig.ts
@@ -89,6 +89,7 @@ export interface PerspectiveReferenceConfig {
export interface PerspectiveConfig {
rootDesignerId: string;
+ isArranged: boolean;
nodes: PerspectiveNodeConfig[];
references: PerspectiveReferenceConfig[];
}
@@ -115,6 +116,7 @@ export function createPerspectiveConfig(rootObject: { schemaName?: string; pureN
nodes: [rootNode],
references: [],
rootDesignerId: rootNode.designerId,
+ isArranged: true,
};
}
diff --git a/packages/web/src/designer/Designer.svelte b/packages/web/src/designer/Designer.svelte
index ace2da970..1b6e8e6c1 100644
--- a/packages/web/src/designer/Designer.svelte
+++ b/packages/web/src/designer/Designer.svelte
@@ -175,8 +175,8 @@
canvasHeight = Math.max(3000, maxY + 50);
}
- function callChange(changeFunc, skipUndoChain = undefined) {
- onChange(changeFunc, skipUndoChain);
+ function callChange(changeFunc, skipUndoChain = undefined, settings = undefined) {
+ onChange(changeFunc, skipUndoChain, settings);
tick().then(recomputeReferencePositions);
}
@@ -665,26 +665,30 @@
// layout.print();
- callChange(current => {
- return {
- ...current,
- tables: (current?.tables || []).map(table => {
- const node = layout.nodes[table.designerId];
- // console.log('POSITION', position);
- return node
- ? {
- ...table,
- needsArrange: false,
- left: node.left,
- top: node.top,
- }
- : {
- ...table,
- needsArrange: false,
- };
- }),
- };
- }, skipUndoChain);
+ callChange(
+ current => {
+ return {
+ ...current,
+ tables: (current?.tables || []).map(table => {
+ const node = layout.nodes[table.designerId];
+ // console.log('POSITION', position);
+ return node
+ ? {
+ ...table,
+ needsArrange: false,
+ left: node.left,
+ top: node.top,
+ }
+ : {
+ ...table,
+ needsArrange: false,
+ };
+ }),
+ };
+ },
+ skipUndoChain,
+ { isCalledFromArrange: true }
+ );
}
export async function exportDiagram() {
diff --git a/packages/web/src/perspectives/PerspectiveDesigner.svelte b/packages/web/src/perspectives/PerspectiveDesigner.svelte
index 8dc7ffa26..7acba5842 100644
--- a/packages/web/src/perspectives/PerspectiveDesigner.svelte
+++ b/packages/web/src/perspectives/PerspectiveDesigner.svelte
@@ -1,7 +1,8 @@
getCurrentEditor() != null,
onClick: () => getCurrentEditor().defineCustomJoin(),
});
+
+ registerCommand({
+ id: 'perspective.arrange',
+ category: 'Perspective',
+ icon: 'icon arrange',
+ name: 'Arrange',
+ toolbar: true,
+ isRelatedToTab: true,
+ testEnabled: () => getCurrentEditor()?.canArrange(),
+ onClick: () => getCurrentEditor().arrange(),
+ });