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 @@
+