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)))}
/>