diff --git a/packages/tools/src/computeDiffRows.ts b/packages/tools/src/computeDiffRows.ts index 481211855..772d3cf04 100644 --- a/packages/tools/src/computeDiffRows.ts +++ b/packages/tools/src/computeDiffRows.ts @@ -6,15 +6,18 @@ export function computeDiffRowsCore(sourceList, targetList, testEqual) { for (const obj of sourceList) { const paired = targetList.find(x => x.pairingId == obj.pairingId); if (paired) { + const isEqual = testEqual(obj, paired); res.push({ source: obj, target: paired, - state: testEqual(obj, paired) ? 'equal' : 'changed', + state: isEqual ? 'equal' : 'changed', + __isChanged: !isEqual, }); } else { res.push({ source: obj, - state: 'removed', + state: 'added', + __isAdded: true, }); } } @@ -23,7 +26,8 @@ export function computeDiffRowsCore(sourceList, targetList, testEqual) { if (!paired) { res.push({ target: obj, - state: 'added', + state: 'removed', + __isDeleted: true, }); } } @@ -46,6 +50,9 @@ export function computeDbDiffRows( sourcePureName: row?.source?.pureName, targetSchemaName: row?.target?.schemaName, targetPureName: row?.target?.pureName, + identifier: `${row?.source?.schemaName || row?.target?.schemaName}.${ + row?.source?.pureName || row?.target?.pureName + }`, })); } diff --git a/packages/web/src/elements/DiffView.svelte b/packages/web/src/elements/DiffView.svelte index 3a1cfa253..33a13db24 100644 --- a/packages/web/src/elements/DiffView.svelte +++ b/packages/web/src/elements/DiffView.svelte @@ -25,6 +25,9 @@ right: 0; bottom: 0; overflow-y: scroll; + + background: white; + color: #000000; } /* :global(.d2h-file-diff) { overflow-y: scroll; diff --git a/packages/web/src/elements/QueryDesignColumns.svelte b/packages/web/src/elements/QueryDesignColumns.svelte index 0b6ba64c9..1b13badf0 100644 --- a/packages/web/src/elements/QueryDesignColumns.svelte +++ b/packages/web/src/elements/QueryDesignColumns.svelte @@ -60,7 +60,7 @@ { + on:change={e => { if (e.target.checked) changeColumn({ ...row, isOutput: true }); else changeColumn({ ...row, isOutput: false }); }} diff --git a/packages/web/src/elements/ScrollableTableControl.svelte b/packages/web/src/elements/ScrollableTableControl.svelte index b7a966d3d..fefdc3a7c 100644 --- a/packages/web/src/elements/ScrollableTableControl.svelte +++ b/packages/web/src/elements/ScrollableTableControl.svelte @@ -6,6 +6,7 @@ getProps?: any; formatter?: any; slot?: number; + headerSlot?: number; isHighlighted?: Function; width?: string; } @@ -98,7 +99,22 @@ > {#each columnList as col} - {col.header || ''} + + {#if col.headerSlot != null} + {#if col.headerSlot == -1} + {:else if col.headerSlot == 0} + {:else if col.headerSlot == 1} + {:else if col.headerSlot == 2} + {:else if col.headerSlot == 3} + {:else if col.headerSlot == 4} + {:else if col.headerSlot == 5} + {:else if col.headerSlot == 6} + {:else if col.headerSlot == 7} + {/if} + {:else} + {col.header || ''} + {/if} + {/each} @@ -107,6 +123,9 @@ { if (selectable) { selectedIndex = index; @@ -215,4 +234,15 @@ td.isHighlighted { background-color: var(--theme-bg-1); } + + tr.isAdded { + background: var(--theme-bg-green); + } + tr.isChanged { + background: var(--theme-bg-orange); + } + + tr.isDeleted { + background: var(--theme-bg-red); + } diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 0f2fdfe4c..132feb3af 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -63,6 +63,7 @@ 'icon markdown': 'mdi mdi-application', 'icon preview': 'mdi mdi-file-find', 'icon eye': 'mdi mdi-eye', + 'icon check-all': 'mdi mdi-check-all', 'icon run': 'mdi mdi-play', 'icon chevron-down': 'mdi mdi-chevron-down', @@ -75,6 +76,8 @@ 'icon add-column': 'mdi mdi-table-column-plus-after', 'icon add-key': 'mdi mdi-key-plus', 'icon report': 'mdi mdi-file-chart', + 'icon swap': 'mdi mdi-swap-horizontal-bold', + 'icon save-sync': 'mdi mdi-content-save-move', 'img ok': 'mdi mdi-check-circle color-icon-green', 'img ok-inv': 'mdi mdi-check-circle color-icon-inv-green', diff --git a/packages/web/src/tabs/CompareModelTab.svelte b/packages/web/src/tabs/CompareModelTab.svelte index f4d628f9c..69e6e421b 100644 --- a/packages/web/src/tabs/CompareModelTab.svelte +++ b/packages/web/src/tabs/CompareModelTab.svelte @@ -14,6 +14,31 @@ onClick: () => getCurrentEditor().showReport(), testEnabled: () => getCurrentEditor() != null, }); + + registerCommand({ + id: 'compareModels.swap', + category: 'Compare models', + toolbarName: 'Swap', + name: 'Swap source & target', + icon: 'icon swap', + toolbar: true, + isRelatedToTab: true, + onClick: () => getCurrentEditor().swap(), + testEnabled: () => getCurrentEditor() != null, + }); + + registerCommand({ + id: 'compareModels.saveSync', + category: 'Compare models', + toolbarName: 'Save/Sync', + name: 'Save/Sync', + icon: 'icon save-sync', + group: 'save', + toolbar: true, + isRelatedToTab: true, + onClick: () => getCurrentEditor().saveSync(), + testEnabled: () => getCurrentEditor() != null, + });