diff --git a/packages/web/src/designer/Designer.svelte b/packages/web/src/designer/Designer.svelte index 121c671dc..56add3394 100644 --- a/packages/web/src/designer/Designer.svelte +++ b/packages/web/src/designer/Designer.svelte @@ -247,6 +247,44 @@ : current.references, }; }); + updateFromDbInfo(); + }; + + const handleAddTableReferences = table => { + if (!dbInfo) return; + const db = $dbInfo; + if (!db) return; + const dbTable = db.tables?.find(x => x.pureName == table.pureName && x.schemaName == table.schemaName); + if (!dbTable) return; + callChange(current => { + const newTables = []; + for (const fk of dbTable.foreignKeys || []) { + const existing = current.tables.find(x => x.pureName == fk.refTableName && x.schemaName == fk.refSchemaName); + if (!existing) { + const dst = db.tables.find(x => x.pureName == fk.refTableName && x.schemaName == fk.refSchemaName); + if (dst) newTables.push(dst); + } + } + for (const fk of dbTable.dependencies || []) { + const existing = current.tables.find(x => x.pureName == fk.pureName && x.schemaName == fk.schemaName); + if (!existing) { + const dst = db.tables.find(x => x.pureName == fk.pureName && x.schemaName == fk.schemaName); + if (dst) newTables.push(dst); + } + } + + return { + ...current, + tables: [ + ...current.tables, + ...newTables.map(x => ({ + ...x, + designerId: uuidv1(), + })), + ], + }; + }); + updateFromDbInfo(); }; const handleSelectColumn = column => { @@ -408,6 +446,7 @@ onSelectColumn={handleSelectColumn} onChangeColumn={handleChangeColumn} onAddReferenceByColumn={handleAddReferenceByColumn} + onAddAllReferences={handleAddTableReferences} onMoveReferences={recomputeReferencePositions} {table} onChangeTable={changeTable} diff --git a/packages/web/src/designer/DesignerTable.svelte b/packages/web/src/designer/DesignerTable.svelte index df73cd828..42496eb7a 100644 --- a/packages/web/src/designer/DesignerTable.svelte +++ b/packages/web/src/designer/DesignerTable.svelte @@ -13,6 +13,7 @@ export let onChangeTable; export let onBringToFront; export let onRemoveTable; + export let onAddAllReferences; export let onCreateReference; export let onAddReferenceByColumn; export let onSelectColumn; @@ -87,8 +88,8 @@ function createMenu() { return [ { text: 'Remove', onClick: () => onRemoveTable({ designerId }) }, + { divider: true }, settings?.allowTableAlias && [ - { divider: true }, { text: 'Set table alias', onClick: handleSetTableAlias }, alias && { text: 'Remove table alias', @@ -99,6 +100,7 @@ }), }, ], + settings?.allowAddAllReferences && { text: 'Add references', onClick: () => onAddAllReferences(table) }, ]; } @@ -123,7 +125,7 @@ {/if} -