diff --git a/packages/tools/src/diagramTools.ts b/packages/tools/src/diagramTools.ts index 2c4f28895..04016421f 100644 --- a/packages/tools/src/diagramTools.ts +++ b/packages/tools/src/diagramTools.ts @@ -1,6 +1,7 @@ import { DatabaseInfo, TableInfo } from 'dbgate-types'; import { extendDatabaseInfo } from './structureTools'; import _sortBy from 'lodash/sortBy'; +import { filterName } from './filterName'; function tableWeight(table: TableInfo, maxRowcount?: number) { let weight = 0; @@ -18,9 +19,23 @@ function tableWeight(table: TableInfo, maxRowcount?: number) { if (maxRowcount) return weight; } -export function chooseTopTables(tables: TableInfo[], count: number) { +export function chooseTopTables(tables: TableInfo[], count: number, tableFilter: string, omitTablesFilter: string) { + const filteredTables = tables.filter(table => { + if (tableFilter) { + if (!filterName(tableFilter, table?.pureName)) return false; + } + if (omitTablesFilter) { + if (filterName(omitTablesFilter, table?.pureName)) return false; + } + return true; + }); + + if (!(count > 0)) { + return filteredTables; + } + const dbinfo: DatabaseInfo = { - tables, + tables: filteredTables, } as DatabaseInfo; const extended = extendDatabaseInfo(dbinfo); diff --git a/packages/web/src/designer/Designer.svelte b/packages/web/src/designer/Designer.svelte index 83611004a..e50cd5cf0 100644 --- a/packages/web/src/designer/Designer.svelte +++ b/packages/web/src/designer/Designer.svelte @@ -62,6 +62,7 @@ export let menu; export let settings; export let referenceComponent; + export let onReportCounts = undefined; export const activator = createActivator('Designer', true); @@ -81,8 +82,13 @@ $: dbInfoExtended = $dbInfo ? extendDatabaseInfoFromApps($dbInfo, $apps) : null; $: tables = - (value?.style?.topTables > 0 && value?.tables - ? chooseTopTables(value?.tables, value?.style?.topTables) + (value?.tables + ? chooseTopTables( + value?.tables, + value?.style?.topTables, + value?.style?.tableFilter, + value?.style?.omitTablesFilter + ) : value?.tables) || ([] as any[]); $: references = (value?.references || [])?.filter( ref => tables.find(x => x.designerId == ref.sourceId) && tables.find(x => x.designerId == ref.targetId) @@ -164,7 +170,7 @@ if (settings?.useDatabaseReferences) { references = []; for (const table of newTables) { - for (const fk of table.foreignKeys) { + for (const fk of table.foreignKeys || []) { const dst = newTables.find(x => x.pureName == fk.refTableName && x.schemaName == fk.refSchemaName); if (!dst) continue; references.push({ @@ -922,6 +928,28 @@ } oldZoomKoefRef.set(value?.style?.zoomKoef); } + + // $: console.log('DESIGNER VALUE', value); + + // $: console.log('TABLES ARRAY', tables); + + // $: { + // if (value?.tables?.find(x => !x)) { + // console.log('**** INCORRECT DESIGNER VALUE**** ', value); + // } + // } + // $: { + // if (value?.tables?.length < 100) { + // console.log('**** SMALL TABLES**** ', value); + // } + // } + + // $: if (onReportCounts) { + // onReportCounts({ + // all: value?.tables?.length ?? 0, + // filtered: tables?.length ?? 0, + // }); + // }
{ + tableCounts = counts; + }} /> @@ -142,7 +147,7 @@ }} > - +