diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index 592607baf..7392717ee 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -102,6 +102,7 @@ registerCommand({ id: 'dataGrid.editJsonDocument', category: 'Data grid', + keyText: 'Ctrl+J', name: 'Edit row as JSON document', testEnabled: () => getCurrentDataGrid()?.editJsonEnabled(), onClick: () => getCurrentDataGrid().editJsonDocument(), @@ -200,6 +201,14 @@ onClick: () => getCurrentDataGrid().openChartFromSelection(), }); + registerCommand({ + id: 'dataGrid.newJson', + category: 'Data grid', + name: 'Add JSON document', + testEnabled: () => getCurrentDataGrid()?.addJsonDocumentEnabled(), + onClick: () => getCurrentDataGrid().addJsonDocument(), + }); + function getSelectedCellsInfo(selectedCells, grider, realColumnUniqueNames, selectedRowData) { if (selectedCells.length > 1 && selectedCells.every(x => _.isNumber(x[0]) && _.isNumber(x[1]))) { let sum = _.sumBy(selectedCells, cell => { @@ -275,6 +284,7 @@ import StatusBarTabItem from '../widgets/StatusBarTabItem.svelte'; import { findCommand } from '../commands/runCommand'; import { openJsonDocument } from '../tabs/JsonTab.svelte'; + import EditJsonModal from '../modals/EditJsonModal.svelte'; export let onLoadNextData = undefined; export let grider = undefined; @@ -531,7 +541,7 @@ } export function editJsonEnabled() { - return grider.editable && isDynamicStructure && _.uniq(selectedCells.map(x => x[0])).length == 1; + return grider.editable && _.uniq(selectedCells.map(x => x[0])).length == 1; } export function editJsonDocument() { @@ -539,6 +549,20 @@ editJsonRowDocument(grider, rowIndex); } + export function addJsonDocumentEnabled() { + return grider.editable; + } + + export function addJsonDocument() { + showModal(EditJsonModal, { + showPasteInfo: true, + onSave: value => { + grider.insertDocuments(_.isArray(value) ? value : [value]); + return true; + }, + }); + } + export function copyJsonEnabled() { return isDynamicStructure && _.uniq(selectedCells.map(x => x[0])).length == 1; } @@ -1277,6 +1301,7 @@ { command: 'dataGrid.clearFilter' }, { command: 'dataGrid.undo', hideDisabled: true }, { command: 'dataGrid.redo', hideDisabled: true }, + { command: 'dataGrid.newJson', hideDisabled: true }, { command: 'dataGrid.editJsonDocument', hideDisabled: true }, { command: 'dataGrid.viewJsonDocument', hideDisabled: true }, { command: 'dataGrid.viewJsonValue', hideDisabled: true }, @@ -1328,12 +1353,7 @@ {#if display.filterCount > 0} display.clearFilters()} /> {/if} - { - findCommand('collectionTable.newJson')?.onClick(); - }} - /> + {:else if grider.errors && grider.errors.length > 0}
diff --git a/packages/web/src/modals/EditJsonModal.svelte b/packages/web/src/modals/EditJsonModal.svelte index 345596401..8e824588f 100644 --- a/packages/web/src/modals/EditJsonModal.svelte +++ b/packages/web/src/modals/EditJsonModal.svelte @@ -12,20 +12,32 @@ export let onSave; export let json; + export let showPasteInfo; let value; + let editor; onMount(() => { - value = JSON.stringify(json, undefined, 2); + if (json) { + value = JSON.stringify(json, undefined, 2); + } else { + // editor.getEditor().execCommand('paste'); + } });
Edit JSON value
+ {#if showPasteInfo} +
+ Edit JSON object or array. You can paste JSON array or object directly into data grid, new row(s) will be added + to recordset. +
+ {/if}
- +
diff --git a/packages/web/src/tabs/CollectionDataTab.svelte b/packages/web/src/tabs/CollectionDataTab.svelte index 3d04ad48f..fe37774cb 100644 --- a/packages/web/src/tabs/CollectionDataTab.svelte +++ b/packages/web/src/tabs/CollectionDataTab.svelte @@ -16,14 +16,6 @@ testEnabled: () => getCurrentEditor()?.canSave(), onClick: () => getCurrentEditor().save(), }); - - registerCommand({ - id: 'collectionTable.newJson', - category: 'Collection data', - name: 'Add JSON document', - testEnabled: () => getCurrentEditor() != null, - onClick: () => getCurrentEditor().addJsonDocument(), - });