diff --git a/packages/datalib/src/PerspectiveColumnDefinition.ts b/packages/datalib/src/PerspectiveColumnDefinition.ts new file mode 100644 index 000000000..ac2b13596 --- /dev/null +++ b/packages/datalib/src/PerspectiveColumnDefinition.ts @@ -0,0 +1,50 @@ +import { ColumnInfo, ForeignKeyInfo, TableInfo } from 'dbgate-types'; +import { clearConfigCache } from 'prettier'; +import { ChangePerspectiveConfigFunc, PerspectiveConfig } from './PerspectiveConfig'; + +export abstract class PerspectiveColumnDefinition { + abstract get title(); + abstract get props(); + abstract get isExpanded(); + abstract get isExpandable(); + abstract get level(); + abstract toggleExpanded(); +} + +export class PerspectiveTableColumnDefinition extends PerspectiveColumnDefinition { + foreignKey: ForeignKeyInfo; + constructor( + public column: ColumnInfo, + public table: TableInfo, + public config: PerspectiveConfig, + public setConfig: ChangePerspectiveConfigFunc + ) { + super(); + + this.foreignKey = + table.foreignKeys && + table.foreignKeys.find(fk => fk.columns.length == 1 && fk.columns[0].columnName == column.columnName); + } + + get title() { + return this.column.columnName; + } + + get props() { + return this.column; + } + + get isExpanded() { + return this.config.expandedColumns.includes(this.column.uniqueName); + } + + get isExpandable() { + return !!this.foreignKey; + } + + get level() { + return 0; + } + + toggleExpanded() {} +} diff --git a/packages/datalib/src/PerspectiveConfig.ts b/packages/datalib/src/PerspectiveConfig.ts new file mode 100644 index 000000000..b24be768f --- /dev/null +++ b/packages/datalib/src/PerspectiveConfig.ts @@ -0,0 +1,17 @@ +export interface PerspectiveConfig { + hiddenColumns: string[]; + shownColumns: string[]; + expandedColumns: string[]; + collapsedColumns: string[]; +} + +export function createPerspectiveConfig(): PerspectiveConfig { + return { + hiddenColumns: [], + shownColumns: [], + expandedColumns: [], + collapsedColumns: [], + }; +} + +export type ChangePerspectiveConfigFunc = (changeFunc: (config: PerspectiveConfig) => PerspectiveConfig) => void; diff --git a/packages/datalib/src/index.ts b/packages/datalib/src/index.ts index 7bff4808e..3c6f34032 100644 --- a/packages/datalib/src/index.ts +++ b/packages/datalib/src/index.ts @@ -1,5 +1,7 @@ export * from './GridDisplay'; export * from './GridConfig'; +export * from './PerspectiveConfig'; +export * from './PerspectiveColumnDefinition'; export * from './TableGridDisplay'; export * from './ViewGridDisplay'; export * from './JslGridDisplay'; diff --git a/packages/web/src/perspectives/PerspectiveColumnRow.svelte b/packages/web/src/perspectives/PerspectiveColumnRow.svelte new file mode 100644 index 000000000..062a557d1 --- /dev/null +++ b/packages/web/src/perspectives/PerspectiveColumnRow.svelte @@ -0,0 +1,50 @@ + + +