diff --git a/packages/web/src/datagrid/ColumnManager.svelte b/packages/web/src/datagrid/ColumnManager.svelte index b404084ce..d6ff99ecd 100644 --- a/packages/web/src/datagrid/ColumnManager.svelte +++ b/packages/web/src/datagrid/ColumnManager.svelte @@ -182,6 +182,13 @@ header: 'Add new column', onConfirm: name => { display.addDynamicColumn(name); + tick().then(() => { + selectedColumns = [name]; + currentColumnUniqueName = name; + if (!isJsonView) { + display.focusColumns(selectedColumns); + } + }); }, }); }}>Add getCurrentDataGrid().insertNewRow(), }); + registerCommand({ + id: 'dataGrid.addNewColumn', + category: 'Data grid', + name: 'Add new column', + toolbarName: 'New column', + icon: 'icon add-column', + testEnabled: () => getCurrentDataGrid()?.addNewColumnEnabled(), + onClick: () => getCurrentDataGrid().addNewColumn(), + }); + registerCommand({ id: 'dataGrid.cloneRows', category: 'Data grid', @@ -419,6 +429,7 @@ import { showSnackbarSuccess } from '../utility/snackbar'; import { openJsonLinesData } from '../utility/openJsonLinesData'; import contextMenuActivator from '../utility/contextMenuActivator'; + import InputTextModal from '../modals/InputTextModal.svelte'; export let onLoadNextData = undefined; export let grider = undefined; @@ -554,6 +565,24 @@ grider.endUpdate(); } + export function addNewColumnEnabled() { + return getGrider()?.editable && isDynamicStructure; + } + + export function addNewColumn() { + showModal(InputTextModal, { + value: '', + label: 'Column name', + header: 'Add new column', + onConfirm: name => { + display.addDynamicColumn(name); + tick().then(() => { + display.focusColumns([name]); + }); + }, + }); + } + export async function insertNewRow() { if (!grider.canInsert) return; const rowIndex = grider.insertRow(); @@ -1728,6 +1757,7 @@ { command: 'dataGrid.hideColumn' }, { command: 'dataGrid.filterSelected' }, { command: 'dataGrid.clearFilter' }, + { command: 'dataGrid.addNewColumn', hideDisabled: true }, { command: 'dataGrid.undo', hideDisabled: true }, { command: 'dataGrid.redo', hideDisabled: true }, { divider: true }, diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 61be8eadd..4296d82f4 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -61,6 +61,7 @@ 'icon app': 'mdi mdi-layers-triple', 'icon open-in-new': 'mdi mdi-open-in-new', 'icon add-folder': 'mdi mdi-folder-plus-outline', + 'icon add-column': 'mdi mdi-table-column-plus-after', 'icon window-restore': 'mdi mdi-window-restore', 'icon window-maximize': 'mdi mdi-window-maximize', diff --git a/packages/web/src/tabs/ArchiveFileTab.svelte b/packages/web/src/tabs/ArchiveFileTab.svelte index f7391a580..74e6d1579 100644 --- a/packages/web/src/tabs/ArchiveFileTab.svelte +++ b/packages/web/src/tabs/ArchiveFileTab.svelte @@ -179,6 +179,10 @@ + + + + diff --git a/packages/web/src/tabs/CollectionDataTab.svelte b/packages/web/src/tabs/CollectionDataTab.svelte index e684aad29..03f9fa85d 100644 --- a/packages/web/src/tabs/CollectionDataTab.svelte +++ b/packages/web/src/tabs/CollectionDataTab.svelte @@ -212,6 +212,7 @@ +