diff --git a/packages/web/src/celldata/JsonCellView.svelte b/packages/web/src/celldata/JsonCellView.svelte index ecad18e7e..f9589a6fe 100644 --- a/packages/web/src/celldata/JsonCellView.svelte +++ b/packages/web/src/celldata/JsonCellView.svelte @@ -49,17 +49,4 @@ right: 0; bottom: 0; } - - :global(.theme-type-dark) .inner { - --json-tree-string-color: #ffc5c5; - --json-tree-symbol-color: #ffc5c5; - --json-tree-boolean-color: #b6c3ff; - --json-tree-function-color: #b6c3ff; - --json-tree-number-color: #bfbdff; - --json-tree-label-color: #e9aaed; - --json-tree-arrow-color: #d4d4d4; - --json-tree-null-color: #dcdcdc; - --json-tree-undefined-color: #dcdcdc; - --json-tree-date-color: #dcdcdc; - } diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index 890156e7a..acdeb8c12 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -107,6 +107,14 @@ onClick: () => getCurrentDataGrid().editJsonDocument(), }); + registerCommand({ + id: 'dataGrid.viewJsonDocument', + category: 'Data grid', + name: 'View row as JSON document', + testEnabled: () => getCurrentDataGrid()?.viewJsonEnabled(), + onClick: () => getCurrentDataGrid().viewJsonDocument(), + }); + registerCommand({ id: 'dataGrid.copyJsonDocument', category: 'Data grid', @@ -248,9 +256,9 @@ import CollapseButton from './CollapseButton.svelte'; import GenerateSqlFromDataModal from '../modals/GenerateSqlFromDataModal.svelte'; import { showModal } from '../modals/modalTools'; - import { updateStatuBarInfo } from '../widgets/StatusBar.svelte'; import StatusBarTabItem from '../widgets/StatusBarTabItem.svelte'; import { findCommand } from '../commands/runCommand'; + import { openJsonDocument } from '../tabs/JsonTab.svelte'; export let onLoadNextData = undefined; export let grider = undefined; @@ -454,12 +462,18 @@ ); } - export function editJsonEnabled() { - return grider.editable && isDynamicStructure && _.uniq(selectedCells.map(x => x[0])).length == 1; + export function viewJsonEnabled() { + return isDynamicStructure && _.uniq(selectedCells.map(x => x[0])).length == 1; } - export function copyJsonEnabled() { - return isDynamicStructure && _.uniq(selectedCells.map(x => x[0])).length == 1; + export function viewJsonDocument() { + const rowIndex = selectedCells[0][0]; + const json = grider.getRowData(rowIndex); + openJsonDocument(json); + } + + export function editJsonEnabled() { + return grider.editable && isDynamicStructure && _.uniq(selectedCells.map(x => x[0])).length == 1; } export function editJsonDocument() { @@ -467,6 +481,10 @@ editJsonRowDocument(grider, rowIndex); } + export function copyJsonEnabled() { + return isDynamicStructure && _.uniq(selectedCells.map(x => x[0])).length == 1; + } + export function copyJsonDocument() { const rowIndex = selectedCells[0][0]; const rowData = grider.getRowData(rowIndex); @@ -1164,8 +1182,8 @@ { placeTag: 'switch' }, { divider: true }, { placeTag: 'save' }, - { command: 'dataGrid.revertRowChanges' }, - { command: 'dataGrid.revertAllChanges' }, + { command: 'dataGrid.revertRowChanges', hideDisabled: true }, + { command: 'dataGrid.revertAllChanges', hideDisabled: true }, { command: 'dataGrid.deleteSelectedRows' }, { command: 'dataGrid.insertNewRow' }, { command: 'dataGrid.setNull' }, @@ -1175,9 +1193,10 @@ { command: 'dataGrid.hideColumn' }, { command: 'dataGrid.filterSelected' }, { command: 'dataGrid.clearFilter' }, - { command: 'dataGrid.undo' }, - { command: 'dataGrid.redo' }, + { command: 'dataGrid.undo', hideDisabled: true }, + { command: 'dataGrid.redo', hideDisabled: true }, { command: 'dataGrid.editJsonDocument', hideDisabled: true }, + { command: 'dataGrid.viewJsonDocument', hideDisabled: true }, { divider: true }, { placeTag: 'export' }, { command: 'dataGrid.generateSqlFromData' }, diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 2be8b9c65..9b6755248 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -123,6 +123,7 @@ 'img free-table': 'mdi mdi-table color-icon-green', 'img macro': 'mdi mdi-hammer-wrench', + 'img json': 'mdi mdi-code-json icon-magenta', 'img database': 'mdi mdi-database color-icon-gold', 'img sqlite-database': 'mdi mdi-database color-icon-blue', diff --git a/packages/web/src/jsontree/JSONTree.svelte b/packages/web/src/jsontree/JSONTree.svelte index 6e0e601a3..772775dd1 100644 --- a/packages/web/src/jsontree/JSONTree.svelte +++ b/packages/web/src/jsontree/JSONTree.svelte @@ -23,6 +23,18 @@ diff --git a/packages/web/src/tabs/index.js b/packages/web/src/tabs/index.js index a5484a095..7bf572df8 100644 --- a/packages/web/src/tabs/index.js +++ b/packages/web/src/tabs/index.js @@ -16,6 +16,7 @@ import * as QueryDesignTab from './QueryDesignTab.svelte'; import * as CommandListTab from './CommandListTab.svelte'; import * as YamlEditorTab from './YamlEditorTab.svelte'; import * as CompareModelTab from './CompareModelTab.svelte'; +import * as JsonTab from './JsonTab.svelte'; export default { TableDataTab, @@ -36,4 +37,5 @@ export default { CommandListTab, YamlEditorTab, CompareModelTab, + JsonTab, };