diff --git a/packages/datalib/src/FreeTableGridDisplay.ts b/packages/datalib/src/FreeTableGridDisplay.ts new file mode 100644 index 00000000..607abf4e --- /dev/null +++ b/packages/datalib/src/FreeTableGridDisplay.ts @@ -0,0 +1,48 @@ +import _ from 'lodash'; +import type { 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( + public model: FreeTableModel, + config: GridConfig, + setConfig: ChangeConfigFunc, + cache: GridCache, + setCache: ChangeCacheFunc + ) { + super(config, setConfig, cache, setCache); + this.columns = model?.structure?.__isDynamicStructure + ? analyseCollectionDisplayColumns(model?.rows, this) + : this.getDisplayColumns(model); + this.filterable = false; + this.sortable = false; + } + + getDisplayColumns(model: FreeTableModel) { + return _.uniqBy( + model?.structure?.columns + ?.map(col => this.getDisplayColumn(col)) + ?.map(col => ({ + ...col, + isChecked: this.isColumnChecked(col), + })) || [], + col => col.uniqueName + ); + } + + getDisplayColumn(col: ColumnInfo) { + const uniquePath = [col.columnName]; + const uniqueName = uniquePath.join('.'); + return { + ...col, + pureName: 'data', + schemaName: '', + headerText: col.columnName, + uniqueName, + uniquePath, + }; + } +} diff --git a/packages/datalib/src/FreeTableModel.ts b/packages/datalib/src/FreeTableModel.ts new file mode 100644 index 00000000..616e0c8e --- /dev/null +++ b/packages/datalib/src/FreeTableModel.ts @@ -0,0 +1,27 @@ +import type { TableInfo } from 'dbgate-types'; + +export interface FreeTableModel { + structure: TableInfo; + rows: any[]; +} + +export function createFreeTableModel() { + return { + structure: { + columns: [ + { + columnName: 'col1', + }, + ], + foreignKeys: [], + }, + rows: [ + { + col1: 'val1', + }, + { + col1: 'val2', + }, + ], + }; +} diff --git a/packages/datalib/src/index.ts b/packages/datalib/src/index.ts index 30daf5c3..ca611103 100644 --- a/packages/datalib/src/index.ts +++ b/packages/datalib/src/index.ts @@ -19,3 +19,5 @@ export * from './PerspectiveDataPattern'; export * from './PerspectiveDataLoader'; export * from './perspectiveTools'; export * from './DataDuplicator'; +export * from './FreeTableGridDisplay'; +export * from './FreeTableModel';