igniteui-angular 21.0.0-alpha.0 → 21.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/igniteui-angular-accordion.mjs +24 -2
- package/fesm2022/igniteui-angular-accordion.mjs.map +1 -1
- package/fesm2022/igniteui-angular-action-strip.mjs +23 -2
- package/fesm2022/igniteui-angular-action-strip.mjs.map +1 -1
- package/fesm2022/igniteui-angular-avatar.mjs +19 -2
- package/fesm2022/igniteui-angular-avatar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-badge.mjs +19 -2
- package/fesm2022/igniteui-angular-badge.mjs.map +1 -1
- package/fesm2022/igniteui-angular-banner.mjs +19 -2
- package/fesm2022/igniteui-angular-banner.mjs.map +1 -1
- package/fesm2022/igniteui-angular-bottom-nav.mjs +23 -2
- package/fesm2022/igniteui-angular-bottom-nav.mjs.map +1 -1
- package/fesm2022/igniteui-angular-calendar.mjs +23 -2
- package/fesm2022/igniteui-angular-calendar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-card.mjs +23 -2
- package/fesm2022/igniteui-angular-card.mjs.map +1 -1
- package/fesm2022/igniteui-angular-carousel.mjs +25 -4
- package/fesm2022/igniteui-angular-carousel.mjs.map +1 -1
- package/fesm2022/igniteui-angular-checkbox.mjs +19 -2
- package/fesm2022/igniteui-angular-checkbox.mjs.map +1 -1
- package/fesm2022/igniteui-angular-chips.mjs +24 -2
- package/fesm2022/igniteui-angular-chips.mjs.map +1 -1
- package/fesm2022/igniteui-angular-combo.mjs +24 -2
- package/fesm2022/igniteui-angular-combo.mjs.map +1 -1
- package/fesm2022/igniteui-angular-core.mjs +27 -1
- package/fesm2022/igniteui-angular-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-dialog.mjs +23 -2
- package/fesm2022/igniteui-angular-dialog.mjs.map +1 -1
- package/fesm2022/igniteui-angular-directives.mjs +4 -30
- package/fesm2022/igniteui-angular-directives.mjs.map +1 -1
- package/fesm2022/igniteui-angular-drop-down.mjs +40 -2
- package/fesm2022/igniteui-angular-drop-down.mjs.map +1 -1
- package/fesm2022/igniteui-angular-expansion-panel.mjs +23 -2
- package/fesm2022/igniteui-angular-expansion-panel.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-core.mjs +29 -11
- package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-grid.mjs +4 -4
- package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +4 -4
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +2 -2
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs +4 -4
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-list.mjs +23 -2
- package/fesm2022/igniteui-angular-list.mjs.map +1 -1
- package/fesm2022/igniteui-angular-navigation-drawer.mjs +22 -2
- package/fesm2022/igniteui-angular-navigation-drawer.mjs.map +1 -1
- package/fesm2022/igniteui-angular-paginator.mjs +23 -2
- package/fesm2022/igniteui-angular-paginator.mjs.map +1 -1
- package/fesm2022/igniteui-angular-progressbar.mjs +23 -2
- package/fesm2022/igniteui-angular-progressbar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-query-builder.mjs +2 -2
- package/fesm2022/igniteui-angular-query-builder.mjs.map +1 -1
- package/fesm2022/igniteui-angular-radio.mjs +2 -2
- package/fesm2022/igniteui-angular-radio.mjs.map +1 -1
- package/fesm2022/igniteui-angular-simple-combo.mjs +24 -2
- package/fesm2022/igniteui-angular-simple-combo.mjs.map +1 -1
- package/fesm2022/igniteui-angular-slider.mjs +27 -6
- package/fesm2022/igniteui-angular-slider.mjs.map +1 -1
- package/fesm2022/igniteui-angular-stepper.mjs +25 -4
- package/fesm2022/igniteui-angular-stepper.mjs.map +1 -1
- package/fesm2022/igniteui-angular-tabs.mjs +6 -6
- package/fesm2022/igniteui-angular-tabs.mjs.map +1 -1
- package/fesm2022/igniteui-angular-time-picker.mjs +29 -7
- package/fesm2022/igniteui-angular-time-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-toast.mjs +23 -2
- package/fesm2022/igniteui-angular-toast.mjs.map +1 -1
- package/fesm2022/igniteui-angular-tree.mjs +23 -2
- package/fesm2022/igniteui-angular-tree.mjs.map +1 -1
- package/migrations/update-21_0_0/changes/classes.json +4 -0
- package/migrations/update-21_0_0/changes/theme-changes.json +53 -0
- package/migrations/update-21_0_0/index.js +181 -20
- package/migrations/update-21_0_0/schema.json +1 -1
- package/package.json +12 -12
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
- package/types/igniteui-angular-accordion.d.ts +12 -1
- package/types/igniteui-angular-action-strip.d.ts +11 -1
- package/types/igniteui-angular-avatar.d.ts +11 -1
- package/types/igniteui-angular-badge.d.ts +11 -1
- package/types/igniteui-angular-banner.d.ts +11 -1
- package/types/igniteui-angular-bottom-nav.d.ts +11 -1
- package/types/igniteui-angular-calendar.d.ts +11 -1
- package/types/igniteui-angular-card.d.ts +11 -1
- package/types/igniteui-angular-carousel.d.ts +13 -3
- package/types/igniteui-angular-checkbox.d.ts +11 -1
- package/types/igniteui-angular-chips.d.ts +12 -1
- package/types/igniteui-angular-combo.d.ts +12 -1
- package/types/igniteui-angular-core.d.ts +14 -7
- package/types/igniteui-angular-date-picker.d.ts +2 -2
- package/types/igniteui-angular-dialog.d.ts +11 -1
- package/types/igniteui-angular-directives.d.ts +3 -18
- package/types/igniteui-angular-drop-down.d.ts +23 -3
- package/types/igniteui-angular-expansion-panel.d.ts +11 -1
- package/types/igniteui-angular-grids-core.d.ts +17 -8
- package/types/igniteui-angular-grids-grid.d.ts +4 -4
- package/types/igniteui-angular-grids-hierarchical-grid.d.ts +2 -2
- package/types/igniteui-angular-grids-tree-grid.d.ts +2 -2
- package/types/igniteui-angular-list.d.ts +11 -1
- package/types/igniteui-angular-navigation-drawer.d.ts +10 -1
- package/types/igniteui-angular-paginator.d.ts +11 -1
- package/types/igniteui-angular-progressbar.d.ts +11 -1
- package/types/igniteui-angular-query-builder.d.ts +1 -2
- package/types/igniteui-angular-radio.d.ts +3 -4
- package/types/igniteui-angular-simple-combo.d.ts +13 -1
- package/types/igniteui-angular-slider.d.ts +14 -4
- package/types/igniteui-angular-stepper.d.ts +13 -3
- package/types/igniteui-angular-tabs.d.ts +5 -5
- package/types/igniteui-angular-time-picker.d.ts +13 -1
- package/types/igniteui-angular-toast.d.ts +11 -1
- package/types/igniteui-angular-tree.d.ts +11 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"igniteui-angular-query-builder.mjs","sources":["../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-header.component.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-header.component.html","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.common.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-drag.service.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-tree.component.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-tree.component.html","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.directives.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.component.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.component.html","../../../projects/igniteui-angular/query-builder/src/query-builder/public_api.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.module.ts","../../../projects/igniteui-angular/query-builder/src/igniteui-angular-query-builder.ts"],"sourcesContent":["import { Component, HostBinding, Input } from '@angular/core';\nimport { IQueryBuilderResourceStrings, QueryBuilderResourceStringsEN } from 'igniteui-angular/core';\nimport { getCurrentResourceStrings } from 'igniteui-angular/core';\n\n@Component({\n selector: 'igx-query-builder-header',\n templateUrl: 'query-builder-header.component.html'\n})\nexport class IgxQueryBuilderHeaderComponent {\n\n private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n\n /**\n * @hidden @internal\n */\n @HostBinding('class') public get getClass() {\n return 'igx-query-builder__header';\n }\n\n /**\n * Sets the title of the `IgxQueryBuilderHeaderComponent`.\n *\n * @example\n * ```html\n * <igx-query-builder-header title=\"Sample Query Builder\"></igx-query-builder-header>\n * ```\n */\n @Input()\n public title: string;\n\n /**\n * Show/hide the legend.\n *\n * @example\n * ```html\n * <igx-query-builder-header [showLegend]=\"false\"></igx-query-builder-header>\n * ```\n * @deprecated in version 19.1.0.\n */\n @Input()\n public showLegend = true;\n\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n *\n * @deprecated in version 19.1.0.\n */\n @Input()\n public set resourceStrings(value: IQueryBuilderResourceStrings) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n\n /**\n * Returns the resource strings.\n */\n public get resourceStrings(): IQueryBuilderResourceStrings {\n return this._resourceStrings;\n }\n}\n","<div class=\"igx-query-builder__title\">{{ title }}</div>\n<ng-content></ng-content>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FilteringLogic, IFilteringExpression } from 'igniteui-angular/core';\n\n@Pipe({\n name: 'fieldFormatter',\n standalone: true\n})\nexport class IgxFieldFormatterPipe implements PipeTransform {\n\n public transform(value: any, formatter: (v: any, data: any, fieldData?: any) => any, rowData: any, fieldData?: any) {\n return formatter(value, rowData, fieldData);\n }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionItem {\n public parent: ExpressionGroupItem;\n public expanded: boolean;\n constructor(parent?: ExpressionGroupItem) {\n this.parent = parent;\n }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionGroupItem extends ExpressionItem {\n public operator: FilteringLogic;\n public children: ExpressionItem[];\n constructor(operator: FilteringLogic, parent?: ExpressionGroupItem) {\n super(parent);\n this.operator = operator;\n this.children = [];\n }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionOperandItem extends ExpressionItem {\n public expression: IFilteringExpression;\n public inEditMode: boolean;\n public inAddMode: boolean;\n public hovered: boolean;\n public focused: boolean;\n public fieldLabel: string;\n constructor(expression: IFilteringExpression, parent: ExpressionGroupItem) {\n super(parent);\n this.expression = expression;\n }\n}\n\nconst IGX_QUERY_BUILDER = 'igx-query-builder';\nconst IGX_FILTER_TREE = 'igx-filter-tree';\n\n/**\n * @hidden @internal\n */\nexport const QueryBuilderSelectors = {\n DRAG_INDICATOR: 'igx-drag-indicator',\n CHIP_GHOST: 'igx-chip__ghost',\n\n DROP_DOWN_LIST_SCROLL: 'igx-drop-down__list-scroll',\n DROP_DOWN_ITEM_DISABLED: 'igx-drop-down__item--disabled',\n\n FILTER_TREE: IGX_FILTER_TREE,\n FILTER_TREE_EXPRESSION_CONTEXT_MENU: IGX_FILTER_TREE + '__expression-context-menu',\n FILTER_TREE_EXPRESSION_ITEM: IGX_FILTER_TREE + '__expression-item',\n FILTER_TREE_EXPRESSION_ITEM_DROP_GHOST: IGX_FILTER_TREE + '__expression-item-drop-ghost',\n FILTER_TREE_EXPRESSION_ITEM_KEYBOARD_GHOST: IGX_FILTER_TREE + '__expression-item-keyboard-ghost',\n FILTER_TREE_EXPRESSION_ITEM_GHOST: IGX_FILTER_TREE + '__expression-item-ghost',\n FILTER_TREE_EXPRESSION_SECTION: IGX_FILTER_TREE + '__expression-section',\n\n FILTER_TREE_LINE_AND: IGX_FILTER_TREE + '__line--and',\n FILTER_TREE_LINE_OR: IGX_FILTER_TREE + '__line--or',\n FILTER_TREE_SUBQUERY: IGX_FILTER_TREE + '__subquery',\n\n QUERY_BUILDER: IGX_QUERY_BUILDER,\n QUERY_BUILDER_BODY: IGX_QUERY_BUILDER + '__main',\n QUERY_BUILDER_HEADER: IGX_QUERY_BUILDER + '__header',\n QUERY_BUILDER_TREE: IGX_QUERY_BUILDER + '-tree',\n}\n","import { filter, fromEvent, sampleTime, Subscription } from 'rxjs';\nimport { IgxQueryBuilderTreeComponent } from './query-builder-tree.component';\nimport { ElementRef, Injectable } from '@angular/core';\nimport { ExpressionGroupItem, ExpressionItem, ExpressionOperandItem, QueryBuilderSelectors } from './query-builder.common';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\n\nconst DEFAULT_SET_Z_INDEX_DELAY = 10;\nconst Z_INDEX_TO_SET = 10010; //overlay z-index is 10005\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxQueryBuilderDragService {\n\n /** The ExpressionItem that's actually the drop ghost's content */\n public dropGhostExpression: ExpressionItem;\n public isKeyboardDrag: boolean;\n private _queryBuilderTreeComponent: IgxQueryBuilderTreeComponent;\n private _queryBuilderTreeComponentElRef: ElementRef;\n private _sourceExpressionItem: ExpressionItem;\n private _sourceElement: HTMLElement;\n private _targetExpressionItem: ExpressionItem;\n private _dropUnder: boolean;\n private _ghostChipMousemoveSubscription$: Subscription;\n private _keyboardSubscription$: Subscription;\n private _keyDragCurrentIndex: number = 0;\n private _keyDragInitialIndex: number = 0;\n private _isKeyDragsFirstMove: boolean = true;\n /** Stores a flat ordered list of possible drop locations as Tuple <[targetExpression, dropUnder]>, while performing the keyboard drag&drop */\n private _possibleDropLocations: Array<[ExpressionItem, boolean]>;\n private _timeoutId: any;\n\n\n /** Get the dragged ghost as a HTMLElement*/\n private get getDragGhostElement(): HTMLElement {\n return (document.querySelector(`.${QueryBuilderSelectors.CHIP_GHOST}[ghostclass=\"${QueryBuilderSelectors.CHIP_GHOST}\"]`) as HTMLElement);\n }\n\n /** Get the drop ghost chip component */\n private get getDropGhostElement(): IgxChipComponent {\n return this._queryBuilderTreeComponent.expressionsChips.find(x => x.data === this.dropGhostExpression);\n }\n\n private get getMainExpressionTree(): HTMLElement {\n return this._queryBuilderTreeComponentElRef.nativeElement.querySelector(`.${QueryBuilderSelectors.FILTER_TREE}`);\n }\n\n\n public register(tree: IgxQueryBuilderTreeComponent, el: ElementRef) {\n this._queryBuilderTreeComponent = tree;\n this._queryBuilderTreeComponentElRef = el;\n }\n\n /** When chip is picked up for dragging\n *\n * @param sourceDragElement The HTML element of the chip that's been dragged\n * @param sourceExpressionItem The expressionItem of the chip that's been dragged\n * @param isKeyboardDrag If it's a mouse drag or keyboard reorder\n *\n */\n public onMoveStart(sourceDragElement: HTMLElement, sourceExpressionItem: ExpressionItem, isKeyboardDrag: boolean): void {\n this.resetDragAndDrop(true);\n this._queryBuilderTreeComponent._expressionTreeCopy = this._queryBuilderTreeComponent._expressionTree;\n this.isKeyboardDrag = isKeyboardDrag;\n this._sourceExpressionItem = sourceExpressionItem;\n this._sourceElement = sourceDragElement;\n\n this.listenToKeyboard();\n\n if (!this.isKeyboardDrag) {\n this._sourceElement.style.display = 'none';\n this.setDragGhostZIndex();\n }\n }\n\n /** When dragged chip is let go outside a proper drop zone */\n public onMoveEnd(): void {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n if (this.dropGhostExpression) {\n //If there is a ghost chip presented to the user, execute drop\n this.onChipDropped();\n } else {\n this.resetDragAndDrop(true);\n }\n\n this._ghostChipMousemoveSubscription$?.unsubscribe();\n this._keyboardSubscription$?.unsubscribe();\n }\n\n /** When mouse drag enters a chip's area\n * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n */\n public onChipEnter(targetDragElement: HTMLElement, targetExpressionItem: ExpressionItem) {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n //If entering the one that's been picked up don't do any thing\n if (targetExpressionItem === this.dropGhostExpression) {\n return;\n }\n\n //Simulate leaving the last entered chip in case of no Leave event triggered due to the artificial drop zone of a north positioned ghost chip\n if (this._targetExpressionItem) {\n this.resetDragAndDrop(false);\n }\n\n this._targetExpressionItem = targetExpressionItem;\n\n //Determine the middle point of the chip.\n const appendUnder = this.ghostInLowerPart(targetDragElement);\n\n this.renderDropGhostChip(appendUnder);\n }\n\n /** When mouse drag moves in a div's drop area\n * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n */\n public onDivOver(targetDragElement: HTMLElement, targetExpressionItem: ExpressionItem) {\n if (this._targetExpressionItem === targetExpressionItem) {\n this.onChipOver(targetDragElement)\n } else {\n this.onChipEnter(targetDragElement, targetExpressionItem);\n }\n }\n\n /** When mouse drag moves in a chip's drop area\n * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n */\n public onChipOver(targetDragElement: HTMLElement): void {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n //Determine the middle point of the chip.\n const appendUnder = this.ghostInLowerPart(targetDragElement);\n\n this.renderDropGhostChip(appendUnder);\n }\n\n /** When mouse drag leaves a chip's drop area */\n public onChipLeave() {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n //if the drag ghost is on the drop ghost row don't trigger leave\n if (this.dragGhostIsOnDropGhostRow()) {\n return;\n }\n\n if (this._targetExpressionItem) {\n this.resetDragAndDrop(false)\n }\n }\n\n /** When dragged chip is let go in div's drop area\n * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n */\n public onDivDropped(targetExpressionItem: ExpressionItem) {\n if (targetExpressionItem !== this._sourceExpressionItem) {\n this.onChipDropped();\n }\n }\n\n /** When dragged chip is let go in chip's drop area */\n public onChipDropped() {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n //Determine which chip to be focused after drop completes\n const [dropLocationIndex, _] = this.countChipsBeforeDropLocation(this._queryBuilderTreeComponent.rootGroup);\n\n //Delete from old place\n this._queryBuilderTreeComponent.deleteItem(this._sourceExpressionItem);\n this.dropGhostExpression = null;\n\n this._queryBuilderTreeComponent.focusChipAfterDrag(dropLocationIndex);\n\n this.resetDragAndDrop(true);\n\n this._queryBuilderTreeComponent.exitEditAddMode();\n }\n\n /** When mouse drag moves in a AND/OR drop area\n * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n */\n public onGroupRootOver(targetDragElement: HTMLElement, targetExpressionItem: ExpressionGroupItem) {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n let newTargetExpressionItem;\n\n if (this.ghostInLowerPart(targetDragElement) || !targetExpressionItem.parent) {\n //if ghost is in lower part of the AND/OR (or it's the main group) => drop as first child of that group\n //accounting for the fact that the drop ghost might already be there as first child\n if (targetExpressionItem.children[0] !== this.dropGhostExpression) {\n newTargetExpressionItem = targetExpressionItem.children[0];\n } else {\n newTargetExpressionItem = targetExpressionItem.children[1];\n }\n } else {\n //if ghost is in upper part => drop before the group starts\n newTargetExpressionItem = targetExpressionItem;\n }\n\n if (this._targetExpressionItem !== newTargetExpressionItem) {\n this.resetDragAndDrop(false);\n this._targetExpressionItem = newTargetExpressionItem;\n this.renderDropGhostChip(false);\n }\n }\n\n /** When mouse drag moves in 'Add condition' button's drop area\n * @param addConditionElement The Add condition button HTML Element\n * @param rootGroup The root group of the query tree\n */\n public onAddConditionEnter(addConditionElement: HTMLElement, rootGroup: ExpressionGroupItem) {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n const lastElement = addConditionElement.parentElement.previousElementSibling.lastElementChild;\n\n //simulate entering in the lower part of the last chip/group\n this.onChipEnter(lastElement as HTMLElement, rootGroup.children[rootGroup.children.length - 1]);\n }\n\n /** When chip's drag indicator is focused\n *\n * @param sourceDragElement The HTML element of the chip that's been dragged\n * @param sourceExpressionItem The expressionItem of the chip that's been dragged\n *\n */\n public onChipDragIndicatorFocus(sourceDragElement: HTMLElement, sourceExpressionItem: ExpressionItem) {\n //if drag is not underway, already\n if (!this.getDropGhostElement) {\n this.onMoveStart(sourceDragElement, sourceExpressionItem, true);\n }\n }\n\n /** When chip's drag indicator looses focus*/\n public onChipDragIndicatorFocusOut() {\n if (this._sourceElement?.style?.display !== 'none') {\n this.resetDragAndDrop(true);\n this._keyboardSubscription$?.unsubscribe();\n }\n }\n\n /** Upon blurring the tree, if Keyboard drag is underway and the next active item is not the drop ghost's drag indicator icon, cancel the drag&drop procedure*/\n public onDragFocusOut() {\n if (this.isKeyboardDrag && this.getDropGhostElement) {\n //have to wait a tick because upon blur, the next activeElement is always body, right before the next element gains focus\n setTimeout(() => {\n if (document.activeElement.className.indexOf(QueryBuilderSelectors.DRAG_INDICATOR) === -1) {\n this.resetDragAndDrop(true);\n this._keyboardSubscription$?.unsubscribe();\n }\n }, 0);\n }\n }\n\n /** Checks if the dragged ghost is horizontally on the same line with the drop ghost*/\n private dragGhostIsOnDropGhostRow() {\n const dragGhostBounds = this.getDragGhostElement.getBoundingClientRect();\n\n const dropGhostBounds = this.getDropGhostElement?.nativeElement?.parentElement.getBoundingClientRect();\n\n if (!dragGhostBounds || !dropGhostBounds) {\n return false;\n }\n\n const tolerance = dragGhostBounds.bottom - dragGhostBounds.top;\n\n return !(dragGhostBounds.bottom < dropGhostBounds.top - tolerance || dragGhostBounds.top > dropGhostBounds.bottom + tolerance);\n }\n\n /** Checks if the dragged ghost is north or south of a target element's center*/\n private ghostInLowerPart(ofElement: HTMLElement) {\n const ghostBounds = this.getDragGhostElement.getBoundingClientRect();\n const targetBounds = ofElement.getBoundingClientRect();\n\n return ((ghostBounds.top + ghostBounds.bottom) / 2) >= ((targetBounds.top + targetBounds.bottom) / 2);\n }\n\n /** Make a copy of the _sourceExpressionItem's chip and paste it in the tree north or south of the _targetExpressionItem's chip */\n private renderDropGhostChip(appendUnder: boolean): void {\n if (appendUnder !== this._dropUnder || this.isKeyboardDrag) {\n this.clearDropGhost();\n\n //Copy dragged chip\n const dragCopy = { ...this._sourceExpressionItem };\n dragCopy.parent = this._targetExpressionItem.parent;\n this.dropGhostExpression = dragCopy;\n\n //Paste chip\n this._dropUnder = appendUnder;\n const pasteIndex = this._targetExpressionItem.parent.children.indexOf(this._targetExpressionItem);\n this._targetExpressionItem.parent.children.splice(pasteIndex + (this._dropUnder ? 1 : 0), 0, dragCopy);\n }\n\n //Put focus on the drag icon of the ghost while performing keyboard drag\n if (this.isKeyboardDrag) {\n setTimeout(() => { // this will make the execution after the drop ghost is rendered\n const dropGhostDragIndicator = this.getDropGhostElement?.nativeElement?.querySelector(`.${QueryBuilderSelectors.DRAG_INDICATOR}`) as HTMLElement;\n if (dropGhostDragIndicator) {\n dropGhostDragIndicator.focus();\n }\n }, 0);\n }\n\n //Attach a mousemove event listener (if not already in place) to the dragged ghost (if present)\n if (!this.isKeyboardDrag && this.getDragGhostElement && (!this._ghostChipMousemoveSubscription$ || this._ghostChipMousemoveSubscription$?.closed === true)) {\n const mouseMoves = fromEvent<MouseEvent>(this.getDragGhostElement, 'mousemove');\n\n //When mouse moves and there is a drop ghost => trigger onChipLeave to check if the drop ghost has to be removed\n //effectively solving the case when mouse leaves the QB and a drop ghost is still in place\n this._ghostChipMousemoveSubscription$ = mouseMoves.pipe(sampleTime(100)).subscribe(() => {\n if (this.getDropGhostElement) {\n this.onChipLeave();\n }\n });\n }\n\n this.setDragCursor('grab');\n }\n\n /** Set the cursor when dragging a ghost*/\n private setDragCursor(cursor: string) {\n if (this.getDragGhostElement) {\n this.getDragGhostElement.style.cursor = cursor;\n }\n }\n\n /** Removes the drop ghost expression from the tree and it's chip effectively */\n private clearDropGhost() {\n if (this.dropGhostExpression) {\n const children = this.dropGhostExpression.parent.children;\n const delIndex = children.indexOf(this.dropGhostExpression);\n children.splice(delIndex, 1);\n this.dropGhostExpression = null;\n }\n }\n\n /** Reset Drag&Drop vars. Optionally the drag source vars too*/\n private resetDragAndDrop(clearDragged: boolean) {\n this._targetExpressionItem = null;\n this._dropUnder = null;\n this.clearDropGhost();\n this._keyDragInitialIndex = 0;\n this._keyDragCurrentIndex = 0;\n this._possibleDropLocations = null;\n this._isKeyDragsFirstMove = true;\n this.setDragCursor('no-drop');\n\n if (this._queryBuilderTreeComponent._expressionTreeCopy) {\n this._queryBuilderTreeComponent._expressionTree = this._queryBuilderTreeComponent._expressionTreeCopy;\n }\n\n if ((clearDragged || this.isKeyboardDrag) && this._sourceElement) {\n this._sourceElement.style.display = '';\n }\n\n if (clearDragged) {\n this._queryBuilderTreeComponent._expressionTreeCopy = null;\n this._sourceExpressionItem = null;\n this._sourceElement = null;\n }\n }\n\n /** Start listening for drag and drop specific keys */\n private listenToKeyboard() {\n this._keyboardSubscription$?.unsubscribe();\n this._keyboardSubscription$ = fromEvent<KeyboardEvent>(this.getMainExpressionTree, 'keydown')\n .pipe(filter(e => ['ArrowUp', 'ArrowDown', 'Enter', 'Space', 'Escape', 'Tab'].includes(e.key)))\n // .pipe(tap(e => {\n // //Inhibit Tabs if keyboard drag is underway (don't allow to loose focus of the drop ghost's drag indicator)\n // if (e.key === 'Tab' && this.getDropGhostElement) {\n // e.preventDefault();\n // }\n // }))\n .pipe(filter(event => !event.repeat))\n .subscribe(e => {\n if (e.key === 'Escape') {\n //TODO cancel mouse drag once it's implemented in igx-chip draggable\n this.resetDragAndDrop(false);\n //Regain focus on the drag icon after keyboard drag cancel\n if (this.isKeyboardDrag) {\n (this._sourceElement.firstElementChild.firstElementChild.firstElementChild.firstElementChild as HTMLElement).focus();\n }\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n this.arrowDrag(e.key);\n } else if (e.key === 'Enter' || e.key === 'Space') {\n //this.platform.isActivationKey(eventArgs) Maybe use this rather that Enter/Space?\n this.onChipDropped();\n this._keyboardSubscription$.unsubscribe();\n }\n });\n }\n\n /** Perform up/down movement of drop ghost along the expression tree*/\n private arrowDrag(key: string) {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n const rootGroup = this._queryBuilderTreeComponent.rootGroup;\n\n if (this._isKeyDragsFirstMove) {\n this._possibleDropLocations = this.getPossibleDropLocations(rootGroup, true);\n this._keyDragInitialIndex = this._possibleDropLocations.findIndex(e => e[0] === this._sourceExpressionItem && e[1] === true);\n this._keyDragCurrentIndex = this._keyDragInitialIndex;\n if (this._keyDragInitialIndex === -1) {\n console.error(\"Dragged expression not found\");\n }\n this._sourceElement.style.display = 'none';\n }\n\n let newKeyIndexOffset = this._keyDragCurrentIndex;\n if (key === 'ArrowUp') {\n //decrease index capped at top of tree\n newKeyIndexOffset && newKeyIndexOffset--;\n } else if (key === 'ArrowDown') {\n //increase index capped at bottom of tree\n newKeyIndexOffset < this._possibleDropLocations.length - 1 && newKeyIndexOffset++;\n } else {\n console.error('wrong key');\n return;\n }\n\n //if drop location has no change\n if (newKeyIndexOffset !== this._keyDragCurrentIndex || this._isKeyDragsFirstMove) {\n this._keyDragCurrentIndex = newKeyIndexOffset;\n\n const newDropTarget = this._possibleDropLocations[this._keyDragCurrentIndex];\n this._targetExpressionItem = newDropTarget[0]\n\n this.renderDropGhostChip(newDropTarget[1]);\n\n //Situations when drop ghost hasn't really moved, run one more time\n if (this._keyDragCurrentIndex === this._keyDragInitialIndex ||\n (this._isKeyDragsFirstMove && this._keyDragCurrentIndex === this._keyDragInitialIndex - 1)) {\n this._isKeyDragsFirstMove = false;\n this.arrowDrag(key);\n }\n\n this._isKeyDragsFirstMove = false;\n }\n\n return;\n }\n\n /** Produces a flat ordered list of possible drop locations as Tuple <[targetExpression, dropUnder]>, while performing the keyboard drag&drop */\n private getPossibleDropLocations(group: ExpressionGroupItem, isRoot: boolean): Array<[ExpressionItem, boolean]> {\n const result = new Array() as Array<[ExpressionItem, boolean]>;\n\n //Add dropZone under AND/OR (as first child of group)\n result.push([(group as ExpressionGroupItem).children[0], false]);\n\n for (let i = 0; i < group.children.length; i++) {\n if (group.children[i] instanceof ExpressionGroupItem) {\n result.push(...this.getPossibleDropLocations(group.children[i] as ExpressionGroupItem, false));\n } else {\n result.push([group.children[i], true]);\n }\n }\n\n //Add dropZone under the whole group\n if (!isRoot) {\n result.push([group, true]);\n }\n\n return result;\n }\n\n /** Counts how many chips will be in the tree (from top to bottom) before the dropped one */\n private countChipsBeforeDropLocation(group: ExpressionGroupItem): [number, boolean] {\n let count = 0, totalCount = 0, targetReached = false;\n\n for (let i = 0; i < group.children.length; i++) {\n const child = group.children[i];\n\n if (targetReached) {\n break;\n }\n\n if (child instanceof ExpressionGroupItem) {\n if (child === this._targetExpressionItem) {\n if (this._dropUnder) {\n [count] = this.countChipsBeforeDropLocation(child as ExpressionGroupItem);\n totalCount += count;\n }\n targetReached = true;\n } else {\n [count, targetReached] = this.countChipsBeforeDropLocation(child as ExpressionGroupItem);\n totalCount += count;\n }\n } else {\n if (child !== this._sourceExpressionItem && //not the hidden source chip\n child !== this.dropGhostExpression && //not the drop ghost\n !((child as ExpressionOperandItem).inEditMode && this._queryBuilderTreeComponent.operandCanBeCommitted() !== true) //not a chip in edit mode that will be discarded\n ) {\n totalCount++;\n }\n\n if (child === this._targetExpressionItem) {\n targetReached = true;\n if (!this._dropUnder &&\n !((child as ExpressionOperandItem).inEditMode && this._queryBuilderTreeComponent.operandCanBeCommitted() !== true)) {\n totalCount--;\n }\n }\n }\n }\n\n totalCount === -1 && totalCount++;\n\n return [totalCount, targetReached];\n }\n\n /** Sets the z-index of the drag ghost with a little delay, since we don't have access to ghostCreated() but we know it's executed right after moveStart() */\n private setDragGhostZIndex() {\n if (this._timeoutId) {\n clearTimeout(this._timeoutId);\n }\n\n this._timeoutId = setTimeout(() => {\n if (this.getDragGhostElement?.style) {\n this.getDragGhostElement.style.zIndex = `${Z_INDEX_TO_SET}`;\n }\n }, DEFAULT_SET_Z_INDEX_DELAY);\n }\n}\n","import {\n AfterViewInit,\n EventEmitter,\n LOCALE_ID,\n Output,\n TemplateRef\n} from '@angular/core';\nimport { getLocaleFirstDayOfWeek, NgTemplateOutlet, NgClass, DatePipe } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport {\n Component, Input, ViewChild, ChangeDetectorRef, ViewChildren, QueryList, ElementRef, OnDestroy, HostBinding\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\nimport {\n IQueryBuilderResourceStrings,\n QueryBuilderResourceStringsEN,\n PlatformUtil,\n trackByIdentity,\n GridColumnDataType,\n DataUtil,\n IgxBooleanFilteringOperand,\n IgxDateFilteringOperand,\n IgxDateTimeFilteringOperand,\n IgxNumberFilteringOperand,\n IgxStringFilteringOperand,\n IgxTimeFilteringOperand,\n FilteringLogic,\n IFilteringExpression,\n FilteringExpressionsTree,\n IExpressionTree,\n IFilteringExpressionsTree,\n FieldType,\n EntityType,\n HorizontalAlignment,\n OverlaySettings,\n VerticalAlignment,\n AbsoluteScrollStrategy,\n AutoPositionStrategy,\n CloseScrollStrategy,\n ConnectedPositioningStrategy,\n IgxPickerToggleComponent,\n IgxPickerClearComponent,\n getCurrentResourceStrings,\n isTree\n} from 'igniteui-angular/core';\nimport { IgxDatePickerComponent } from 'igniteui-angular/date-picker';\n\nimport {\n IgxButtonDirective,\n IgxDateTimeEditorDirective,\n IgxOverlayOutletDirective,\n IgxIconButtonDirective,\n IgxTooltipDirective,\n IgxTooltipTargetDirective,\n IgxDragIgnoreDirective,\n IgxDropDirective\n} from 'igniteui-angular/directives';\nimport { IgxSelectComponent } from 'igniteui-angular/select';\nimport { IgxTimePickerComponent } from 'igniteui-angular/time-picker';\nimport { IgxInputGroupComponent, IgxInputDirective, IgxPrefixDirective } from 'igniteui-angular/input-group';\nimport { IgxSelectItemComponent } from 'igniteui-angular/select';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IComboSelectionChangingEventArgs, IgxComboComponent, IgxComboHeaderDirective } from 'igniteui-angular/combo';\nimport { IgxCheckboxComponent, IChangeCheckboxEventArgs } from 'igniteui-angular/checkbox';\nimport { IgxDialogComponent } from 'igniteui-angular/dialog';\nimport {\n ISelectionEventArgs,\n IgxDropDownComponent,\n IgxDropDownItemComponent,\n IgxDropDownItemNavigationDirective\n} from 'igniteui-angular/drop-down';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\nimport { IgxQueryBuilderComponent } from './query-builder.component';\nimport { IgxQueryBuilderDragService } from './query-builder-drag.service';\nimport { ExpressionGroupItem, ExpressionItem, ExpressionOperandItem, IgxFieldFormatterPipe } from './query-builder.common';\n\nconst DEFAULT_PIPE_DATE_FORMAT = 'mediumDate';\nconst DEFAULT_PIPE_TIME_FORMAT = 'mediumTime';\nconst DEFAULT_PIPE_DATE_TIME_FORMAT = 'medium';\nconst DEFAULT_PIPE_DIGITS_INFO = '1.0-3';\nconst DEFAULT_CHIP_FOCUS_DELAY = 50;\n\n/** @hidden */\n@Component({\n selector: 'igx-query-builder-tree',\n templateUrl: './query-builder-tree.component.html',\n host: { 'class': 'igx-query-builder-tree' },\n imports: [\n DatePipe,\n FormsModule,\n IgxButtonDirective,\n IgxCheckboxComponent,\n IgxChipComponent,\n IgxComboComponent,\n IgxComboHeaderDirective,\n IgxDatePickerComponent,\n IgxDateTimeEditorDirective,\n IgxDialogComponent,\n IgxDragIgnoreDirective,\n IgxDropDirective,\n IgxDropDownComponent,\n IgxDropDownItemComponent,\n IgxDropDownItemNavigationDirective,\n IgxFieldFormatterPipe,\n IgxIconButtonDirective,\n IgxIconComponent,\n IgxInputDirective,\n IgxInputGroupComponent,\n IgxOverlayOutletDirective,\n IgxPickerClearComponent,\n IgxPickerToggleComponent,\n IgxPrefixDirective,\n IgxSelectComponent,\n IgxSelectItemComponent,\n IgxTimePickerComponent,\n IgxTooltipDirective,\n IgxTooltipTargetDirective,\n NgClass,\n NgTemplateOutlet\n ],\n providers: [\n IgxQueryBuilderDragService\n ],\n})\nexport class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {\n /**\n * @hidden @internal\n */\n public _expressionTree: IExpressionTree;\n\n /**\n * @hidden @internal\n */\n public _expressionTreeCopy: IExpressionTree;\n\n /**\n * @hidden @internal\n */\n @HostBinding('class') public get getClass() {\n return `igx-query-builder-tree--level-${this.level}`;\n }\n\n /**\n * Sets/gets the entities.\n */\n @Input()\n public entities: EntityType[];\n\n /**\n * Sets/gets the parent query builder component.\n */\n @Input()\n public queryBuilder: IgxQueryBuilderComponent;\n\n /**\n * Sets/gets the search value template.\n */\n @Input()\n public searchValueTemplate: TemplateRef<IgxQueryBuilderSearchValueTemplateDirective> = null;\n\n /**\n * Returns the parent expression operand.\n */\n @Input()\n public get parentExpression(): ExpressionOperandItem {\n return this._parentExpression;\n }\n\n /**\n * Sets the parent expression operand.\n */\n public set parentExpression(value: ExpressionOperandItem) {\n this._parentExpression = value;\n }\n\n /**\n * Returns the fields.\n */\n public get fields(): FieldType[] {\n if (!this._fields && this.isAdvancedFiltering()) {\n this._fields = this.entities[0].fields;\n }\n\n return this._fields;\n }\n\n /**\n * Sets the fields.\n */\n @Input()\n public set fields(fields: FieldType[]) {\n this._fields = fields;\n\n this._fields = this._fields?.map(f => ({...f, filters: this.getFilters(f), pipeArgs: this.getPipeArgs(f) }));\n\n if (!this._fields && this.isAdvancedFiltering()) {\n this._fields = this.entities[0].fields;\n }\n }\n\n /**\n * Returns the expression tree.\n */\n public get expressionTree(): IExpressionTree {\n return this._expressionTree;\n }\n\n /**\n * Sets the expression tree.\n */\n @Input()\n public set expressionTree(expressionTree: IExpressionTree) {\n this._expressionTree = expressionTree;\n if (!expressionTree) {\n this._selectedEntity = this.isAdvancedFiltering() && this.entities.length === 1 ? this.entities[0] : null;\n this._selectedReturnFields = this._selectedEntity ? this._selectedEntity.fields?.map(f => f.field) : [];\n }\n\n if (!this._preventInit) {\n this.init();\n }\n }\n\n /**\n * Gets the `locale` of the query builder.\n * If not set, defaults to application's locale.\n */\n @Input()\n public get locale(): string {\n return this._locale;\n }\n\n /**\n * Sets the `locale` of the query builder.\n * Expects a valid BCP 47 language tag.\n */\n public set locale(value: string) {\n this._locale = value;\n // if value is invalid, set it back to _localeId\n try {\n getLocaleFirstDayOfWeek(this._locale);\n } catch {\n this._locale = this._localeId;\n }\n }\n\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n */\n @Input()\n public set resourceStrings(value: IQueryBuilderResourceStrings) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n\n /**\n * Returns the resource strings.\n */\n public get resourceStrings(): IQueryBuilderResourceStrings {\n return this._resourceStrings;\n }\n\n /**\n * Gets/sets the expected return field.\n */\n @Input() public expectedReturnField: string = null;\n\n /**\n * Event fired as the expression tree is changed.\n */\n @Output()\n public expressionTreeChange = new EventEmitter<IExpressionTree>();\n\n /**\n * Event fired if a nested query builder tree is being edited.\n */\n @Output()\n public inEditModeChange = new EventEmitter<ExpressionOperandItem>();\n\n @ViewChild('entitySelect', { read: IgxSelectComponent })\n protected entitySelect: IgxSelectComponent;\n\n @ViewChild('editingInputs', { read: ElementRef })\n private editingInputs: ElementRef;\n\n @ViewChild('returnFieldsCombo', { read: IgxComboComponent })\n private returnFieldsCombo: IgxComboComponent;\n\n @ViewChild('returnFieldSelect', { read: IgxSelectComponent })\n protected returnFieldSelect: IgxSelectComponent;\n\n @ViewChild('fieldSelect', { read: IgxSelectComponent })\n private fieldSelect: IgxSelectComponent;\n\n @ViewChild('conditionSelect', { read: IgxSelectComponent })\n private conditionSelect: IgxSelectComponent;\n\n @ViewChild('searchValueInput', { read: ElementRef })\n private searchValueInput: ElementRef;\n\n @ViewChild('picker')\n private picker: IgxDatePickerComponent | IgxTimePickerComponent;\n\n @ViewChild('addRootAndGroupButton', { read: ElementRef })\n private addRootAndGroupButton: ElementRef;\n\n @ViewChild('addConditionButton', { read: ElementRef })\n private addConditionButton: ElementRef;\n\n @ViewChild('entityChangeDialog', { read: IgxDialogComponent })\n private entityChangeDialog: IgxDialogComponent;\n\n @ViewChild('addOptionsDropDown', { read: IgxDropDownComponent })\n private addExpressionItemDropDown: IgxDropDownComponent;\n\n @ViewChild('groupContextMenuDropDown', { read: IgxDropDownComponent })\n private groupContextMenuDropDown: IgxDropDownComponent;\n\n /**\n * @hidden @internal\n */\n @ViewChildren(IgxChipComponent, { read: IgxChipComponent })\n public expressionsChips: QueryList<IgxChipComponent>;\n\n @ViewChild('editingInputsContainer', { read: ElementRef })\n protected set editingInputsContainer(value: ElementRef) {\n if ((value && !this._editingInputsContainer) ||\n (value && this._editingInputsContainer && this._editingInputsContainer.nativeElement !== value.nativeElement)) {\n requestAnimationFrame(() => {\n this.scrollElementIntoView(value.nativeElement);\n });\n }\n\n this._editingInputsContainer = value;\n }\n\n /** @hidden */\n protected get editingInputsContainer(): ElementRef {\n return this._editingInputsContainer;\n }\n\n @ViewChild('currentGroupButtonsContainer', { read: ElementRef })\n protected set currentGroupButtonsContainer(value: ElementRef) {\n if ((value && !this._currentGroupButtonsContainer) ||\n (value && this._currentGroupButtonsContainer && this._currentGroupButtonsContainer.nativeElement !== value.nativeElement)) {\n requestAnimationFrame(() => {\n this.scrollElementIntoView(value.nativeElement);\n });\n }\n\n this._currentGroupButtonsContainer = value;\n }\n\n /** @hidden */\n protected get currentGroupButtonsContainer(): ElementRef {\n return this._currentGroupButtonsContainer;\n }\n\n @ViewChild('expressionsContainer')\n private expressionsContainer: ElementRef;\n\n @ViewChild('overlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n private overlayOutlet: IgxOverlayOutletDirective;\n\n @ViewChildren(IgxQueryBuilderTreeComponent)\n private innerQueries: QueryList<IgxQueryBuilderTreeComponent>;\n\n /**\n * @hidden @internal\n */\n public innerQueryNewExpressionTree: IExpressionTree;\n\n /**\n * @hidden @internal\n */\n public rootGroup: ExpressionGroupItem;\n\n /**\n * @hidden @internal\n */\n public selectedExpressions: ExpressionOperandItem[] = [];\n\n /**\n * @hidden @internal\n */\n public currentGroup: ExpressionGroupItem;\n\n /**\n * @hidden @internal\n */\n public contextualGroup: ExpressionGroupItem;\n\n /**\n * @hidden @internal\n */\n public filteringLogics;\n\n /**\n * @hidden @internal\n */\n public selectedCondition: string;\n\n /**\n * @hidden @internal\n */\n public searchValue: { value: any } = { value: null };\n\n /**\n * @hidden @internal\n */\n public pickerOutlet: IgxOverlayOutletDirective | ElementRef;\n\n /**\n * @hidden @internal\n */\n public prevFocusedExpression: ExpressionOperandItem;\n\n /**\n * @hidden @internal\n */\n public initialOperator = 0;\n\n /**\n * @hidden @internal\n */\n public returnFieldSelectOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n /**\n * @hidden @internal\n */\n public entitySelectOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n /**\n * @hidden @internal\n */\n public fieldSelectOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n /**\n * @hidden @internal\n */\n public conditionSelectOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n /**\n * @hidden @internal\n */\n public addExpressionDropDownOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n /**\n * @hidden @internal\n */\n public groupContextMenuDropDownOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n private destroy$ = new Subject<any>();\n private _timeoutId: any;\n private _lastFocusedChipIndex: number;\n private _focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n private _parentExpression: ExpressionOperandItem;\n private _selectedEntity: EntityType;\n private _selectedReturnFields: string | string[];\n private _selectedField: FieldType;\n private _editingInputsContainer: ElementRef;\n private _currentGroupButtonsContainer: ElementRef;\n private _addModeExpression: ExpressionOperandItem;\n private _editedExpression: ExpressionOperandItem;\n private _preventInit = false;\n private _prevFocusedContainer: ElementRef;\n private _expandedExpressions: IFilteringExpression[] = [];\n private _fields: FieldType[];\n private _locale;\n private _entityNewValue: EntityType;\n private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n\n /**\n * Returns if the select entity dropdown at the root level is disabled after the initial selection.\n */\n public get disableEntityChange(): boolean {\n\n return !this.parentExpression && this.selectedEntity ? this.queryBuilder.disableEntityChange : false;\n }\n\n /**\n * Returns if the fields combo at the root level is disabled.\n */\n public get disableReturnFieldsChange(): boolean {\n\n return !this.selectedEntity || this.queryBuilder.disableReturnFieldsChange;\n }\n\n /**\n * Returns the current level.\n */\n public get level(): number {\n let parent = this.elRef.nativeElement.parentElement;\n let _level = 0;\n while (parent) {\n if (parent.localName === 'igx-query-builder-tree') {\n _level++;\n }\n parent = parent.parentElement;\n }\n return _level;\n }\n\n private _positionSettings = {\n horizontalStartPoint: HorizontalAlignment.Right,\n verticalStartPoint: VerticalAlignment.Top\n };\n\n private _overlaySettings: OverlaySettings = {\n closeOnOutsideClick: false,\n modal: false,\n positionStrategy: new ConnectedPositioningStrategy(this._positionSettings),\n scrollStrategy: new CloseScrollStrategy()\n };\n\n /** @hidden */\n protected isAdvancedFiltering(): boolean {\n return (this.entities?.length === 1 && !this.entities[0]?.name) ||\n this.entities?.find(e => e.childEntities?.length > 0) !== undefined ||\n (this.entities?.length > 0 && this.queryBuilder?.entities?.length > 0 && this.entities !== this.queryBuilder?.entities);\n }\n\n /** @hidden */\n protected isHierarchicalNestedQuery(): boolean {\n return this.queryBuilder.entities !== this.entities\n }\n\n /** @hidden */\n protected isSearchValueInputDisabled(): boolean {\n return !this.selectedField ||\n !this.selectedCondition ||\n (this.selectedField &&\n (this.selectedField.filters.condition(this.selectedCondition).isUnary ||\n this.selectedField.filters.condition(this.selectedCondition).isNestedQuery));\n }\n\n constructor(public cdr: ChangeDetectorRef,\n public dragService: IgxQueryBuilderDragService,\n protected platform: PlatformUtil,\n private elRef: ElementRef,\n @Inject(LOCALE_ID) protected _localeId: string) {\n this.locale = this.locale || this._localeId;\n this.dragService.register(this, elRef);\n }\n\n /**\n * @hidden @internal\n */\n public ngAfterViewInit(): void {\n this._overlaySettings.outlet = this.overlayOutlet;\n this.entitySelectOverlaySettings.outlet = this.overlayOutlet;\n this.fieldSelectOverlaySettings.outlet = this.overlayOutlet;\n this.conditionSelectOverlaySettings.outlet = this.overlayOutlet;\n this.returnFieldSelectOverlaySettings.outlet = this.overlayOutlet;\n this.addExpressionDropDownOverlaySettings.outlet = this.overlayOutlet;\n this.groupContextMenuDropDownOverlaySettings.outlet = this.overlayOutlet;\n\n if (this.isAdvancedFiltering() && this.entities?.length === 1) {\n this.selectedEntity = this.entities[0].name;\n if (this._selectedEntity.fields.find(f => f.field === this.expectedReturnField)) {\n this._selectedReturnFields = [this.expectedReturnField];\n }\n }\n\n // Trigger additional change detection cycle\n this.cdr.detectChanges();\n }\n\n /**\n * @hidden @internal\n */\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n /**\n * @hidden @internal\n */\n public set selectedEntity(value: string) {\n this._selectedEntity = this.entities?.find(el => el.name === value);\n }\n\n /**\n * @hidden @internal\n */\n public get selectedEntity(): EntityType {\n return this._selectedEntity;\n }\n\n /**\n * @hidden @internal\n */\n public onEntitySelectChanging(event: ISelectionEventArgs) {\n event.cancel = true;\n this._entityNewValue = event.newSelection.value;\n if (event.oldSelection.value && this.queryBuilder.showEntityChangeDialog) {\n this.entityChangeDialog.open();\n } else {\n this.onEntityChangeConfirm();\n }\n }\n\n /**\n * @hidden\n */\n public onShowEntityChangeDialogChange(eventArgs: IChangeCheckboxEventArgs) {\n this.queryBuilder.showEntityChangeDialog = !eventArgs.checked;\n }\n\n /**\n * @hidden\n */\n public onEntityChangeCancel() {\n this.entityChangeDialog.close();\n this.entitySelect.close();\n this._entityNewValue = null;\n }\n\n /**\n * @hidden\n */\n public onEntityChangeConfirm() {\n if (this._parentExpression) {\n this._expressionTree = this.createExpressionTreeFromGroupItem(this.createExpressionGroupItem(this._expressionTree));\n }\n\n this._selectedEntity = this._entityNewValue;\n if (!this._selectedEntity.fields) {\n this._selectedEntity.fields = [];\n }\n this.fields = this._entityNewValue ? this._entityNewValue.fields : [];\n\n if (this._selectedEntity.fields.find(f => f.field === this.expectedReturnField)) {\n this._selectedReturnFields = [this.expectedReturnField];\n } else {\n this._selectedReturnFields = this.parentExpression ? [] : this._entityNewValue.fields?.map(f => f.field);\n }\n\n if (this._expressionTree) {\n this._expressionTree.entity = this._entityNewValue.name;\n\n const returnFields = Array.isArray(this._selectedReturnFields) ? this._selectedReturnFields : [this._selectedReturnFields];\n this._expressionTree.returnFields = this.fields.length === returnFields.length ? ['*'] : returnFields;\n\n this._expressionTree.filteringOperands = [];\n\n this._editedExpression = null;\n if (!this.parentExpression) {\n this.expressionTreeChange.emit(this._expressionTree);\n }\n\n this.rootGroup = null;\n this.currentGroup = this.rootGroup;\n }\n\n this._selectedField = null;\n this.selectedCondition = null;\n this.searchValue.value = null;\n\n this.entityChangeDialog.close();\n this.entitySelect.close();\n\n this._entityNewValue = null;\n this.innerQueryNewExpressionTree = null;\n\n this.initExpressionTree(this._selectedEntity.name, this.selectedReturnFields);\n }\n\n /**\n * @hidden @internal\n */\n public set selectedReturnFields(value: string[]) {\n if (this._selectedReturnFields !== value) {\n this._selectedReturnFields = value;\n\n if (this._expressionTree && !this.parentExpression) {\n this._expressionTree.returnFields = value.length === this.fields.length ? ['*'] : value;\n this.expressionTreeChange.emit(this._expressionTree);\n }\n }\n }\n\n /**\n * @hidden @internal\n */\n public get selectedReturnFields(): string[] {\n if (typeof this._selectedReturnFields == 'string') {\n return [this._selectedReturnFields];\n }\n return this._selectedReturnFields;\n }\n\n /**\n * @hidden @internal\n */\n public set selectedField(value: FieldType) {\n const oldValue = this._selectedField;\n\n if (this._selectedField !== value) {\n this._selectedField = value;\n if (this._selectedField && !this._selectedField.dataType) {\n this._selectedField.filters = this.getFilters(this._selectedField);\n }\n\n this.selectDefaultCondition();\n if (oldValue && this._selectedField && this._selectedField.dataType !== oldValue.dataType) {\n this.searchValue.value = null;\n this.cdr.detectChanges();\n }\n }\n }\n\n /**\n * @hidden @internal\n */\n public get selectedField(): FieldType {\n return this._selectedField;\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public setPickerOutlet(outlet?: IgxOverlayOutletDirective | ElementRef) {\n this.pickerOutlet = outlet;\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public get isContextMenuVisible(): boolean {\n return !this.groupContextMenuDropDown.collapsed;\n }\n\n /**\n * @hidden @internal\n */\n public get hasEditedExpression(): boolean {\n return this._editedExpression !== undefined && this._editedExpression !== null;\n }\n\n /**\n * @hidden @internal\n */\n public addCondition(parent: ExpressionGroupItem, afterExpression?: ExpressionOperandItem, isUIInteraction?: boolean) {\n this.cancelOperandAdd();\n\n const operandItem = new ExpressionOperandItem({\n fieldName: null,\n condition: null,\n conditionName: null,\n ignoreCase: true,\n searchVal: null\n }, parent);\n\n const groupItem = new ExpressionGroupItem(this.getOperator(null) ?? FilteringLogic.And, parent);\n this.contextualGroup = groupItem;\n this.initialOperator = null;\n\n this._lastFocusedChipIndex = this._lastFocusedChipIndex === undefined ? -1 : this._lastFocusedChipIndex;\n\n if (parent) {\n if (afterExpression) {\n const index = parent.children.indexOf(afterExpression);\n parent.children.splice(index + 1, 0, operandItem);\n } else {\n parent.children.push(operandItem);\n }\n this._lastFocusedChipIndex++;\n } else {\n this.rootGroup = groupItem;\n operandItem.parent = groupItem;\n this.rootGroup.children.push(operandItem);\n this._lastFocusedChipIndex = 0;\n }\n\n this._focusDelay = 250;\n\n if (isUIInteraction && !afterExpression) {\n this._lastFocusedChipIndex = this.expressionsChips.length;\n this._focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n }\n\n this.enterExpressionEdit(operandItem);\n }\n\n /**\n * @hidden @internal\n */\n public addReverseGroup(parent?: ExpressionGroupItem, afterExpression?: ExpressionItem) {\n parent = parent ?? this.rootGroup;\n\n if (parent.operator === FilteringLogic.And) {\n this.addGroup(FilteringLogic.Or, parent, afterExpression);\n } else {\n this.addGroup(FilteringLogic.And, parent, afterExpression);\n }\n }\n\n /**\n * @hidden @internal\n */\n public endGroup(groupItem: ExpressionGroupItem) {\n this.currentGroup = groupItem.parent;\n }\n\n /**\n * @hidden @internal\n */\n public commitExpression() {\n this.commitOperandEdit();\n this.focusEditedExpressionChip();\n }\n\n /**\n * @hidden @internal\n */\n public discardExpression(expressionItem?: ExpressionOperandItem) {\n this.cancelOperandEdit();\n if (expressionItem && expressionItem.expression.fieldName) {\n this.focusEditedExpressionChip();\n }\n }\n\n /**\n * @hidden @internal\n */\n public commitOperandEdit() {\n const actualSearchValue = this.searchValue.value;\n if (this._editedExpression) {\n this._editedExpression.expression.fieldName = this.selectedField.field;\n this._editedExpression.expression.condition = this.selectedField.filters.condition(this.selectedCondition);\n this._editedExpression.expression.conditionName = this.selectedCondition;\n this._editedExpression.expression.searchVal = DataUtil.parseValue(this.selectedField.dataType, actualSearchValue) || actualSearchValue;\n this._editedExpression.fieldLabel = this.selectedField.label\n ? this.selectedField.label\n : this.selectedField.header\n ? this.selectedField.header\n : this.selectedField.field;\n\n const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0]\n if (innerQuery && this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery) {\n innerQuery.exitEditAddMode();\n this._editedExpression.expression.searchTree = this.getExpressionTreeCopy(innerQuery.expressionTree);\n const returnFields = innerQuery.selectedReturnFields.length > 0 ?\n innerQuery.selectedReturnFields :\n [innerQuery.fields[0].field];\n this._editedExpression.expression.searchTree.returnFields = returnFields;\n } else {\n this._editedExpression.expression.searchTree = null;\n }\n this.innerQueryNewExpressionTree = null;\n\n if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary || this.selectedField.filters.condition(this.selectedCondition)?.isNestedQuery) {\n this._editedExpression.expression.searchVal = null;\n }\n\n this._editedExpression.inEditMode = false;\n this._editedExpression = null;\n }\n\n if (this.selectedReturnFields.length === 0) {\n this.selectedReturnFields = this.fields.map(f => f.field);\n }\n\n this._expressionTree = this.createExpressionTreeFromGroupItem(this.rootGroup, this.selectedEntity?.name, this.selectedReturnFields);\n if (!this.parentExpression) {\n this.expressionTreeChange.emit(this._expressionTree);\n }\n }\n\n /**\n * @hidden @internal\n */\n public cancelOperandAdd() {\n if (this._addModeExpression) {\n this._addModeExpression.inAddMode = false;\n this._addModeExpression = null;\n }\n }\n\n /**\n * @hidden @internal\n */\n public deleteItem = (expressionItem: ExpressionItem, skipEmit: boolean = false) => {\n if (!expressionItem.parent) {\n this.rootGroup = null;\n this.currentGroup = null;\n //this._expressionTree = null;\n return;\n }\n\n if (expressionItem === this.currentGroup) {\n this.currentGroup = this.currentGroup.parent;\n }\n\n const children = expressionItem.parent.children;\n const index = children.indexOf(expressionItem);\n children.splice(index, 1);\n const entity = this.expressionTree ? this.expressionTree.entity : null;\n const returnFields = this.expressionTree ? this.expressionTree.returnFields : null;\n this._expressionTree = this.createExpressionTreeFromGroupItem(this.rootGroup, entity, returnFields); // TODO: don't recreate if not necessary\n\n if (!children.length) {\n this.deleteItem(expressionItem.parent, true);\n }\n\n if (!this.parentExpression && !skipEmit) {\n this.expressionTreeChange.emit(this._expressionTree);\n }\n }\n\n /**\n * @hidden @internal\n */\n public cancelOperandEdit() {\n if (this.innerQueries) {\n const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n if (innerQuery) {\n if (innerQuery._editedExpression) {\n innerQuery.cancelOperandEdit();\n }\n\n innerQuery.expressionTree = this.getExpressionTreeCopy(this._editedExpression.expression.searchTree);\n this.innerQueryNewExpressionTree = null;\n }\n }\n\n if (this._editedExpression) {\n this._editedExpression.inEditMode = false;\n\n if (!this._editedExpression.expression.fieldName) {\n this.deleteItem(this._editedExpression);\n }\n\n this._editedExpression = null;\n }\n\n if (!this.expressionTree && this.contextualGroup) {\n this.initialOperator = this.contextualGroup.operator;\n }\n }\n\n /**\n * @hidden @internal\n */\n public operandCanBeCommitted(): boolean {\n const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n return this.selectedField && this.selectedCondition &&\n (\n (\n ((!Array.isArray(this.searchValue.value) && !!this.searchValue.value) || (Array.isArray(this.searchValue.value) && this.searchValue.value.length !== 0)) &&\n !(this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery)\n ) ||\n (\n this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery && innerQuery && !!innerQuery.expressionTree && innerQuery.selectedReturnFields?.length > 0\n ) ||\n this.selectedField.filters.condition(this.selectedCondition)?.isUnary\n );\n }\n\n /**\n * @hidden @internal\n */\n public canCommitCurrentState(): boolean {\n const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n if (innerQuery) {\n return this.selectedReturnFields?.length > 0 && innerQuery.canCommitCurrentState();\n } else {\n return this.selectedReturnFields?.length > 0 &&\n (\n (!this._editedExpression) || // no edited expr\n (this._editedExpression && !this.selectedField) || // empty edited expr\n (this._editedExpression && this.operandCanBeCommitted() === true) // valid edited expr\n );\n }\n }\n\n /**\n * @hidden @internal\n */\n public commitCurrentState(): void {\n const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n if (innerQuery) {\n innerQuery.commitCurrentState();\n }\n\n if (this._editedExpression) {\n if (this.selectedField) {\n this.commitOperandEdit();\n } else {\n this.deleteItem(this._editedExpression);\n this._editedExpression = null;\n }\n }\n }\n\n /**\n * @hidden @internal\n */\n public exitEditAddMode(shouldPreventInit = false) {\n if (!this._editedExpression) {\n return;\n }\n\n this.exitOperandEdit();\n this.cancelOperandAdd();\n\n if (shouldPreventInit) {\n this._preventInit = true;\n }\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public exitOperandEdit() {\n if (!this._editedExpression) {\n return;\n }\n\n if (this.operandCanBeCommitted()) {\n this.commitOperandEdit();\n } else {\n this.cancelOperandEdit();\n }\n }\n\n /**\n * @hidden @internal\n */\n public isExpressionGroup(expression: ExpressionItem): boolean {\n return expression instanceof ExpressionGroupItem;\n }\n\n /**\n * @hidden @internal\n */\n public onExpressionFocus(expressionItem: ExpressionOperandItem) {\n if (this.prevFocusedExpression) {\n this.prevFocusedExpression.focused = false;\n }\n expressionItem.focused = true;\n this.prevFocusedExpression = expressionItem;\n }\n\n /**\n * @hidden @internal\n */\n public onExpressionBlur(event, expressionItem: ExpressionOperandItem) {\n if (this._prevFocusedContainer && this._prevFocusedContainer !== event.target.closest('.igx-filter-tree__expression-item')) {\n expressionItem.focused = false;\n }\n this._prevFocusedContainer = event.target.closest('.igx-filter-tree__expression-item');\n }\n\n /**\n * @hidden @internal\n */\n public onChipRemove(expressionItem: ExpressionItem) {\n this.exitEditAddMode();\n this.deleteItem(expressionItem);\n }\n\n /**\n * @hidden @internal\n */\n public focusChipAfterDrag = (index: number) => {\n this._lastFocusedChipIndex = index;\n this.focusEditedExpressionChip();\n }\n /**\n * @hidden @internal\n */\n public addExpressionBlur() {\n if (this.prevFocusedExpression) {\n this.prevFocusedExpression.focused = false;\n }\n if (this.addExpressionItemDropDown && !this.addExpressionItemDropDown.collapsed) {\n this.addExpressionItemDropDown.close();\n }\n }\n\n /**\n * @hidden @internal\n */\n public onChipClick(expressionItem: ExpressionOperandItem, chip: IgxChipComponent) {\n this.enterExpressionEdit(expressionItem, chip);\n }\n\n /**\n * @hidden @internal\n */\n public enterExpressionEdit(expressionItem: ExpressionOperandItem, chip?: IgxChipComponent) {\n this.exitEditAddMode(true);\n this.cdr.detectChanges();\n this._lastFocusedChipIndex = chip ? this.expressionsChips.toArray().findIndex(expr => expr === chip) : this._lastFocusedChipIndex;\n this.enterEditMode(expressionItem);\n }\n\n\n /**\n * @hidden @internal\n */\n public clickExpressionAdd(targetButton: HTMLElement, chip: IgxChipComponent) {\n this.exitEditAddMode(true);\n this.cdr.detectChanges();\n this._lastFocusedChipIndex = this.expressionsChips.toArray().findIndex(expr => expr === chip);\n this.openExpressionAddDialog(targetButton);\n }\n\n /**\n * @hidden @internal\n */\n public openExpressionAddDialog(targetButton: HTMLElement) {\n this.addExpressionDropDownOverlaySettings.target = targetButton;\n this.addExpressionDropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy({\n horizontalDirection: HorizontalAlignment.Right,\n horizontalStartPoint: HorizontalAlignment.Left,\n verticalStartPoint: VerticalAlignment.Bottom\n });\n\n this.addExpressionItemDropDown.open(this.addExpressionDropDownOverlaySettings);\n }\n\n /**\n * @hidden @internal\n */\n public enterExpressionAdd(event: ISelectionEventArgs, expressionItem: ExpressionOperandItem) {\n if (this._addModeExpression) {\n this._addModeExpression.inAddMode = false;\n }\n\n if (this.parentExpression) {\n this.inEditModeChange.emit(this.parentExpression);\n }\n\n const parent = expressionItem.parent ?? this.rootGroup;\n requestAnimationFrame(() => {\n if (event.newSelection.value === 'addCondition') {\n this.addCondition(parent, expressionItem);\n } else if (event.newSelection.value === 'addGroup') {\n this.addReverseGroup(parent, expressionItem);\n }\n expressionItem.inAddMode = true;\n this._addModeExpression = expressionItem;\n })\n }\n\n /**\n * @hidden @internal\n */\n public enterEditMode(expressionItem: ExpressionOperandItem) {\n if (this._editedExpression) {\n this._editedExpression.inEditMode = false;\n }\n\n if (this.parentExpression) {\n this.inEditModeChange.emit(this.parentExpression);\n }\n\n expressionItem.hovered = false;\n this.fields = this.selectedEntity ? this.selectedEntity.fields : null;\n this.selectedField =\n expressionItem.expression.fieldName ?\n this.fields?.find(field => field.field === expressionItem.expression.fieldName)\n : null;\n this.selectedCondition =\n expressionItem.expression.condition ?\n expressionItem.expression.condition.name :\n null;\n this.searchValue.value = expressionItem.expression.searchVal instanceof Set ?\n Array.from(expressionItem.expression.searchVal) :\n expressionItem.expression.searchVal;\n\n expressionItem.inEditMode = true;\n this._editedExpression = expressionItem;\n this.cdr.detectChanges();\n\n this.entitySelectOverlaySettings.target = this.entitySelect.getEditElement();\n this.entitySelectOverlaySettings.excludeFromOutsideClick = [this.entitySelect.getEditElement() as HTMLElement];\n this.entitySelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n\n if (this.returnFieldSelect) {\n this.returnFieldSelectOverlaySettings.target = this.returnFieldSelect.getEditElement();\n this.returnFieldSelectOverlaySettings.excludeFromOutsideClick = [this.returnFieldSelect.getEditElement() as HTMLElement];\n this.returnFieldSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n }\n if (this.fieldSelect) {\n this.fieldSelectOverlaySettings.target = this.fieldSelect.getEditElement();\n this.fieldSelectOverlaySettings.excludeFromOutsideClick = [this.fieldSelect.getEditElement() as HTMLElement];\n this.fieldSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n }\n if (this.conditionSelect) {\n this.conditionSelectOverlaySettings.target = this.conditionSelect.getEditElement();\n this.conditionSelectOverlaySettings.excludeFromOutsideClick = [this.conditionSelect.getEditElement() as HTMLElement];\n this.conditionSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n }\n\n if (!this.selectedField) {\n this.fieldSelect.input.nativeElement.focus();\n } else if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary) {\n this.conditionSelect?.input.nativeElement.focus();\n } else {\n const input = this.searchValueInput?.nativeElement || this.picker?.getEditElement();\n input?.focus();\n }\n\n (this.editingInputs?.nativeElement.parentElement as HTMLElement)?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n }\n\n /**\n * @hidden @internal\n */\n public onConditionSelectChanging(event: ISelectionEventArgs) {\n event.cancel = true;\n this.selectedCondition = event.newSelection.value;\n this.conditionSelect.close();\n this.cdr.detectChanges();\n }\n\n /**\n * @hidden @internal\n */\n public onKeyDown(eventArgs: KeyboardEvent) {\n eventArgs.stopPropagation();\n }\n\n /**\n * @hidden @internal\n */\n public onGroupClick(groupContextMenuDropDown: any, targetButton: HTMLButtonElement, groupItem: ExpressionGroupItem) {\n this.exitEditAddMode();\n this.cdr.detectChanges();\n\n this.groupContextMenuDropDown = groupContextMenuDropDown;\n this.groupContextMenuDropDownOverlaySettings.target = targetButton;\n this.groupContextMenuDropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy({\n horizontalDirection: HorizontalAlignment.Right,\n horizontalStartPoint: HorizontalAlignment.Left,\n verticalStartPoint: VerticalAlignment.Bottom\n });\n\n if (groupContextMenuDropDown.collapsed) {\n this.contextualGroup = groupItem;\n groupContextMenuDropDown.open(this.groupContextMenuDropDownOverlaySettings);\n } else {\n groupContextMenuDropDown.close();\n }\n }\n\n /**\n * @hidden @internal\n */\n public getOperator(expressionItem: any) {\n // if (!expressionItem && !this.expressionTree && !this.initialOperator) {\n // this.initialOperator = 0;\n // }\n\n const operator = expressionItem ?\n expressionItem.operator :\n this.expressionTree ?\n this.expressionTree.operator :\n this.initialOperator;\n return operator;\n }\n\n /**\n * @hidden @internal\n */\n public getSwitchGroupText(expressionItem: any) {\n const operator = this.getOperator(expressionItem);\n const condition = operator === FilteringLogic.Or ? this.resourceStrings.igx_query_builder_and_label : this.resourceStrings.igx_query_builder_or_label\n return this.resourceStrings.igx_query_builder_switch_group.replace('{0}', condition.toUpperCase());\n }\n\n /**\n * @hidden @internal\n */\n public onGroupContextMenuDropDownSelectionChanging(event: ISelectionEventArgs) {\n event.cancel = true;\n\n if (event.newSelection.value === 'switchCondition') {\n const newOperator = (!this.expressionTree ? this.initialOperator : (this.contextualGroup ?? this._expressionTree).operator) === 0 ? 1 : 0;\n this.selectFilteringLogic(newOperator);\n } else if (event.newSelection.value === 'ungroup') {\n this.ungroup();\n }\n\n this.groupContextMenuDropDown.close();\n }\n\n /**\n * @hidden @internal\n */\n public ungroup() {\n const selectedGroup = this.contextualGroup;\n const parent = selectedGroup.parent;\n if (parent) {\n const index = parent.children.indexOf(selectedGroup);\n parent.children.splice(index, 1, ...selectedGroup.children);\n\n for (const expr of selectedGroup.children) {\n expr.parent = parent;\n }\n }\n this.commitOperandEdit();\n }\n\n /**\n * @hidden @internal\n */\n public selectFilteringLogic(index: number) {\n if (!this.expressionTree) {\n this.initialOperator = index;\n return;\n }\n\n if (this.contextualGroup) {\n this.contextualGroup.operator = index as FilteringLogic;\n this.commitOperandEdit();\n } else if (this.expressionTree) {\n this._expressionTree.operator = index as FilteringLogic;\n }\n\n this.initialOperator = null;\n }\n\n /**\n * @hidden @internal\n */\n public getConditionFriendlyName(name: string): string {\n // As we have an 'In' condition already used in ESF to search in a Set, we add the 'Query' suffix to the newly introduced nested query condition names.\n // So instead of in/notIn we end up with 'inQuery'/'notInQuery', hence removing the suffix from the friendly name.\n return this.resourceStrings[`igx_query_builder_filter_${name?.replace('Query', '')}`] || name;\n }\n\n /**\n * @hidden @internal\n */\n public isDate(value: any) {\n return value instanceof Date;\n }\n\n /**\n * @hidden @internal\n */\n public invokeClick(eventArgs: KeyboardEvent) {\n if (!this.dragService.dropGhostExpression && this.platform.isActivationKey(eventArgs)) {\n eventArgs.preventDefault();\n (eventArgs.currentTarget as HTMLElement).click();\n }\n }\n\n /**\n * @hidden @internal\n */\n public openPicker(args: KeyboardEvent) {\n if (this.platform.isActivationKey(args)) {\n args.preventDefault();\n this.picker.open();\n }\n }\n\n /**\n * @hidden @internal\n */\n public onOutletPointerDown(event) {\n // This prevents closing the select's dropdown when clicking the scroll\n event.preventDefault();\n }\n\n /**\n * @hidden @internal\n */\n public getConditionList(): string[] {\n if (!this.selectedField) return [];\n\n if (!this.selectedField.filters) {\n this.selectedField.filters = this.getFilters(this.selectedField);\n }\n\n if ((this.isAdvancedFiltering() && !this.entities[0].childEntities) ||\n (this.isHierarchicalNestedQuery() && this.selectedEntity.name && !this.selectedEntity.childEntities)) {\n return this.selectedField.filters.conditionList();\n }\n\n return this.selectedField.filters.extendedConditionList();\n }\n\n /**\n * @hidden @internal\n */\n public getFormatter(field: string) {\n return this.fields?.find(el => el.field === field)?.formatter;\n }\n\n /**\n * @hidden @internal\n */\n public getFormat(field: string) {\n return this.fields?.find(el => el.field === field).pipeArgs.format;\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public setAddButtonFocus() {\n if (this.addRootAndGroupButton) {\n this.addRootAndGroupButton.nativeElement.focus();\n } else if (this.addConditionButton) {\n this.addConditionButton.nativeElement.focus();\n }\n }\n\n /**\n * @hidden @internal\n */\n public context(expression: ExpressionItem, afterExpression?: ExpressionItem) {\n return {\n $implicit: expression,\n afterExpression\n };\n }\n\n public formatReturnFields(innerTree: IFilteringExpressionsTree) {\n const returnFields = innerTree.returnFields;\n let text = returnFields.join(', ');\n const innerTreeEntity = this.entities?.find(el => el.name === innerTree.entity);\n if (returnFields.length === innerTreeEntity?.fields.length) {\n text = this.resourceStrings.igx_query_builder_all_fields;\n } else {\n text = returnFields.join(', ');\n text = text.length > 25 ? text.substring(0, 25) + ' ...' : text;\n }\n return text;\n }\n\n public isInEditMode(): boolean {\n return !this.parentExpression || (this.parentExpression && this.parentExpression.inEditMode);\n }\n\n public onInEditModeChanged(expressionItem: ExpressionOperandItem) {\n if (!expressionItem.inEditMode) {\n this.enterExpressionEdit(expressionItem);\n }\n }\n\n public getExpressionTreeCopy(expressionTree: IExpressionTree, shouldAssignInnerQueryExprTree?: boolean): IExpressionTree {\n if (!expressionTree) {\n return null;\n }\n\n const exprTreeCopy = new FilteringExpressionsTree(expressionTree.operator, expressionTree.fieldName, expressionTree.entity, expressionTree.returnFields);\n exprTreeCopy.filteringOperands = [];\n\n expressionTree.filteringOperands.forEach(o => isTree(o) ? exprTreeCopy.filteringOperands.push(this.getExpressionTreeCopy(o)) : exprTreeCopy.filteringOperands.push(o));\n\n if (!this.innerQueryNewExpressionTree && shouldAssignInnerQueryExprTree) {\n this.innerQueryNewExpressionTree = exprTreeCopy;\n }\n\n return exprTreeCopy;\n }\n\n public onSelectAllClicked() {\n if (\n (this._selectedReturnFields.length > 0 && this._selectedReturnFields.length < this._selectedEntity.fields.length) ||\n this._selectedReturnFields.length == this._selectedEntity.fields.length\n ) {\n this.returnFieldsCombo.deselectAllItems();\n } else {\n this.returnFieldsCombo.selectAllItems();\n }\n }\n\n public onReturnFieldSelectChanging(event: IComboSelectionChangingEventArgs | ISelectionEventArgs) {\n let newSelection = [];\n if (Array.isArray(event.newSelection)) {\n newSelection = event.newSelection.map(item => item.field)\n } else {\n newSelection.push(event.newSelection.value);\n this._selectedReturnFields = newSelection;\n }\n\n this.initExpressionTree(this.selectedEntity.name, newSelection);\n }\n\n public initExpressionTree(selectedEntityName: string, selectedReturnFields: string[]) {\n if (!this._expressionTree) {\n this._expressionTree = this.createExpressionTreeFromGroupItem(new ExpressionGroupItem(FilteringLogic.And, this.rootGroup), selectedEntityName, selectedReturnFields);\n }\n\n if (!this.parentExpression) {\n this.expressionTreeChange.emit(this._expressionTree);\n }\n }\n\n public getSearchValueTemplateContext(defaultSearchValueTemplate): any {\n const ctx = {\n $implicit: this.searchValue,\n selectedField: this.selectedField,\n selectedCondition: this.selectedCondition,\n defaultSearchValueTemplate: defaultSearchValueTemplate\n };\n return ctx;\n }\n\n private getPipeArgs(field: FieldType) {\n let pipeArgs = {...field.pipeArgs};\n if (!pipeArgs) {\n pipeArgs = { digitsInfo: DEFAULT_PIPE_DIGITS_INFO };\n }\n\n if (!pipeArgs.format) {\n pipeArgs.format = field.dataType === GridColumnDataType.Time ?\n DEFAULT_PIPE_TIME_FORMAT : field.dataType === GridColumnDataType.DateTime ?\n DEFAULT_PIPE_DATE_TIME_FORMAT : DEFAULT_PIPE_DATE_FORMAT;\n }\n\n return pipeArgs;\n }\n\n private selectDefaultCondition() {\n if (this.selectedField && this.selectedField.filters) {\n this.selectedCondition = this.selectedField.filters.conditionList().indexOf('equals') >= 0 ? 'equals' : this.selectedField.filters.conditionList()[0];\n }\n }\n\n private getFilters(field: FieldType) {\n if (!field.filters) {\n switch (field.dataType) {\n case GridColumnDataType.Boolean:\n return IgxBooleanFilteringOperand.instance();\n case GridColumnDataType.Number:\n case GridColumnDataType.Currency:\n case GridColumnDataType.Percent:\n return IgxNumberFilteringOperand.instance();\n case GridColumnDataType.Date:\n return IgxDateFilteringOperand.instance();\n case GridColumnDataType.Time:\n return IgxTimeFilteringOperand.instance();\n case GridColumnDataType.DateTime:\n return IgxDateTimeFilteringOperand.instance();\n case GridColumnDataType.String:\n default:\n return IgxStringFilteringOperand.instance();\n }\n } else {\n return field.filters;\n }\n }\n\n\n private addGroup(operator: FilteringLogic, parent?: ExpressionGroupItem, afterExpression?: ExpressionItem) {\n this.cancelOperandAdd();\n\n const groupItem = new ExpressionGroupItem(operator, parent);\n\n if (parent) {\n if (afterExpression) {\n const index = parent.children.indexOf(afterExpression);\n parent.children.splice(index + 1, 0, groupItem);\n } else {\n parent.children.push(groupItem);\n }\n } else {\n this.rootGroup = groupItem;\n }\n\n this.addCondition(groupItem);\n this.currentGroup = groupItem;\n }\n\n private createExpressionGroupItem(expressionTree: IExpressionTree, parent?: ExpressionGroupItem, entityName?: string): ExpressionGroupItem {\n let groupItem: ExpressionGroupItem;\n if (expressionTree) {\n groupItem = new ExpressionGroupItem(expressionTree.operator, parent);\n if (!expressionTree.filteringOperands) {\n return groupItem;\n }\n\n for (let i = 0; i < expressionTree.filteringOperands.length; i++) {\n const expr = expressionTree.filteringOperands[i];\n\n if (isTree(expr)) {\n groupItem.children.push(this.createExpressionGroupItem(expr, groupItem, expressionTree.entity));\n } else {\n const filteringExpr = expr as IFilteringExpression;\n const exprCopy: IFilteringExpression = {\n fieldName: filteringExpr.fieldName,\n condition: filteringExpr.condition,\n conditionName: filteringExpr.condition?.name || filteringExpr.conditionName,\n searchVal: filteringExpr.searchVal,\n searchTree: filteringExpr.searchTree,\n ignoreCase: filteringExpr.ignoreCase\n };\n const operandItem = new ExpressionOperandItem(exprCopy, groupItem);\n const field = this.fields?.find(el => el.field === filteringExpr.fieldName);\n operandItem.fieldLabel = field?.label || field?.header || field?.field;\n if (this._expandedExpressions.filter(e => e.searchTree == operandItem.expression.searchTree).length > 0) {\n operandItem.expanded = true;\n }\n groupItem.children.push(operandItem);\n }\n }\n\n\n if (expressionTree.entity) {\n entityName = expressionTree.entity;\n }\n const entity = this.entities?.find(el => el.name === entityName);\n if (entity) {\n this.fields = entity.fields;\n }\n\n this._selectedEntity = this.entities?.find(el => el.name === entityName);\n this._selectedReturnFields =\n !expressionTree.returnFields || expressionTree.returnFields.includes('*') || expressionTree.returnFields.includes('All') || expressionTree.returnFields.length === 0\n ? this.fields?.map(f => f.field)\n : this.fields?.filter(f => expressionTree.returnFields.indexOf(f.field) >= 0).map(f => f.field);\n }\n return groupItem;\n }\n\n private createExpressionTreeFromGroupItem(groupItem: ExpressionGroupItem, entity?: string, returnFields?: string[]): FilteringExpressionsTree {\n if (!groupItem) {\n return null;\n }\n\n const expressionTree = new FilteringExpressionsTree(groupItem.operator, undefined, entity, returnFields);\n\n for (let i = 0; i < groupItem.children.length; i++) {\n const item = groupItem.children[i];\n\n if (item instanceof ExpressionGroupItem) {\n const subTree = this.createExpressionTreeFromGroupItem((item as ExpressionGroupItem), entity, returnFields);\n expressionTree.filteringOperands.push(subTree);\n } else {\n expressionTree.filteringOperands.push((item as ExpressionOperandItem).expression);\n }\n }\n\n return expressionTree;\n }\n\n private scrollElementIntoView(target: HTMLElement) {\n const container = this.expressionsContainer.nativeElement;\n const targetOffset = target.offsetTop - container.offsetTop;\n const delta = 10;\n\n if (container.scrollTop + delta > targetOffset) {\n container.scrollTop = targetOffset - delta;\n } else if (container.scrollTop + container.clientHeight < targetOffset + target.offsetHeight + delta) {\n container.scrollTop = targetOffset + target.offsetHeight + delta - container.clientHeight;\n }\n }\n\n private focusEditedExpressionChip() {\n if (this._timeoutId) {\n clearTimeout(this._timeoutId);\n }\n\n this._timeoutId = setTimeout(() => {\n if (this._lastFocusedChipIndex != -1) {\n //Sort the expression chip list.\n //If there was a recent drag&drop and the tree hasn't rerendered(child query), they will be unordered\n const sortedChips = this.expressionsChips.toArray().sort(function (a, b) {\n if (a === b) return 0;\n if (a.chipArea.nativeElement.compareDocumentPosition(b.chipArea.nativeElement) & 2) {\n // b comes before a\n return 1;\n }\n return -1;\n });\n const chipElement = sortedChips[this._lastFocusedChipIndex]?.nativeElement;\n if (chipElement) {\n chipElement.focus();\n }\n this._lastFocusedChipIndex = -1;\n this._focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n }\n }, this._focusDelay);\n }\n\n private init() {\n this.cancelOperandAdd();\n this.cancelOperandEdit();\n\n // Ignore values of certain properties for the comparison\n const propsToIgnore = ['parent', 'hovered', 'ignoreCase', 'inEditMode', 'inAddMode'];\n const propsReplacer = function replacer(key, value) {\n if (propsToIgnore.indexOf(key) >= 0) {\n return undefined;\n } else {\n return value;\n }\n };\n\n // Skip root being recreated if the same\n const newRootGroup = this.createExpressionGroupItem(this.expressionTree);\n if (JSON.stringify(this.rootGroup, propsReplacer) !== JSON.stringify(newRootGroup, propsReplacer)) {\n this.rootGroup = this.createExpressionGroupItem(this.expressionTree);\n this.currentGroup = this.rootGroup;\n }\n\n if (this.rootGroup?.children?.length == 0) {\n this.rootGroup = null;\n this.currentGroup = null;\n }\n }\n\n /** rootGroup is recreated after clicking Apply, which sets new expressionTree and calls init()*/\n protected trackExpressionItem = trackByIdentity;\n}\n","<ng-template #addIcon>\n <igx-icon family=\"default\" name=\"add\"></igx-icon>\n</ng-template>\n\n<ng-template #closeIcon>\n <igx-icon family=\"default\" name=\"close\"></igx-icon>\n</ng-template>\n\n<ng-template #selectFromTemplate>\n <div class=\"igx-filter-tree__inputs\" [style.display]=\"(isInEditMode() && (!this.isAdvancedFiltering() || this.isHierarchicalNestedQuery())) ? 'flex' : 'none'\">\n <div class=\"igx-filter-tree__inputs-field\">\n <span class=\"igx-query-builder__label\">{{ this.resourceStrings.igx_query_builder_from_label }}</span>\n <igx-select #entitySelect\n type=\"box\"\n (selectionChanging)=\"onEntitySelectChanging($event)\"\n (opening)=\"exitEditAddMode(true)\"\n [overlaySettings]=\"entitySelectOverlaySettings\"\n [ngModel]=\"selectedEntity\"\n [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_select_entity\"\n [disabled]=\"disableEntityChange\"\n >\n @for (entity of entities; track entity.name) {\n <igx-select-item [value]=\"entity\">\n {{entity.name}}\n </igx-select-item>\n }\n </igx-select>\n </div>\n\n <div class=\"igx-filter-tree__inputs-field\">\n @if (!this.isHierarchicalNestedQuery()) {\n <span class=\"igx-query-builder__label\">{{ this.resourceStrings.igx_query_builder_select_label }}</span>\n }\n @if (!parentExpression) {\n <igx-combo\n #returnFieldsCombo\n [itemsMaxHeight]=\"250\"\n [data]=\"fields\"\n [displayKey]=\"'field'\"\n [valueKey]=\"'field'\"\n [disabled]=\"disableReturnFieldsChange\"\n [(ngModel)]=\"selectedReturnFields\"\n [overlaySettings]=\"returnFieldSelectOverlaySettings\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_select_return_fields\"\n searchPlaceholder=\"{{ this.resourceStrings.igx_query_builder_search }}\"\n [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n (selectionChanging)=\"onReturnFieldSelectChanging($event)\"\n (opening)=\"exitEditAddMode()\"\n >\n <ng-template igxComboHeader>\n <div\n class=\"igx-drop-down__item igx-drop-down__item--query-builder\"\n (click)=\"onSelectAllClicked()\"\n [ngClass]=\"{'igx-drop-down__item--selected': this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length}\"\n >\n <igx-checkbox\n [checked]=\"this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length\"\n [indeterminate]=\"this.selectedEntity && this.selectedReturnFields && this.selectedReturnFields.length > 0 && this.selectedReturnFields.length < this.selectedEntity.fields?.length\"\n [readonly]=\"true\"\n [disableRipple]=\"true\"\n [tabindex]=\"-1\"\n class=\"igx-combo__checkbox\">\n </igx-checkbox>\n <div class=\"igx-drop-down__inner\">\n {{ this.resourceStrings.igx_query_builder_select_all }}\n </div>\n </div>\n </ng-template>\n </igx-combo>\n }\n @else {\n <igx-select #returnFieldSelect\n type=\"box\"\n (selectionChanging)=\"onReturnFieldSelectChanging($event)\"\n [overlaySettings]=\"returnFieldSelectOverlaySettings\"\n [disabled]=\"!selectedEntity\"\n [ngModel]=\"selectedReturnFields ? selectedReturnFields[0] : null\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_select_return_field_single\"\n [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n (opening)=\"exitEditAddMode()\"\n >\n @for (field of fields; track field.field) {\n <igx-select-item [value]=\"field.field\">\n {{ field.field }}\n </igx-select-item>\n }\n </igx-select>\n }\n </div>\n </div>\n</ng-template>\n\n<div\n #expressionsContainer\n class=\"igx-query-builder__main\"\n>\n <ng-container *ngTemplateOutlet=\"selectFromTemplate\"></ng-container>\n\n <ng-template #addExpressionsTemplate let-expressionItem let-afterExpression=\"afterExpression\">\n <button type=\"button\"\n #addConditionButton\n igxButton=\"flat\"\n [disabled]=\"hasEditedExpression\"\n (click)=\"addCondition(expressionItem, afterExpression, true)\"\n igxDrop\n (enter)=\"dragService.onAddConditionEnter(addConditionButton, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n >\n <ng-container *ngTemplateOutlet=\"addIcon\"></ng-container>\n <span>{{\n this.resourceStrings.igx_query_builder_add_condition_root\n }}</span>\n </button>\n\n @if (this.rootGroup) {\n <button type=\"button\"\n igxButton=\"flat\"\n [disabled]=\"hasEditedExpression\"\n (click)=\"addReverseGroup(expressionItem, afterExpression)\"\n >\n <ng-container *ngTemplateOutlet=\"addIcon\"></ng-container>\n <span>{{ this.resourceStrings.igx_query_builder_add_group_root }}</span>\n </button>\n }\n </ng-template>\n\n <ng-template #operandTemplate let-expressionItem>\n @if (!expressionItem.inEditMode) {\n @if(dragService.dropGhostExpression && expressionItem === dragService.dropGhostExpression && dragService.isKeyboardDrag === false){\n <div class=\"igx-filter-tree__expression-item igx-filter-tree__expression-item-drop-ghost\">\n <igx-chip [data]=\"expressionItem\">\n {{this.resourceStrings.igx_query_builder_drop_ghost_text}}\n </igx-chip>\n </div>\n } @else {\n <div\n #dragRef\n igxDrop\n (enter)=\"dragService.onChipEnter(dragRef, expressionItem)\"\n (over)=\"dragService.onDivOver(dragRef, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n (dropped)=\"dragService.onDivDropped(expressionItem)\"\n [ngClass]=\"{\n 'igx-filter-tree__expression-item': true,\n 'igx-filter-tree__expression-item-keyboard-ghost': expressionItem === dragService.dropGhostExpression\n }\"\n (mouseenter)=\"expressionItem.hovered = true\"\n (mouseleave)=\"expressionItem.hovered = false\"\n (focusin)=\"onExpressionFocus(expressionItem)\"\n (focusout)=\"onExpressionBlur($event, expressionItem)\"\n >\n <igx-chip\n #expressionChip\n [draggable]=\"true\"\n [hideBaseOnDrag]=\"false\"\n [animateOnRelease]=\"false\"\n (moveStart)=\"dragService.onMoveStart(dragRef, expressionItem, false)\"\n (moveEnd)=\"dragService.onMoveEnd()\"\n (dragEnter)=\"dragService.onChipEnter(dragRef, expressionItem)\"\n (dragOver)=\"dragService.onChipOver(dragRef)\"\n (dragLeave)=\"dragService.onChipLeave()\"\n (dragDrop)=\"dragService.onChipDropped()\"\n #target=\"tooltipTarget\"\n [igxTooltipTarget]=\"tooltipRef\"\n [data]=\"expressionItem\"\n [removable]=\"isInEditMode() ? 'true' : 'false'\"\n (keydown)=\"invokeClick($event)\"\n (click)=\"onChipClick(expressionItem, expressionChip)\"\n (remove)=\"onChipRemove(expressionItem)\"\n\n >\n <igx-icon igxPrefix\n class=\"igx-drag-indicator\"\n tabindex=\"0\"\n (focus)=\"dragService.onChipDragIndicatorFocus(dragRef, expressionItem)\"\n (focusout)=\"dragService.onChipDragIndicatorFocusOut()\"\n family=\"default\" name=\"drag_indicator\"\n >\n </igx-icon>\n <span igxPrefix class=\"igx-filter-tree__expression-column\">\n {{expressionItem.fieldLabel || expressionItem.expression.fieldName}}\n </span>\n <span igxPrefix class=\"igx-filter-tree__expression-condition\">\n {{\n getConditionFriendlyName(\n expressionItem.expression.condition?.name\n )\n }}\n </span>\n @if (!expressionItem.expression.condition?.isUnary) {\n <span>\n @if (expressionItem.expression.searchTree) {\n <ng-container>\n <strong>{{expressionItem.expression.searchTree.entity}}</strong> / {{formatReturnFields(expressionItem.expression.searchTree)}}\n </ng-container>\n }\n @else {\n <ng-container>\n @if(isDate(expressionItem.expression.searchVal)) {\n @if(getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : getFormatter(\n expressionItem.expression.fieldName\n )\n : undefined\n }}\n } @else {\n {{\n expressionItem.expression.searchVal\n | date\n : getFormat(\n expressionItem.expression.fieldName\n )\n : undefined\n : this.locale\n }}\n }\n } @else {\n @if (getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : getFormatter(expressionItem.expression.fieldName)\n : (expressionItem.expression.conditionName || expressionItem.expression.condition?.name)\n }}\n } @else {\n {{ expressionItem.expression.searchVal }}\n }\n }\n </ng-container>\n }\n </span>\n }\n </igx-chip>\n <div #tooltipRef=\"tooltip\" igxTooltip>\n @if (expressionItem.expression.searchTree){\n {{expressionItem.expression.searchTree.returnFields.join(', ')}}\n } @else if (expressionItem.expression.condition?.isUnary) {\n {{getConditionFriendlyName(expressionItem.expression.condition?.name)}}\n } @else {\n @if(getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : getFormatter(expressionItem.expression.fieldName)\n : (expressionItem.expression.conditionName || expressionItem.expression.condition?.name)\n }}\n } @else {\n {{ expressionItem.expression.searchVal }}\n }\n }\n </div>\n\n @if (expressionItem.focused || expressionItem.hovered) {\n <div igxDragIgnore class=\"igx-filter-tree__expression-actions\">\n <button #addExpressionButton igxDragIgnore igxIconButton=\"outlined\" [igxDropDownItemNavigation]=\"addOptionsDropDown\"\n aria-labelledby=\"add-expression\" (keydown)=\"invokeClick($event)\"\n (click)=\"clickExpressionAdd(addExpressionButton, expressionChip)\"\n (blur)=\"addExpressionBlur()\">\n <igx-icon id=\"add-expression\" family=\"default\" name=\"add\"></igx-icon>\n </button>\n <igx-drop-down #addOptionsDropDown\n (selectionChanging)=\"enterExpressionAdd($event, expressionItem)\">\n <igx-drop-down-item [value]=\"'addCondition'\">\n <span>{{this.resourceStrings.igx_query_builder_add_condition}}</span>\n </igx-drop-down-item>\n <igx-drop-down-item [value]=\"'addGroup'\">\n <span>{{this.resourceStrings.igx_query_builder_add_group}}</span>\n </igx-drop-down-item>\n </igx-drop-down>\n </div>\n }\n </div>\n }\n }\n <div #editingInputsContainer class=\"igx-filter-tree__subquery\" >\n @if (expressionItem.inEditMode) {\n <div\n #editingInputs\n igxDrop\n (enter)=\"dragService.onChipEnter(editingInputsContainer, expressionItem)\"\n (over)=\"dragService.onChipEnter(editingInputsContainer, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n (dropped)=\"dragService.onDivDropped(expressionItem)\"\n class=\"igx-filter-tree__inputs\"\n >\n <igx-select\n #fieldSelect\n type=\"box\"\n [overlaySettings]=\"fieldSelectOverlaySettings\"\n [(ngModel)]=\"selectedField\"\n [disabled]=\"!fields\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_column_placeholder\"\n >\n\n @for (field of fields; track field) {\n <igx-select-item [value]=\"field\">\n {{ field.label || field.header || field.field }}\n </igx-select-item>\n }\n </igx-select>\n\n <igx-select\n #conditionSelect\n type=\"box\"\n [overlaySettings]=\"conditionSelectOverlaySettings\"\n [(ngModel)]=\"selectedCondition\"\n (selectionChanging)=\"onConditionSelectChanging($event)\"\n [disabled]=\"!selectedField\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_condition_placeholder\"\n >\n @if (\n selectedField &&\n conditionSelect.value &&\n selectedField.filters.condition(conditionSelect.value)\n ) {\n <igx-prefix>\n <igx-icon\n family=\"default\"\n [name]=\"\n selectedField.filters.condition(\n conditionSelect.value\n ).iconName\n \"\n >\n </igx-icon>\n </igx-prefix>\n }\n\n @for (condition of getConditionList(); track condition) {\n <igx-select-item\n [value]=\"condition\"\n [text]=\"getConditionFriendlyName(condition)\"\n >\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon\n family=\"default\"\n [name]=\"\n selectedField.filters.condition(condition)\n .iconName\n \"\n >\n </igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{\n getConditionFriendlyName(condition)\n }}</span>\n </div>\n </igx-select-item>\n }\n </igx-select>\n\n <ng-container\n *ngTemplateOutlet=\"\n searchValueTemplate ? searchValueTemplate : defaultSearchValueTemplate;\n context: getSearchValueTemplateContext(defaultSearchValueTemplate)\n \"\n >\n </ng-container>\n\n <ng-template #defaultSearchValueTemplate>\n @if(!selectedField ||\n (selectedField.dataType !== 'date' && selectedField.dataType !== 'time' && selectedField.dataType !== 'dateTime')) {\n <igx-input-group type=\"box\">\n\n <input\n #searchValueInput\n igxInput\n [disabled]=\"isSearchValueInputDisabled()\"\n [placeholder]=\"this.selectedCondition === 'inQuery' || this.selectedCondition === 'notInQuery' ?\n this.resourceStrings.igx_query_builder_query_value_placeholder :\n this.resourceStrings.igx_query_builder_value_placeholder\"\n [type]=\"\n selectedField && selectedField.dataType === 'number'\n ? 'number'\n : 'text'\n \"\n [(ngModel)]=\"searchValue.value\"\n />\n </igx-input-group>\n }\n @else if (selectedField && selectedField.dataType === 'date') {\n <igx-date-picker\n #picker\n [(value)]=\"searchValue.value\"\n (keydown)=\"openPicker($event)\"\n (click)=\"picker.open()\"\n type=\"box\"\n [disabled]=\"isSearchValueInputDisabled()\"\n [locale]=\"this.locale\"\n [outlet]=\"pickerOutlet\"\n [formatter]=\"selectedField.formatter\"\n [displayFormat]=\"selectedField.pipeArgs.format\"\n [weekStart]=\"selectedField.pipeArgs.weekStart\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_date_placeholder\"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-date-picker>\n }\n @else if (selectedField && selectedField.dataType === 'time') {\n <igx-time-picker\n #picker\n [(value)]=\"searchValue.value\"\n (click)=\"picker.open()\"\n (keydown)=\"openPicker($event)\"\n type=\"box\"\n [disabled]=\"isSearchValueInputDisabled()\"\n [locale]=\"this.locale\"\n [outlet]=\"pickerOutlet\"\n [formatter]=\"selectedField.formatter\"\n [displayFormat]=\"selectedField.pipeArgs.format\"\n [inputFormat]=\"selectedField.editorOptions?.dateTimeFormat\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_time_placeholder\"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-time-picker>\n }\n @else if (selectedField && selectedField.dataType === 'dateTime') {\n <igx-input-group #inputGroup type=\"box\">\n <input\n #input\n igxInput\n tabindex=\"0\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_datetime_placeholder\"\n [(ngModel)]=\"searchValue.value\"\n [disabled]=\"isSearchValueInputDisabled()\"\n [locale]=\"this.locale\"\n [igxDateTimeEditor]=\"selectedField.editorOptions?.dateTimeFormat\"\n [defaultFormatType]=\"selectedField.dataType\"\n [displayFormat]=\"selectedField.pipeArgs.format\"\n />\n </igx-input-group>\n }\n </ng-template>\n\n <div class=\"igx-filter-tree__inputs-actions\">\n <button type=\"button\"\n igxIconButton=\"outlined\"\n [disabled]=\"!operandCanBeCommitted()\"\n (click)=\"commitExpression()\"\n >\n <igx-icon family=\"default\" name=\"confirm\"></igx-icon>\n </button>\n <button type=\"button\"\n igxIconButton=\"outlined\"\n (click)=\"discardExpression(expressionItem)\"\n >\n <ng-container *ngTemplateOutlet=\"closeIcon\"></ng-container>\n </button>\n </div>\n </div>\n }\n\n @if (\n (!expressionItem.inEditMode && expressionItem.expression.searchTree && expressionItem.expression.searchTree.filteringOperands?.length > 0) ||\n (expressionItem.inEditMode && selectedField?.filters?.condition(selectedCondition)?.isNestedQuery)\n ) {\n <ng-container>\n <igx-query-builder-tree\n [style.display]=\"expressionItem.inEditMode || expressionItem.expanded ? 'block' : 'none'\"\n [entities]=\"(this.selectedEntity ? this.selectedEntity.childEntities : entities?.[0]?.childEntities) ?? (entities ?? [])\"\n [queryBuilder]=\"this.queryBuilder\"\n [parentExpression]=\"expressionItem\"\n [expectedReturnField]=\"this.selectedField?.field\"\n [expressionTree]=\"expressionItem.inEditMode ? (innerQueryNewExpressionTree ?? getExpressionTreeCopy(expressionItem.expression.searchTree, true)) : expressionItem.expression.searchTree\"\n (inEditModeChange)=\"onInEditModeChanged($event)\"\n [searchValueTemplate]=\"searchValueTemplate\">\n </igx-query-builder-tree>\n </ng-container>\n }\n </div>\n </ng-template>\n\n <ng-template #expressionGroupTemplate let-expressionItem>\n <div class=\"igx-filter-tree\"\n (focusout)=\"parentExpression? null : dragService.onDragFocusOut()\">\n <div\n class=\"igx-filter-tree__line\"\n [ngClass]=\"{\n 'igx-filter-tree__line--and': getOperator(expressionItem) === 0,\n 'igx-filter-tree__line--or': getOperator(expressionItem) === 1\n }\"\n ></div>\n\n <div class=\"igx-filter-tree__expressions\">\n <div class=\"igx-filter-tree__expression-context-menu\"\n #groupRef\n igxDrop\n (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n >\n <button #changeGroupButton\n [ngClass]=\"{\n 'igx-filter-tree__button--and': getOperator(expressionItem) === 0,\n 'igx-filter-tree__button--or': getOperator(expressionItem) === 1\n }\"\n [igxDropDownItemNavigation]=\"groupContextMenuDropDown\"\n igxDragIgnore\n igxButton=\"flat\"\n aria-labelledby=\"change-group\"\n (keydown)=\"invokeClick($event)\"\n (click)=\"onGroupClick(groupContextMenuDropDown, changeGroupButton, expressionItem)\"\n >\n <span\n igxDrop\n (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n >\n {{getOperator(expressionItem) === 0 ? this.resourceStrings.igx_query_builder_and_label : this.resourceStrings.igx_query_builder_or_label}}\n </span>\n <igx-icon family=\"default\" name=\"arrow_drop_down\" role=\"button\"></igx-icon>\n </button>\n <igx-drop-down #groupContextMenuDropDown\n (selectionChanging)=\"onGroupContextMenuDropDownSelectionChanging($event)\"\n [width]=\"'fit-content'\">\n <igx-drop-down-item [value]=\"'switchCondition'\"\n >\n {{getSwitchGroupText(expressionItem)}}\n </igx-drop-down-item>\n <igx-drop-down-item [value]=\"'ungroup'\"\n [disabled]=\"this.rootGroup === this.contextualGroup\"\n >\n {{this.resourceStrings.igx_query_builder_ungroup}}\n </igx-drop-down-item>\n </igx-drop-down>\n </div>\n <div class=\"igx-filter-tree__expression-section\">\n @for (expr of expressionItem?.children; track trackExpressionItem(expr)) {\n <ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n isExpressionGroup(expr)\n ? expressionGroupTemplate\n : operandTemplate;\n context: context(expr)\n \"\n >\n </ng-container>\n </ng-container>\n }\n </div>\n\n @if (expressionItem === rootGroup && !hasEditedExpression) {\n <div\n #currentGroupButtonsContainer\n class=\"igx-filter-tree__buttons\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n addExpressionsTemplate;\n context: context(expressionItem)\n \"\n >\n </ng-container>\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n @if (rootGroup || (!rootGroup && (selectedEntity || (entities?.length === 1 && !entities[0]?.name)))) {\n <div class=\"igx-filter-tree__section\">\n @if (!this.isAdvancedFiltering()) {\n <span class=\"igx-query-builder__label\">Where</span>\n }\n <ng-container\n *ngTemplateOutlet=\"\n expressionGroupTemplate;\n context: context(rootGroup)\n \"\n ></ng-container>\n </div>\n }\n</div>\n\n<div\n #overlayOutlet\n igxOverlayOutlet\n class=\"igx-query-builder__outlet\"\n (pointerdown)=\"onOutletPointerDown($event)\"\n></div>\n\n<igx-dialog\n #entityChangeDialog\n title=\"{{ this.resourceStrings.igx_query_builder_dialog_title }}\"\n leftButtonLabel=\"{{ this.resourceStrings.igx_query_builder_dialog_cancel }}\"\n rightButtonLabel=\"{{ this.resourceStrings.igx_query_builder_dialog_confirm }}\"\n (leftButtonSelect)=\"onEntityChangeCancel()\"\n (rightButtonSelect)=\"onEntityChangeConfirm()\">\n <section class=\"igx-query-builder-dialog\">\n <p>{{ this.resourceStrings.igx_query_builder_dialog_message }}</p>\n <igx-checkbox\n (change)=\"onShowEntityChangeDialogChange($event)\"\n [disableRipple]=\"true\"\n [tabindex]=\"-1\">\n {{ this.resourceStrings.igx_query_builder_dialog_checkbox_text }}\n </igx-checkbox>\n </section>\n</igx-dialog>\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Defines the custom template that will be used for the search value input of condition in edit mode\n * \n * @igxModule IgxQueryBuilderModule\n * @igxKeywords query builder, query builder search value\n * @igxGroup Data entry and display\n *\n * @example\n * <igx-query-builder>\n * <ng-template igxQueryBuilderSearchValue let-expression=\"expression\">\n * <input type=\"text\" required [(ngModel)]=\"expression.searchVal\"/>\n * </ng-template>\n * </igx-query-builder>\n */\n@Directive({\n selector: '[igxQueryBuilderSearchValue]',\n standalone: true\n})\nexport class IgxQueryBuilderSearchValueTemplateDirective {\n constructor(public template: TemplateRef<any>) { }\n}\n","import { booleanAttribute, ContentChild, EventEmitter, Output, TemplateRef } from '@angular/core';\nimport {\n Component, Input, ViewChild, ElementRef, OnDestroy, HostBinding\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport {\n EntityType,\n FieldType,\n IExpressionTree,\n IQueryBuilderResourceStrings,\n QueryBuilderResourceStringsEN,\n recreateTree,\n getCurrentResourceStrings\n} from 'igniteui-angular/core';\nimport { IgxOverlayOutletDirective } from 'igniteui-angular/directives';\nimport { IgxQueryBuilderTreeComponent } from './query-builder-tree.component';\nimport { IgxIconService } from 'igniteui-angular/icon';\nimport { editor } from '@igniteui/material-icons-extended';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\n\n/**\n * A component used for operating with complex filters by creating or editing conditions\n * and grouping them using AND/OR logic.\n * It is used internally in the Advanced Filtering of the Grid.\n *\n * @example\n * ```html\n * <igx-query-builder [entities]=\"this.entities\">\n * </igx-query-builder>\n * ```\n */\n@Component({\n selector: 'igx-query-builder',\n templateUrl: './query-builder.component.html',\n imports: [IgxQueryBuilderTreeComponent]\n})\nexport class IgxQueryBuilderComponent implements OnDestroy {\n /**\n * @hidden @internal\n */\n @HostBinding('class.igx-query-builder')\n public cssClass = 'igx-query-builder';\n\n /**\n * @hidden @internal\n */\n @HostBinding('style.display')\n public display = 'block';\n\n /**\n * Gets/sets whether the confirmation dialog should be shown when changing entity.\n * Default value is `true`.\n */\n @Input({ transform: booleanAttribute })\n public showEntityChangeDialog = true;\n\n /**\n * Gets the list of entities available for the IgxQueryBuilderComponent.\n *\n * Each entity describes a logical group of fields that can be used in queries.\n * An entity can optionally have child entities, allowing nested sub-queries.\n *\n * @returns An array of {@link EntityType} objects.\n */\n public get entities(): EntityType[] {\n return this._entities;\n }\n\n /**\n * Sets the list of entities for the IgxQueryBuilderComponent.\n * If the `expressionTree` is defined, it will be recreated with the new entities.\n *\n * Each entity should be an {@link EntityType} object describing the fields and optionally child entities.\n *\n * Example:\n * ```ts\n * [\n * {\n * name: 'Orders',\n * fields: [{ field: 'OrderID', dataType: 'number' }],\n * childEntities: [\n * {\n * name: 'OrderDetails',\n * fields: [{ field: 'ProductID', dataType: 'number' }]\n * }\n * ]\n * }\n * ]\n * ```\n *\n * @param entities - The array of entities to set.\n */\n @Input()\n public set entities(entities: EntityType[]) {\n if (entities !== this._entities) {\n if (entities && this.expressionTree) {\n this._expressionTree = recreateTree(this._expressionTree, entities);\n }\n }\n this._entities = entities;\n }\n\n /**\n * Gets the list of fields for the QueryBuilder.\n *\n * @deprecated since version 19.1.0. Use the `entities` property instead.\n * @hidden\n */\n public get fields(): FieldType[] {\n return this._fields;\n }\n\n /**\n * Sets the list of fields for the QueryBuilder.\n * Automatically wraps them into a single entity to maintain backward compatibility.\n *\n * @param fields - The array of fields to set.\n * @deprecated since version 19.1.0. Use the `entities` property instead.\n * @hidden\n */\n @Input()\n public set fields(fields: FieldType[]) {\n if (fields) {\n this._fields = fields;\n this.entities = [\n {\n name: null,\n fields: fields\n }\n ];\n }\n }\n\n /**\n * Returns the expression tree.\n */\n public get expressionTree(): IExpressionTree {\n return this._expressionTree;\n }\n\n /**\n * Sets the expression tree.\n */\n @Input()\n public set expressionTree(expressionTree: IExpressionTree) {\n if (expressionTree !== this._expressionTree) {\n if (this.entities && expressionTree) {\n this._expressionTree = recreateTree(expressionTree, this.entities);\n } else {\n this._expressionTree = expressionTree;\n }\n }\n }\n\n /**\n * Gets the `locale` of the query builder.\n * If not set, defaults to application's locale.\n */\n @Input()\n public locale: string;\n\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n */\n @Input()\n public set resourceStrings(value: IQueryBuilderResourceStrings) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n\n /**\n * Returns the resource strings.\n */\n public get resourceStrings(): IQueryBuilderResourceStrings {\n return this._resourceStrings;\n }\n\n /**\n * Disables subsequent entity changes at the root level after the initial selection.\n */\n @Input()\n public disableEntityChange = false;\n\n /**\n * Disables return fields changes at the root level.\n */\n @Input()\n public disableReturnFieldsChange = false;\n\n /**\n * Event fired as the expression tree is changed.\n *\n * ```html\n * <igx-query-builder (expressionTreeChange)='onExpressionTreeChange()'></igx-query-builder>\n * ```\n */\n @Output()\n public expressionTreeChange = new EventEmitter<IExpressionTree>();\n\n /**\n * @hidden @internal\n */\n @ContentChild(IgxQueryBuilderSearchValueTemplateDirective, { read: TemplateRef })\n public searchValueTemplate: TemplateRef<any>;\n\n /**\n * @hidden @internal\n */\n @ViewChild(IgxQueryBuilderTreeComponent)\n public queryTree: IgxQueryBuilderTreeComponent;\n\n private destroy$ = new Subject<any>();\n private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n private _expressionTree: IExpressionTree;\n private _fields: FieldType[];\n private _entities: EntityType[];\n private _shouldEmitTreeChange = true;\n\n constructor(protected iconService: IgxIconService) {\n this.registerSVGIcons();\n }\n\n /**\n * Returns whether the expression tree can be committed in the current state.\n */\n public canCommit(): boolean {\n return this.queryTree?.canCommitCurrentState() === true;\n }\n\n /**\n * Commits the expression tree in the current state if it is valid. If not throws an exception.\n */\n public commit(): void {\n if (this.canCommit()) {\n this._shouldEmitTreeChange = false;\n this.queryTree.commitCurrentState();\n this._shouldEmitTreeChange = true;\n } else {\n throw new Error('Expression tree can\\'t be committed in the current state. Use `canCommit` method to check if the current state is valid.');\n }\n }\n\n /**\n * Discards all unsaved changes to the expression tree.\n */\n public discard(): void {\n this.queryTree.cancelOperandEdit();\n }\n\n /**\n * @hidden @internal\n */\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public setPickerOutlet(outlet?: IgxOverlayOutletDirective | ElementRef) {\n this.queryTree.setPickerOutlet(outlet);\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public get isContextMenuVisible(): boolean {\n return this.queryTree.isContextMenuVisible;\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public exitOperandEdit() {\n this.queryTree.exitOperandEdit();\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public setAddButtonFocus() {\n this.queryTree.setAddButtonFocus();\n }\n\n public onExpressionTreeChange(tree: IExpressionTree) {\n if (tree && this.entities && tree !== this._expressionTree) {\n this._expressionTree = recreateTree(tree, this.entities);\n } else {\n this._expressionTree = tree;\n }\n if (this._shouldEmitTreeChange) {\n this.expressionTreeChange.emit(tree);\n }\n }\n\n private registerSVGIcons(): void {\n const editorIcons = editor as any[];\n\n editorIcons.forEach((icon) => {\n this.iconService.addSvgIconFromText(icon.name, icon.value, 'imx-icons');\n this.iconService.addIconRef(icon.name, 'default', {\n name: icon.name,\n family: 'imx-icons'\n });\n });\n\n const inIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M560-280H120v-400h720v120h-80v-40H200v240h360v80Zm-360-80v-240 240Zm560 200v-120H640v-80h120v-120h80v120h120v80H840v120h-80Z\"/></svg>';\n this.iconService.addSvgIconFromText('in', inIcon, 'imx-icons');\n this.iconService.addIconRef('in', 'default', {\n name: 'in',\n family: 'imx-icons'\n });\n\n const notInIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M560-280H120v-400h720v120h-80v-40H200v240h360v80Zm-360-80v-240 240Zm440 104 84-84-84-84 56-56 84 84 84-84 56 56-83 84 83 84-56 56-84-83-84 83-56-56Z\"/></svg>';\n this.iconService.addSvgIconFromText('not-in', notInIcon, 'imx-icons');\n this.iconService.addIconRef('not-in', 'default', {\n name: 'not-in',\n family: 'imx-icons'\n });\n\n this.iconService.addIconRef('add', 'default', {\n name: 'add',\n family: 'material',\n });\n\n this.iconService.addIconRef('close', 'default', {\n name: 'close',\n family: 'material',\n });\n\n this.iconService.addIconRef('check', 'default', {\n name: 'check',\n family: 'material',\n });\n\n this.iconService.addIconRef('delete', 'default', {\n name: 'delete',\n family: 'material',\n });\n\n this.iconService.addIconRef('edit', 'default', {\n name: 'edit',\n family: 'material',\n });\n }\n}\n\n","<ng-content select=\"igx-query-builder-header\"></ng-content>\n\n<igx-query-builder-tree\n [entities]=\"this.entities\"\n [expressionTree]=\"this.expressionTree\"\n [locale]=\"this.locale\"\n [resourceStrings]=\"this.resourceStrings\"\n [queryBuilder]=\"this\"\n (expressionTreeChange)=\"onExpressionTreeChange($event)\"\n [searchValueTemplate]=\"searchValueTemplate\">\n</igx-query-builder-tree>\n","import { IgxQueryBuilderHeaderComponent } from './query-builder-header.component';\nimport { IgxQueryBuilderComponent } from './query-builder.component';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\n\nexport {\n IgxQueryBuilderComponent\n} from './query-builder.component';\nexport * from './query-builder-header.component';\nexport * from './query-builder.directives';\n\n/* NOTE: Query builder directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_QUERY_BUILDER_DIRECTIVES = [\n IgxQueryBuilderComponent,\n IgxQueryBuilderHeaderComponent,\n IgxQueryBuilderSearchValueTemplateDirective,\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IGX_QUERY_BUILDER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n imports: [\n ...IGX_QUERY_BUILDER_DIRECTIVES\n ],\n exports: [\n ...IGX_QUERY_BUILDER_DIRECTIVES\n ]\n})\nexport class IgxQueryBuilderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.IgxQueryBuilderComponent","i2.IgxQueryBuilderHeaderComponent","i3.IgxQueryBuilderSearchValueTemplateDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"igniteui-angular-query-builder.mjs","sources":["../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-header.component.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-header.component.html","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.common.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-drag.service.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-tree.component.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-tree.component.html","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.directives.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.component.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.component.html","../../../projects/igniteui-angular/query-builder/src/query-builder/public_api.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.module.ts","../../../projects/igniteui-angular/query-builder/src/igniteui-angular-query-builder.ts"],"sourcesContent":["import { Component, HostBinding, Input } from '@angular/core';\nimport { IQueryBuilderResourceStrings, QueryBuilderResourceStringsEN } from 'igniteui-angular/core';\nimport { getCurrentResourceStrings } from 'igniteui-angular/core';\n\n@Component({\n selector: 'igx-query-builder-header',\n templateUrl: 'query-builder-header.component.html'\n})\nexport class IgxQueryBuilderHeaderComponent {\n\n private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n\n /**\n * @hidden @internal\n */\n @HostBinding('class') public get getClass() {\n return 'igx-query-builder__header';\n }\n\n /**\n * Sets the title of the `IgxQueryBuilderHeaderComponent`.\n *\n * @example\n * ```html\n * <igx-query-builder-header title=\"Sample Query Builder\"></igx-query-builder-header>\n * ```\n */\n @Input()\n public title: string;\n\n /**\n * Show/hide the legend.\n *\n * @example\n * ```html\n * <igx-query-builder-header [showLegend]=\"false\"></igx-query-builder-header>\n * ```\n * @deprecated in version 19.1.0.\n */\n @Input()\n public showLegend = true;\n\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n *\n * @deprecated in version 19.1.0.\n */\n @Input()\n public set resourceStrings(value: IQueryBuilderResourceStrings) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n\n /**\n * Returns the resource strings.\n */\n public get resourceStrings(): IQueryBuilderResourceStrings {\n return this._resourceStrings;\n }\n}\n","<div class=\"igx-query-builder__title\">{{ title }}</div>\n<ng-content></ng-content>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FilteringLogic, IFilteringExpression } from 'igniteui-angular/core';\n\n@Pipe({\n name: 'fieldFormatter',\n standalone: true\n})\nexport class IgxFieldFormatterPipe implements PipeTransform {\n\n public transform(value: any, formatter: (v: any, data: any, fieldData?: any) => any, rowData: any, fieldData?: any) {\n return formatter(value, rowData, fieldData);\n }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionItem {\n public parent: ExpressionGroupItem;\n public expanded: boolean;\n constructor(parent?: ExpressionGroupItem) {\n this.parent = parent;\n }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionGroupItem extends ExpressionItem {\n public operator: FilteringLogic;\n public children: ExpressionItem[];\n constructor(operator: FilteringLogic, parent?: ExpressionGroupItem) {\n super(parent);\n this.operator = operator;\n this.children = [];\n }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionOperandItem extends ExpressionItem {\n public expression: IFilteringExpression;\n public inEditMode: boolean;\n public inAddMode: boolean;\n public hovered: boolean;\n public focused: boolean;\n public fieldLabel: string;\n constructor(expression: IFilteringExpression, parent: ExpressionGroupItem) {\n super(parent);\n this.expression = expression;\n }\n}\n\nconst IGX_QUERY_BUILDER = 'igx-query-builder';\nconst IGX_FILTER_TREE = 'igx-filter-tree';\n\n/**\n * @hidden @internal\n */\nexport const QueryBuilderSelectors = {\n DRAG_INDICATOR: 'igx-drag-indicator',\n CHIP_GHOST: 'igx-chip__ghost',\n\n DROP_DOWN_LIST_SCROLL: 'igx-drop-down__list-scroll',\n DROP_DOWN_ITEM_DISABLED: 'igx-drop-down__item--disabled',\n\n FILTER_TREE: IGX_FILTER_TREE,\n FILTER_TREE_EXPRESSION_CONTEXT_MENU: IGX_FILTER_TREE + '__expression-context-menu',\n FILTER_TREE_EXPRESSION_ITEM: IGX_FILTER_TREE + '__expression-item',\n FILTER_TREE_EXPRESSION_ITEM_DROP_GHOST: IGX_FILTER_TREE + '__expression-item-drop-ghost',\n FILTER_TREE_EXPRESSION_ITEM_KEYBOARD_GHOST: IGX_FILTER_TREE + '__expression-item-keyboard-ghost',\n FILTER_TREE_EXPRESSION_ITEM_GHOST: IGX_FILTER_TREE + '__expression-item-ghost',\n FILTER_TREE_EXPRESSION_SECTION: IGX_FILTER_TREE + '__expression-section',\n\n FILTER_TREE_LINE_AND: IGX_FILTER_TREE + '__line--and',\n FILTER_TREE_LINE_OR: IGX_FILTER_TREE + '__line--or',\n FILTER_TREE_SUBQUERY: IGX_FILTER_TREE + '__subquery',\n\n QUERY_BUILDER: IGX_QUERY_BUILDER,\n QUERY_BUILDER_BODY: IGX_QUERY_BUILDER + '__main',\n QUERY_BUILDER_HEADER: IGX_QUERY_BUILDER + '__header',\n QUERY_BUILDER_TREE: IGX_QUERY_BUILDER + '-tree',\n}\n","import { filter, fromEvent, sampleTime, Subscription } from 'rxjs';\nimport { IgxQueryBuilderTreeComponent } from './query-builder-tree.component';\nimport { ElementRef, Injectable } from '@angular/core';\nimport { ExpressionGroupItem, ExpressionItem, ExpressionOperandItem, QueryBuilderSelectors } from './query-builder.common';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\n\nconst DEFAULT_SET_Z_INDEX_DELAY = 10;\nconst Z_INDEX_TO_SET = 10010; //overlay z-index is 10005\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxQueryBuilderDragService {\n\n /** The ExpressionItem that's actually the drop ghost's content */\n public dropGhostExpression: ExpressionItem;\n public isKeyboardDrag: boolean;\n private _queryBuilderTreeComponent: IgxQueryBuilderTreeComponent;\n private _queryBuilderTreeComponentElRef: ElementRef;\n private _sourceExpressionItem: ExpressionItem;\n private _sourceElement: HTMLElement;\n private _targetExpressionItem: ExpressionItem;\n private _dropUnder: boolean;\n private _ghostChipMousemoveSubscription$: Subscription;\n private _keyboardSubscription$: Subscription;\n private _keyDragCurrentIndex: number = 0;\n private _keyDragInitialIndex: number = 0;\n private _isKeyDragsFirstMove: boolean = true;\n /** Stores a flat ordered list of possible drop locations as Tuple <[targetExpression, dropUnder]>, while performing the keyboard drag&drop */\n private _possibleDropLocations: Array<[ExpressionItem, boolean]>;\n private _timeoutId: any;\n\n\n /** Get the dragged ghost as a HTMLElement*/\n private get getDragGhostElement(): HTMLElement {\n return (document.querySelector(`.${QueryBuilderSelectors.CHIP_GHOST}[ghostclass=\"${QueryBuilderSelectors.CHIP_GHOST}\"]`) as HTMLElement);\n }\n\n /** Get the drop ghost chip component */\n private get getDropGhostElement(): IgxChipComponent {\n return this._queryBuilderTreeComponent.expressionsChips.find(x => x.data === this.dropGhostExpression);\n }\n\n private get getMainExpressionTree(): HTMLElement {\n return this._queryBuilderTreeComponentElRef.nativeElement.querySelector(`.${QueryBuilderSelectors.FILTER_TREE}`);\n }\n\n\n public register(tree: IgxQueryBuilderTreeComponent, el: ElementRef) {\n this._queryBuilderTreeComponent = tree;\n this._queryBuilderTreeComponentElRef = el;\n }\n\n /** When chip is picked up for dragging\n *\n * @param sourceDragElement The HTML element of the chip that's been dragged\n * @param sourceExpressionItem The expressionItem of the chip that's been dragged\n * @param isKeyboardDrag If it's a mouse drag or keyboard reorder\n *\n */\n public onMoveStart(sourceDragElement: HTMLElement, sourceExpressionItem: ExpressionItem, isKeyboardDrag: boolean): void {\n this.resetDragAndDrop(true);\n this._queryBuilderTreeComponent._expressionTreeCopy = this._queryBuilderTreeComponent._expressionTree;\n this.isKeyboardDrag = isKeyboardDrag;\n this._sourceExpressionItem = sourceExpressionItem;\n this._sourceElement = sourceDragElement;\n\n this.listenToKeyboard();\n\n if (!this.isKeyboardDrag) {\n this._sourceElement.style.display = 'none';\n this.setDragGhostZIndex();\n }\n }\n\n /** When dragged chip is let go outside a proper drop zone */\n public onMoveEnd(): void {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n if (this.dropGhostExpression) {\n //If there is a ghost chip presented to the user, execute drop\n this.onChipDropped();\n } else {\n this.resetDragAndDrop(true);\n }\n\n this._ghostChipMousemoveSubscription$?.unsubscribe();\n this._keyboardSubscription$?.unsubscribe();\n }\n\n /** When mouse drag enters a chip's area\n * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n */\n public onChipEnter(targetDragElement: HTMLElement, targetExpressionItem: ExpressionItem) {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n //If entering the one that's been picked up don't do any thing\n if (targetExpressionItem === this.dropGhostExpression) {\n return;\n }\n\n //Simulate leaving the last entered chip in case of no Leave event triggered due to the artificial drop zone of a north positioned ghost chip\n if (this._targetExpressionItem) {\n this.resetDragAndDrop(false);\n }\n\n this._targetExpressionItem = targetExpressionItem;\n\n //Determine the middle point of the chip.\n const appendUnder = this.ghostInLowerPart(targetDragElement);\n\n this.renderDropGhostChip(appendUnder);\n }\n\n /** When mouse drag moves in a div's drop area\n * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n */\n public onDivOver(targetDragElement: HTMLElement, targetExpressionItem: ExpressionItem) {\n if (this._targetExpressionItem === targetExpressionItem) {\n this.onChipOver(targetDragElement)\n } else {\n this.onChipEnter(targetDragElement, targetExpressionItem);\n }\n }\n\n /** When mouse drag moves in a chip's drop area\n * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n */\n public onChipOver(targetDragElement: HTMLElement): void {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n //Determine the middle point of the chip.\n const appendUnder = this.ghostInLowerPart(targetDragElement);\n\n this.renderDropGhostChip(appendUnder);\n }\n\n /** When mouse drag leaves a chip's drop area */\n public onChipLeave() {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n //if the drag ghost is on the drop ghost row don't trigger leave\n if (this.dragGhostIsOnDropGhostRow()) {\n return;\n }\n\n if (this._targetExpressionItem) {\n this.resetDragAndDrop(false)\n }\n }\n\n /** When dragged chip is let go in div's drop area\n * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n */\n public onDivDropped(targetExpressionItem: ExpressionItem) {\n if (targetExpressionItem !== this._sourceExpressionItem) {\n this.onChipDropped();\n }\n }\n\n /** When dragged chip is let go in chip's drop area */\n public onChipDropped() {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n //Determine which chip to be focused after drop completes\n const [dropLocationIndex, _] = this.countChipsBeforeDropLocation(this._queryBuilderTreeComponent.rootGroup);\n\n //Delete from old place\n this._queryBuilderTreeComponent.deleteItem(this._sourceExpressionItem);\n this.dropGhostExpression = null;\n\n this._queryBuilderTreeComponent.focusChipAfterDrag(dropLocationIndex);\n\n this.resetDragAndDrop(true);\n\n this._queryBuilderTreeComponent.exitEditAddMode();\n }\n\n /** When mouse drag moves in a AND/OR drop area\n * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n */\n public onGroupRootOver(targetDragElement: HTMLElement, targetExpressionItem: ExpressionGroupItem) {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n let newTargetExpressionItem;\n\n if (this.ghostInLowerPart(targetDragElement) || !targetExpressionItem.parent) {\n //if ghost is in lower part of the AND/OR (or it's the main group) => drop as first child of that group\n //accounting for the fact that the drop ghost might already be there as first child\n if (targetExpressionItem.children[0] !== this.dropGhostExpression) {\n newTargetExpressionItem = targetExpressionItem.children[0];\n } else {\n newTargetExpressionItem = targetExpressionItem.children[1];\n }\n } else {\n //if ghost is in upper part => drop before the group starts\n newTargetExpressionItem = targetExpressionItem;\n }\n\n if (this._targetExpressionItem !== newTargetExpressionItem) {\n this.resetDragAndDrop(false);\n this._targetExpressionItem = newTargetExpressionItem;\n this.renderDropGhostChip(false);\n }\n }\n\n /** When mouse drag moves in 'Add condition' button's drop area\n * @param addConditionElement The Add condition button HTML Element\n * @param rootGroup The root group of the query tree\n */\n public onAddConditionEnter(addConditionElement: HTMLElement, rootGroup: ExpressionGroupItem) {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n const lastElement = addConditionElement.parentElement.previousElementSibling.lastElementChild;\n\n //simulate entering in the lower part of the last chip/group\n this.onChipEnter(lastElement as HTMLElement, rootGroup.children[rootGroup.children.length - 1]);\n }\n\n /** When chip's drag indicator is focused\n *\n * @param sourceDragElement The HTML element of the chip that's been dragged\n * @param sourceExpressionItem The expressionItem of the chip that's been dragged\n *\n */\n public onChipDragIndicatorFocus(sourceDragElement: HTMLElement, sourceExpressionItem: ExpressionItem) {\n //if drag is not underway, already\n if (!this.getDropGhostElement) {\n this.onMoveStart(sourceDragElement, sourceExpressionItem, true);\n }\n }\n\n /** When chip's drag indicator looses focus*/\n public onChipDragIndicatorFocusOut() {\n if (this._sourceElement?.style?.display !== 'none') {\n this.resetDragAndDrop(true);\n this._keyboardSubscription$?.unsubscribe();\n }\n }\n\n /** Upon blurring the tree, if Keyboard drag is underway and the next active item is not the drop ghost's drag indicator icon, cancel the drag&drop procedure*/\n public onDragFocusOut() {\n if (this.isKeyboardDrag && this.getDropGhostElement) {\n //have to wait a tick because upon blur, the next activeElement is always body, right before the next element gains focus\n setTimeout(() => {\n if (document.activeElement.className.indexOf(QueryBuilderSelectors.DRAG_INDICATOR) === -1) {\n this.resetDragAndDrop(true);\n this._keyboardSubscription$?.unsubscribe();\n }\n }, 0);\n }\n }\n\n /** Checks if the dragged ghost is horizontally on the same line with the drop ghost*/\n private dragGhostIsOnDropGhostRow() {\n const dragGhostBounds = this.getDragGhostElement.getBoundingClientRect();\n\n const dropGhostBounds = this.getDropGhostElement?.nativeElement?.parentElement.getBoundingClientRect();\n\n if (!dragGhostBounds || !dropGhostBounds) {\n return false;\n }\n\n const tolerance = dragGhostBounds.bottom - dragGhostBounds.top;\n\n return !(dragGhostBounds.bottom < dropGhostBounds.top - tolerance || dragGhostBounds.top > dropGhostBounds.bottom + tolerance);\n }\n\n /** Checks if the dragged ghost is north or south of a target element's center*/\n private ghostInLowerPart(ofElement: HTMLElement) {\n const ghostBounds = this.getDragGhostElement.getBoundingClientRect();\n const targetBounds = ofElement.getBoundingClientRect();\n\n return ((ghostBounds.top + ghostBounds.bottom) / 2) >= ((targetBounds.top + targetBounds.bottom) / 2);\n }\n\n /** Make a copy of the _sourceExpressionItem's chip and paste it in the tree north or south of the _targetExpressionItem's chip */\n private renderDropGhostChip(appendUnder: boolean): void {\n if (appendUnder !== this._dropUnder || this.isKeyboardDrag) {\n this.clearDropGhost();\n\n //Copy dragged chip\n const dragCopy = { ...this._sourceExpressionItem };\n dragCopy.parent = this._targetExpressionItem.parent;\n this.dropGhostExpression = dragCopy;\n\n //Paste chip\n this._dropUnder = appendUnder;\n const pasteIndex = this._targetExpressionItem.parent.children.indexOf(this._targetExpressionItem);\n this._targetExpressionItem.parent.children.splice(pasteIndex + (this._dropUnder ? 1 : 0), 0, dragCopy);\n }\n\n //Put focus on the drag icon of the ghost while performing keyboard drag\n if (this.isKeyboardDrag) {\n setTimeout(() => { // this will make the execution after the drop ghost is rendered\n const dropGhostDragIndicator = this.getDropGhostElement?.nativeElement?.querySelector(`.${QueryBuilderSelectors.DRAG_INDICATOR}`) as HTMLElement;\n if (dropGhostDragIndicator) {\n dropGhostDragIndicator.focus();\n }\n }, 0);\n }\n\n //Attach a mousemove event listener (if not already in place) to the dragged ghost (if present)\n if (!this.isKeyboardDrag && this.getDragGhostElement && (!this._ghostChipMousemoveSubscription$ || this._ghostChipMousemoveSubscription$?.closed === true)) {\n const mouseMoves = fromEvent<MouseEvent>(this.getDragGhostElement, 'mousemove');\n\n //When mouse moves and there is a drop ghost => trigger onChipLeave to check if the drop ghost has to be removed\n //effectively solving the case when mouse leaves the QB and a drop ghost is still in place\n this._ghostChipMousemoveSubscription$ = mouseMoves.pipe(sampleTime(100)).subscribe(() => {\n if (this.getDropGhostElement) {\n this.onChipLeave();\n }\n });\n }\n\n this.setDragCursor('grab');\n }\n\n /** Set the cursor when dragging a ghost*/\n private setDragCursor(cursor: string) {\n if (this.getDragGhostElement) {\n this.getDragGhostElement.style.cursor = cursor;\n }\n }\n\n /** Removes the drop ghost expression from the tree and it's chip effectively */\n private clearDropGhost() {\n if (this.dropGhostExpression) {\n const children = this.dropGhostExpression.parent.children;\n const delIndex = children.indexOf(this.dropGhostExpression);\n children.splice(delIndex, 1);\n this.dropGhostExpression = null;\n }\n }\n\n /** Reset Drag&Drop vars. Optionally the drag source vars too*/\n private resetDragAndDrop(clearDragged: boolean) {\n this._targetExpressionItem = null;\n this._dropUnder = null;\n this.clearDropGhost();\n this._keyDragInitialIndex = 0;\n this._keyDragCurrentIndex = 0;\n this._possibleDropLocations = null;\n this._isKeyDragsFirstMove = true;\n this.setDragCursor('no-drop');\n\n if (this._queryBuilderTreeComponent._expressionTreeCopy) {\n this._queryBuilderTreeComponent._expressionTree = this._queryBuilderTreeComponent._expressionTreeCopy;\n }\n\n if ((clearDragged || this.isKeyboardDrag) && this._sourceElement) {\n this._sourceElement.style.display = '';\n }\n\n if (clearDragged) {\n this._queryBuilderTreeComponent._expressionTreeCopy = null;\n this._sourceExpressionItem = null;\n this._sourceElement = null;\n }\n }\n\n /** Start listening for drag and drop specific keys */\n private listenToKeyboard() {\n this._keyboardSubscription$?.unsubscribe();\n this._keyboardSubscription$ = fromEvent<KeyboardEvent>(this.getMainExpressionTree, 'keydown')\n .pipe(filter(e => ['ArrowUp', 'ArrowDown', 'Enter', 'Space', 'Escape', 'Tab'].includes(e.key)))\n // .pipe(tap(e => {\n // //Inhibit Tabs if keyboard drag is underway (don't allow to loose focus of the drop ghost's drag indicator)\n // if (e.key === 'Tab' && this.getDropGhostElement) {\n // e.preventDefault();\n // }\n // }))\n .pipe(filter(event => !event.repeat))\n .subscribe(e => {\n if (e.key === 'Escape') {\n //TODO cancel mouse drag once it's implemented in igx-chip draggable\n this.resetDragAndDrop(false);\n //Regain focus on the drag icon after keyboard drag cancel\n if (this.isKeyboardDrag) {\n (this._sourceElement.firstElementChild.firstElementChild.firstElementChild.firstElementChild as HTMLElement).focus();\n }\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n this.arrowDrag(e.key);\n } else if (e.key === 'Enter' || e.key === 'Space') {\n //this.platform.isActivationKey(eventArgs) Maybe use this rather that Enter/Space?\n this.onChipDropped();\n this._keyboardSubscription$.unsubscribe();\n }\n });\n }\n\n /** Perform up/down movement of drop ghost along the expression tree*/\n private arrowDrag(key: string) {\n if (!this._sourceElement || !this._sourceExpressionItem) {\n return;\n }\n\n const rootGroup = this._queryBuilderTreeComponent.rootGroup;\n\n if (this._isKeyDragsFirstMove) {\n this._possibleDropLocations = this.getPossibleDropLocations(rootGroup, true);\n this._keyDragInitialIndex = this._possibleDropLocations.findIndex(e => e[0] === this._sourceExpressionItem && e[1] === true);\n this._keyDragCurrentIndex = this._keyDragInitialIndex;\n if (this._keyDragInitialIndex === -1) {\n console.error(\"Dragged expression not found\");\n }\n this._sourceElement.style.display = 'none';\n }\n\n let newKeyIndexOffset = this._keyDragCurrentIndex;\n if (key === 'ArrowUp') {\n //decrease index capped at top of tree\n newKeyIndexOffset && newKeyIndexOffset--;\n } else if (key === 'ArrowDown') {\n //increase index capped at bottom of tree\n newKeyIndexOffset < this._possibleDropLocations.length - 1 && newKeyIndexOffset++;\n } else {\n console.error('wrong key');\n return;\n }\n\n //if drop location has no change\n if (newKeyIndexOffset !== this._keyDragCurrentIndex || this._isKeyDragsFirstMove) {\n this._keyDragCurrentIndex = newKeyIndexOffset;\n\n const newDropTarget = this._possibleDropLocations[this._keyDragCurrentIndex];\n this._targetExpressionItem = newDropTarget[0]\n\n this.renderDropGhostChip(newDropTarget[1]);\n\n //Situations when drop ghost hasn't really moved, run one more time\n if (this._keyDragCurrentIndex === this._keyDragInitialIndex ||\n (this._isKeyDragsFirstMove && this._keyDragCurrentIndex === this._keyDragInitialIndex - 1)) {\n this._isKeyDragsFirstMove = false;\n this.arrowDrag(key);\n }\n\n this._isKeyDragsFirstMove = false;\n }\n\n return;\n }\n\n /** Produces a flat ordered list of possible drop locations as Tuple <[targetExpression, dropUnder]>, while performing the keyboard drag&drop */\n private getPossibleDropLocations(group: ExpressionGroupItem, isRoot: boolean): Array<[ExpressionItem, boolean]> {\n const result = new Array() as Array<[ExpressionItem, boolean]>;\n\n //Add dropZone under AND/OR (as first child of group)\n result.push([(group as ExpressionGroupItem).children[0], false]);\n\n for (let i = 0; i < group.children.length; i++) {\n if (group.children[i] instanceof ExpressionGroupItem) {\n result.push(...this.getPossibleDropLocations(group.children[i] as ExpressionGroupItem, false));\n } else {\n result.push([group.children[i], true]);\n }\n }\n\n //Add dropZone under the whole group\n if (!isRoot) {\n result.push([group, true]);\n }\n\n return result;\n }\n\n /** Counts how many chips will be in the tree (from top to bottom) before the dropped one */\n private countChipsBeforeDropLocation(group: ExpressionGroupItem): [number, boolean] {\n let count = 0, totalCount = 0, targetReached = false;\n\n for (let i = 0; i < group.children.length; i++) {\n const child = group.children[i];\n\n if (targetReached) {\n break;\n }\n\n if (child instanceof ExpressionGroupItem) {\n if (child === this._targetExpressionItem) {\n if (this._dropUnder) {\n [count] = this.countChipsBeforeDropLocation(child as ExpressionGroupItem);\n totalCount += count;\n }\n targetReached = true;\n } else {\n [count, targetReached] = this.countChipsBeforeDropLocation(child as ExpressionGroupItem);\n totalCount += count;\n }\n } else {\n if (child !== this._sourceExpressionItem && //not the hidden source chip\n child !== this.dropGhostExpression && //not the drop ghost\n !((child as ExpressionOperandItem).inEditMode && this._queryBuilderTreeComponent.operandCanBeCommitted() !== true) //not a chip in edit mode that will be discarded\n ) {\n totalCount++;\n }\n\n if (child === this._targetExpressionItem) {\n targetReached = true;\n if (!this._dropUnder &&\n !((child as ExpressionOperandItem).inEditMode && this._queryBuilderTreeComponent.operandCanBeCommitted() !== true)) {\n totalCount--;\n }\n }\n }\n }\n\n totalCount === -1 && totalCount++;\n\n return [totalCount, targetReached];\n }\n\n /** Sets the z-index of the drag ghost with a little delay, since we don't have access to ghostCreated() but we know it's executed right after moveStart() */\n private setDragGhostZIndex() {\n if (this._timeoutId) {\n clearTimeout(this._timeoutId);\n }\n\n this._timeoutId = setTimeout(() => {\n if (this.getDragGhostElement?.style) {\n this.getDragGhostElement.style.zIndex = `${Z_INDEX_TO_SET}`;\n }\n }, DEFAULT_SET_Z_INDEX_DELAY);\n }\n}\n","import {\n AfterViewInit,\n EventEmitter,\n LOCALE_ID,\n Output,\n TemplateRef\n} from '@angular/core';\nimport { getLocaleFirstDayOfWeek, NgTemplateOutlet, NgClass, DatePipe } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport {\n Component, Input, ViewChild, ChangeDetectorRef, ViewChildren, QueryList, ElementRef, OnDestroy, HostBinding\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\nimport {\n IQueryBuilderResourceStrings,\n QueryBuilderResourceStringsEN,\n PlatformUtil,\n trackByIdentity,\n GridColumnDataType,\n DataUtil,\n IgxBooleanFilteringOperand,\n IgxDateFilteringOperand,\n IgxDateTimeFilteringOperand,\n IgxNumberFilteringOperand,\n IgxStringFilteringOperand,\n IgxTimeFilteringOperand,\n FilteringLogic,\n IFilteringExpression,\n FilteringExpressionsTree,\n IExpressionTree,\n IFilteringExpressionsTree,\n FieldType,\n EntityType,\n HorizontalAlignment,\n OverlaySettings,\n VerticalAlignment,\n AbsoluteScrollStrategy,\n AutoPositionStrategy,\n CloseScrollStrategy,\n ConnectedPositioningStrategy,\n IgxPickerToggleComponent,\n IgxPickerClearComponent,\n getCurrentResourceStrings,\n isTree,\n IgxOverlayOutletDirective\n} from 'igniteui-angular/core';\nimport { IgxDatePickerComponent } from 'igniteui-angular/date-picker';\n\nimport {\n IgxButtonDirective,\n IgxDateTimeEditorDirective,\n IgxIconButtonDirective,\n IgxTooltipDirective,\n IgxTooltipTargetDirective,\n IgxDragIgnoreDirective,\n IgxDropDirective\n} from 'igniteui-angular/directives';\nimport { IgxSelectComponent } from 'igniteui-angular/select';\nimport { IgxTimePickerComponent } from 'igniteui-angular/time-picker';\nimport { IgxInputGroupComponent, IgxInputDirective, IgxPrefixDirective } from 'igniteui-angular/input-group';\nimport { IgxSelectItemComponent } from 'igniteui-angular/select';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IComboSelectionChangingEventArgs, IgxComboComponent, IgxComboHeaderDirective } from 'igniteui-angular/combo';\nimport { IgxCheckboxComponent, IChangeCheckboxEventArgs } from 'igniteui-angular/checkbox';\nimport { IgxDialogComponent } from 'igniteui-angular/dialog';\nimport {\n ISelectionEventArgs,\n IgxDropDownComponent,\n IgxDropDownItemComponent,\n IgxDropDownItemNavigationDirective\n} from 'igniteui-angular/drop-down';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\nimport { IgxQueryBuilderComponent } from './query-builder.component';\nimport { IgxQueryBuilderDragService } from './query-builder-drag.service';\nimport { ExpressionGroupItem, ExpressionItem, ExpressionOperandItem, IgxFieldFormatterPipe } from './query-builder.common';\n\nconst DEFAULT_PIPE_DATE_FORMAT = 'mediumDate';\nconst DEFAULT_PIPE_TIME_FORMAT = 'mediumTime';\nconst DEFAULT_PIPE_DATE_TIME_FORMAT = 'medium';\nconst DEFAULT_PIPE_DIGITS_INFO = '1.0-3';\nconst DEFAULT_CHIP_FOCUS_DELAY = 50;\n\n/** @hidden */\n@Component({\n selector: 'igx-query-builder-tree',\n templateUrl: './query-builder-tree.component.html',\n host: { 'class': 'igx-query-builder-tree' },\n imports: [\n DatePipe,\n FormsModule,\n IgxButtonDirective,\n IgxCheckboxComponent,\n IgxChipComponent,\n IgxComboComponent,\n IgxComboHeaderDirective,\n IgxDatePickerComponent,\n IgxDateTimeEditorDirective,\n IgxDialogComponent,\n IgxDragIgnoreDirective,\n IgxDropDirective,\n IgxDropDownComponent,\n IgxDropDownItemComponent,\n IgxDropDownItemNavigationDirective,\n IgxFieldFormatterPipe,\n IgxIconButtonDirective,\n IgxIconComponent,\n IgxInputDirective,\n IgxInputGroupComponent,\n IgxOverlayOutletDirective,\n IgxPickerClearComponent,\n IgxPickerToggleComponent,\n IgxPrefixDirective,\n IgxSelectComponent,\n IgxSelectItemComponent,\n IgxTimePickerComponent,\n IgxTooltipDirective,\n IgxTooltipTargetDirective,\n NgClass,\n NgTemplateOutlet\n ],\n providers: [\n IgxQueryBuilderDragService\n ],\n})\nexport class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {\n /**\n * @hidden @internal\n */\n public _expressionTree: IExpressionTree;\n\n /**\n * @hidden @internal\n */\n public _expressionTreeCopy: IExpressionTree;\n\n /**\n * @hidden @internal\n */\n @HostBinding('class') public get getClass() {\n return `igx-query-builder-tree--level-${this.level}`;\n }\n\n /**\n * Sets/gets the entities.\n */\n @Input()\n public entities: EntityType[];\n\n /**\n * Sets/gets the parent query builder component.\n */\n @Input()\n public queryBuilder: IgxQueryBuilderComponent;\n\n /**\n * Sets/gets the search value template.\n */\n @Input()\n public searchValueTemplate: TemplateRef<IgxQueryBuilderSearchValueTemplateDirective> = null;\n\n /**\n * Returns the parent expression operand.\n */\n @Input()\n public get parentExpression(): ExpressionOperandItem {\n return this._parentExpression;\n }\n\n /**\n * Sets the parent expression operand.\n */\n public set parentExpression(value: ExpressionOperandItem) {\n this._parentExpression = value;\n }\n\n /**\n * Returns the fields.\n */\n public get fields(): FieldType[] {\n if (!this._fields && this.isAdvancedFiltering()) {\n this._fields = this.entities[0].fields;\n }\n\n return this._fields;\n }\n\n /**\n * Sets the fields.\n */\n @Input()\n public set fields(fields: FieldType[]) {\n this._fields = fields;\n\n this._fields = this._fields?.map(f => ({...f, filters: this.getFilters(f), pipeArgs: this.getPipeArgs(f) }));\n\n if (!this._fields && this.isAdvancedFiltering()) {\n this._fields = this.entities[0].fields;\n }\n }\n\n /**\n * Returns the expression tree.\n */\n public get expressionTree(): IExpressionTree {\n return this._expressionTree;\n }\n\n /**\n * Sets the expression tree.\n */\n @Input()\n public set expressionTree(expressionTree: IExpressionTree) {\n this._expressionTree = expressionTree;\n if (!expressionTree) {\n this._selectedEntity = this.isAdvancedFiltering() && this.entities.length === 1 ? this.entities[0] : null;\n this._selectedReturnFields = this._selectedEntity ? this._selectedEntity.fields?.map(f => f.field) : [];\n }\n\n if (!this._preventInit) {\n this.init();\n }\n }\n\n /**\n * Gets the `locale` of the query builder.\n * If not set, defaults to application's locale.\n */\n @Input()\n public get locale(): string {\n return this._locale;\n }\n\n /**\n * Sets the `locale` of the query builder.\n * Expects a valid BCP 47 language tag.\n */\n public set locale(value: string) {\n this._locale = value;\n // if value is invalid, set it back to _localeId\n try {\n getLocaleFirstDayOfWeek(this._locale);\n } catch {\n this._locale = this._localeId;\n }\n }\n\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n */\n @Input()\n public set resourceStrings(value: IQueryBuilderResourceStrings) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n\n /**\n * Returns the resource strings.\n */\n public get resourceStrings(): IQueryBuilderResourceStrings {\n return this._resourceStrings;\n }\n\n /**\n * Gets/sets the expected return field.\n */\n @Input() public expectedReturnField: string = null;\n\n /**\n * Event fired as the expression tree is changed.\n */\n @Output()\n public expressionTreeChange = new EventEmitter<IExpressionTree>();\n\n /**\n * Event fired if a nested query builder tree is being edited.\n */\n @Output()\n public inEditModeChange = new EventEmitter<ExpressionOperandItem>();\n\n @ViewChild('entitySelect', { read: IgxSelectComponent })\n protected entitySelect: IgxSelectComponent;\n\n @ViewChild('editingInputs', { read: ElementRef })\n private editingInputs: ElementRef;\n\n @ViewChild('returnFieldsCombo', { read: IgxComboComponent })\n private returnFieldsCombo: IgxComboComponent;\n\n @ViewChild('returnFieldSelect', { read: IgxSelectComponent })\n protected returnFieldSelect: IgxSelectComponent;\n\n @ViewChild('fieldSelect', { read: IgxSelectComponent })\n private fieldSelect: IgxSelectComponent;\n\n @ViewChild('conditionSelect', { read: IgxSelectComponent })\n private conditionSelect: IgxSelectComponent;\n\n @ViewChild('searchValueInput', { read: ElementRef })\n private searchValueInput: ElementRef;\n\n @ViewChild('picker')\n private picker: IgxDatePickerComponent | IgxTimePickerComponent;\n\n @ViewChild('addRootAndGroupButton', { read: ElementRef })\n private addRootAndGroupButton: ElementRef;\n\n @ViewChild('addConditionButton', { read: ElementRef })\n private addConditionButton: ElementRef;\n\n @ViewChild('entityChangeDialog', { read: IgxDialogComponent })\n private entityChangeDialog: IgxDialogComponent;\n\n @ViewChild('addOptionsDropDown', { read: IgxDropDownComponent })\n private addExpressionItemDropDown: IgxDropDownComponent;\n\n @ViewChild('groupContextMenuDropDown', { read: IgxDropDownComponent })\n private groupContextMenuDropDown: IgxDropDownComponent;\n\n /**\n * @hidden @internal\n */\n @ViewChildren(IgxChipComponent, { read: IgxChipComponent })\n public expressionsChips: QueryList<IgxChipComponent>;\n\n @ViewChild('editingInputsContainer', { read: ElementRef })\n protected set editingInputsContainer(value: ElementRef) {\n if ((value && !this._editingInputsContainer) ||\n (value && this._editingInputsContainer && this._editingInputsContainer.nativeElement !== value.nativeElement)) {\n requestAnimationFrame(() => {\n this.scrollElementIntoView(value.nativeElement);\n });\n }\n\n this._editingInputsContainer = value;\n }\n\n /** @hidden */\n protected get editingInputsContainer(): ElementRef {\n return this._editingInputsContainer;\n }\n\n @ViewChild('currentGroupButtonsContainer', { read: ElementRef })\n protected set currentGroupButtonsContainer(value: ElementRef) {\n if ((value && !this._currentGroupButtonsContainer) ||\n (value && this._currentGroupButtonsContainer && this._currentGroupButtonsContainer.nativeElement !== value.nativeElement)) {\n requestAnimationFrame(() => {\n this.scrollElementIntoView(value.nativeElement);\n });\n }\n\n this._currentGroupButtonsContainer = value;\n }\n\n /** @hidden */\n protected get currentGroupButtonsContainer(): ElementRef {\n return this._currentGroupButtonsContainer;\n }\n\n @ViewChild('expressionsContainer')\n private expressionsContainer: ElementRef;\n\n @ViewChild('overlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n private overlayOutlet: IgxOverlayOutletDirective;\n\n @ViewChildren(IgxQueryBuilderTreeComponent)\n private innerQueries: QueryList<IgxQueryBuilderTreeComponent>;\n\n /**\n * @hidden @internal\n */\n public innerQueryNewExpressionTree: IExpressionTree;\n\n /**\n * @hidden @internal\n */\n public rootGroup: ExpressionGroupItem;\n\n /**\n * @hidden @internal\n */\n public selectedExpressions: ExpressionOperandItem[] = [];\n\n /**\n * @hidden @internal\n */\n public currentGroup: ExpressionGroupItem;\n\n /**\n * @hidden @internal\n */\n public contextualGroup: ExpressionGroupItem;\n\n /**\n * @hidden @internal\n */\n public filteringLogics;\n\n /**\n * @hidden @internal\n */\n public selectedCondition: string;\n\n /**\n * @hidden @internal\n */\n public searchValue: { value: any } = { value: null };\n\n /**\n * @hidden @internal\n */\n public pickerOutlet: IgxOverlayOutletDirective | ElementRef;\n\n /**\n * @hidden @internal\n */\n public prevFocusedExpression: ExpressionOperandItem;\n\n /**\n * @hidden @internal\n */\n public initialOperator = 0;\n\n /**\n * @hidden @internal\n */\n public returnFieldSelectOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n /**\n * @hidden @internal\n */\n public entitySelectOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n /**\n * @hidden @internal\n */\n public fieldSelectOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n /**\n * @hidden @internal\n */\n public conditionSelectOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n /**\n * @hidden @internal\n */\n public addExpressionDropDownOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n /**\n * @hidden @internal\n */\n public groupContextMenuDropDownOverlaySettings: OverlaySettings = {\n scrollStrategy: new AbsoluteScrollStrategy(),\n modal: false,\n closeOnOutsideClick: true\n };\n\n private destroy$ = new Subject<any>();\n private _timeoutId: any;\n private _lastFocusedChipIndex: number;\n private _focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n private _parentExpression: ExpressionOperandItem;\n private _selectedEntity: EntityType;\n private _selectedReturnFields: string | string[];\n private _selectedField: FieldType;\n private _editingInputsContainer: ElementRef;\n private _currentGroupButtonsContainer: ElementRef;\n private _addModeExpression: ExpressionOperandItem;\n private _editedExpression: ExpressionOperandItem;\n private _preventInit = false;\n private _prevFocusedContainer: ElementRef;\n private _expandedExpressions: IFilteringExpression[] = [];\n private _fields: FieldType[];\n private _locale;\n private _entityNewValue: EntityType;\n private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n\n /**\n * Returns if the select entity dropdown at the root level is disabled after the initial selection.\n */\n public get disableEntityChange(): boolean {\n\n return !this.parentExpression && this.selectedEntity ? this.queryBuilder.disableEntityChange : false;\n }\n\n /**\n * Returns if the fields combo at the root level is disabled.\n */\n public get disableReturnFieldsChange(): boolean {\n\n return !this.selectedEntity || this.queryBuilder.disableReturnFieldsChange;\n }\n\n /**\n * Returns the current level.\n */\n public get level(): number {\n let parent = this.elRef.nativeElement.parentElement;\n let _level = 0;\n while (parent) {\n if (parent.localName === 'igx-query-builder-tree') {\n _level++;\n }\n parent = parent.parentElement;\n }\n return _level;\n }\n\n private _positionSettings = {\n horizontalStartPoint: HorizontalAlignment.Right,\n verticalStartPoint: VerticalAlignment.Top\n };\n\n private _overlaySettings: OverlaySettings = {\n closeOnOutsideClick: false,\n modal: false,\n positionStrategy: new ConnectedPositioningStrategy(this._positionSettings),\n scrollStrategy: new CloseScrollStrategy()\n };\n\n /** @hidden */\n protected isAdvancedFiltering(): boolean {\n return (this.entities?.length === 1 && !this.entities[0]?.name) ||\n this.entities?.find(e => e.childEntities?.length > 0) !== undefined ||\n (this.entities?.length > 0 && this.queryBuilder?.entities?.length > 0 && this.entities !== this.queryBuilder?.entities);\n }\n\n /** @hidden */\n protected isHierarchicalNestedQuery(): boolean {\n return this.queryBuilder.entities !== this.entities\n }\n\n /** @hidden */\n protected isSearchValueInputDisabled(): boolean {\n return !this.selectedField ||\n !this.selectedCondition ||\n (this.selectedField &&\n (this.selectedField.filters.condition(this.selectedCondition).isUnary ||\n this.selectedField.filters.condition(this.selectedCondition).isNestedQuery));\n }\n\n constructor(public cdr: ChangeDetectorRef,\n public dragService: IgxQueryBuilderDragService,\n protected platform: PlatformUtil,\n private elRef: ElementRef,\n @Inject(LOCALE_ID) protected _localeId: string) {\n this.locale = this.locale || this._localeId;\n this.dragService.register(this, elRef);\n }\n\n /**\n * @hidden @internal\n */\n public ngAfterViewInit(): void {\n this._overlaySettings.outlet = this.overlayOutlet;\n this.entitySelectOverlaySettings.outlet = this.overlayOutlet;\n this.fieldSelectOverlaySettings.outlet = this.overlayOutlet;\n this.conditionSelectOverlaySettings.outlet = this.overlayOutlet;\n this.returnFieldSelectOverlaySettings.outlet = this.overlayOutlet;\n this.addExpressionDropDownOverlaySettings.outlet = this.overlayOutlet;\n this.groupContextMenuDropDownOverlaySettings.outlet = this.overlayOutlet;\n\n if (this.isAdvancedFiltering() && this.entities?.length === 1) {\n this.selectedEntity = this.entities[0].name;\n if (this._selectedEntity.fields.find(f => f.field === this.expectedReturnField)) {\n this._selectedReturnFields = [this.expectedReturnField];\n }\n }\n\n // Trigger additional change detection cycle\n this.cdr.detectChanges();\n }\n\n /**\n * @hidden @internal\n */\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n /**\n * @hidden @internal\n */\n public set selectedEntity(value: string) {\n this._selectedEntity = this.entities?.find(el => el.name === value);\n }\n\n /**\n * @hidden @internal\n */\n public get selectedEntity(): EntityType {\n return this._selectedEntity;\n }\n\n /**\n * @hidden @internal\n */\n public onEntitySelectChanging(event: ISelectionEventArgs) {\n event.cancel = true;\n this._entityNewValue = event.newSelection.value;\n if (event.oldSelection.value && this.queryBuilder.showEntityChangeDialog) {\n this.entityChangeDialog.open();\n } else {\n this.onEntityChangeConfirm();\n }\n }\n\n /**\n * @hidden\n */\n public onShowEntityChangeDialogChange(eventArgs: IChangeCheckboxEventArgs) {\n this.queryBuilder.showEntityChangeDialog = !eventArgs.checked;\n }\n\n /**\n * @hidden\n */\n public onEntityChangeCancel() {\n this.entityChangeDialog.close();\n this.entitySelect.close();\n this._entityNewValue = null;\n }\n\n /**\n * @hidden\n */\n public onEntityChangeConfirm() {\n if (this._parentExpression) {\n this._expressionTree = this.createExpressionTreeFromGroupItem(this.createExpressionGroupItem(this._expressionTree));\n }\n\n this._selectedEntity = this._entityNewValue;\n if (!this._selectedEntity.fields) {\n this._selectedEntity.fields = [];\n }\n this.fields = this._entityNewValue ? this._entityNewValue.fields : [];\n\n if (this._selectedEntity.fields.find(f => f.field === this.expectedReturnField)) {\n this._selectedReturnFields = [this.expectedReturnField];\n } else {\n this._selectedReturnFields = this.parentExpression ? [] : this._entityNewValue.fields?.map(f => f.field);\n }\n\n if (this._expressionTree) {\n this._expressionTree.entity = this._entityNewValue.name;\n\n const returnFields = Array.isArray(this._selectedReturnFields) ? this._selectedReturnFields : [this._selectedReturnFields];\n this._expressionTree.returnFields = this.fields.length === returnFields.length ? ['*'] : returnFields;\n\n this._expressionTree.filteringOperands = [];\n\n this._editedExpression = null;\n if (!this.parentExpression) {\n this.expressionTreeChange.emit(this._expressionTree);\n }\n\n this.rootGroup = null;\n this.currentGroup = this.rootGroup;\n }\n\n this._selectedField = null;\n this.selectedCondition = null;\n this.searchValue.value = null;\n\n this.entityChangeDialog.close();\n this.entitySelect.close();\n\n this._entityNewValue = null;\n this.innerQueryNewExpressionTree = null;\n\n this.initExpressionTree(this._selectedEntity.name, this.selectedReturnFields);\n }\n\n /**\n * @hidden @internal\n */\n public set selectedReturnFields(value: string[]) {\n if (this._selectedReturnFields !== value) {\n this._selectedReturnFields = value;\n\n if (this._expressionTree && !this.parentExpression) {\n this._expressionTree.returnFields = value.length === this.fields.length ? ['*'] : value;\n this.expressionTreeChange.emit(this._expressionTree);\n }\n }\n }\n\n /**\n * @hidden @internal\n */\n public get selectedReturnFields(): string[] {\n if (typeof this._selectedReturnFields == 'string') {\n return [this._selectedReturnFields];\n }\n return this._selectedReturnFields;\n }\n\n /**\n * @hidden @internal\n */\n public set selectedField(value: FieldType) {\n const oldValue = this._selectedField;\n\n if (this._selectedField !== value) {\n this._selectedField = value;\n if (this._selectedField && !this._selectedField.dataType) {\n this._selectedField.filters = this.getFilters(this._selectedField);\n }\n\n this.selectDefaultCondition();\n if (oldValue && this._selectedField && this._selectedField.dataType !== oldValue.dataType) {\n this.searchValue.value = null;\n this.cdr.detectChanges();\n }\n }\n }\n\n /**\n * @hidden @internal\n */\n public get selectedField(): FieldType {\n return this._selectedField;\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public setPickerOutlet(outlet?: IgxOverlayOutletDirective | ElementRef) {\n this.pickerOutlet = outlet;\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public get isContextMenuVisible(): boolean {\n return !this.groupContextMenuDropDown.collapsed;\n }\n\n /**\n * @hidden @internal\n */\n public get hasEditedExpression(): boolean {\n return this._editedExpression !== undefined && this._editedExpression !== null;\n }\n\n /**\n * @hidden @internal\n */\n public addCondition(parent: ExpressionGroupItem, afterExpression?: ExpressionOperandItem, isUIInteraction?: boolean) {\n this.cancelOperandAdd();\n\n const operandItem = new ExpressionOperandItem({\n fieldName: null,\n condition: null,\n conditionName: null,\n ignoreCase: true,\n searchVal: null\n }, parent);\n\n const groupItem = new ExpressionGroupItem(this.getOperator(null) ?? FilteringLogic.And, parent);\n this.contextualGroup = groupItem;\n this.initialOperator = null;\n\n this._lastFocusedChipIndex = this._lastFocusedChipIndex === undefined ? -1 : this._lastFocusedChipIndex;\n\n if (parent) {\n if (afterExpression) {\n const index = parent.children.indexOf(afterExpression);\n parent.children.splice(index + 1, 0, operandItem);\n } else {\n parent.children.push(operandItem);\n }\n this._lastFocusedChipIndex++;\n } else {\n this.rootGroup = groupItem;\n operandItem.parent = groupItem;\n this.rootGroup.children.push(operandItem);\n this._lastFocusedChipIndex = 0;\n }\n\n this._focusDelay = 250;\n\n if (isUIInteraction && !afterExpression) {\n this._lastFocusedChipIndex = this.expressionsChips.length;\n this._focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n }\n\n this.enterExpressionEdit(operandItem);\n }\n\n /**\n * @hidden @internal\n */\n public addReverseGroup(parent?: ExpressionGroupItem, afterExpression?: ExpressionItem) {\n parent = parent ?? this.rootGroup;\n\n if (parent.operator === FilteringLogic.And) {\n this.addGroup(FilteringLogic.Or, parent, afterExpression);\n } else {\n this.addGroup(FilteringLogic.And, parent, afterExpression);\n }\n }\n\n /**\n * @hidden @internal\n */\n public endGroup(groupItem: ExpressionGroupItem) {\n this.currentGroup = groupItem.parent;\n }\n\n /**\n * @hidden @internal\n */\n public commitExpression() {\n this.commitOperandEdit();\n this.focusEditedExpressionChip();\n }\n\n /**\n * @hidden @internal\n */\n public discardExpression(expressionItem?: ExpressionOperandItem) {\n this.cancelOperandEdit();\n if (expressionItem && expressionItem.expression.fieldName) {\n this.focusEditedExpressionChip();\n }\n }\n\n /**\n * @hidden @internal\n */\n public commitOperandEdit() {\n const actualSearchValue = this.searchValue.value;\n if (this._editedExpression) {\n this._editedExpression.expression.fieldName = this.selectedField.field;\n this._editedExpression.expression.condition = this.selectedField.filters.condition(this.selectedCondition);\n this._editedExpression.expression.conditionName = this.selectedCondition;\n this._editedExpression.expression.searchVal = DataUtil.parseValue(this.selectedField.dataType, actualSearchValue) || actualSearchValue;\n this._editedExpression.fieldLabel = this.selectedField.label\n ? this.selectedField.label\n : this.selectedField.header\n ? this.selectedField.header\n : this.selectedField.field;\n\n const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0]\n if (innerQuery && this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery) {\n innerQuery.exitEditAddMode();\n this._editedExpression.expression.searchTree = this.getExpressionTreeCopy(innerQuery.expressionTree);\n const returnFields = innerQuery.selectedReturnFields.length > 0 ?\n innerQuery.selectedReturnFields :\n [innerQuery.fields[0].field];\n this._editedExpression.expression.searchTree.returnFields = returnFields;\n } else {\n this._editedExpression.expression.searchTree = null;\n }\n this.innerQueryNewExpressionTree = null;\n\n if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary || this.selectedField.filters.condition(this.selectedCondition)?.isNestedQuery) {\n this._editedExpression.expression.searchVal = null;\n }\n\n this._editedExpression.inEditMode = false;\n this._editedExpression = null;\n }\n\n if (this.selectedReturnFields.length === 0) {\n this.selectedReturnFields = this.fields.map(f => f.field);\n }\n\n this._expressionTree = this.createExpressionTreeFromGroupItem(this.rootGroup, this.selectedEntity?.name, this.selectedReturnFields);\n if (!this.parentExpression) {\n this.expressionTreeChange.emit(this._expressionTree);\n }\n }\n\n /**\n * @hidden @internal\n */\n public cancelOperandAdd() {\n if (this._addModeExpression) {\n this._addModeExpression.inAddMode = false;\n this._addModeExpression = null;\n }\n }\n\n /**\n * @hidden @internal\n */\n public deleteItem = (expressionItem: ExpressionItem, skipEmit: boolean = false) => {\n if (!expressionItem.parent) {\n this.rootGroup = null;\n this.currentGroup = null;\n //this._expressionTree = null;\n return;\n }\n\n if (expressionItem === this.currentGroup) {\n this.currentGroup = this.currentGroup.parent;\n }\n\n const children = expressionItem.parent.children;\n const index = children.indexOf(expressionItem);\n children.splice(index, 1);\n const entity = this.expressionTree ? this.expressionTree.entity : null;\n const returnFields = this.expressionTree ? this.expressionTree.returnFields : null;\n this._expressionTree = this.createExpressionTreeFromGroupItem(this.rootGroup, entity, returnFields); // TODO: don't recreate if not necessary\n\n if (!children.length) {\n this.deleteItem(expressionItem.parent, true);\n }\n\n if (!this.parentExpression && !skipEmit) {\n this.expressionTreeChange.emit(this._expressionTree);\n }\n }\n\n /**\n * @hidden @internal\n */\n public cancelOperandEdit() {\n if (this.innerQueries) {\n const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n if (innerQuery) {\n if (innerQuery._editedExpression) {\n innerQuery.cancelOperandEdit();\n }\n\n innerQuery.expressionTree = this.getExpressionTreeCopy(this._editedExpression.expression.searchTree);\n this.innerQueryNewExpressionTree = null;\n }\n }\n\n if (this._editedExpression) {\n this._editedExpression.inEditMode = false;\n\n if (!this._editedExpression.expression.fieldName) {\n this.deleteItem(this._editedExpression);\n }\n\n this._editedExpression = null;\n }\n\n if (!this.expressionTree && this.contextualGroup) {\n this.initialOperator = this.contextualGroup.operator;\n }\n }\n\n /**\n * @hidden @internal\n */\n public operandCanBeCommitted(): boolean {\n const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n return this.selectedField && this.selectedCondition &&\n (\n (\n ((!Array.isArray(this.searchValue.value) && !!this.searchValue.value) || (Array.isArray(this.searchValue.value) && this.searchValue.value.length !== 0)) &&\n !(this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery)\n ) ||\n (\n this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery && innerQuery && !!innerQuery.expressionTree && innerQuery.selectedReturnFields?.length > 0\n ) ||\n this.selectedField.filters.condition(this.selectedCondition)?.isUnary\n );\n }\n\n /**\n * @hidden @internal\n */\n public canCommitCurrentState(): boolean {\n const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n if (innerQuery) {\n return this.selectedReturnFields?.length > 0 && innerQuery.canCommitCurrentState();\n } else {\n return this.selectedReturnFields?.length > 0 &&\n (\n (!this._editedExpression) || // no edited expr\n (this._editedExpression && !this.selectedField) || // empty edited expr\n (this._editedExpression && this.operandCanBeCommitted() === true) // valid edited expr\n );\n }\n }\n\n /**\n * @hidden @internal\n */\n public commitCurrentState(): void {\n const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n if (innerQuery) {\n innerQuery.commitCurrentState();\n }\n\n if (this._editedExpression) {\n if (this.selectedField) {\n this.commitOperandEdit();\n } else {\n this.deleteItem(this._editedExpression);\n this._editedExpression = null;\n }\n }\n }\n\n /**\n * @hidden @internal\n */\n public exitEditAddMode(shouldPreventInit = false) {\n if (!this._editedExpression) {\n return;\n }\n\n this.exitOperandEdit();\n this.cancelOperandAdd();\n\n if (shouldPreventInit) {\n this._preventInit = true;\n }\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public exitOperandEdit() {\n if (!this._editedExpression) {\n return;\n }\n\n if (this.operandCanBeCommitted()) {\n this.commitOperandEdit();\n } else {\n this.cancelOperandEdit();\n }\n }\n\n /**\n * @hidden @internal\n */\n public isExpressionGroup(expression: ExpressionItem): boolean {\n return expression instanceof ExpressionGroupItem;\n }\n\n /**\n * @hidden @internal\n */\n public onExpressionFocus(expressionItem: ExpressionOperandItem) {\n if (this.prevFocusedExpression) {\n this.prevFocusedExpression.focused = false;\n }\n expressionItem.focused = true;\n this.prevFocusedExpression = expressionItem;\n }\n\n /**\n * @hidden @internal\n */\n public onExpressionBlur(event, expressionItem: ExpressionOperandItem) {\n if (this._prevFocusedContainer && this._prevFocusedContainer !== event.target.closest('.igx-filter-tree__expression-item')) {\n expressionItem.focused = false;\n }\n this._prevFocusedContainer = event.target.closest('.igx-filter-tree__expression-item');\n }\n\n /**\n * @hidden @internal\n */\n public onChipRemove(expressionItem: ExpressionItem) {\n this.exitEditAddMode();\n this.deleteItem(expressionItem);\n }\n\n /**\n * @hidden @internal\n */\n public focusChipAfterDrag = (index: number) => {\n this._lastFocusedChipIndex = index;\n this.focusEditedExpressionChip();\n }\n /**\n * @hidden @internal\n */\n public addExpressionBlur() {\n if (this.prevFocusedExpression) {\n this.prevFocusedExpression.focused = false;\n }\n if (this.addExpressionItemDropDown && !this.addExpressionItemDropDown.collapsed) {\n this.addExpressionItemDropDown.close();\n }\n }\n\n /**\n * @hidden @internal\n */\n public onChipClick(expressionItem: ExpressionOperandItem, chip: IgxChipComponent) {\n this.enterExpressionEdit(expressionItem, chip);\n }\n\n /**\n * @hidden @internal\n */\n public enterExpressionEdit(expressionItem: ExpressionOperandItem, chip?: IgxChipComponent) {\n this.exitEditAddMode(true);\n this.cdr.detectChanges();\n this._lastFocusedChipIndex = chip ? this.expressionsChips.toArray().findIndex(expr => expr === chip) : this._lastFocusedChipIndex;\n this.enterEditMode(expressionItem);\n }\n\n\n /**\n * @hidden @internal\n */\n public clickExpressionAdd(targetButton: HTMLElement, chip: IgxChipComponent) {\n this.exitEditAddMode(true);\n this.cdr.detectChanges();\n this._lastFocusedChipIndex = this.expressionsChips.toArray().findIndex(expr => expr === chip);\n this.openExpressionAddDialog(targetButton);\n }\n\n /**\n * @hidden @internal\n */\n public openExpressionAddDialog(targetButton: HTMLElement) {\n this.addExpressionDropDownOverlaySettings.target = targetButton;\n this.addExpressionDropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy({\n horizontalDirection: HorizontalAlignment.Right,\n horizontalStartPoint: HorizontalAlignment.Left,\n verticalStartPoint: VerticalAlignment.Bottom\n });\n\n this.addExpressionItemDropDown.open(this.addExpressionDropDownOverlaySettings);\n }\n\n /**\n * @hidden @internal\n */\n public enterExpressionAdd(event: ISelectionEventArgs, expressionItem: ExpressionOperandItem) {\n if (this._addModeExpression) {\n this._addModeExpression.inAddMode = false;\n }\n\n if (this.parentExpression) {\n this.inEditModeChange.emit(this.parentExpression);\n }\n\n const parent = expressionItem.parent ?? this.rootGroup;\n requestAnimationFrame(() => {\n if (event.newSelection.value === 'addCondition') {\n this.addCondition(parent, expressionItem);\n } else if (event.newSelection.value === 'addGroup') {\n this.addReverseGroup(parent, expressionItem);\n }\n expressionItem.inAddMode = true;\n this._addModeExpression = expressionItem;\n })\n }\n\n /**\n * @hidden @internal\n */\n public enterEditMode(expressionItem: ExpressionOperandItem) {\n if (this._editedExpression) {\n this._editedExpression.inEditMode = false;\n }\n\n if (this.parentExpression) {\n this.inEditModeChange.emit(this.parentExpression);\n }\n\n expressionItem.hovered = false;\n this.fields = this.selectedEntity ? this.selectedEntity.fields : null;\n this.selectedField =\n expressionItem.expression.fieldName ?\n this.fields?.find(field => field.field === expressionItem.expression.fieldName)\n : null;\n this.selectedCondition =\n expressionItem.expression.condition ?\n expressionItem.expression.condition.name :\n null;\n this.searchValue.value = expressionItem.expression.searchVal instanceof Set ?\n Array.from(expressionItem.expression.searchVal) :\n expressionItem.expression.searchVal;\n\n expressionItem.inEditMode = true;\n this._editedExpression = expressionItem;\n this.cdr.detectChanges();\n\n this.entitySelectOverlaySettings.target = this.entitySelect.getEditElement();\n this.entitySelectOverlaySettings.excludeFromOutsideClick = [this.entitySelect.getEditElement() as HTMLElement];\n this.entitySelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n\n if (this.returnFieldSelect) {\n this.returnFieldSelectOverlaySettings.target = this.returnFieldSelect.getEditElement();\n this.returnFieldSelectOverlaySettings.excludeFromOutsideClick = [this.returnFieldSelect.getEditElement() as HTMLElement];\n this.returnFieldSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n }\n if (this.fieldSelect) {\n this.fieldSelectOverlaySettings.target = this.fieldSelect.getEditElement();\n this.fieldSelectOverlaySettings.excludeFromOutsideClick = [this.fieldSelect.getEditElement() as HTMLElement];\n this.fieldSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n }\n if (this.conditionSelect) {\n this.conditionSelectOverlaySettings.target = this.conditionSelect.getEditElement();\n this.conditionSelectOverlaySettings.excludeFromOutsideClick = [this.conditionSelect.getEditElement() as HTMLElement];\n this.conditionSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n }\n\n if (!this.selectedField) {\n this.fieldSelect.input.nativeElement.focus();\n } else if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary) {\n this.conditionSelect?.input.nativeElement.focus();\n } else {\n const input = this.searchValueInput?.nativeElement || this.picker?.getEditElement();\n input?.focus();\n }\n\n (this.editingInputs?.nativeElement.parentElement as HTMLElement)?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n }\n\n /**\n * @hidden @internal\n */\n public onConditionSelectChanging(event: ISelectionEventArgs) {\n event.cancel = true;\n this.selectedCondition = event.newSelection.value;\n this.conditionSelect.close();\n this.cdr.detectChanges();\n }\n\n /**\n * @hidden @internal\n */\n public onKeyDown(eventArgs: KeyboardEvent) {\n eventArgs.stopPropagation();\n }\n\n /**\n * @hidden @internal\n */\n public onGroupClick(groupContextMenuDropDown: any, targetButton: HTMLButtonElement, groupItem: ExpressionGroupItem) {\n this.exitEditAddMode();\n this.cdr.detectChanges();\n\n this.groupContextMenuDropDown = groupContextMenuDropDown;\n this.groupContextMenuDropDownOverlaySettings.target = targetButton;\n this.groupContextMenuDropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy({\n horizontalDirection: HorizontalAlignment.Right,\n horizontalStartPoint: HorizontalAlignment.Left,\n verticalStartPoint: VerticalAlignment.Bottom\n });\n\n if (groupContextMenuDropDown.collapsed) {\n this.contextualGroup = groupItem;\n groupContextMenuDropDown.open(this.groupContextMenuDropDownOverlaySettings);\n } else {\n groupContextMenuDropDown.close();\n }\n }\n\n /**\n * @hidden @internal\n */\n public getOperator(expressionItem: any) {\n // if (!expressionItem && !this.expressionTree && !this.initialOperator) {\n // this.initialOperator = 0;\n // }\n\n const operator = expressionItem ?\n expressionItem.operator :\n this.expressionTree ?\n this.expressionTree.operator :\n this.initialOperator;\n return operator;\n }\n\n /**\n * @hidden @internal\n */\n public getSwitchGroupText(expressionItem: any) {\n const operator = this.getOperator(expressionItem);\n const condition = operator === FilteringLogic.Or ? this.resourceStrings.igx_query_builder_and_label : this.resourceStrings.igx_query_builder_or_label\n return this.resourceStrings.igx_query_builder_switch_group.replace('{0}', condition.toUpperCase());\n }\n\n /**\n * @hidden @internal\n */\n public onGroupContextMenuDropDownSelectionChanging(event: ISelectionEventArgs) {\n event.cancel = true;\n\n if (event.newSelection.value === 'switchCondition') {\n const newOperator = (!this.expressionTree ? this.initialOperator : (this.contextualGroup ?? this._expressionTree).operator) === 0 ? 1 : 0;\n this.selectFilteringLogic(newOperator);\n } else if (event.newSelection.value === 'ungroup') {\n this.ungroup();\n }\n\n this.groupContextMenuDropDown.close();\n }\n\n /**\n * @hidden @internal\n */\n public ungroup() {\n const selectedGroup = this.contextualGroup;\n const parent = selectedGroup.parent;\n if (parent) {\n const index = parent.children.indexOf(selectedGroup);\n parent.children.splice(index, 1, ...selectedGroup.children);\n\n for (const expr of selectedGroup.children) {\n expr.parent = parent;\n }\n }\n this.commitOperandEdit();\n }\n\n /**\n * @hidden @internal\n */\n public selectFilteringLogic(index: number) {\n if (!this.expressionTree) {\n this.initialOperator = index;\n return;\n }\n\n if (this.contextualGroup) {\n this.contextualGroup.operator = index as FilteringLogic;\n this.commitOperandEdit();\n } else if (this.expressionTree) {\n this._expressionTree.operator = index as FilteringLogic;\n }\n\n this.initialOperator = null;\n }\n\n /**\n * @hidden @internal\n */\n public getConditionFriendlyName(name: string): string {\n // As we have an 'In' condition already used in ESF to search in a Set, we add the 'Query' suffix to the newly introduced nested query condition names.\n // So instead of in/notIn we end up with 'inQuery'/'notInQuery', hence removing the suffix from the friendly name.\n return this.resourceStrings[`igx_query_builder_filter_${name?.replace('Query', '')}`] || name;\n }\n\n /**\n * @hidden @internal\n */\n public isDate(value: any) {\n return value instanceof Date;\n }\n\n /**\n * @hidden @internal\n */\n public invokeClick(eventArgs: KeyboardEvent) {\n if (!this.dragService.dropGhostExpression && this.platform.isActivationKey(eventArgs)) {\n eventArgs.preventDefault();\n (eventArgs.currentTarget as HTMLElement).click();\n }\n }\n\n /**\n * @hidden @internal\n */\n public openPicker(args: KeyboardEvent) {\n if (this.platform.isActivationKey(args)) {\n args.preventDefault();\n this.picker.open();\n }\n }\n\n /**\n * @hidden @internal\n */\n public onOutletPointerDown(event) {\n // This prevents closing the select's dropdown when clicking the scroll\n event.preventDefault();\n }\n\n /**\n * @hidden @internal\n */\n public getConditionList(): string[] {\n if (!this.selectedField) return [];\n\n if (!this.selectedField.filters) {\n this.selectedField.filters = this.getFilters(this.selectedField);\n }\n\n if ((this.isAdvancedFiltering() && !this.entities[0].childEntities) ||\n (this.isHierarchicalNestedQuery() && this.selectedEntity.name && !this.selectedEntity.childEntities)) {\n return this.selectedField.filters.conditionList();\n }\n\n return this.selectedField.filters.extendedConditionList();\n }\n\n /**\n * @hidden @internal\n */\n public getFormatter(field: string) {\n return this.fields?.find(el => el.field === field)?.formatter;\n }\n\n /**\n * @hidden @internal\n */\n public getFormat(field: string) {\n return this.fields?.find(el => el.field === field).pipeArgs.format;\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public setAddButtonFocus() {\n if (this.addRootAndGroupButton) {\n this.addRootAndGroupButton.nativeElement.focus();\n } else if (this.addConditionButton) {\n this.addConditionButton.nativeElement.focus();\n }\n }\n\n /**\n * @hidden @internal\n */\n public context(expression: ExpressionItem, afterExpression?: ExpressionItem) {\n return {\n $implicit: expression,\n afterExpression\n };\n }\n\n public formatReturnFields(innerTree: IFilteringExpressionsTree) {\n const returnFields = innerTree.returnFields;\n let text = returnFields.join(', ');\n const innerTreeEntity = this.entities?.find(el => el.name === innerTree.entity);\n if (returnFields.length === innerTreeEntity?.fields.length) {\n text = this.resourceStrings.igx_query_builder_all_fields;\n } else {\n text = returnFields.join(', ');\n text = text.length > 25 ? text.substring(0, 25) + ' ...' : text;\n }\n return text;\n }\n\n public isInEditMode(): boolean {\n return !this.parentExpression || (this.parentExpression && this.parentExpression.inEditMode);\n }\n\n public onInEditModeChanged(expressionItem: ExpressionOperandItem) {\n if (!expressionItem.inEditMode) {\n this.enterExpressionEdit(expressionItem);\n }\n }\n\n public getExpressionTreeCopy(expressionTree: IExpressionTree, shouldAssignInnerQueryExprTree?: boolean): IExpressionTree {\n if (!expressionTree) {\n return null;\n }\n\n const exprTreeCopy = new FilteringExpressionsTree(expressionTree.operator, expressionTree.fieldName, expressionTree.entity, expressionTree.returnFields);\n exprTreeCopy.filteringOperands = [];\n\n expressionTree.filteringOperands.forEach(o => isTree(o) ? exprTreeCopy.filteringOperands.push(this.getExpressionTreeCopy(o)) : exprTreeCopy.filteringOperands.push(o));\n\n if (!this.innerQueryNewExpressionTree && shouldAssignInnerQueryExprTree) {\n this.innerQueryNewExpressionTree = exprTreeCopy;\n }\n\n return exprTreeCopy;\n }\n\n public onSelectAllClicked() {\n if (\n (this._selectedReturnFields.length > 0 && this._selectedReturnFields.length < this._selectedEntity.fields.length) ||\n this._selectedReturnFields.length == this._selectedEntity.fields.length\n ) {\n this.returnFieldsCombo.deselectAllItems();\n } else {\n this.returnFieldsCombo.selectAllItems();\n }\n }\n\n public onReturnFieldSelectChanging(event: IComboSelectionChangingEventArgs | ISelectionEventArgs) {\n let newSelection = [];\n if (Array.isArray(event.newSelection)) {\n newSelection = event.newSelection.map(item => item.field)\n } else {\n newSelection.push(event.newSelection.value);\n this._selectedReturnFields = newSelection;\n }\n\n this.initExpressionTree(this.selectedEntity.name, newSelection);\n }\n\n public initExpressionTree(selectedEntityName: string, selectedReturnFields: string[]) {\n if (!this._expressionTree) {\n this._expressionTree = this.createExpressionTreeFromGroupItem(new ExpressionGroupItem(FilteringLogic.And, this.rootGroup), selectedEntityName, selectedReturnFields);\n }\n\n if (!this.parentExpression) {\n this.expressionTreeChange.emit(this._expressionTree);\n }\n }\n\n public getSearchValueTemplateContext(defaultSearchValueTemplate): any {\n const ctx = {\n $implicit: this.searchValue,\n selectedField: this.selectedField,\n selectedCondition: this.selectedCondition,\n defaultSearchValueTemplate: defaultSearchValueTemplate\n };\n return ctx;\n }\n\n private getPipeArgs(field: FieldType) {\n let pipeArgs = {...field.pipeArgs};\n if (!pipeArgs) {\n pipeArgs = { digitsInfo: DEFAULT_PIPE_DIGITS_INFO };\n }\n\n if (!pipeArgs.format) {\n pipeArgs.format = field.dataType === GridColumnDataType.Time ?\n DEFAULT_PIPE_TIME_FORMAT : field.dataType === GridColumnDataType.DateTime ?\n DEFAULT_PIPE_DATE_TIME_FORMAT : DEFAULT_PIPE_DATE_FORMAT;\n }\n\n return pipeArgs;\n }\n\n private selectDefaultCondition() {\n if (this.selectedField && this.selectedField.filters) {\n this.selectedCondition = this.selectedField.filters.conditionList().indexOf('equals') >= 0 ? 'equals' : this.selectedField.filters.conditionList()[0];\n }\n }\n\n private getFilters(field: FieldType) {\n if (!field.filters) {\n switch (field.dataType) {\n case GridColumnDataType.Boolean:\n return IgxBooleanFilteringOperand.instance();\n case GridColumnDataType.Number:\n case GridColumnDataType.Currency:\n case GridColumnDataType.Percent:\n return IgxNumberFilteringOperand.instance();\n case GridColumnDataType.Date:\n return IgxDateFilteringOperand.instance();\n case GridColumnDataType.Time:\n return IgxTimeFilteringOperand.instance();\n case GridColumnDataType.DateTime:\n return IgxDateTimeFilteringOperand.instance();\n case GridColumnDataType.String:\n default:\n return IgxStringFilteringOperand.instance();\n }\n } else {\n return field.filters;\n }\n }\n\n\n private addGroup(operator: FilteringLogic, parent?: ExpressionGroupItem, afterExpression?: ExpressionItem) {\n this.cancelOperandAdd();\n\n const groupItem = new ExpressionGroupItem(operator, parent);\n\n if (parent) {\n if (afterExpression) {\n const index = parent.children.indexOf(afterExpression);\n parent.children.splice(index + 1, 0, groupItem);\n } else {\n parent.children.push(groupItem);\n }\n } else {\n this.rootGroup = groupItem;\n }\n\n this.addCondition(groupItem);\n this.currentGroup = groupItem;\n }\n\n private createExpressionGroupItem(expressionTree: IExpressionTree, parent?: ExpressionGroupItem, entityName?: string): ExpressionGroupItem {\n let groupItem: ExpressionGroupItem;\n if (expressionTree) {\n groupItem = new ExpressionGroupItem(expressionTree.operator, parent);\n if (!expressionTree.filteringOperands) {\n return groupItem;\n }\n\n for (let i = 0; i < expressionTree.filteringOperands.length; i++) {\n const expr = expressionTree.filteringOperands[i];\n\n if (isTree(expr)) {\n groupItem.children.push(this.createExpressionGroupItem(expr, groupItem, expressionTree.entity));\n } else {\n const filteringExpr = expr as IFilteringExpression;\n const exprCopy: IFilteringExpression = {\n fieldName: filteringExpr.fieldName,\n condition: filteringExpr.condition,\n conditionName: filteringExpr.condition?.name || filteringExpr.conditionName,\n searchVal: filteringExpr.searchVal,\n searchTree: filteringExpr.searchTree,\n ignoreCase: filteringExpr.ignoreCase\n };\n const operandItem = new ExpressionOperandItem(exprCopy, groupItem);\n const field = this.fields?.find(el => el.field === filteringExpr.fieldName);\n operandItem.fieldLabel = field?.label || field?.header || field?.field;\n if (this._expandedExpressions.filter(e => e.searchTree == operandItem.expression.searchTree).length > 0) {\n operandItem.expanded = true;\n }\n groupItem.children.push(operandItem);\n }\n }\n\n\n if (expressionTree.entity) {\n entityName = expressionTree.entity;\n }\n const entity = this.entities?.find(el => el.name === entityName);\n if (entity) {\n this.fields = entity.fields;\n }\n\n this._selectedEntity = this.entities?.find(el => el.name === entityName);\n this._selectedReturnFields =\n !expressionTree.returnFields || expressionTree.returnFields.includes('*') || expressionTree.returnFields.includes('All') || expressionTree.returnFields.length === 0\n ? this.fields?.map(f => f.field)\n : this.fields?.filter(f => expressionTree.returnFields.indexOf(f.field) >= 0).map(f => f.field);\n }\n return groupItem;\n }\n\n private createExpressionTreeFromGroupItem(groupItem: ExpressionGroupItem, entity?: string, returnFields?: string[]): FilteringExpressionsTree {\n if (!groupItem) {\n return null;\n }\n\n const expressionTree = new FilteringExpressionsTree(groupItem.operator, undefined, entity, returnFields);\n\n for (let i = 0; i < groupItem.children.length; i++) {\n const item = groupItem.children[i];\n\n if (item instanceof ExpressionGroupItem) {\n const subTree = this.createExpressionTreeFromGroupItem((item as ExpressionGroupItem), entity, returnFields);\n expressionTree.filteringOperands.push(subTree);\n } else {\n expressionTree.filteringOperands.push((item as ExpressionOperandItem).expression);\n }\n }\n\n return expressionTree;\n }\n\n private scrollElementIntoView(target: HTMLElement) {\n const container = this.expressionsContainer.nativeElement;\n const targetOffset = target.offsetTop - container.offsetTop;\n const delta = 10;\n\n if (container.scrollTop + delta > targetOffset) {\n container.scrollTop = targetOffset - delta;\n } else if (container.scrollTop + container.clientHeight < targetOffset + target.offsetHeight + delta) {\n container.scrollTop = targetOffset + target.offsetHeight + delta - container.clientHeight;\n }\n }\n\n private focusEditedExpressionChip() {\n if (this._timeoutId) {\n clearTimeout(this._timeoutId);\n }\n\n this._timeoutId = setTimeout(() => {\n if (this._lastFocusedChipIndex != -1) {\n //Sort the expression chip list.\n //If there was a recent drag&drop and the tree hasn't rerendered(child query), they will be unordered\n const sortedChips = this.expressionsChips.toArray().sort(function (a, b) {\n if (a === b) return 0;\n if (a.chipArea.nativeElement.compareDocumentPosition(b.chipArea.nativeElement) & 2) {\n // b comes before a\n return 1;\n }\n return -1;\n });\n const chipElement = sortedChips[this._lastFocusedChipIndex]?.nativeElement;\n if (chipElement) {\n chipElement.focus();\n }\n this._lastFocusedChipIndex = -1;\n this._focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n }\n }, this._focusDelay);\n }\n\n private init() {\n this.cancelOperandAdd();\n this.cancelOperandEdit();\n\n // Ignore values of certain properties for the comparison\n const propsToIgnore = ['parent', 'hovered', 'ignoreCase', 'inEditMode', 'inAddMode'];\n const propsReplacer = function replacer(key, value) {\n if (propsToIgnore.indexOf(key) >= 0) {\n return undefined;\n } else {\n return value;\n }\n };\n\n // Skip root being recreated if the same\n const newRootGroup = this.createExpressionGroupItem(this.expressionTree);\n if (JSON.stringify(this.rootGroup, propsReplacer) !== JSON.stringify(newRootGroup, propsReplacer)) {\n this.rootGroup = this.createExpressionGroupItem(this.expressionTree);\n this.currentGroup = this.rootGroup;\n }\n\n if (this.rootGroup?.children?.length == 0) {\n this.rootGroup = null;\n this.currentGroup = null;\n }\n }\n\n /** rootGroup is recreated after clicking Apply, which sets new expressionTree and calls init()*/\n protected trackExpressionItem = trackByIdentity;\n}\n","<ng-template #addIcon>\n <igx-icon family=\"default\" name=\"add\"></igx-icon>\n</ng-template>\n\n<ng-template #closeIcon>\n <igx-icon family=\"default\" name=\"close\"></igx-icon>\n</ng-template>\n\n<ng-template #selectFromTemplate>\n <div class=\"igx-filter-tree__inputs\" [style.display]=\"(isInEditMode() && (!this.isAdvancedFiltering() || this.isHierarchicalNestedQuery())) ? 'flex' : 'none'\">\n <div class=\"igx-filter-tree__inputs-field\">\n <span class=\"igx-query-builder__label\">{{ this.resourceStrings.igx_query_builder_from_label }}</span>\n <igx-select #entitySelect\n type=\"box\"\n (selectionChanging)=\"onEntitySelectChanging($event)\"\n (opening)=\"exitEditAddMode(true)\"\n [overlaySettings]=\"entitySelectOverlaySettings\"\n [ngModel]=\"selectedEntity\"\n [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_select_entity\"\n [disabled]=\"disableEntityChange\"\n >\n @for (entity of entities; track entity.name) {\n <igx-select-item [value]=\"entity\">\n {{entity.name}}\n </igx-select-item>\n }\n </igx-select>\n </div>\n\n <div class=\"igx-filter-tree__inputs-field\">\n @if (!this.isHierarchicalNestedQuery()) {\n <span class=\"igx-query-builder__label\">{{ this.resourceStrings.igx_query_builder_select_label }}</span>\n }\n @if (!parentExpression) {\n <igx-combo\n #returnFieldsCombo\n [itemsMaxHeight]=\"250\"\n [data]=\"fields\"\n [displayKey]=\"'field'\"\n [valueKey]=\"'field'\"\n [disabled]=\"disableReturnFieldsChange\"\n [(ngModel)]=\"selectedReturnFields\"\n [overlaySettings]=\"returnFieldSelectOverlaySettings\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_select_return_fields\"\n searchPlaceholder=\"{{ this.resourceStrings.igx_query_builder_search }}\"\n [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n (selectionChanging)=\"onReturnFieldSelectChanging($event)\"\n (opening)=\"exitEditAddMode()\"\n >\n <ng-template igxComboHeader>\n <div\n class=\"igx-drop-down__item igx-drop-down__item--query-builder\"\n (click)=\"onSelectAllClicked()\"\n [ngClass]=\"{'igx-drop-down__item--selected': this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length}\"\n >\n <igx-checkbox\n [checked]=\"this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length\"\n [indeterminate]=\"this.selectedEntity && this.selectedReturnFields && this.selectedReturnFields.length > 0 && this.selectedReturnFields.length < this.selectedEntity.fields?.length\"\n [readonly]=\"true\"\n [disableRipple]=\"true\"\n [tabindex]=\"-1\"\n class=\"igx-combo__checkbox\">\n </igx-checkbox>\n <div class=\"igx-drop-down__inner\">\n {{ this.resourceStrings.igx_query_builder_select_all }}\n </div>\n </div>\n </ng-template>\n </igx-combo>\n }\n @else {\n <igx-select #returnFieldSelect\n type=\"box\"\n (selectionChanging)=\"onReturnFieldSelectChanging($event)\"\n [overlaySettings]=\"returnFieldSelectOverlaySettings\"\n [disabled]=\"!selectedEntity\"\n [ngModel]=\"selectedReturnFields ? selectedReturnFields[0] : null\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_select_return_field_single\"\n [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n (opening)=\"exitEditAddMode()\"\n >\n @for (field of fields; track field.field) {\n <igx-select-item [value]=\"field.field\">\n {{ field.field }}\n </igx-select-item>\n }\n </igx-select>\n }\n </div>\n </div>\n</ng-template>\n\n<div\n #expressionsContainer\n class=\"igx-query-builder__main\"\n>\n <ng-container *ngTemplateOutlet=\"selectFromTemplate\"></ng-container>\n\n <ng-template #addExpressionsTemplate let-expressionItem let-afterExpression=\"afterExpression\">\n <button type=\"button\"\n #addConditionButton\n igxButton=\"flat\"\n [disabled]=\"hasEditedExpression\"\n (click)=\"addCondition(expressionItem, afterExpression, true)\"\n igxDrop\n (enter)=\"dragService.onAddConditionEnter(addConditionButton, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n >\n <ng-container *ngTemplateOutlet=\"addIcon\"></ng-container>\n <span>{{\n this.resourceStrings.igx_query_builder_add_condition_root\n }}</span>\n </button>\n\n @if (this.rootGroup) {\n <button type=\"button\"\n igxButton=\"flat\"\n [disabled]=\"hasEditedExpression\"\n (click)=\"addReverseGroup(expressionItem, afterExpression)\"\n >\n <ng-container *ngTemplateOutlet=\"addIcon\"></ng-container>\n <span>{{ this.resourceStrings.igx_query_builder_add_group_root }}</span>\n </button>\n }\n </ng-template>\n\n <ng-template #operandTemplate let-expressionItem>\n @if (!expressionItem.inEditMode) {\n @if(dragService.dropGhostExpression && expressionItem === dragService.dropGhostExpression && dragService.isKeyboardDrag === false){\n <div class=\"igx-filter-tree__expression-item igx-filter-tree__expression-item-drop-ghost\">\n <igx-chip [data]=\"expressionItem\">\n {{this.resourceStrings.igx_query_builder_drop_ghost_text}}\n </igx-chip>\n </div>\n } @else {\n <div\n #dragRef\n igxDrop\n (enter)=\"dragService.onChipEnter(dragRef, expressionItem)\"\n (over)=\"dragService.onDivOver(dragRef, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n (dropped)=\"dragService.onDivDropped(expressionItem)\"\n [ngClass]=\"{\n 'igx-filter-tree__expression-item': true,\n 'igx-filter-tree__expression-item-keyboard-ghost': expressionItem === dragService.dropGhostExpression\n }\"\n (mouseenter)=\"expressionItem.hovered = true\"\n (mouseleave)=\"expressionItem.hovered = false\"\n (focusin)=\"onExpressionFocus(expressionItem)\"\n (focusout)=\"onExpressionBlur($event, expressionItem)\"\n >\n <igx-chip\n #expressionChip\n [draggable]=\"true\"\n [hideBaseOnDrag]=\"false\"\n [animateOnRelease]=\"false\"\n (moveStart)=\"dragService.onMoveStart(dragRef, expressionItem, false)\"\n (moveEnd)=\"dragService.onMoveEnd()\"\n (dragEnter)=\"dragService.onChipEnter(dragRef, expressionItem)\"\n (dragOver)=\"dragService.onChipOver(dragRef)\"\n (dragLeave)=\"dragService.onChipLeave()\"\n (dragDrop)=\"dragService.onChipDropped()\"\n #target=\"tooltipTarget\"\n [igxTooltipTarget]=\"tooltipRef\"\n [data]=\"expressionItem\"\n [removable]=\"isInEditMode() ? 'true' : 'false'\"\n (keydown)=\"invokeClick($event)\"\n (click)=\"onChipClick(expressionItem, expressionChip)\"\n (remove)=\"onChipRemove(expressionItem)\"\n\n >\n <igx-icon igxPrefix\n class=\"igx-drag-indicator\"\n tabindex=\"0\"\n (focus)=\"dragService.onChipDragIndicatorFocus(dragRef, expressionItem)\"\n (focusout)=\"dragService.onChipDragIndicatorFocusOut()\"\n family=\"default\" name=\"drag_indicator\"\n >\n </igx-icon>\n <span igxPrefix class=\"igx-filter-tree__expression-column\">\n {{expressionItem.fieldLabel || expressionItem.expression.fieldName}}\n </span>\n <span igxPrefix class=\"igx-filter-tree__expression-condition\">\n {{\n getConditionFriendlyName(\n expressionItem.expression.condition?.name\n )\n }}\n </span>\n @if (!expressionItem.expression.condition?.isUnary) {\n <span>\n @if (expressionItem.expression.searchTree) {\n <ng-container>\n <strong>{{expressionItem.expression.searchTree.entity}}</strong> / {{formatReturnFields(expressionItem.expression.searchTree)}}\n </ng-container>\n }\n @else {\n <ng-container>\n @if(isDate(expressionItem.expression.searchVal)) {\n @if(getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : getFormatter(\n expressionItem.expression.fieldName\n )\n : undefined\n }}\n } @else {\n {{\n expressionItem.expression.searchVal\n | date\n : getFormat(\n expressionItem.expression.fieldName\n )\n : undefined\n : this.locale\n }}\n }\n } @else {\n @if (getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : getFormatter(expressionItem.expression.fieldName)\n : (expressionItem.expression.conditionName || expressionItem.expression.condition?.name)\n }}\n } @else {\n {{ expressionItem.expression.searchVal }}\n }\n }\n </ng-container>\n }\n </span>\n }\n </igx-chip>\n <div #tooltipRef=\"tooltip\" igxTooltip>\n @if (expressionItem.expression.searchTree){\n {{expressionItem.expression.searchTree.returnFields.join(', ')}}\n } @else if (expressionItem.expression.condition?.isUnary) {\n {{getConditionFriendlyName(expressionItem.expression.condition?.name)}}\n } @else {\n @if(getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : getFormatter(expressionItem.expression.fieldName)\n : (expressionItem.expression.conditionName || expressionItem.expression.condition?.name)\n }}\n } @else {\n {{ expressionItem.expression.searchVal }}\n }\n }\n </div>\n\n @if (expressionItem.focused || expressionItem.hovered) {\n <div igxDragIgnore class=\"igx-filter-tree__expression-actions\">\n <button #addExpressionButton igxDragIgnore igxIconButton=\"outlined\" [igxDropDownItemNavigation]=\"addOptionsDropDown\"\n aria-labelledby=\"add-expression\" (keydown)=\"invokeClick($event)\"\n (click)=\"clickExpressionAdd(addExpressionButton, expressionChip)\"\n (blur)=\"addExpressionBlur()\">\n <igx-icon id=\"add-expression\" family=\"default\" name=\"add\"></igx-icon>\n </button>\n <igx-drop-down #addOptionsDropDown\n (selectionChanging)=\"enterExpressionAdd($event, expressionItem)\">\n <igx-drop-down-item [value]=\"'addCondition'\">\n <span>{{this.resourceStrings.igx_query_builder_add_condition}}</span>\n </igx-drop-down-item>\n <igx-drop-down-item [value]=\"'addGroup'\">\n <span>{{this.resourceStrings.igx_query_builder_add_group}}</span>\n </igx-drop-down-item>\n </igx-drop-down>\n </div>\n }\n </div>\n }\n }\n <div #editingInputsContainer class=\"igx-filter-tree__subquery\" >\n @if (expressionItem.inEditMode) {\n <div\n #editingInputs\n igxDrop\n (enter)=\"dragService.onChipEnter(editingInputsContainer, expressionItem)\"\n (over)=\"dragService.onChipEnter(editingInputsContainer, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n (dropped)=\"dragService.onDivDropped(expressionItem)\"\n class=\"igx-filter-tree__inputs\"\n >\n <igx-select\n #fieldSelect\n type=\"box\"\n [overlaySettings]=\"fieldSelectOverlaySettings\"\n [(ngModel)]=\"selectedField\"\n [disabled]=\"!fields\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_column_placeholder\"\n >\n\n @for (field of fields; track field) {\n <igx-select-item [value]=\"field\">\n {{ field.label || field.header || field.field }}\n </igx-select-item>\n }\n </igx-select>\n\n <igx-select\n #conditionSelect\n type=\"box\"\n [overlaySettings]=\"conditionSelectOverlaySettings\"\n [(ngModel)]=\"selectedCondition\"\n (selectionChanging)=\"onConditionSelectChanging($event)\"\n [disabled]=\"!selectedField\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_condition_placeholder\"\n >\n @if (\n selectedField &&\n conditionSelect.value &&\n selectedField.filters.condition(conditionSelect.value)\n ) {\n <igx-prefix>\n <igx-icon\n family=\"default\"\n [name]=\"\n selectedField.filters.condition(\n conditionSelect.value\n ).iconName\n \"\n >\n </igx-icon>\n </igx-prefix>\n }\n\n @for (condition of getConditionList(); track condition) {\n <igx-select-item\n [value]=\"condition\"\n [text]=\"getConditionFriendlyName(condition)\"\n >\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon\n family=\"default\"\n [name]=\"\n selectedField.filters.condition(condition)\n .iconName\n \"\n >\n </igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{\n getConditionFriendlyName(condition)\n }}</span>\n </div>\n </igx-select-item>\n }\n </igx-select>\n\n <ng-container\n *ngTemplateOutlet=\"\n searchValueTemplate ? searchValueTemplate : defaultSearchValueTemplate;\n context: getSearchValueTemplateContext(defaultSearchValueTemplate)\n \"\n >\n </ng-container>\n\n <ng-template #defaultSearchValueTemplate>\n @if(!selectedField ||\n (selectedField.dataType !== 'date' && selectedField.dataType !== 'time' && selectedField.dataType !== 'dateTime')) {\n <igx-input-group type=\"box\">\n\n <input\n #searchValueInput\n igxInput\n [disabled]=\"isSearchValueInputDisabled()\"\n [placeholder]=\"this.selectedCondition === 'inQuery' || this.selectedCondition === 'notInQuery' ?\n this.resourceStrings.igx_query_builder_query_value_placeholder :\n this.resourceStrings.igx_query_builder_value_placeholder\"\n [type]=\"\n selectedField && selectedField.dataType === 'number'\n ? 'number'\n : 'text'\n \"\n [(ngModel)]=\"searchValue.value\"\n />\n </igx-input-group>\n }\n @else if (selectedField && selectedField.dataType === 'date') {\n <igx-date-picker\n #picker\n [(value)]=\"searchValue.value\"\n (keydown)=\"openPicker($event)\"\n (click)=\"picker.open()\"\n type=\"box\"\n [disabled]=\"isSearchValueInputDisabled()\"\n [locale]=\"this.locale\"\n [outlet]=\"pickerOutlet\"\n [formatter]=\"selectedField.formatter\"\n [displayFormat]=\"selectedField.pipeArgs.format\"\n [weekStart]=\"selectedField.pipeArgs.weekStart\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_date_placeholder\"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-date-picker>\n }\n @else if (selectedField && selectedField.dataType === 'time') {\n <igx-time-picker\n #picker\n [(value)]=\"searchValue.value\"\n (click)=\"picker.open()\"\n (keydown)=\"openPicker($event)\"\n type=\"box\"\n [disabled]=\"isSearchValueInputDisabled()\"\n [locale]=\"this.locale\"\n [outlet]=\"pickerOutlet\"\n [formatter]=\"selectedField.formatter\"\n [displayFormat]=\"selectedField.pipeArgs.format\"\n [inputFormat]=\"selectedField.editorOptions?.dateTimeFormat\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_time_placeholder\"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-time-picker>\n }\n @else if (selectedField && selectedField.dataType === 'dateTime') {\n <igx-input-group #inputGroup type=\"box\">\n <input\n #input\n igxInput\n tabindex=\"0\"\n [placeholder]=\"this.resourceStrings.igx_query_builder_datetime_placeholder\"\n [(ngModel)]=\"searchValue.value\"\n [disabled]=\"isSearchValueInputDisabled()\"\n [locale]=\"this.locale\"\n [igxDateTimeEditor]=\"selectedField.editorOptions?.dateTimeFormat\"\n [defaultFormatType]=\"selectedField.dataType\"\n [displayFormat]=\"selectedField.pipeArgs.format\"\n />\n </igx-input-group>\n }\n </ng-template>\n\n <div class=\"igx-filter-tree__inputs-actions\">\n <button type=\"button\"\n igxIconButton=\"outlined\"\n [disabled]=\"!operandCanBeCommitted()\"\n (click)=\"commitExpression()\"\n >\n <igx-icon family=\"default\" name=\"confirm\"></igx-icon>\n </button>\n <button type=\"button\"\n igxIconButton=\"outlined\"\n (click)=\"discardExpression(expressionItem)\"\n >\n <ng-container *ngTemplateOutlet=\"closeIcon\"></ng-container>\n </button>\n </div>\n </div>\n }\n\n @if (\n (!expressionItem.inEditMode && expressionItem.expression.searchTree && expressionItem.expression.searchTree.filteringOperands?.length > 0) ||\n (expressionItem.inEditMode && selectedField?.filters?.condition(selectedCondition)?.isNestedQuery)\n ) {\n <ng-container>\n <igx-query-builder-tree\n [style.display]=\"expressionItem.inEditMode || expressionItem.expanded ? 'block' : 'none'\"\n [entities]=\"(this.selectedEntity ? this.selectedEntity.childEntities : entities?.[0]?.childEntities) ?? (entities ?? [])\"\n [queryBuilder]=\"this.queryBuilder\"\n [parentExpression]=\"expressionItem\"\n [expectedReturnField]=\"this.selectedField?.field\"\n [expressionTree]=\"expressionItem.inEditMode ? (innerQueryNewExpressionTree ?? getExpressionTreeCopy(expressionItem.expression.searchTree, true)) : expressionItem.expression.searchTree\"\n (inEditModeChange)=\"onInEditModeChanged($event)\"\n [searchValueTemplate]=\"searchValueTemplate\">\n </igx-query-builder-tree>\n </ng-container>\n }\n </div>\n </ng-template>\n\n <ng-template #expressionGroupTemplate let-expressionItem>\n <div class=\"igx-filter-tree\"\n (focusout)=\"parentExpression? null : dragService.onDragFocusOut()\">\n <div\n class=\"igx-filter-tree__line\"\n [ngClass]=\"{\n 'igx-filter-tree__line--and': getOperator(expressionItem) === 0,\n 'igx-filter-tree__line--or': getOperator(expressionItem) === 1\n }\"\n ></div>\n\n <div class=\"igx-filter-tree__expressions\">\n <div class=\"igx-filter-tree__expression-context-menu\"\n #groupRef\n igxDrop\n (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n >\n <button #changeGroupButton\n [ngClass]=\"{\n 'igx-filter-tree__button--and': getOperator(expressionItem) === 0,\n 'igx-filter-tree__button--or': getOperator(expressionItem) === 1\n }\"\n [igxDropDownItemNavigation]=\"groupContextMenuDropDown\"\n igxDragIgnore\n igxButton=\"flat\"\n aria-labelledby=\"change-group\"\n (keydown)=\"invokeClick($event)\"\n (click)=\"onGroupClick(groupContextMenuDropDown, changeGroupButton, expressionItem)\"\n >\n <span\n igxDrop\n (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n >\n {{getOperator(expressionItem) === 0 ? this.resourceStrings.igx_query_builder_and_label : this.resourceStrings.igx_query_builder_or_label}}\n </span>\n <igx-icon family=\"default\" name=\"arrow_drop_down\" role=\"button\"></igx-icon>\n </button>\n <igx-drop-down #groupContextMenuDropDown\n (selectionChanging)=\"onGroupContextMenuDropDownSelectionChanging($event)\"\n [width]=\"'fit-content'\">\n <igx-drop-down-item [value]=\"'switchCondition'\"\n >\n {{getSwitchGroupText(expressionItem)}}\n </igx-drop-down-item>\n <igx-drop-down-item [value]=\"'ungroup'\"\n [disabled]=\"this.rootGroup === this.contextualGroup\"\n >\n {{this.resourceStrings.igx_query_builder_ungroup}}\n </igx-drop-down-item>\n </igx-drop-down>\n </div>\n <div class=\"igx-filter-tree__expression-section\">\n @for (expr of expressionItem?.children; track trackExpressionItem(expr)) {\n <ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n isExpressionGroup(expr)\n ? expressionGroupTemplate\n : operandTemplate;\n context: context(expr)\n \"\n >\n </ng-container>\n </ng-container>\n }\n </div>\n\n @if (expressionItem === rootGroup && !hasEditedExpression) {\n <div\n #currentGroupButtonsContainer\n class=\"igx-filter-tree__buttons\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n addExpressionsTemplate;\n context: context(expressionItem)\n \"\n >\n </ng-container>\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n @if (rootGroup || (!rootGroup && (selectedEntity || (entities?.length === 1 && !entities[0]?.name)))) {\n <div class=\"igx-filter-tree__section\">\n @if (!this.isAdvancedFiltering()) {\n <span class=\"igx-query-builder__label\">Where</span>\n }\n <ng-container\n *ngTemplateOutlet=\"\n expressionGroupTemplate;\n context: context(rootGroup)\n \"\n ></ng-container>\n </div>\n }\n</div>\n\n<div\n #overlayOutlet\n igxOverlayOutlet\n class=\"igx-query-builder__outlet\"\n (pointerdown)=\"onOutletPointerDown($event)\"\n></div>\n\n<igx-dialog\n #entityChangeDialog\n title=\"{{ this.resourceStrings.igx_query_builder_dialog_title }}\"\n leftButtonLabel=\"{{ this.resourceStrings.igx_query_builder_dialog_cancel }}\"\n rightButtonLabel=\"{{ this.resourceStrings.igx_query_builder_dialog_confirm }}\"\n (leftButtonSelect)=\"onEntityChangeCancel()\"\n (rightButtonSelect)=\"onEntityChangeConfirm()\">\n <section class=\"igx-query-builder-dialog\">\n <p>{{ this.resourceStrings.igx_query_builder_dialog_message }}</p>\n <igx-checkbox\n (change)=\"onShowEntityChangeDialogChange($event)\"\n [disableRipple]=\"true\"\n [tabindex]=\"-1\">\n {{ this.resourceStrings.igx_query_builder_dialog_checkbox_text }}\n </igx-checkbox>\n </section>\n</igx-dialog>\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Defines the custom template that will be used for the search value input of condition in edit mode\n * \n * @igxModule IgxQueryBuilderModule\n * @igxKeywords query builder, query builder search value\n * @igxGroup Data entry and display\n *\n * @example\n * <igx-query-builder>\n * <ng-template igxQueryBuilderSearchValue let-expression=\"expression\">\n * <input type=\"text\" required [(ngModel)]=\"expression.searchVal\"/>\n * </ng-template>\n * </igx-query-builder>\n */\n@Directive({\n selector: '[igxQueryBuilderSearchValue]',\n standalone: true\n})\nexport class IgxQueryBuilderSearchValueTemplateDirective {\n constructor(public template: TemplateRef<any>) { }\n}\n","import { booleanAttribute, ContentChild, EventEmitter, Output, TemplateRef } from '@angular/core';\nimport {\n Component, Input, ViewChild, ElementRef, OnDestroy, HostBinding\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport {\n EntityType,\n FieldType,\n IExpressionTree,\n IQueryBuilderResourceStrings,\n QueryBuilderResourceStringsEN,\n recreateTree,\n getCurrentResourceStrings,\n IgxOverlayOutletDirective\n} from 'igniteui-angular/core';\nimport { IgxQueryBuilderTreeComponent } from './query-builder-tree.component';\nimport { IgxIconService } from 'igniteui-angular/icon';\nimport { editor } from '@igniteui/material-icons-extended';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\n\n/**\n * A component used for operating with complex filters by creating or editing conditions\n * and grouping them using AND/OR logic.\n * It is used internally in the Advanced Filtering of the Grid.\n *\n * @example\n * ```html\n * <igx-query-builder [entities]=\"this.entities\">\n * </igx-query-builder>\n * ```\n */\n@Component({\n selector: 'igx-query-builder',\n templateUrl: './query-builder.component.html',\n imports: [IgxQueryBuilderTreeComponent]\n})\nexport class IgxQueryBuilderComponent implements OnDestroy {\n /**\n * @hidden @internal\n */\n @HostBinding('class.igx-query-builder')\n public cssClass = 'igx-query-builder';\n\n /**\n * @hidden @internal\n */\n @HostBinding('style.display')\n public display = 'block';\n\n /**\n * Gets/sets whether the confirmation dialog should be shown when changing entity.\n * Default value is `true`.\n */\n @Input({ transform: booleanAttribute })\n public showEntityChangeDialog = true;\n\n /**\n * Gets the list of entities available for the IgxQueryBuilderComponent.\n *\n * Each entity describes a logical group of fields that can be used in queries.\n * An entity can optionally have child entities, allowing nested sub-queries.\n *\n * @returns An array of {@link EntityType} objects.\n */\n public get entities(): EntityType[] {\n return this._entities;\n }\n\n /**\n * Sets the list of entities for the IgxQueryBuilderComponent.\n * If the `expressionTree` is defined, it will be recreated with the new entities.\n *\n * Each entity should be an {@link EntityType} object describing the fields and optionally child entities.\n *\n * Example:\n * ```ts\n * [\n * {\n * name: 'Orders',\n * fields: [{ field: 'OrderID', dataType: 'number' }],\n * childEntities: [\n * {\n * name: 'OrderDetails',\n * fields: [{ field: 'ProductID', dataType: 'number' }]\n * }\n * ]\n * }\n * ]\n * ```\n *\n * @param entities - The array of entities to set.\n */\n @Input()\n public set entities(entities: EntityType[]) {\n if (entities !== this._entities) {\n if (entities && this.expressionTree) {\n this._expressionTree = recreateTree(this._expressionTree, entities);\n }\n }\n this._entities = entities;\n }\n\n /**\n * Gets the list of fields for the QueryBuilder.\n *\n * @deprecated since version 19.1.0. Use the `entities` property instead.\n * @hidden\n */\n public get fields(): FieldType[] {\n return this._fields;\n }\n\n /**\n * Sets the list of fields for the QueryBuilder.\n * Automatically wraps them into a single entity to maintain backward compatibility.\n *\n * @param fields - The array of fields to set.\n * @deprecated since version 19.1.0. Use the `entities` property instead.\n * @hidden\n */\n @Input()\n public set fields(fields: FieldType[]) {\n if (fields) {\n this._fields = fields;\n this.entities = [\n {\n name: null,\n fields: fields\n }\n ];\n }\n }\n\n /**\n * Returns the expression tree.\n */\n public get expressionTree(): IExpressionTree {\n return this._expressionTree;\n }\n\n /**\n * Sets the expression tree.\n */\n @Input()\n public set expressionTree(expressionTree: IExpressionTree) {\n if (expressionTree !== this._expressionTree) {\n if (this.entities && expressionTree) {\n this._expressionTree = recreateTree(expressionTree, this.entities);\n } else {\n this._expressionTree = expressionTree;\n }\n }\n }\n\n /**\n * Gets the `locale` of the query builder.\n * If not set, defaults to application's locale.\n */\n @Input()\n public locale: string;\n\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n */\n @Input()\n public set resourceStrings(value: IQueryBuilderResourceStrings) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n\n /**\n * Returns the resource strings.\n */\n public get resourceStrings(): IQueryBuilderResourceStrings {\n return this._resourceStrings;\n }\n\n /**\n * Disables subsequent entity changes at the root level after the initial selection.\n */\n @Input()\n public disableEntityChange = false;\n\n /**\n * Disables return fields changes at the root level.\n */\n @Input()\n public disableReturnFieldsChange = false;\n\n /**\n * Event fired as the expression tree is changed.\n *\n * ```html\n * <igx-query-builder (expressionTreeChange)='onExpressionTreeChange()'></igx-query-builder>\n * ```\n */\n @Output()\n public expressionTreeChange = new EventEmitter<IExpressionTree>();\n\n /**\n * @hidden @internal\n */\n @ContentChild(IgxQueryBuilderSearchValueTemplateDirective, { read: TemplateRef })\n public searchValueTemplate: TemplateRef<any>;\n\n /**\n * @hidden @internal\n */\n @ViewChild(IgxQueryBuilderTreeComponent)\n public queryTree: IgxQueryBuilderTreeComponent;\n\n private destroy$ = new Subject<any>();\n private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n private _expressionTree: IExpressionTree;\n private _fields: FieldType[];\n private _entities: EntityType[];\n private _shouldEmitTreeChange = true;\n\n constructor(protected iconService: IgxIconService) {\n this.registerSVGIcons();\n }\n\n /**\n * Returns whether the expression tree can be committed in the current state.\n */\n public canCommit(): boolean {\n return this.queryTree?.canCommitCurrentState() === true;\n }\n\n /**\n * Commits the expression tree in the current state if it is valid. If not throws an exception.\n */\n public commit(): void {\n if (this.canCommit()) {\n this._shouldEmitTreeChange = false;\n this.queryTree.commitCurrentState();\n this._shouldEmitTreeChange = true;\n } else {\n throw new Error('Expression tree can\\'t be committed in the current state. Use `canCommit` method to check if the current state is valid.');\n }\n }\n\n /**\n * Discards all unsaved changes to the expression tree.\n */\n public discard(): void {\n this.queryTree.cancelOperandEdit();\n }\n\n /**\n * @hidden @internal\n */\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public setPickerOutlet(outlet?: IgxOverlayOutletDirective | ElementRef) {\n this.queryTree.setPickerOutlet(outlet);\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public get isContextMenuVisible(): boolean {\n return this.queryTree.isContextMenuVisible;\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public exitOperandEdit() {\n this.queryTree.exitOperandEdit();\n }\n\n /**\n * @hidden @internal\n *\n * used by the grid\n */\n public setAddButtonFocus() {\n this.queryTree.setAddButtonFocus();\n }\n\n public onExpressionTreeChange(tree: IExpressionTree) {\n if (tree && this.entities && tree !== this._expressionTree) {\n this._expressionTree = recreateTree(tree, this.entities);\n } else {\n this._expressionTree = tree;\n }\n if (this._shouldEmitTreeChange) {\n this.expressionTreeChange.emit(tree);\n }\n }\n\n private registerSVGIcons(): void {\n const editorIcons = editor as any[];\n\n editorIcons.forEach((icon) => {\n this.iconService.addSvgIconFromText(icon.name, icon.value, 'imx-icons');\n this.iconService.addIconRef(icon.name, 'default', {\n name: icon.name,\n family: 'imx-icons'\n });\n });\n\n const inIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M560-280H120v-400h720v120h-80v-40H200v240h360v80Zm-360-80v-240 240Zm560 200v-120H640v-80h120v-120h80v120h120v80H840v120h-80Z\"/></svg>';\n this.iconService.addSvgIconFromText('in', inIcon, 'imx-icons');\n this.iconService.addIconRef('in', 'default', {\n name: 'in',\n family: 'imx-icons'\n });\n\n const notInIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M560-280H120v-400h720v120h-80v-40H200v240h360v80Zm-360-80v-240 240Zm440 104 84-84-84-84 56-56 84 84 84-84 56 56-83 84 83 84-56 56-84-83-84 83-56-56Z\"/></svg>';\n this.iconService.addSvgIconFromText('not-in', notInIcon, 'imx-icons');\n this.iconService.addIconRef('not-in', 'default', {\n name: 'not-in',\n family: 'imx-icons'\n });\n\n this.iconService.addIconRef('add', 'default', {\n name: 'add',\n family: 'material',\n });\n\n this.iconService.addIconRef('close', 'default', {\n name: 'close',\n family: 'material',\n });\n\n this.iconService.addIconRef('check', 'default', {\n name: 'check',\n family: 'material',\n });\n\n this.iconService.addIconRef('delete', 'default', {\n name: 'delete',\n family: 'material',\n });\n\n this.iconService.addIconRef('edit', 'default', {\n name: 'edit',\n family: 'material',\n });\n }\n}\n\n","<ng-content select=\"igx-query-builder-header\"></ng-content>\n\n<igx-query-builder-tree\n [entities]=\"this.entities\"\n [expressionTree]=\"this.expressionTree\"\n [locale]=\"this.locale\"\n [resourceStrings]=\"this.resourceStrings\"\n [queryBuilder]=\"this\"\n (expressionTreeChange)=\"onExpressionTreeChange($event)\"\n [searchValueTemplate]=\"searchValueTemplate\">\n</igx-query-builder-tree>\n","import { IgxQueryBuilderHeaderComponent } from './query-builder-header.component';\nimport { IgxQueryBuilderComponent } from './query-builder.component';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\n\nexport {\n IgxQueryBuilderComponent\n} from './query-builder.component';\nexport * from './query-builder-header.component';\nexport * from './query-builder.directives';\n\n/* NOTE: Query builder directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_QUERY_BUILDER_DIRECTIVES = [\n IgxQueryBuilderComponent,\n IgxQueryBuilderHeaderComponent,\n IgxQueryBuilderSearchValueTemplateDirective,\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IGX_QUERY_BUILDER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n imports: [\n ...IGX_QUERY_BUILDER_DIRECTIVES\n ],\n exports: [\n ...IGX_QUERY_BUILDER_DIRECTIVES\n ]\n})\nexport class IgxQueryBuilderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.IgxQueryBuilderComponent","i2.IgxQueryBuilderHeaderComponent","i3.IgxQueryBuilderSearchValueTemplateDirective"],"mappings":"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"}
|