diff --git a/packages/tools/src/diagramTools.ts b/packages/tools/src/diagramTools.ts index 04016421f..5d20ed0d9 100644 --- a/packages/tools/src/diagramTools.ts +++ b/packages/tools/src/diagramTools.ts @@ -1,21 +1,24 @@ import { DatabaseInfo, TableInfo } from 'dbgate-types'; import { extendDatabaseInfo } from './structureTools'; import _sortBy from 'lodash/sortBy'; +import _uniq from 'lodash/uniq'; import { filterName } from './filterName'; function tableWeight(table: TableInfo, maxRowcount?: number) { let weight = 0; + const tableDependenciesCount = _uniq(table.dependencies?.map(x => x.pureName) || []).length; + const tableFkCount = _uniq(table.foreignKeys?.map(x => x.refTableName) || []).length; + if (table.primaryKey) weight += 1; - if (table.foreignKeys) weight += table.foreignKeys.length * 1; + if (tableFkCount) weight += tableFkCount * 1; if (maxRowcount && table.tableRowCount) { const rowcount = parseInt(table.tableRowCount as string); if (rowcount > 0) - weight += - Math.log(rowcount) * table.columns.length * (table.dependencies.length || 1) * (table.dependencies.length || 1); + weight += Math.log(rowcount) * table.columns.length * (tableFkCount || 1) * (tableDependenciesCount || 1); } else { if (table.columns) weight += table.columns.length * 2; } - if (table.dependencies) weight += table.dependencies.length * 10; + if (table.dependencies) weight += tableDependenciesCount * 10; if (maxRowcount) return weight; } diff --git a/packages/web/src/designer/Designer.svelte b/packages/web/src/designer/Designer.svelte index e50cd5cf0..5a6d823b5 100644 --- a/packages/web/src/designer/Designer.svelte +++ b/packages/web/src/designer/Designer.svelte @@ -944,12 +944,13 @@ // } // } - // $: if (onReportCounts) { - // onReportCounts({ - // all: value?.tables?.length ?? 0, - // filtered: tables?.length ?? 0, - // }); - // } + $: if (onReportCounts) { + // console.log('REPORTING COUNTS'); + onReportCounts({ + all: _.compact(value?.tables || []).length, + filtered: _.compact(tables || []).length, + }); + }
@@ -131,9 +135,7 @@ onChange={handleChange} menu={createMenu} columnFilter={$styleStore.columnFilter} - onReportCounts={counts => { - tableCounts = counts; - }} + onReportCounts={handleReportCounts} />