default checked columns

This commit is contained in:
Jan Prochazka
2022-07-28 20:35:39 +02:00
parent d23371f642
commit 513b2ba42f
2 changed files with 48 additions and 4 deletions

View File

@@ -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) {

View 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]];
}