mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 05:36:00 +00:00
121 lines
3.2 KiB
TypeScript
121 lines
3.2 KiB
TypeScript
import _ from 'lodash';
|
|
import { GridConfig, GridCache, GridConfigColumns, createGridCache, GroupFunc } from './GridConfig';
|
|
import { TableInfo, EngineDriver, DatabaseInfo, SqlDialect } from 'dbgate-types';
|
|
import { getFilterValueExpression } from 'dbgate-filterparser';
|
|
import { ChangeCacheFunc, ChangeConfigFunc, DisplayColumn } from './GridDisplay';
|
|
|
|
export class FormViewDisplay {
|
|
isLoadedCorrectly = true;
|
|
columns: DisplayColumn[];
|
|
public baseTable: TableInfo;
|
|
dialect: SqlDialect;
|
|
|
|
constructor(
|
|
public config: GridConfig,
|
|
protected setConfig: ChangeConfigFunc,
|
|
public cache: GridCache,
|
|
protected setCache: ChangeCacheFunc,
|
|
public driver?: EngineDriver,
|
|
public dbinfo: DatabaseInfo = null,
|
|
public serverVersion = null
|
|
) {
|
|
this.dialect = (driver?.dialectByVersion && driver?.dialectByVersion(serverVersion)) || driver?.dialect;
|
|
}
|
|
|
|
addFilterColumn(column) {
|
|
if (!column) return;
|
|
this.setConfig(cfg => ({
|
|
...cfg,
|
|
formFilterColumns: [...(cfg.formFilterColumns || []), column.uniqueName],
|
|
}));
|
|
}
|
|
|
|
filterCellValue(column, rowData) {
|
|
if (!column || !rowData) return;
|
|
const value = rowData[column.uniqueName];
|
|
const expr = getFilterValueExpression(value, column.dataType);
|
|
if (expr) {
|
|
this.setConfig(cfg => ({
|
|
...cfg,
|
|
filters: {
|
|
...cfg.filters,
|
|
[column.uniqueName]: expr,
|
|
},
|
|
addedColumns: cfg.addedColumns.includes(column.uniqueName)
|
|
? cfg.addedColumns
|
|
: [...cfg.addedColumns, column.uniqueName],
|
|
}));
|
|
this.reload();
|
|
}
|
|
}
|
|
|
|
setFilter(uniqueName, value) {
|
|
this.setConfig(cfg => ({
|
|
...cfg,
|
|
filters: {
|
|
...cfg.filters,
|
|
[uniqueName]: value,
|
|
},
|
|
}));
|
|
this.reload();
|
|
}
|
|
|
|
removeFilter(uniqueName) {
|
|
const reloadRequired = !!this.config.filters[uniqueName];
|
|
this.setConfig(cfg => ({
|
|
...cfg,
|
|
formFilterColumns: (cfg.formFilterColumns || []).filter(x => x != uniqueName),
|
|
filters: _.omit(cfg.filters || [], uniqueName),
|
|
}));
|
|
if (reloadRequired) this.reload();
|
|
}
|
|
|
|
reload() {
|
|
this.setCache(cache => ({
|
|
// ...cache,
|
|
...createGridCache(),
|
|
refreshTime: new Date().getTime(),
|
|
}));
|
|
}
|
|
|
|
getKeyValue(columnName) {
|
|
const { formViewKey, formViewKeyRequested } = this.config;
|
|
if (formViewKeyRequested && formViewKeyRequested[columnName]) return formViewKeyRequested[columnName];
|
|
if (formViewKey && formViewKey[columnName]) return formViewKey[columnName];
|
|
return null;
|
|
}
|
|
|
|
requestKeyValue(columnName, value) {
|
|
if (this.getKeyValue(columnName) == value) return;
|
|
|
|
this.setConfig(cfg => ({
|
|
...cfg,
|
|
formViewKeyRequested: {
|
|
...cfg.formViewKey,
|
|
...cfg.formViewKeyRequested,
|
|
[columnName]: value,
|
|
},
|
|
}));
|
|
this.reload();
|
|
}
|
|
|
|
extractKey(row) {
|
|
if (!row || !this.baseTable || !this.baseTable.primaryKey) {
|
|
return null;
|
|
}
|
|
const formViewKey = _.pick(
|
|
row,
|
|
this.baseTable.primaryKey.columns.map(x => x.columnName)
|
|
);
|
|
return formViewKey;
|
|
}
|
|
|
|
cancelRequestKey(rowData) {
|
|
this.setConfig(cfg => ({
|
|
...cfg,
|
|
formViewKeyRequested: null,
|
|
formViewKey: rowData ? this.extractKey(rowData) : cfg.formViewKey,
|
|
}));
|
|
}
|
|
}
|