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(), + });