diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.ts index 30254d079a..a37c35831f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.ts @@ -159,21 +159,21 @@ export class EntitiesHierarchyWidgetComponent extends PageComponent implements O parentNodeCtx.level = 1; testNodeCtx.parentNodeCtx = parentNodeCtx; - this.nodeRelationQueryFunction = loadNodeCtxFunction(this.settings.nodeRelationQueryFunction, 'nodeCtx', testNodeCtx); - this.nodeIconFunction = loadNodeCtxFunction(this.settings.nodeIconFunction, 'nodeCtx', testNodeCtx); - this.nodeTextFunction = loadNodeCtxFunction(this.settings.nodeTextFunction, 'nodeCtx', testNodeCtx); - this.nodeDisabledFunction = loadNodeCtxFunction(this.settings.nodeDisabledFunction, 'nodeCtx', testNodeCtx); - this.nodeOpenedFunction = loadNodeCtxFunction(this.settings.nodeOpenedFunction, 'nodeCtx', testNodeCtx); - this.nodeHasChildrenFunction = loadNodeCtxFunction(this.settings.nodeHasChildrenFunction, 'nodeCtx', testNodeCtx); + this.nodeRelationQueryFunction = loadNodeCtxFunction(this.settings.nodeRelationQueryFunction, 'widgetCtx, nodeCtx', this.ctx, testNodeCtx); + this.nodeIconFunction = loadNodeCtxFunction(this.settings.nodeIconFunction, 'widgetCtx, nodeCtx', this.ctx, testNodeCtx); + this.nodeTextFunction = loadNodeCtxFunction(this.settings.nodeTextFunction, 'widgetCtx, nodeCtx', this.ctx, testNodeCtx); + this.nodeDisabledFunction = loadNodeCtxFunction(this.settings.nodeDisabledFunction, 'widgetCtx, nodeCtx', this.ctx, testNodeCtx); + this.nodeOpenedFunction = loadNodeCtxFunction(this.settings.nodeOpenedFunction, 'widgetCtx, nodeCtx', this.ctx, testNodeCtx); + this.nodeHasChildrenFunction = loadNodeCtxFunction(this.settings.nodeHasChildrenFunction, 'widgetCtx, nodeCtx', this.ctx, testNodeCtx); const testNodeCtx2 = deepClone(testNodeCtx); testNodeCtx2.entity.name = 'TEST DEV2'; - this.nodesSortFunction = loadNodeCtxFunction(this.settings.nodesSortFunction, 'nodeCtx1,nodeCtx2', testNodeCtx, testNodeCtx2); + this.nodesSortFunction = loadNodeCtxFunction(this.settings.nodesSortFunction, 'widgetCtx, nodeCtx1,nodeCtx2', this.ctx, testNodeCtx, testNodeCtx2); this.nodeRelationQueryFunction = this.nodeRelationQueryFunction || defaultNodeRelationQueryFunction; this.nodeIconFunction = this.nodeIconFunction || defaultNodeIconFunction; - this.nodeTextFunction = this.nodeTextFunction || ((nodeCtx) => nodeCtx.entity.name); + this.nodeTextFunction = this.nodeTextFunction || ((widgetCtx, nodeCtx) => nodeCtx.entity.name); this.nodeDisabledFunction = this.nodeDisabledFunction || (() => false); this.nodeOpenedFunction = this.nodeOpenedFunction || defaultNodeOpenedFunction; this.nodeHasChildrenFunction = this.nodeHasChildrenFunction || (() => true); @@ -322,7 +322,7 @@ export class EntitiesHierarchyWidgetComponent extends PageComponent implements O node.text = newText; this.nodeEditCallbacks.updateNode(node.id, node.text); } - const newDisabled = this.nodeDisabledFunction(node.data.nodeCtx); + const newDisabled = this.nodeDisabledFunction(this.ctx, node.data.nodeCtx); if (node.state.disabled !== newDisabled) { node.state.disabled = newDisabled; if (node.state.disabled) { @@ -331,7 +331,7 @@ export class EntitiesHierarchyWidgetComponent extends PageComponent implements O this.nodeEditCallbacks.enableNode(node.id); } } - const newHasChildren = this.nodeHasChildrenFunction(node.data.nodeCtx); + const newHasChildren = this.nodeHasChildrenFunction(this.ctx, node.data.nodeCtx); if (node.children !== newHasChildren) { node.children = newHasChildren; this.nodeEditCallbacks.setNodeHasChildren(node.id, node.children); @@ -340,22 +340,22 @@ export class EntitiesHierarchyWidgetComponent extends PageComponent implements O private prepareNodes(nodes: HierarchyNavTreeNode[]): HierarchyNavTreeNode[] { nodes = nodes.filter((node) => node !== null); - nodes.sort((node1, node2) => this.nodesSortFunction(node1.data.nodeCtx, node2.data.nodeCtx)); + nodes.sort((node1, node2) => this.nodesSortFunction(this.ctx, node1.data.nodeCtx, node2.data.nodeCtx)); return nodes; } private prepareNodeText(node: HierarchyNavTreeNode): string { const nodeIcon = this.prepareNodeIcon(node.data.nodeCtx); - const nodeText = this.nodeTextFunction(node.data.nodeCtx); + const nodeText = this.nodeTextFunction(this.ctx, node.data.nodeCtx); node.data.searchText = nodeText ? nodeText.replace(/<[^>]+>/g, '').toLowerCase() : ''; return nodeIcon + nodeText; } private prepareNodeIcon(nodeCtx: HierarchyNodeContext): string { - let iconInfo = this.nodeIconFunction(nodeCtx); + let iconInfo = this.nodeIconFunction(this.ctx, nodeCtx); if (iconInfo) { if (iconInfo === 'default') { - iconInfo = defaultNodeIconFunction(nodeCtx); + iconInfo = defaultNodeIconFunction(this.ctx, nodeCtx); } if (iconInfo && iconInfo !== 'default' && (iconInfo.iconUrl || iconInfo.materialIcon)) { if (iconInfo.materialIcon) { @@ -406,11 +406,11 @@ export class EntitiesHierarchyWidgetComponent extends PageComponent implements O nodeCtx }; node.state = { - disabled: this.nodeDisabledFunction(node.data.nodeCtx), - opened: this.nodeOpenedFunction(node.data.nodeCtx) + disabled: this.nodeDisabledFunction(this.ctx, node.data.nodeCtx), + opened: this.nodeOpenedFunction(this.ctx, node.data.nodeCtx) }; node.text = this.prepareNodeText(node); - node.children = this.nodeHasChildrenFunction(node.data.nodeCtx); + node.children = this.nodeHasChildrenFunction(this.ctx, node.data.nodeCtx); return node; } @@ -456,9 +456,9 @@ export class EntitiesHierarchyWidgetComponent extends PageComponent implements O } private prepareNodeRelationQuery(nodeCtx: HierarchyNodeContext): EntityRelationsQuery { - let relationQuery = this.nodeRelationQueryFunction(nodeCtx); + let relationQuery = this.nodeRelationQueryFunction(this.ctx, nodeCtx); if (relationQuery && relationQuery === 'default') { - relationQuery = defaultNodeRelationQueryFunction(nodeCtx); + relationQuery = defaultNodeRelationQueryFunction(this.ctx, nodeCtx); } return relationQuery as EntityRelationsQuery; } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.models.ts index 5e2031ec11..fcfcef8bab 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.models.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.models.ts @@ -21,6 +21,7 @@ import { Datasource } from '@shared/models/widget.models'; import { isDefined, isUndefined } from '@core/utils'; import { EntityRelationsQuery, EntitySearchDirection, RelationTypeGroup } from '@shared/models/relation.models'; import { EntityType } from '@shared/models/entity-type.models'; +import { WidgetContext } from '@home/models/widget-component.models'; export interface EntitiesHierarchyWidgetSettings { nodeRelationQueryFunction: string; @@ -57,13 +58,13 @@ export interface HierarchyNodeIconInfo { materialIcon?: string; } -export type NodeRelationQueryFunction = (nodeCtx: HierarchyNodeContext) => EntityRelationsQuery | 'default'; -export type NodeTextFunction = (nodeCtx: HierarchyNodeContext) => string; -export type NodeDisabledFunction = (nodeCtx: HierarchyNodeContext) => boolean; -export type NodeIconFunction = (nodeCtx: HierarchyNodeContext) => HierarchyNodeIconInfo | 'default'; -export type NodeOpenedFunction = (nodeCtx: HierarchyNodeContext) => boolean; -export type NodeHasChildrenFunction = (nodeCtx: HierarchyNodeContext) => boolean; -export type NodesSortFunction = (nodeCtx1: HierarchyNodeContext, nodeCtx2: HierarchyNodeContext) => number; +export type NodeRelationQueryFunction = (widgetCtx: WidgetContext, nodeCtx: HierarchyNodeContext) => EntityRelationsQuery | 'default'; +export type NodeTextFunction = (widgetCtx: WidgetContext, nodeCtx: HierarchyNodeContext) => string; +export type NodeDisabledFunction = (widgetCtx: WidgetContext, nodeCtx: HierarchyNodeContext) => boolean; +export type NodeIconFunction = (widgetCtx: WidgetContext, nodeCtx: HierarchyNodeContext) => HierarchyNodeIconInfo | 'default'; +export type NodeOpenedFunction = (widgetCtx: WidgetContext, nodeCtx: HierarchyNodeContext) => boolean; +export type NodeHasChildrenFunction = (widgetCtx: WidgetContext, nodeCtx: HierarchyNodeContext) => boolean; +export type NodesSortFunction = (widgetCtx: WidgetContext, nodeCtx1: HierarchyNodeContext, nodeCtx2: HierarchyNodeContext) => number; export function loadNodeCtxFunction any>(functionBody: string, argNames: string, ...args: any[]): F { let nodeCtxFunction: F = null; @@ -89,7 +90,7 @@ export function iconUrlHtml(iconUrl: string): string { return '
 
'; } -export const defaultNodeRelationQueryFunction: NodeRelationQueryFunction = nodeCtx => { +export const defaultNodeRelationQueryFunction: NodeRelationQueryFunction = (widgetContext, nodeCtx) => { const entity = nodeCtx.entity; const query: EntityRelationsQuery = { parameters: { @@ -109,7 +110,7 @@ export const defaultNodeRelationQueryFunction: NodeRelationQueryFunction = nodeC return query; }; -export const defaultNodeIconFunction: NodeIconFunction = nodeCtx => { +export const defaultNodeIconFunction: NodeIconFunction = (widgetContext, nodeCtx) => { let materialIcon = 'insert_drive_file'; const entity = nodeCtx.entity; if (entity && entity.id && entity.id.entityType) { @@ -148,11 +149,11 @@ export const defaultNodeIconFunction: NodeIconFunction = nodeCtx => { }; }; -export const defaultNodeOpenedFunction: NodeOpenedFunction = nodeCtx => { +export const defaultNodeOpenedFunction: NodeOpenedFunction = (widgetCtx, nodeCtx) => { return nodeCtx.level <= 4; }; -export const defaultNodesSortFunction: NodesSortFunction = (nodeCtx1, nodeCtx2) => { +export const defaultNodesSortFunction: NodesSortFunction = (widgetCtx, nodeCtx1, nodeCtx2) => { let result = 0; if (!nodeCtx1.entity.id.entityType || !nodeCtx2.entity.id.entityType ) { if (nodeCtx1.entity.id.entityType) { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-hierarchy-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-hierarchy-widget-settings.component.html index 2a2f16d581..4c65f5f1e9 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-hierarchy-widget-settings.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-hierarchy-widget-settings.component.html @@ -20,13 +20,13 @@ widgets.entities-hierarchy.hierarchy-data-settings @@ -35,13 +35,13 @@ widgets.entities-hierarchy.node-state-settings @@ -50,13 +50,13 @@ widgets.entities-hierarchy.display-settings @@ -65,7 +65,7 @@ widgets.entities-hierarchy.sort-settings diff --git a/ui-ngx/src/assets/help/en_US/widget/lib/entities_hierarchy/node_disabled_fn.md b/ui-ngx/src/assets/help/en_US/widget/lib/entities_hierarchy/node_disabled_fn.md index b532cfa3f8..7c74cccae3 100644 --- a/ui-ngx/src/assets/help/en_US/widget/lib/entities_hierarchy/node_disabled_fn.md +++ b/ui-ngx/src/assets/help/en_US/widget/lib/entities_hierarchy/node_disabled_fn.md @@ -10,6 +10,9 @@ A JavaScript function evaluating whether current node should be disabled (not se **Parameters:**