mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-01 13:13:58 +00:00
default checked columns
This commit is contained in:
@@ -17,6 +17,7 @@ import stableStringify from 'json-stable-stringify';
|
|||||||
import { getFilterType, parseFilter } from 'dbgate-filterparser';
|
import { getFilterType, parseFilter } from 'dbgate-filterparser';
|
||||||
import { FilterType } from 'dbgate-filterparser/lib/types';
|
import { FilterType } from 'dbgate-filterparser/lib/types';
|
||||||
import { Condition, Expression } from 'dbgate-sqltree';
|
import { Condition, Expression } from 'dbgate-sqltree';
|
||||||
|
import { getPerspectiveDefaultColumns } from './getPerspectiveDefaultColumns';
|
||||||
|
|
||||||
export interface PerspectiveDataLoadPropsWithNode {
|
export interface PerspectiveDataLoadPropsWithNode {
|
||||||
props: PerspectiveDataLoadProps;
|
props: PerspectiveDataLoadProps;
|
||||||
@@ -52,6 +53,7 @@ export abstract class PerspectiveTreeNode {
|
|||||||
public dataProvider: PerspectiveDataProvider,
|
public dataProvider: PerspectiveDataProvider,
|
||||||
public databaseConfig: PerspectiveDatabaseConfig
|
public databaseConfig: PerspectiveDatabaseConfig
|
||||||
) {}
|
) {}
|
||||||
|
defaultChecked: boolean;
|
||||||
abstract get title();
|
abstract get title();
|
||||||
abstract get codeName();
|
abstract get codeName();
|
||||||
abstract get isExpandable();
|
abstract get isExpandable();
|
||||||
@@ -83,7 +85,9 @@ export abstract class PerspectiveTreeNode {
|
|||||||
return this.config.expandedColumns.includes(this.uniqueName);
|
return this.config.expandedColumns.includes(this.uniqueName);
|
||||||
}
|
}
|
||||||
get isChecked() {
|
get isChecked() {
|
||||||
return this.config.checkedColumns.includes(this.uniqueName);
|
if (this.config.checkedColumns.includes(this.uniqueName)) return true;
|
||||||
|
if (this.config.uncheckedColumns.includes(this.uniqueName)) return false;
|
||||||
|
return this.defaultChecked;
|
||||||
}
|
}
|
||||||
get columnTitle() {
|
get columnTitle() {
|
||||||
return this.title;
|
return this.title;
|
||||||
@@ -116,7 +120,11 @@ export abstract class PerspectiveTreeNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
toggleChecked(value?: boolean) {
|
toggleChecked(value?: boolean) {
|
||||||
this.includeInColumnSet('checkedColumns', this.uniqueName, value == null ? !this.isChecked : value);
|
if (this.defaultChecked) {
|
||||||
|
this.includeInColumnSet('uncheckedColumns', this.uniqueName, value == null ? this.isChecked : value);
|
||||||
|
} else {
|
||||||
|
this.includeInColumnSet('checkedColumns', this.uniqueName, value == null ? !this.isChecked : value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
includeInColumnSet(field: keyof PerspectiveConfigColumns, uniqueName: string, isIncluded: boolean) {
|
includeInColumnSet(field: keyof PerspectiveConfigColumns, uniqueName: string, isIncluded: boolean) {
|
||||||
@@ -186,10 +194,13 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
|
|||||||
setConfig: ChangePerspectiveConfigFunc,
|
setConfig: ChangePerspectiveConfigFunc,
|
||||||
dataProvider: PerspectiveDataProvider,
|
dataProvider: PerspectiveDataProvider,
|
||||||
databaseConfig: PerspectiveDatabaseConfig,
|
databaseConfig: PerspectiveDatabaseConfig,
|
||||||
parentNode: PerspectiveTreeNode
|
parentNode: PerspectiveTreeNode,
|
||||||
|
defaultChecked: boolean
|
||||||
) {
|
) {
|
||||||
super(config, setConfig, parentNode, dataProvider, databaseConfig);
|
super(config, setConfig, parentNode, dataProvider, databaseConfig);
|
||||||
|
|
||||||
|
this.defaultChecked = defaultChecked;
|
||||||
|
|
||||||
this.foreignKey =
|
this.foreignKey =
|
||||||
table.foreignKeys &&
|
table.foreignKeys &&
|
||||||
table.foreignKeys.find(fk => fk.columns.length == 1 && fk.columns[0].columnName == column.columnName);
|
table.foreignKeys.find(fk => fk.columns.length == 1 && fk.columns[0].columnName == column.columnName);
|
||||||
@@ -261,6 +272,7 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
|
|||||||
const tbl = this?.db?.tables?.find(
|
const tbl = this?.db?.tables?.find(
|
||||||
x => x.pureName == this.foreignKey?.refTableName && x.schemaName == this.foreignKey?.refSchemaName
|
x => x.pureName == this.foreignKey?.refTableName && x.schemaName == this.foreignKey?.refSchemaName
|
||||||
);
|
);
|
||||||
|
|
||||||
return getTableChildPerspectiveNodes(
|
return getTableChildPerspectiveNodes(
|
||||||
tbl,
|
tbl,
|
||||||
this.db,
|
this.db,
|
||||||
@@ -403,11 +415,24 @@ export function getTableChildPerspectiveNodes(
|
|||||||
parentColumn: PerspectiveTreeNode
|
parentColumn: PerspectiveTreeNode
|
||||||
) {
|
) {
|
||||||
if (!table) return [];
|
if (!table) return [];
|
||||||
|
|
||||||
|
const defaultColumns = getPerspectiveDefaultColumns(table, db);
|
||||||
|
|
||||||
const res = [];
|
const res = [];
|
||||||
res.push(
|
res.push(
|
||||||
...table.columns.map(
|
...table.columns.map(
|
||||||
col =>
|
col =>
|
||||||
new PerspectiveTableColumnNode(col, table, db, config, setConfig, dataProvider, databaseConfig, parentColumn)
|
new PerspectiveTableColumnNode(
|
||||||
|
col,
|
||||||
|
table,
|
||||||
|
db,
|
||||||
|
config,
|
||||||
|
setConfig,
|
||||||
|
dataProvider,
|
||||||
|
databaseConfig,
|
||||||
|
parentColumn,
|
||||||
|
defaultColumns.includes(col.columnName)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
if (db && table.dependencies) {
|
if (db && table.dependencies) {
|
||||||
|
|||||||
19
packages/datalib/src/getPerspectiveDefaultColumns.ts
Normal file
19
packages/datalib/src/getPerspectiveDefaultColumns.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { DatabaseInfo, TableInfo } from 'dbgate-types';
|
||||||
|
|
||||||
|
export function getPerspectiveDefaultColumns(table: TableInfo, db: DatabaseInfo): string[] {
|
||||||
|
const columns = table.columns.map(x => x.columnName);
|
||||||
|
const predicates = [
|
||||||
|
x => x.toLowerCase() == 'name',
|
||||||
|
x => x.toLowerCase() == 'title',
|
||||||
|
x => x.toLowerCase().includes('name'),
|
||||||
|
x => x.toLowerCase().includes('title'),
|
||||||
|
x => x.dataType?.toLowerCase()?.includes('char'),
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const predicate of predicates) {
|
||||||
|
const col = columns.find(predicate);
|
||||||
|
if (col) return [col];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [columns[0]];
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user