diff --git a/packages/datalib/src/FreeTableGridDisplay.ts b/packages/datalib/src/FreeTableGridDisplay.ts index 5b0b18e35..2a18c90c8 100644 --- a/packages/datalib/src/FreeTableGridDisplay.ts +++ b/packages/datalib/src/FreeTableGridDisplay.ts @@ -3,6 +3,7 @@ import { EngineDriver, ViewInfo, ColumnInfo } from 'dbgate-types'; import { GridDisplay, ChangeCacheFunc, ChangeConfigFunc } from './GridDisplay'; import { GridConfig, GridCache } from './GridConfig'; import { FreeTableModel } from './FreeTableModel'; +import { analyseCollectionDisplayColumns } from '.'; export class FreeTableGridDisplay extends GridDisplay { constructor( @@ -13,7 +14,9 @@ export class FreeTableGridDisplay extends GridDisplay { setCache: ChangeCacheFunc ) { super(config, setConfig, cache, setCache); - this.columns = this.getDisplayColumns(model); + this.columns = model?.structure?.__isDynamicStructure + ? analyseCollectionDisplayColumns(model?.rows, this) + : this.getDisplayColumns(model); this.filterable = false; this.sortable = false; } diff --git a/packages/types/dbinfo.d.ts b/packages/types/dbinfo.d.ts index abe23ac5f..0ee59e73d 100644 --- a/packages/types/dbinfo.d.ts +++ b/packages/types/dbinfo.d.ts @@ -80,6 +80,7 @@ export interface TableInfo extends DatabaseObjectInfo { checks?: CheckInfo[]; preloadedRows?: any[]; preloadedRowsKey?: string[]; + __isDynamicStructure?: boolean; } export interface CollectionInfo extends DatabaseObjectInfo {} diff --git a/packages/web/src/datagrid/ColumnManager.svelte b/packages/web/src/datagrid/ColumnManager.svelte index 27274c75e..fead4397e 100644 --- a/packages/web/src/datagrid/ColumnManager.svelte +++ b/packages/web/src/datagrid/ColumnManager.svelte @@ -14,7 +14,6 @@ export let isJsonView = false; let filter; - diff --git a/packages/web/src/datagrid/DataGrid.svelte b/packages/web/src/datagrid/DataGrid.svelte index d85c6672f..498825572 100644 --- a/packages/web/src/datagrid/DataGrid.svelte +++ b/packages/web/src/datagrid/DataGrid.svelte @@ -147,19 +147,34 @@
- + - + - + - + @@ -168,12 +183,12 @@ name="references" height="30%" collapsed={isDetailView} - skip={!showReferences || !display?.hasReferences} + show={showReferences && display?.hasReferences} > - + diff --git a/packages/web/src/jsontree/JSONArrayNode.svelte b/packages/web/src/jsontree/JSONArrayNode.svelte index a5429ae8f..1f57ac377 100644 --- a/packages/web/src/jsontree/JSONArrayNode.svelte +++ b/packages/web/src/jsontree/JSONArrayNode.svelte @@ -25,4 +25,5 @@ label="Array({value.length})" bracketOpen="[" bracketClose="]" + elementValue={value} /> \ No newline at end of file diff --git a/packages/web/src/jsontree/JSONNested.svelte b/packages/web/src/jsontree/JSONNested.svelte index 0b827c4bb..fca896309 100644 --- a/packages/web/src/jsontree/JSONNested.svelte +++ b/packages/web/src/jsontree/JSONNested.svelte @@ -10,9 +10,11 @@ export let getValue = key => key; export let getPreviewValue = getValue; export let expanded = false, expandable = true; + export let elementValue = null; const context = getContext('json-tree-context-key'); setContext('json-tree-context-key', { ...context, colon }) + const elementData=getContext('json-tree-element-data'); $: slicedKeys = expanded ? keys: previewKeys.slice(0, 5); @@ -28,6 +30,12 @@ expanded = true; } + let domElement; + + $: if (domElement && elementData && elementValue) { + elementData.set(domElement, elementValue) + } + -
  • +