diff --git a/packages/datalib/src/CollectionGridDisplay.ts b/packages/datalib/src/CollectionGridDisplay.ts index 3a1c79c6d..133490238 100644 --- a/packages/datalib/src/CollectionGridDisplay.ts +++ b/packages/datalib/src/CollectionGridDisplay.ts @@ -70,9 +70,14 @@ function getDisplayColumn(basePath, columnName, display) { export function analyseCollectionDisplayColumns(rows, display) { const res = []; + const addedColumns = display?.config?.addedColumns; for (const row of rows || []) { getColumnsForObject([], row, res, display); } + for (const added of addedColumns || []) { + if (res.find(x => x.uniqueName == added)) continue; + res.push(getDisplayColumn([], added, display)); + } return ( res.map(col => ({ ...col, diff --git a/packages/datalib/src/GridDisplay.ts b/packages/datalib/src/GridDisplay.ts index 05580b5f0..4f184318e 100644 --- a/packages/datalib/src/GridDisplay.ts +++ b/packages/datalib/src/GridDisplay.ts @@ -92,6 +92,10 @@ export abstract class GridDisplay { } } + addDynamicColumn(name: string) { + this.includeInColumnSet('addedColumns', name, true); + } + focusColumn(uniqueName: string) { this.setConfig(cfg => ({ ...cfg, diff --git a/packages/web/src/datagrid/ColumnManager.svelte b/packages/web/src/datagrid/ColumnManager.svelte index fead4397e..ef6ad6256 100644 --- a/packages/web/src/datagrid/ColumnManager.svelte +++ b/packages/web/src/datagrid/ColumnManager.svelte @@ -7,17 +7,34 @@ import SearchBoxWrapper from '../elements/SearchBoxWrapper.svelte'; import SearchInput from '../elements/SearchInput.svelte'; + import InputTextModal from '../modals/InputTextModal.svelte'; + import { showModal } from '../modals/modalTools'; import ColumnManagerRow from './ColumnManagerRow.svelte'; export let managerSize; export let display: GridDisplay; export let isJsonView = false; + export let isDynamicStructure = false; let filter; + {#if isDynamicStructure && !isJsonView} + { + showModal(InputTextModal, { + value: '', + label: 'Column name', + header: 'Add new column', + onConfirm: name => { + display.addDynamicColumn(name); + }, + }); + }}>Add + {/if} display.hideAllColumns()}>Hide display.showAllColumns()}>Show diff --git a/packages/web/src/datagrid/DataGrid.svelte b/packages/web/src/datagrid/DataGrid.svelte index 498825572..fddcc2bb9 100644 --- a/packages/web/src/datagrid/DataGrid.svelte +++ b/packages/web/src/datagrid/DataGrid.svelte @@ -153,7 +153,7 @@ height="45%" show={(!freeTableColumn || isDynamicStructure) && !isFormView} > - +