diff --git a/packages/tools/src/computeDiffRows.ts b/packages/tools/src/computeDiffRows.ts index 9f68b6b39..dbe18b181 100644 --- a/packages/tools/src/computeDiffRows.ts +++ b/packages/tools/src/computeDiffRows.ts @@ -36,30 +36,35 @@ export function computeDiffRowsCore(sourceList, targetList, testEqual) { return res; } -const COMPARE_DEFS = { +export const DbDiffCompareDefs = { tables: { test: testEqualTables, name: 'Table', + plural: 'Tables', icon: 'img table', }, views: { test: testEqualSqlObjects, name: 'View', + plural: 'Views', icon: 'img view', }, matviews: { test: testEqualSqlObjects, name: 'Materialized view', + plural: 'Materialized views', icon: 'img view', }, procedures: { test: testEqualSqlObjects, name: 'Procedure', + plural: 'Procedures', icon: 'img procedure', }, functions: { test: testEqualSqlObjects, name: 'Function', + plural: 'Functions', icon: 'img function', }, }; @@ -74,7 +79,7 @@ export function computeDbDiffRows( const res = []; for (const objectTypeField of ['tables', 'views', 'procedures', 'matviews', 'functions']) { - const defs = COMPARE_DEFS[objectTypeField]; + const defs = DbDiffCompareDefs[objectTypeField]; res.push( ..._.sortBy( computeDiffRowsCore(sourceDb[objectTypeField], targetDb[objectTypeField], (a, b) => diff --git a/packages/web/src/forms/RowsFilterSwitcher.svelte b/packages/web/src/forms/RowsFilterSwitcher.svelte new file mode 100644 index 000000000..542f6818c --- /dev/null +++ b/packages/web/src/forms/RowsFilterSwitcher.svelte @@ -0,0 +1,28 @@ + + +{#if count > 0} + { + $values = { ...$values, [field]: !$values[field] }; + }} + > + + {label} ({count}) + + +{/if} + + diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index a5baa9d1f..4f38e6cc6 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -64,6 +64,8 @@ 'icon preview': 'mdi mdi-file-find', 'icon eye': 'mdi mdi-eye', 'icon check-all': 'mdi mdi-check-all', + 'icon checkbox-blank': 'mdi mdi-checkbox-blank-outline', + 'icon checkbox-marked': 'mdi mdi-checkbox-marked-outline', 'icon run': 'mdi mdi-play', 'icon chevron-down': 'mdi mdi-chevron-down', @@ -105,6 +107,11 @@ 'img yaml': 'mdi mdi-code-brackets color-icon-red', 'img compare': 'mdi mdi-compare color-icon-red', + 'img add': 'mdi mdi-plus-circle color-icon-green', + 'img minus': 'mdi mdi-minus-circle color-icon-red', + 'img equal': 'mdi mdi-equal', + 'img changed': 'mdi mdi-file-edit color-icon-yellow', + 'img free-table': 'mdi mdi-table color-icon-green', 'img macro': 'mdi mdi-hammer-wrench', diff --git a/packages/web/src/tabs/CompareModelTab.svelte b/packages/web/src/tabs/CompareModelTab.svelte index 718fa3839..62316bd7c 100644 --- a/packages/web/src/tabs/CompareModelTab.svelte +++ b/packages/web/src/tabs/CompareModelTab.svelte @@ -79,6 +79,23 @@ if (newObject) dmp.createSqlObject(newObject); return { sql: dmp.s }; } + + function filterDiffRows(rows, values, filter) { + let res = rows + .filter(row => filterName(filter, row.sourcePureName, row.targetPureName)) + .filter(row => !values?.hideAdded || row.state != 'added') + .filter(row => !values?.hideRemoved || row.state != 'removed') + .filter(row => !values?.hideChanged || row.state != 'changed') + .filter(row => !values?.hideEqual || row.state != 'equal'); + + for (const objectTypeField of _.keys(DbDiffCompareDefs)) { + if (values && values[`hide_${objectTypeField}`]) { + res = res.filter(row => row.objectTypeField != objectTypeField); + } + } + + return res; + }