diff --git a/packages/web/src/impexp/ImportExportConfigurator.svelte b/packages/web/src/impexp/ImportExportConfigurator.svelte index 32c141908..c97667240 100644 --- a/packages/web/src/impexp/ImportExportConfigurator.svelte +++ b/packages/web/src/impexp/ImportExportConfigurator.svelte @@ -76,6 +76,7 @@ const { values, setFieldValue } = getFormContext(); $: targetDbinfo = useDatabaseInfo({ conid: $values.targetConnectionId, database: $values.targetDatabaseName }); + $: sourceDbinfo = useDatabaseInfo({ conid: $values.sourceConnectionId, database: $values.sourceDatabaseName }); $: sourceConnectionInfo = useConnectionInfo({ conid: $values.sourceConnectionId }); $: sourceEngine = $sourceConnectionInfo?.engine; $: sourceList = $values.sourceList; @@ -219,7 +220,9 @@ { showModal(ColumnMapModal, { - value: $values[`columns_${row}`], + initialValue: $values[`columns_${row}`], + sourceTableInfo: $sourceDbinfo?.tables?.find(x => x.pureName == row), + targetTableInfo: $targetDbinfo?.tables?.find(x => x.pureName == values[`targetName_${row}`] || row), onConfirm: value => setFieldValue(`columns_${row}`, value), }); }} diff --git a/packages/web/src/modals/ColumnMapModal.svelte b/packages/web/src/modals/ColumnMapModal.svelte index 7b2ac200c..7bad63af4 100644 --- a/packages/web/src/modals/ColumnMapModal.svelte +++ b/packages/web/src/modals/ColumnMapModal.svelte @@ -12,16 +12,48 @@ export let header = 'Configure columns'; export let onConfirm; - export let value = []; + + export let sourceTableInfo; + export let targetTableInfo; + + export let initialValue; + + function getResetValue() { + if (sourceTableInfo && !targetTableInfo) { + return sourceTableInfo.columns.map(x => ({ + src: x.columnName, + dst: x.columnName, + skip: false, + })); + } + return []; + } + + const resetValue = getResetValue(); + + function equalValues(v1, v2) { + if (!v1 || !v2) return false; + if (v1.length != v2.length) return false; + for (let i = 0; i < v1.length; i++) { + if (v1[i].src != v2[i].src || v1[i].dst != v2[i].dst || !!v1[i].skip != !!v2[i].skip) return false; + } + return true; + } + + $: differentFromReset = !equalValues(value, resetValue); + + let value = initialValue?.length > 0 ? initialValue : resetValue;
{header}
-
- When no columns are defined in this mapping, source row is copied to target without any modifications -
+ {#if resetValue.length == 0} +
+ When no columns are defined in this mapping, source row is copied to target without any modifications +
+ {/if} { closeCurrentModal(); - onConfirm(!value || value.length == 0 ? null : value); + onConfirm(!value || value.length == 0 || !differentFromReset ? null : value); }} /> @@ -82,8 +114,9 @@ { - value = []; + value = resetValue; }} />