diff --git a/packages/datalib/src/GridDisplay.ts b/packages/datalib/src/GridDisplay.ts index 00b971861..00b215a31 100644 --- a/packages/datalib/src/GridDisplay.ts +++ b/packages/datalib/src/GridDisplay.ts @@ -76,6 +76,10 @@ export abstract class GridDisplay { })); } + get hasReferences() { + return false; + } + get focusedColumn() { return this.config.focusedColumn; } diff --git a/packages/datalib/src/TableGridDisplay.ts b/packages/datalib/src/TableGridDisplay.ts index 85dfc7a27..77eedfbfa 100644 --- a/packages/datalib/src/TableGridDisplay.ts +++ b/packages/datalib/src/TableGridDisplay.ts @@ -218,4 +218,11 @@ export class TableGridDisplay extends GridDisplay { } } } + + get hasReferences() { + if (!this.table) return false; + if (this.table.foreignKeys && this.table.foreignKeys.length > 0) return true; + if (this.table.dependencies && this.table.dependencies.length > 0) return true; + return false; + } } diff --git a/packages/web/src/celldata/CellDataView.js b/packages/web/src/celldata/CellDataView.js index 043c9068a..a68b8419d 100644 --- a/packages/web/src/celldata/CellDataView.js +++ b/packages/web/src/celldata/CellDataView.js @@ -1,4 +1,5 @@ import React from 'react'; +import _ from 'lodash'; import { SelectField } from '../utility/inputs'; import ErrorInfo from '../widgets/ErrorInfo'; import styled from 'styled-components'; @@ -43,24 +44,36 @@ const formats = [ }, ]; +function autodetect(selection, grider, value) { + if (_.isString(value)) { + if (value.startsWith('[') || value.startsWith('{')) return 'json'; + } + return 'textWrap'; +} + export default function CellDataView({ selection, grider }) { - const [selectedFormat, setSelectedFormat] = React.useState(formats[0]); + const [selectedFormatType, setSelectedFormatType] = React.useState('autodetect'); let value = null; if (grider && selection.length == 1) { const rowData = grider.getRowData(selection[0].row); const { column } = selection[0]; if (rowData) value = rowData[column]; } - const { Component } = selectedFormat || {}; + const autodetectFormatType = React.useMemo(() => autodetect(selection, grider, value), [selection, grider, value]); + const autodetectFormat = formats.find((x) => x.type == autodetectFormatType); + + const usedFormatType = selectedFormatType == 'autodetect' ? autodetectFormatType : selectedFormatType; + const usedFormat = formats.find((x) => x.type == usedFormatType); + + const { Component } = usedFormat || {}; return ( Format: - setSelectedFormat(formats.find((x) => x.type == e.target.value))} - > + setSelectedFormatType(e.target.value)}> + + {formats.map((fmt) => ( - {selectedFormat == null || (selectedFormat.single && value == null) ? ( + {usedFormat == null || (usedFormat.single && value == null) ? ( ) : ( diff --git a/packages/web/src/datagrid/DataGrid.js b/packages/web/src/datagrid/DataGrid.js index 518477a77..55558378e 100644 --- a/packages/web/src/datagrid/DataGrid.js +++ b/packages/web/src/datagrid/DataGrid.js @@ -6,6 +6,7 @@ import ReferenceManager from './ReferenceManager'; import { HorizontalSplitter } from '../widgets/Splitter'; import WidgetColumnBar, { WidgetColumnBarItem } from '../widgets/WidgetColumnBar'; import CellDataView from '../celldata/CellDataView'; +import { FreeTableGridDisplay } from '@dbgate/datalib'; const LeftContainer = styled.div` background-color: white; @@ -30,12 +31,12 @@ export default function DataGrid(props) { - {props.showReferences && ( - + {props.showReferences && props.display.hasReferences && ( + )} - + diff --git a/packages/web/src/datagrid/TableDataGrid.js b/packages/web/src/datagrid/TableDataGrid.js index 0f2fd147c..d28c9c06e 100644 --- a/packages/web/src/datagrid/TableDataGrid.js +++ b/packages/web/src/datagrid/TableDataGrid.js @@ -42,6 +42,7 @@ export default function TableDataGrid({ cache = undefined, setCache = undefined, masterLoadedTime = undefined, + isDetailView = false, }) { // const [childConfig, setChildConfig] = React.useState(createGridConfig()); const [myCache, setMyCache] = React.useState(createGridCache()); @@ -164,6 +165,7 @@ export default function TableDataGrid({ refReloadToken={refReloadToken.toString()} masterLoadedTime={masterLoadedTime} GridCore={SqlDataGridCore} + isDetailView={isDetailView} /> {reference && ( @@ -184,6 +186,7 @@ export default function TableDataGrid({ cache={childCache} setCache={setChildCache} masterLoadedTime={myLoadedTime} + isDetailView />