diff --git a/packages/datalib/src/PerspectiveConfig.ts b/packages/datalib/src/PerspectiveConfig.ts index 0d3c6b666..6bdecfd6a 100644 --- a/packages/datalib/src/PerspectiveConfig.ts +++ b/packages/datalib/src/PerspectiveConfig.ts @@ -27,6 +27,10 @@ export interface PerspectiveFilterColumnInfo { schemaName: string; foreignKey: ForeignKeyInfo; } + +export interface PerspectiveParentFilterConfig { + uniqueName: string; +} export interface PerspectiveConfig extends PerspectiveConfigColumns { rootObject: { schemaName?: string; pureName: string }; filters: { [uniqueName: string]: string }; @@ -37,6 +41,7 @@ export interface PerspectiveConfig extends PerspectiveConfigColumns { }[]; }; customJoins: PerspectiveCustomJoinConfig[]; + parentFilters: PerspectiveParentFilterConfig[]; } export function createPerspectiveConfig(rootObject: { schemaName?: string; pureName: string }): PerspectiveConfig { @@ -48,6 +53,7 @@ export function createPerspectiveConfig(rootObject: { schemaName?: string; pureN filters: {}, sort: {}, rootObject, + parentFilters: [], }; } diff --git a/packages/datalib/src/PerspectiveDisplay.ts b/packages/datalib/src/PerspectiveDisplay.ts index e5070af50..106e3973a 100644 --- a/packages/datalib/src/PerspectiveDisplay.ts +++ b/packages/datalib/src/PerspectiveDisplay.ts @@ -47,6 +47,10 @@ export class PerspectiveDisplayColumn { return this.parentNodes[level]?.title; } + getParentNode(level) { + return this.parentNodes[level]; + } + getParentTableUniqueName(level) { return this.parentNodes[level]?.headerTableAttributes ? this.parentNodes[level]?.uniqueName : ''; } diff --git a/packages/datalib/src/PerspectiveTreeNode.ts b/packages/datalib/src/PerspectiveTreeNode.ts index 6515051fd..437c09bf8 100644 --- a/packages/datalib/src/PerspectiveTreeNode.ts +++ b/packages/datalib/src/PerspectiveTreeNode.ts @@ -247,6 +247,18 @@ export abstract class PerspectiveTreeNode { if (uniquePath[0] != this.codeName) return null; return this.findChildNodeByUniquePath(uniquePath.slice(1)); } + + get supportsParentFilter() { + return ( + (this.parentNode?.isRoot || this.parentNode?.supportsParentFilter) && + this.parentNode?.databaseConfig?.conid == this.databaseConfig?.conid && + this.parentNode?.databaseConfig?.database == this.databaseConfig?.database + ); + } + + get isParentFilter() { + return !!(this.config.parentFilters || []).find(x => x.uniqueName == this.uniqueName); + } } export class PerspectiveTableColumnNode extends PerspectiveTreeNode { diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 3299132f7..7e3fbb811 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -95,6 +95,8 @@ 'icon json': 'mdi mdi-code-json', 'icon lock': 'mdi mdi-lock', 'icon custom-join': 'mdi mdi-arrow-left-right-bold', + 'icon parent-filter': 'mdi mdi-home-alert', + 'icon parent-filter-outline': 'mdi mdi-home-alert-outline', 'icon run': 'mdi mdi-play', 'icon chevron-down': 'mdi mdi-chevron-down', @@ -174,6 +176,7 @@ 'img filter': 'mdi mdi-filter', 'img group': 'mdi mdi-group', 'img perspective': 'mdi mdi-eye color-icon-yellow', + 'img parent-filter': 'mdi mdi-home-alert color-icon-yellow', 'img folder': 'mdi mdi-folder color-icon-yellow', 'img type-string': 'mdi mdi-alphabetical color-icon-blue', diff --git a/packages/web/src/perspectives/PerspectiveHeaderControl.svelte b/packages/web/src/perspectives/PerspectiveHeaderControl.svelte index 198f8ccf1..f9c369632 100644 --- a/packages/web/src/perspectives/PerspectiveHeaderControl.svelte +++ b/packages/web/src/perspectives/PerspectiveHeaderControl.svelte @@ -49,8 +49,17 @@