diff --git a/packages/datalib/src/GridDisplay.ts b/packages/datalib/src/GridDisplay.ts index 2c566e658..6fce029af 100644 --- a/packages/datalib/src/GridDisplay.ts +++ b/packages/datalib/src/GridDisplay.ts @@ -570,6 +570,20 @@ export abstract class GridDisplay { return sql; } + getExportColumnMap() { + const changesDefined = this.config.hiddenColumns?.length > 0 || this.config.addedColumns?.length > 0; + if (this.isDynamicStructure && !changesDefined) { + return null; + } + return this.getColumns(null) + .filter(col => col.isChecked) + .map(col => ({ + dst: col.headerText, + src: col.uniqueName, + ignore: !changesDefined, + })); + } + resizeColumn(uniqueName: string, computedSize: number, diff: number) { this.setConfig(cfg => { const columnWidths = { diff --git a/packages/web/src/datagrid/CollectionDataGridCore.svelte b/packages/web/src/datagrid/CollectionDataGridCore.svelte index a3f798ba2..3e60ab055 100644 --- a/packages/web/src/datagrid/CollectionDataGridCore.svelte +++ b/packages/web/src/datagrid/CollectionDataGridCore.svelte @@ -174,6 +174,7 @@ initialValues.sourceDatabaseName = database; initialValues.sourceSql = getExportQuery(); initialValues.sourceList = [pureName]; + initialValues[`columns_${pureName}`] = display.getExportColumnMap(); showModal(ImportExportModal, { initialValues }); } diff --git a/packages/web/src/datagrid/JslDataGridCore.svelte b/packages/web/src/datagrid/JslDataGridCore.svelte index 90116b39a..568ab93d4 100644 --- a/packages/web/src/datagrid/JslDataGridCore.svelte +++ b/packages/web/src/datagrid/JslDataGridCore.svelte @@ -55,6 +55,7 @@ import RowsArrayGrider from './RowsArrayGrider'; export let jslid; + export let display; export const activator = createActivator('JslDataGridCore', false); @@ -93,10 +94,12 @@ initialValues.sourceStorageType = 'archive'; initialValues.sourceArchiveFolder = archiveMatch[1]; initialValues.sourceList = [archiveMatch[2]]; + initialValues[`columns_${archiveMatch[2]}`] = display.getExportColumnMap(); } else { initialValues.sourceStorageType = 'jsldata'; initialValues.sourceJslId = jslid; initialValues.sourceList = ['query-data']; + initialValues[`columns_query-data`] = display.getExportColumnMap(); } showModal(ImportExportModal, { initialValues }); } diff --git a/packages/web/src/datagrid/SqlDataGridCore.svelte b/packages/web/src/datagrid/SqlDataGridCore.svelte index 0013c3451..f78361363 100644 --- a/packages/web/src/datagrid/SqlDataGridCore.svelte +++ b/packages/web/src/datagrid/SqlDataGridCore.svelte @@ -135,6 +135,7 @@ initialValues.sourceDatabaseName = database; initialValues.sourceSql = display.getExportQuery(); initialValues.sourceList = display.baseTableOrSimilar ? [display.baseTableOrSimilar.pureName] : []; + initialValues[`columns_${pureName}`] = display.getExportColumnMap(); showModal(ImportExportModal, { initialValues }); } diff --git a/packages/web/src/impexp/createImpExpScript.ts b/packages/web/src/impexp/createImpExpScript.ts index c7238a13d..0a9bbe364 100644 --- a/packages/web/src/impexp/createImpExpScript.ts +++ b/packages/web/src/impexp/createImpExpScript.ts @@ -186,10 +186,16 @@ export default async function createImpExpScript(extensions, values, addEditorIn // @ts-ignore script.assign(targetVar, ...getTargetExpr(extensions, sourceName, values, targetConnection, targetDriver)); - const colmap = (values[`columns_${sourceName}`] || []).filter(x => !x.skip); + let colmap = values[`columns_${sourceName}`] || []; + if (!colmap.find(x => !x.ignore)) { + // all values are ignored, ignore column map + colmap = []; + } + colmap = colmap.filter(x => !x.skip); let colmapVar = null; if (colmap.length > 0) { colmapVar = script.allocVariable(); + colmap = colmap.map(x => _.omit(x, ['ignore'])); script.assignValue(colmapVar, colmap); } diff --git a/packages/web/src/modals/ColumnMapModal.svelte b/packages/web/src/modals/ColumnMapModal.svelte index ecd895a8d..7b2ac200c 100644 --- a/packages/web/src/modals/ColumnMapModal.svelte +++ b/packages/web/src/modals/ColumnMapModal.svelte @@ -36,19 +36,22 @@ (value = (value || []).map((x, i) => (i == index ? { ...x, skip: !e.target.checked } : x)))} + on:change={e => + (value = (value || []).map((x, i) => (i == index ? { ...x, skip: !e.target.checked, ignore: false } : x)))} /> (value = (value || []).map((x, i) => (i == index ? { ...x, src: e.target.value } : x)))} + on:change={e => + (value = (value || []).map((x, i) => (i == index ? { ...x, src: e.target.value, ignore: false } : x)))} /> (value = (value || []).map((x, i) => (i == index ? { ...x, dst: e.target.value } : x)))} + on:change={e => + (value = (value || []).map((x, i) => (i == index ? { ...x, dst: e.target.value, ignore: false } : x)))} />