diff --git a/packages/datalib/src/CustomGridDisplay.ts b/packages/datalib/src/CustomGridDisplay.ts new file mode 100644 index 000000000..d0c14860a --- /dev/null +++ b/packages/datalib/src/CustomGridDisplay.ts @@ -0,0 +1,64 @@ +import _ from 'lodash'; +import { filterName, isTableColumnUnique } from 'dbgate-tools'; +import { GridDisplay, ChangeCacheFunc, DisplayColumn, DisplayedColumnInfo, ChangeConfigFunc } from './GridDisplay'; +import type { + TableInfo, + EngineDriver, + ViewInfo, + ColumnInfo, + NamedObjectInfo, + DatabaseInfo, + ForeignKeyInfo, +} from 'dbgate-types'; +import { GridConfig, GridCache, createGridCache } from './GridConfig'; +import { Expression, Select, treeToSql, dumpSqlSelect, ColumnRefExpression } from 'dbgate-sqltree'; + +export interface CustomGridColumn { + columnName: string; + columnLabel: string; +} + +export class CustomGridDisplay extends GridDisplay { + constructor( + public tableName: NamedObjectInfo, + columns: CustomGridColumn[], + driver: EngineDriver, + config: GridConfig, + setConfig: ChangeConfigFunc, + cache: GridCache, + setCache: ChangeCacheFunc, + dbinfo: DatabaseInfo, + serverVersion, + isReadOnly = false + ) { + super(config, setConfig, cache, setCache, driver, dbinfo, serverVersion); + + this.columns = columns.map(col => ({ + columnName: col.columnName, + headerText: col.columnLabel, + uniqueName: col.columnName, + uniquePath: [col.columnName], + isPrimaryKey: false, + isForeignKeyUnique: false, + schemaName: tableName.schemaName, + pureName: tableName.pureName, + })); + this.filterable = true; + this.sortable = true; + this.groupable = true; + this.editable = !isReadOnly; + this.supportsReload = true; + } + + createSelect(options = {}) { + const select = this.createSelectBase( + this.tableName, + // @ts-ignore + this.columns.map(col => ({ + columnName: col.columnName, + })), + options + ); + return select; + } +} diff --git a/packages/datalib/src/index.ts b/packages/datalib/src/index.ts index ca6111036..85f4e40f8 100644 --- a/packages/datalib/src/index.ts +++ b/packages/datalib/src/index.ts @@ -21,3 +21,4 @@ export * from './perspectiveTools'; export * from './DataDuplicator'; export * from './FreeTableGridDisplay'; export * from './FreeTableModel'; +export * from './CustomGridDisplay'; diff --git a/packages/web/src/datagrid/DataGrid.svelte b/packages/web/src/datagrid/DataGrid.svelte index e24d62afc..dadc433ab 100644 --- a/packages/web/src/datagrid/DataGrid.svelte +++ b/packages/web/src/datagrid/DataGrid.svelte @@ -89,6 +89,7 @@ export let onRunMacro; export let hasMultiColumnFilter = false; export let setLoadedRows = null; + export let hideGridLeftColumn = false; let loadedRows; @@ -162,7 +163,7 @@
diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index da489ae46..4ca57949c 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -421,6 +421,7 @@ export let schemaName = undefined; export let allowDefineVirtualReferences = false; export let formatterFunction; + export let hideGridLeftColumn; export let isLoadedAll; export let loadedTime; @@ -1816,10 +1817,12 @@ data-col="header" style={`width:${headerColWidth}px; min-width:${headerColWidth}px; max-width:${headerColWidth}px`} > - collapsedLeftColumnStore.update(x => !x)} - /> + {#if !hideGridLeftColumn} + collapsedLeftColumnStore.update(x => !x)} + /> + {/if} {#each visibleRealColumns as col (col.uniqueName)}