diff --git a/packages/datalib/src/PerspectiveConfig.ts b/packages/datalib/src/PerspectiveConfig.ts index bf7d2eea8..0d8baad8d 100644 --- a/packages/datalib/src/PerspectiveConfig.ts +++ b/packages/datalib/src/PerspectiveConfig.ts @@ -21,6 +21,7 @@ export interface PerspectiveCustomJoinConfig { export interface PerspectiveFilterColumnInfo { columnName: string; filterType: string; + tableName: string; } export interface PerspectiveConfig extends PerspectiveConfigColumns { filters: { [uniqueName: string]: string }; diff --git a/packages/datalib/src/PerspectiveTreeNode.ts b/packages/datalib/src/PerspectiveTreeNode.ts index 7a463ed4a..06b6c8e42 100644 --- a/packages/datalib/src/PerspectiveTreeNode.ts +++ b/packages/datalib/src/PerspectiveTreeNode.ts @@ -5,6 +5,7 @@ import { PerspectiveConfig, PerspectiveConfigColumns, PerspectiveCustomJoinConfig, + PerspectiveFilterColumnInfo, } from './PerspectiveConfig'; import _isEqual from 'lodash/isEqual'; import _cloneDeep from 'lodash/cloneDeep'; @@ -152,25 +153,25 @@ export abstract class PerspectiveTreeNode { } } - setFilter(value) { - this.setConfig( - cfg => ({ - ...cfg, - filters: { - ...cfg.filters, - [this.uniqueName]: value, - }, - filterInfos: { - ...cfg.filterInfos, - [this.uniqueName]: { - columnName: this.columnName, - filterType: this.filterType, - }, - }, - }), - true - ); - } + // setFilter(value) { + // this.setConfig( + // cfg => ({ + // ...cfg, + // filters: { + // ...cfg.filters, + // [this.uniqueName]: value, + // }, + // filterInfos: { + // ...cfg.filterInfos, + // [this.uniqueName]: { + // columnName: this.columnName, + // filterType: this.filterType, + // }, + // }, + // }), + // true + // ); + // } getFilter() { return this.config.filters[this.uniqueName]; @@ -232,6 +233,10 @@ export abstract class PerspectiveTreeNode { getBaseTableFromThis() { return null; } + + get filterInfo(): PerspectiveFilterColumnInfo { + return null; + } } export class PerspectiveTableColumnNode extends PerspectiveTreeNode { @@ -344,6 +349,14 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode { return this.refTable; } + get filterInfo(): PerspectiveFilterColumnInfo { + return { + columnName: this.columnName, + filterType: this.filterType, + tableName: this.column.pureName, + }; + } + parseFilterCondition() { const filter = this.getFilter(); if (!filter) return null; diff --git a/packages/web/src/perspectives/PerspectiveFilters.svelte b/packages/web/src/perspectives/PerspectiveFilters.svelte index 9b02568b2..6f3e4f855 100644 --- a/packages/web/src/perspectives/PerspectiveFilters.svelte +++ b/packages/web/src/perspectives/PerspectiveFilters.svelte @@ -16,10 +16,9 @@ {#each allFilterNames as uniqueName} setConfig(cfg => ({ ...cfg, diff --git a/packages/web/src/perspectives/PerspectiveFiltersColumn.svelte b/packages/web/src/perspectives/PerspectiveFiltersColumn.svelte index 3e8d015e1..c15a36183 100644 --- a/packages/web/src/perspectives/PerspectiveFiltersColumn.svelte +++ b/packages/web/src/perspectives/PerspectiveFiltersColumn.svelte @@ -5,20 +5,21 @@ import InlineButton from '../buttons/InlineButton.svelte'; import FontIcon from '../icons/FontIcon.svelte'; import { getFilterType } from 'dbgate-filterparser'; + import { PerspectiveFilterColumnInfo } from 'dbgate-datalib'; + + export let filterInfo: PerspectiveFilterColumnInfo; export let filter; export let onSetFilter; export let onRemoveFilter; - export let filterType; - export let columnName;
- {columnName} + {filterInfo.columnName} ({filterInfo.tableName})
- +
diff --git a/packages/web/src/perspectives/PerspectiveNodeRow.svelte b/packages/web/src/perspectives/PerspectiveNodeRow.svelte index 4f6c55bde..5147893e4 100644 --- a/packages/web/src/perspectives/PerspectiveNodeRow.svelte +++ b/packages/web/src/perspectives/PerspectiveNodeRow.svelte @@ -17,7 +17,19 @@ function createMenu() { const customJoin = node.customJoinConfig; + const filterInfo = node.filterInfo; return [ + filterInfo && { + text: 'Add to filter', + onClick: () => + setConfig(cfg => ({ + ...cfg, + filterInfos: { + ...cfg.filterInfos, + [node.uniqueName]: filterInfo, + }, + })), + }, customJoin && { text: 'Remove custom join', onClick: () => diff --git a/packages/web/src/perspectives/PerspectiveTable.svelte b/packages/web/src/perspectives/PerspectiveTable.svelte index 0012e08a3..ecf7323ac 100644 --- a/packages/web/src/perspectives/PerspectiveTable.svelte +++ b/packages/web/src/perspectives/PerspectiveTable.svelte @@ -282,7 +282,7 @@ {/each} {/each} - + {#each display.rows as row}