igniteui-angular 22.1.0-beta.5 → 22.1.0-beta.7
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 +4 -4
- package/fesm2022/igniteui-angular-accordion.mjs.map +1 -1
- package/fesm2022/igniteui-angular-action-strip.mjs +0 -1
- package/fesm2022/igniteui-angular-action-strip.mjs.map +1 -1
- package/fesm2022/igniteui-angular-avatar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-badge.mjs +0 -1
- package/fesm2022/igniteui-angular-badge.mjs.map +1 -1
- package/fesm2022/igniteui-angular-banner.mjs +2 -2
- package/fesm2022/igniteui-angular-banner.mjs.map +1 -1
- package/fesm2022/igniteui-angular-button-group.mjs +2 -2
- package/fesm2022/igniteui-angular-button-group.mjs.map +1 -1
- package/fesm2022/igniteui-angular-calendar.mjs +4 -5
- package/fesm2022/igniteui-angular-calendar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-card.mjs.map +1 -1
- package/fesm2022/igniteui-angular-carousel.mjs.map +1 -1
- package/fesm2022/igniteui-angular-chips.mjs.map +1 -1
- package/fesm2022/igniteui-angular-combo.mjs +17 -6
- package/fesm2022/igniteui-angular-combo.mjs.map +1 -1
- package/fesm2022/igniteui-angular-core.mjs +16 -337
- package/fesm2022/igniteui-angular-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-date-picker.mjs +12 -14
- package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-dialog.mjs +1 -1
- package/fesm2022/igniteui-angular-dialog.mjs.map +1 -1
- package/fesm2022/igniteui-angular-directives.mjs +50 -47
- package/fesm2022/igniteui-angular-directives.mjs.map +1 -1
- package/fesm2022/igniteui-angular-drop-down.mjs +3 -2
- package/fesm2022/igniteui-angular-drop-down.mjs.map +1 -1
- package/fesm2022/igniteui-angular-expansion-panel.mjs +23 -12
- package/fesm2022/igniteui-angular-expansion-panel.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-core.mjs +501 -207
- package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-grid.mjs +116 -95
- package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +15 -19
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-lite.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +75 -153
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs +28 -35
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-icon.mjs.map +1 -1
- package/fesm2022/igniteui-angular-input-group.mjs +1 -1
- package/fesm2022/igniteui-angular-input-group.mjs.map +1 -1
- package/fesm2022/igniteui-angular-list.mjs.map +1 -1
- package/fesm2022/igniteui-angular-navbar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-navigation-drawer.mjs +2 -3
- package/fesm2022/igniteui-angular-navigation-drawer.mjs.map +1 -1
- package/fesm2022/igniteui-angular-paginator.mjs.map +1 -1
- package/fesm2022/igniteui-angular-progressbar.mjs +5 -2
- package/fesm2022/igniteui-angular-progressbar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-query-builder.mjs +18 -19
- package/fesm2022/igniteui-angular-query-builder.mjs.map +1 -1
- package/fesm2022/igniteui-angular-radio.mjs +1 -1
- package/fesm2022/igniteui-angular-radio.mjs.map +1 -1
- package/fesm2022/igniteui-angular-select.mjs.map +1 -1
- package/fesm2022/igniteui-angular-simple-combo.mjs +10 -7
- package/fesm2022/igniteui-angular-simple-combo.mjs.map +1 -1
- package/fesm2022/igniteui-angular-slider.mjs +3 -3
- package/fesm2022/igniteui-angular-slider.mjs.map +1 -1
- package/fesm2022/igniteui-angular-splitter.mjs +1 -1
- package/fesm2022/igniteui-angular-splitter.mjs.map +1 -1
- package/fesm2022/igniteui-angular-stepper.mjs +1 -1
- package/fesm2022/igniteui-angular-stepper.mjs.map +1 -1
- package/fesm2022/igniteui-angular-tabs.mjs.map +1 -1
- package/fesm2022/igniteui-angular-time-picker.mjs +3 -6
- package/fesm2022/igniteui-angular-time-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-tree.mjs +8 -10
- package/fesm2022/igniteui-angular-tree.mjs.map +1 -1
- package/lib/grids/core/src/filtering/excel-style/themes/_derived.scss +3 -2
- package/migrations/migration-collection.json +0 -7
- package/package.json +1 -1
- 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-avatar.d.ts +1 -1
- package/types/igniteui-angular-banner.d.ts +3 -3
- package/types/igniteui-angular-calendar.d.ts +9 -9
- package/types/igniteui-angular-card.d.ts +1 -1
- package/types/igniteui-angular-carousel.d.ts +9 -9
- package/types/igniteui-angular-chat.d.ts +1 -1
- package/types/igniteui-angular-chips.d.ts +5 -5
- package/types/igniteui-angular-combo.d.ts +17 -13
- package/types/igniteui-angular-core.d.ts +200 -495
- package/types/igniteui-angular-date-picker.d.ts +3 -3
- package/types/igniteui-angular-dialog.d.ts +4 -4
- package/types/igniteui-angular-directives.d.ts +60 -59
- package/types/igniteui-angular-drop-down.d.ts +16 -16
- package/types/igniteui-angular-expansion-panel.d.ts +6 -6
- package/types/igniteui-angular-grids-core.d.ts +1053 -791
- package/types/igniteui-angular-grids-grid.d.ts +104 -267
- package/types/igniteui-angular-grids-hierarchical-grid.d.ts +68 -547
- package/types/igniteui-angular-grids-lite.d.ts +7 -7
- package/types/igniteui-angular-grids-pivot-grid.d.ts +94 -129
- package/types/igniteui-angular-grids-tree-grid.d.ts +5 -51
- package/types/igniteui-angular-icon.d.ts +2 -2
- package/types/igniteui-angular-input-group.d.ts +4 -4
- package/types/igniteui-angular-list.d.ts +4 -4
- package/types/igniteui-angular-navigation-drawer.d.ts +3 -3
- package/types/igniteui-angular-progressbar.d.ts +1 -0
- package/types/igniteui-angular-query-builder.d.ts +9 -9
- package/types/igniteui-angular-radio.d.ts +1 -1
- package/types/igniteui-angular-select.d.ts +5 -5
- package/types/igniteui-angular-simple-combo.d.ts +2 -2
- package/types/igniteui-angular-slider.d.ts +4 -4
- package/types/igniteui-angular-splitter.d.ts +3 -3
- package/types/igniteui-angular-time-picker.d.ts +8 -8
- package/types/igniteui-angular-tree.d.ts +8 -8
- package/migrations/update-22_1_0_import-migration/index.d.ts +0 -2
- package/migrations/update-22_1_0_import-migration/index.js +0 -200
- package/migrations/update-22_1_0_import-migration/index.spec.d.ts +0 -1
- package/migrations/update-22_1_0_import-migration/index.spec.js +0 -132
|
@@ -749,7 +749,7 @@ class IgxQueryBuilderTreeComponent {
|
|
|
749
749
|
isAdvancedFiltering() {
|
|
750
750
|
return (this.entities?.length === 1 && !this.entities[0]?.name) ||
|
|
751
751
|
this.entities?.find(e => e.childEntities?.length > 0) !== undefined ||
|
|
752
|
-
(
|
|
752
|
+
(this.entities?.length > 0 && this.queryBuilder?.entities?.length > 0 && this.entities !== this.queryBuilder?.entities);
|
|
753
753
|
}
|
|
754
754
|
/** @hidden */
|
|
755
755
|
isHierarchicalNestedQuery() {
|
|
@@ -773,6 +773,10 @@ class IgxQueryBuilderTreeComponent {
|
|
|
773
773
|
* Sets/gets the search value template.
|
|
774
774
|
*/
|
|
775
775
|
this.searchValueTemplate = null;
|
|
776
|
+
/**
|
|
777
|
+
* Gets/sets the expected return field.
|
|
778
|
+
*/
|
|
779
|
+
this.expectedReturnField = null;
|
|
776
780
|
/**
|
|
777
781
|
* Event fired as the expression tree is changed.
|
|
778
782
|
*/
|
|
@@ -843,9 +847,7 @@ class IgxQueryBuilderTreeComponent {
|
|
|
843
847
|
};
|
|
844
848
|
this.destroy$ = new Subject();
|
|
845
849
|
this._focusDelay = DEFAULT_CHIP_FOCUS_DELAY;
|
|
846
|
-
this._selectedField = null;
|
|
847
850
|
this._preventInit = false;
|
|
848
|
-
this._prevFocusedContainer = null;
|
|
849
851
|
this._expandedExpressions = [];
|
|
850
852
|
this._resourceStrings = null;
|
|
851
853
|
this._defaultResourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);
|
|
@@ -1122,17 +1124,15 @@ class IgxQueryBuilderTreeComponent {
|
|
|
1122
1124
|
commitOperandEdit() {
|
|
1123
1125
|
const actualSearchValue = this.searchValue.value;
|
|
1124
1126
|
if (this._editedExpression) {
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
this._editedExpression.expression.fieldName = selectedField.field;
|
|
1128
|
-
this._editedExpression.expression.condition = selectedField.filters.condition(this.selectedCondition);
|
|
1127
|
+
this._editedExpression.expression.fieldName = this.selectedField.field;
|
|
1128
|
+
this._editedExpression.expression.condition = this.selectedField.filters.condition(this.selectedCondition);
|
|
1129
1129
|
this._editedExpression.expression.conditionName = this.selectedCondition;
|
|
1130
|
-
this._editedExpression.expression.searchVal = DataUtil.parseValue(selectedField.dataType, actualSearchValue) || actualSearchValue;
|
|
1131
|
-
this._editedExpression.fieldLabel = selectedField.label
|
|
1132
|
-
? selectedField.label
|
|
1133
|
-
: selectedField.header
|
|
1134
|
-
? selectedField.header
|
|
1135
|
-
: selectedField.field;
|
|
1130
|
+
this._editedExpression.expression.searchVal = DataUtil.parseValue(this.selectedField.dataType, actualSearchValue) || actualSearchValue;
|
|
1131
|
+
this._editedExpression.fieldLabel = this.selectedField.label
|
|
1132
|
+
? this.selectedField.label
|
|
1133
|
+
: this.selectedField.header
|
|
1134
|
+
? this.selectedField.header
|
|
1135
|
+
: this.selectedField.field;
|
|
1136
1136
|
const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];
|
|
1137
1137
|
if (innerQuery && this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery) {
|
|
1138
1138
|
innerQuery.exitEditAddMode();
|
|
@@ -1146,7 +1146,7 @@ class IgxQueryBuilderTreeComponent {
|
|
|
1146
1146
|
this._editedExpression.expression.searchTree = null;
|
|
1147
1147
|
}
|
|
1148
1148
|
this.innerQueryNewExpressionTree = null;
|
|
1149
|
-
if (selectedField.filters.condition(this.selectedCondition)?.isUnary || selectedField.filters.condition(this.selectedCondition)?.isNestedQuery) {
|
|
1149
|
+
if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary || this.selectedField.filters.condition(this.selectedCondition)?.isNestedQuery) {
|
|
1150
1150
|
this._editedExpression.expression.searchVal = null;
|
|
1151
1151
|
}
|
|
1152
1152
|
this._editedExpression.inEditMode = false;
|
|
@@ -1199,11 +1199,11 @@ class IgxQueryBuilderTreeComponent {
|
|
|
1199
1199
|
*/
|
|
1200
1200
|
operandCanBeCommitted() {
|
|
1201
1201
|
const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];
|
|
1202
|
-
return
|
|
1202
|
+
return this.selectedField && this.selectedCondition &&
|
|
1203
1203
|
((((!Array.isArray(this.searchValue.value) && !!this.searchValue.value) || (Array.isArray(this.searchValue.value) && this.searchValue.value.length !== 0)) &&
|
|
1204
1204
|
!(this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery)) ||
|
|
1205
1205
|
(this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery && innerQuery && !!innerQuery.expressionTree && innerQuery.selectedReturnFields?.length > 0) ||
|
|
1206
|
-
this.selectedField.filters.condition(this.selectedCondition)?.isUnary)
|
|
1206
|
+
this.selectedField.filters.condition(this.selectedCondition)?.isUnary);
|
|
1207
1207
|
}
|
|
1208
1208
|
/**
|
|
1209
1209
|
* @hidden @internal
|
|
@@ -1674,7 +1674,6 @@ class IgxQueryBuilderTreeComponent {
|
|
|
1674
1674
|
getSearchValueTemplateContext(defaultSearchValueTemplate) {
|
|
1675
1675
|
const ctx = {
|
|
1676
1676
|
$implicit: this.searchValue,
|
|
1677
|
-
// The search value editor is only rendered while a field is selected.
|
|
1678
1677
|
selectedField: this.selectedField,
|
|
1679
1678
|
selectedCondition: this.selectedCondition,
|
|
1680
1679
|
defaultSearchValueTemplate: defaultSearchValueTemplate
|
|
@@ -1878,7 +1877,7 @@ class IgxQueryBuilderTreeComponent {
|
|
|
1878
1877
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: IgxQueryBuilderTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1879
1878
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: IgxQueryBuilderTreeComponent, isStandalone: true, selector: "igx-query-builder-tree", inputs: { entities: "entities", queryBuilder: "queryBuilder", searchValueTemplate: "searchValueTemplate", parentExpression: "parentExpression", fields: "fields", expressionTree: "expressionTree", locale: "locale", resourceStrings: "resourceStrings", expectedReturnField: "expectedReturnField" }, outputs: { expressionTreeChange: "expressionTreeChange", inEditModeChange: "inEditModeChange" }, host: { properties: { "class": "this.getClass" }, classAttribute: "igx-query-builder-tree" }, providers: [
|
|
1880
1879
|
IgxQueryBuilderDragService
|
|
1881
|
-
], viewQueries: [{ propertyName: "entitySelect", first: true, predicate: ["entitySelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "editingInputs", first: true, predicate: ["editingInputs"], descendants: true, read: ElementRef }, { propertyName: "returnFieldsCombo", first: true, predicate: ["returnFieldsCombo"], descendants: true, read: IgxComboComponent }, { propertyName: "returnFieldSelect", first: true, predicate: ["returnFieldSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "fieldSelect", first: true, predicate: ["fieldSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "conditionSelect", first: true, predicate: ["conditionSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "searchValueInput", first: true, predicate: ["searchValueInput"], descendants: true, read: ElementRef }, { propertyName: "picker", first: true, predicate: ["picker"], descendants: true }, { propertyName: "addRootAndGroupButton", first: true, predicate: ["addRootAndGroupButton"], descendants: true, read: ElementRef }, { propertyName: "addConditionButton", first: true, predicate: ["addConditionButton"], descendants: true, read: ElementRef }, { propertyName: "entityChangeDialog", first: true, predicate: ["entityChangeDialog"], descendants: true, read: IgxDialogComponent }, { propertyName: "addExpressionItemDropDown", first: true, predicate: ["addOptionsDropDown"], descendants: true, read: IgxDropDownComponent }, { propertyName: "groupContextMenuDropDown", first: true, predicate: ["groupContextMenuDropDown"], descendants: true, read: IgxDropDownComponent }, { propertyName: "editingInputsContainer", first: true, predicate: ["editingInputsContainer"], descendants: true, read: ElementRef }, { propertyName: "currentGroupButtonsContainer", first: true, predicate: ["currentGroupButtonsContainer"], descendants: true, read: ElementRef }, { propertyName: "expressionsContainer", first: true, predicate: ["expressionsContainer"], descendants: true }, { propertyName: "expressionsChips", predicate: IgxChipComponent, descendants: true, read: IgxChipComponent }, { propertyName: "innerQueries", predicate: IgxQueryBuilderTreeComponent, descendants: true }], ngImport: i0, template: "<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\n class=\"igx-filter-tree__inputs\"\n [style.display]=\"\n isInEditMode() &&\n (!this.isAdvancedFiltering() || this.isHierarchicalNestedQuery())\n ? 'flex'\n : 'none'\n \"\n >\n <div class=\"igx-filter-tree__inputs-field\">\n <span class=\"igx-query-builder__label\">{{\n this.resourceStrings.igx_query_builder_from_label\n }}</span>\n <igx-select\n #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\">{{\n this.resourceStrings.igx_query_builder_select_label\n }}</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]=\"{\n 'igx-drop-down__item--selected':\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedEntity.fields.length ===\n this.selectedReturnFields.length,\n }\"\n >\n <igx-checkbox\n [checked]=\"\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedEntity.fields.length ===\n this.selectedReturnFields.length\n \"\n [indeterminate]=\"\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedReturnFields.length > 0 &&\n this.selectedReturnFields.length < this.selectedEntity.fields.length\n \"\n [readonly]=\"true\"\n [disableRipple]=\"true\"\n [tabindex]=\"-1\"\n class=\"igx-combo__checkbox\"\n >\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 } @else {\n <igx-select\n #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 #expressionsContainer class=\"igx-query-builder__main\">\n <ng-container *ngTemplateOutlet=\"selectFromTemplate\"></ng-container>\n\n <ng-template\n #addExpressionsTemplate\n let-expressionItem\n let-afterExpression=\"afterExpression\"\n >\n <button\n type=\"button\"\n #addConditionButton\n igxButton=\"flat\"\n [disabled]=\"hasEditedExpression\"\n (click)=\"addCondition(expressionItem, afterExpression, true)\"\n igxDrop\n (enter)=\"\n dragService.onAddConditionEnter(addConditionButton, expressionItem)\n \"\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\n 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 (\n dragService.dropGhostExpression &&\n expressionItem === dragService.dropGhostExpression &&\n dragService.isKeyboardDrag === false\n ) {\n <div\n class=\"igx-filter-tree__expression-item igx-filter-tree__expression-item-drop-ghost\"\n >\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':\n 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)=\"\n dragService.onMoveStart(dragRef, expressionItem, false)\n \"\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 <igx-icon\n igxPrefix\n class=\"igx-drag-indicator\"\n tabindex=\"0\"\n (focus)=\"\n dragService.onChipDragIndicatorFocus(dragRef, expressionItem)\n \"\n (focusout)=\"dragService.onChipDragIndicatorFocusOut()\"\n family=\"default\"\n name=\"drag_indicator\"\n >\n </igx-icon>\n <span igxPrefix class=\"igx-filter-tree__expression-column\">\n {{\n expressionItem.fieldLabel || expressionItem.expression.fieldName\n }}\n </span>\n <span igxPrefix class=\"igx-filter-tree__expression-condition\">\n {{\n getConditionFriendlyName(\n $safeNavigationMigration(\n expressionItem.expression.condition?.name\n )\n )\n }}\n </span>\n @if (!expressionItem.expression.condition?.isUnary) {\n <span>\n @if (expressionItem.expression.searchTree) {\n <ng-container>\n <strong>{{\n expressionItem.expression.searchTree.entity\n }}</strong\n > /\n {{\n formatReturnFields(expressionItem.expression.searchTree)\n }}\n </ng-container>\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 : $any(getFormatter(\n expressionItem.expression.fieldName\n ))\n : undefined\n }}\n } @else {\n {{\n expressionItem.expression.searchVal\n | date\n : getFormat(expressionItem.expression.fieldName)\n : undefined\n : this.locale\n }}\n }\n } @else {\n @if (getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : $any(getFormatter(\n expressionItem.expression.fieldName\n ))\n : expressionItem.expression.conditionName ||\n 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 {{\n getConditionFriendlyName(\n $safeNavigationMigration(\n expressionItem.expression.condition?.name\n )\n )\n }}\n } @else {\n @if (getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : $any(getFormatter(expressionItem.expression.fieldName))\n : expressionItem.expression.conditionName ||\n 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\n #addExpressionButton\n igxDragIgnore\n igxIconButton=\"outlined\"\n [igxDropDownItemNavigation]=\"addOptionsDropDown\"\n aria-labelledby=\"add-expression\"\n (keydown)=\"invokeClick($event)\"\n (click)=\"\n clickExpressionAdd(addExpressionButton, expressionChip)\n \"\n (blur)=\"addExpressionBlur()\"\n >\n <igx-icon\n id=\"add-expression\"\n family=\"default\"\n name=\"add\"\n ></igx-icon>\n </button>\n <igx-drop-down\n #addOptionsDropDown\n (selectionChanging)=\"enterExpressionAdd($event, expressionItem)\"\n >\n <igx-drop-down-item [value]=\"'addCondition'\">\n <span>{{\n this.resourceStrings.igx_query_builder_add_condition\n }}</span>\n </igx-drop-down-item>\n <igx-drop-down-item [value]=\"'addGroup'\">\n <span>{{\n this.resourceStrings.igx_query_builder_add_group\n }}</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)=\"\n dragService.onChipEnter(editingInputsContainer, expressionItem)\n \"\n (over)=\"\n dragService.onChipEnter(editingInputsContainer, expressionItem)\n \"\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 @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(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]=\"selectedField!.filters!.condition(condition).iconName\"\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\n ? searchValueTemplate\n : defaultSearchValueTemplate;\n context: getSearchValueTemplateContext(defaultSearchValueTemplate)\n \"\n >\n </ng-container>\n\n <ng-template #defaultSearchValueTemplate>\n @if (\n !selectedField ||\n (selectedField.dataType !== 'date' &&\n selectedField.dataType !== 'time' &&\n selectedField.dataType !== 'dateTime')\n ) {\n <igx-input-group type=\"box\">\n <input\n #searchValueInput\n igxInput\n [disabled]=\"isSearchValueInputDisabled()\"\n [placeholder]=\"\n this.selectedCondition === 'inQuery' ||\n this.selectedCondition === 'notInQuery'\n ? this.resourceStrings\n .igx_query_builder_query_value_placeholder\n : this.resourceStrings.igx_query_builder_value_placeholder\n \"\n [type]=\"\n selectedField && selectedField.dataType === 'number'\n ? 'number'\n : 'text'\n \"\n [(ngModel)]=\"searchValue.value\"\n />\n </igx-input-group>\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 [formatter]=\"selectedField.formatter!\"\n [displayFormat]=\"selectedField.pipeArgs!.format!\"\n [weekStart]=\"selectedField.pipeArgs!.weekStart!\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_date_placeholder\n !\"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-date-picker>\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 [formatter]=\"selectedField.formatter!\"\n [displayFormat]=\"selectedField.pipeArgs!.format!\"\n [inputFormat]=\"selectedField.editorOptions!.dateTimeFormat!\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_time_placeholder\n !\"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-time-picker>\n } @else if (\n selectedField && selectedField.dataType === 'dateTime'\n ) {\n <igx-input-group #inputGroup type=\"box\">\n <input\n #input\n igxInput\n tabindex=\"0\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_datetime_placeholder\n \"\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\n 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\n 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 &&\n expressionItem.expression.searchTree &&\n expressionItem.expression.searchTree.filteringOperands?.length > 0) ||\n (expressionItem.inEditMode &&\n selectedField?.filters?.condition(selectedCondition)?.isNestedQuery)\n ) {\n <ng-container>\n <igx-query-builder-tree\n [style.display]=\"\n expressionItem.inEditMode || expressionItem.expanded\n ? 'block'\n : 'none'\n \"\n [entities]=\"\n (this.selectedEntity\n ? this.selectedEntity.childEntities\n : entities?.[0]?.childEntities) ??\n entities ?? []\n \"\n [queryBuilder]=\"this.queryBuilder\"\n [parentExpression]=\"expressionItem\"\n [expectedReturnField]=\"this.selectedField?.field\"\n [expressionTree]=\"\n expressionItem.inEditMode\n ? (innerQueryNewExpressionTree ||\n getExpressionTreeCopy(\n expressionItem.expression.searchTree,\n true\n ))\n : expressionItem.expression.searchTree\n \"\n (inEditModeChange)=\"onInEditModeChanged($event)\"\n [searchValueTemplate]=\"searchValueTemplate\"\n [resourceStrings]=\"resourceStrings\"\n >\n </igx-query-builder-tree>\n </ng-container>\n }\n </div>\n </ng-template>\n\n <ng-template #expressionGroupTemplate let-expressionItem>\n <div\n class=\"igx-filter-tree\"\n (focusout)=\"parentExpression ? null : dragService.onDragFocusOut()\"\n >\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\n 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\n #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)=\"\n onGroupClick(\n groupContextMenuDropDown,\n changeGroupButton,\n expressionItem\n )\n \"\n >\n <span\n igxDrop\n (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n >\n {{\n getOperator(expressionItem) === 0\n ? this.resourceStrings.igx_query_builder_and_label\n : this.resourceStrings.igx_query_builder_or_label\n }}\n </span>\n <igx-icon\n family=\"default\"\n name=\"arrow_drop_down\"\n role=\"button\"\n ></igx-icon>\n </button>\n <igx-drop-down\n #groupContextMenuDropDown\n (selectionChanging)=\"\n onGroupContextMenuDropDownSelectionChanging($event)\n \"\n [width]=\"'fit-content'\"\n >\n <igx-drop-down-item [value]=\"'switchCondition'\">\n {{ getSwitchGroupText(expressionItem) }}\n </igx-drop-down-item>\n <igx-drop-down-item\n [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 (\n expr of expressionItem?.children;\n track trackExpressionItem(expr)\n ) {\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 #currentGroupButtonsContainer class=\"igx-filter-tree__buttons\">\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 (\n rootGroup ||\n (!rootGroup &&\n (selectedEntity || (entities?.length === 1 && !entities[0]?.name)))\n ) {\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=\"expressionGroupTemplate; context: context(rootGroup)\"\n ></ng-container>\n </div>\n }\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>\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 >\n {{ this.resourceStrings.igx_query_builder_dialog_checkbox_text }}\n </igx-checkbox>\n </section>\n</igx-dialog>\n", dependencies: [{ kind: "component", type: IgxQueryBuilderTreeComponent, selector: "igx-query-builder-tree", inputs: ["entities", "queryBuilder", "searchValueTemplate", "parentExpression", "fields", "expressionTree", "locale", "resourceStrings", "expectedReturnField"], outputs: ["expressionTreeChange", "inEditModeChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"] }, { kind: "component", type: IgxChipComponent, selector: "igx-chip", inputs: ["variant", "id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "component", type: IgxComboComponent, selector: "igx-combo", inputs: ["autoFocusSearch", "searchPlaceholder"], outputs: ["selectionChanging", "selectionChanged"] }, { kind: "directive", type: IgxComboHeaderDirective, selector: "[igxComboHeader]" }, { kind: "component", type: IgxDatePickerComponent, selector: "igx-date-picker", inputs: ["hideOutsideDays", "displayMonthsCount", "orientation", "showWeekNumbers", "activeDate", "formatter", "todayButtonLabel", "cancelButtonLabel", "spinLoop", "spinDelta", "id", "formatViews", "disabledDates", "specialDates", "calendarFormat", "value", "minValue", "maxValue", "resourceStrings", "readOnly"], outputs: ["valueChange", "validationFailed"] }, { kind: "directive", type: IgxDateTimeEditorDirective, selector: "[igxDateTimeEditor]", inputs: ["locale", "minValue", "maxValue", "spinLoop", "displayFormat", "igxDateTimeEditor", "value", "defaultFormatType", "spinDelta"], outputs: ["valueChange", "validationFailed"], exportAs: ["igxDateTimeEditor"] }, { kind: "component", type: IgxDialogComponent, selector: "igx-dialog", inputs: ["id", "isModal", "closeOnEscape", "focusTrap", "title", "message", "leftButtonLabel", "leftButtonType", "leftButtonRipple", "rightButtonLabel", "rightButtonType", "rightButtonRipple", "closeOnOutsideSelect", "positionSettings", "isOpen", "role", "titleId"], outputs: ["opening", "opened", "closing", "closed", "leftButtonSelect", "rightButtonSelect", "isOpenChange"] }, { kind: "directive", type: IgxDragIgnoreDirective, selector: "[igxDragIgnore]" }, { kind: "directive", type: IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy", "role"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "directive", type: IgxIconButtonDirective, selector: "[igxIconButton]", inputs: ["igxIconButton"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "component", type: IgxPickerClearComponent, selector: "igx-picker-clear" }, { kind: "component", type: IgxPickerToggleComponent, selector: "igx-picker-toggle", outputs: ["clicked"] }, { kind: "directive", type: IgxPrefixDirective, selector: "[igxPrefix],[igxStart],igx-prefix" }, { kind: "component", type: IgxSelectComponent, selector: "igx-select", inputs: ["placeholder", "disabled", "overlaySettings", "value", "type"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "component", type: IgxSelectItemComponent, selector: "igx-select-item", inputs: ["text"] }, { kind: "component", type: IgxTimePickerComponent, selector: "igx-time-picker", inputs: ["id", "displayFormat", "inputFormat", "mode", "minValue", "maxValue", "spinLoop", "formatter", "readOnly", "value", "resourceStrings", "okButtonLabel", "cancelButtonLabel", "itemsDelta"], outputs: ["selected", "valueChange", "validationFailed"] }, { kind: "directive", type: IgxTooltipDirective, selector: "[igxTooltip]", inputs: ["context", "id", "role"], exportAs: ["tooltip"] }, { kind: "directive", type: IgxTooltipTargetDirective, selector: "[igxTooltipTarget]", inputs: ["showDelay", "hideDelay", "hasArrow", "sticky", "closeButtonTemplate", "positionSettings", "tooltipDisabled", "showTriggers", "hideTriggers", "igxTooltipTarget", "tooltip"], outputs: ["tooltipShow", "tooltipHide"], exportAs: ["tooltipTarget"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: IgxDateFormatterPipe, name: "date" }, { kind: "pipe", type: IgxFieldFormatterPipe, name: "fieldFormatter" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
1880
|
+
], viewQueries: [{ propertyName: "entitySelect", first: true, predicate: ["entitySelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "editingInputs", first: true, predicate: ["editingInputs"], descendants: true, read: ElementRef }, { propertyName: "returnFieldsCombo", first: true, predicate: ["returnFieldsCombo"], descendants: true, read: IgxComboComponent }, { propertyName: "returnFieldSelect", first: true, predicate: ["returnFieldSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "fieldSelect", first: true, predicate: ["fieldSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "conditionSelect", first: true, predicate: ["conditionSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "searchValueInput", first: true, predicate: ["searchValueInput"], descendants: true, read: ElementRef }, { propertyName: "picker", first: true, predicate: ["picker"], descendants: true }, { propertyName: "addRootAndGroupButton", first: true, predicate: ["addRootAndGroupButton"], descendants: true, read: ElementRef }, { propertyName: "addConditionButton", first: true, predicate: ["addConditionButton"], descendants: true, read: ElementRef }, { propertyName: "entityChangeDialog", first: true, predicate: ["entityChangeDialog"], descendants: true, read: IgxDialogComponent }, { propertyName: "addExpressionItemDropDown", first: true, predicate: ["addOptionsDropDown"], descendants: true, read: IgxDropDownComponent }, { propertyName: "groupContextMenuDropDown", first: true, predicate: ["groupContextMenuDropDown"], descendants: true, read: IgxDropDownComponent }, { propertyName: "editingInputsContainer", first: true, predicate: ["editingInputsContainer"], descendants: true, read: ElementRef }, { propertyName: "currentGroupButtonsContainer", first: true, predicate: ["currentGroupButtonsContainer"], descendants: true, read: ElementRef }, { propertyName: "expressionsContainer", first: true, predicate: ["expressionsContainer"], descendants: true }, { propertyName: "expressionsChips", predicate: IgxChipComponent, descendants: true, read: IgxChipComponent }, { propertyName: "innerQueries", predicate: IgxQueryBuilderTreeComponent, descendants: true }], ngImport: i0, template: "<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\n class=\"igx-filter-tree__inputs\"\n [style.display]=\"\n isInEditMode() &&\n (!this.isAdvancedFiltering() || this.isHierarchicalNestedQuery())\n ? 'flex'\n : 'none'\n \"\n >\n <div class=\"igx-filter-tree__inputs-field\">\n <span class=\"igx-query-builder__label\">{{\n this.resourceStrings.igx_query_builder_from_label\n }}</span>\n <igx-select\n #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\">{{\n this.resourceStrings.igx_query_builder_select_label\n }}</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]=\"\n this.resourceStrings.igx_query_builder_select_return_fields\n \"\n searchPlaceholder=\"{{\n this.resourceStrings.igx_query_builder_search\n }}\"\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]=\"{\n 'igx-drop-down__item--selected':\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedEntity.fields.length ===\n this.selectedReturnFields.length,\n }\"\n >\n <igx-checkbox\n [checked]=\"\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedEntity.fields.length ===\n this.selectedReturnFields.length\n \"\n [indeterminate]=\"\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedReturnFields.length > 0 &&\n this.selectedReturnFields.length <\n this.selectedEntity.fields?.length\n \"\n [readonly]=\"true\"\n [disableRipple]=\"true\"\n [tabindex]=\"-1\"\n class=\"igx-combo__checkbox\"\n >\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 } @else {\n <igx-select\n #returnFieldSelect\n type=\"box\"\n (selectionChanging)=\"onReturnFieldSelectChanging($event)\"\n [overlaySettings]=\"returnFieldSelectOverlaySettings\"\n [disabled]=\"!selectedEntity\"\n [ngModel]=\"selectedReturnFields ? selectedReturnFields[0] : null\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_select_return_field_single\n \"\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 #expressionsContainer class=\"igx-query-builder__main\">\n <ng-container *ngTemplateOutlet=\"selectFromTemplate\"></ng-container>\n\n <ng-template\n #addExpressionsTemplate\n let-expressionItem\n let-afterExpression=\"afterExpression\"\n >\n <button\n type=\"button\"\n #addConditionButton\n igxButton=\"flat\"\n [disabled]=\"hasEditedExpression\"\n (click)=\"addCondition(expressionItem, afterExpression, true)\"\n igxDrop\n (enter)=\"\n dragService.onAddConditionEnter(addConditionButton, expressionItem)\n \"\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\n 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 (\n dragService.dropGhostExpression &&\n expressionItem === dragService.dropGhostExpression &&\n dragService.isKeyboardDrag === false\n ) {\n <div\n class=\"igx-filter-tree__expression-item igx-filter-tree__expression-item-drop-ghost\"\n >\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':\n 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)=\"\n dragService.onMoveStart(dragRef, expressionItem, false)\n \"\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 <igx-icon\n igxPrefix\n class=\"igx-drag-indicator\"\n tabindex=\"0\"\n (focus)=\"\n dragService.onChipDragIndicatorFocus(dragRef, expressionItem)\n \"\n (focusout)=\"dragService.onChipDragIndicatorFocusOut()\"\n family=\"default\"\n name=\"drag_indicator\"\n >\n </igx-icon>\n <span igxPrefix class=\"igx-filter-tree__expression-column\">\n {{\n expressionItem.fieldLabel || expressionItem.expression.fieldName\n }}\n </span>\n <span igxPrefix class=\"igx-filter-tree__expression-condition\">\n {{\n getConditionFriendlyName(\n $safeNavigationMigration(\n expressionItem.expression.condition?.name\n )\n )\n }}\n </span>\n @if (!expressionItem.expression.condition?.isUnary) {\n <span>\n @if (expressionItem.expression.searchTree) {\n <ng-container>\n <strong>{{\n expressionItem.expression.searchTree.entity\n }}</strong\n > /\n {{\n formatReturnFields(expressionItem.expression.searchTree)\n }}\n </ng-container>\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(expressionItem.expression.fieldName)\n : undefined\n : this.locale\n }}\n }\n } @else {\n @if (getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : getFormatter(\n expressionItem.expression.fieldName\n )\n : expressionItem.expression.conditionName ||\n 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 {{\n getConditionFriendlyName(\n $safeNavigationMigration(\n expressionItem.expression.condition?.name\n )\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 ||\n 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\n #addExpressionButton\n igxDragIgnore\n igxIconButton=\"outlined\"\n [igxDropDownItemNavigation]=\"addOptionsDropDown\"\n aria-labelledby=\"add-expression\"\n (keydown)=\"invokeClick($event)\"\n (click)=\"\n clickExpressionAdd(addExpressionButton, expressionChip)\n \"\n (blur)=\"addExpressionBlur()\"\n >\n <igx-icon\n id=\"add-expression\"\n family=\"default\"\n name=\"add\"\n ></igx-icon>\n </button>\n <igx-drop-down\n #addOptionsDropDown\n (selectionChanging)=\"enterExpressionAdd($event, expressionItem)\"\n >\n <igx-drop-down-item [value]=\"'addCondition'\">\n <span>{{\n this.resourceStrings.igx_query_builder_add_condition\n }}</span>\n </igx-drop-down-item>\n <igx-drop-down-item [value]=\"'addGroup'\">\n <span>{{\n this.resourceStrings.igx_query_builder_add_group\n }}</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)=\"\n dragService.onChipEnter(editingInputsContainer, expressionItem)\n \"\n (over)=\"\n dragService.onChipEnter(editingInputsContainer, expressionItem)\n \"\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]=\"\n 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]=\"\n this.resourceStrings.igx_query_builder_condition_placeholder\n \"\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(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]=\"selectedField.filters.condition(condition).iconName\"\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\n ? searchValueTemplate\n : defaultSearchValueTemplate;\n context: getSearchValueTemplateContext(defaultSearchValueTemplate)\n \"\n >\n </ng-container>\n\n <ng-template #defaultSearchValueTemplate>\n @if (\n !selectedField ||\n (selectedField.dataType !== 'date' &&\n selectedField.dataType !== 'time' &&\n selectedField.dataType !== 'dateTime')\n ) {\n <igx-input-group type=\"box\">\n <input\n #searchValueInput\n igxInput\n [disabled]=\"isSearchValueInputDisabled()\"\n [placeholder]=\"\n this.selectedCondition === 'inQuery' ||\n this.selectedCondition === 'notInQuery'\n ? this.resourceStrings\n .igx_query_builder_query_value_placeholder\n : this.resourceStrings.igx_query_builder_value_placeholder\n \"\n [type]=\"\n selectedField && selectedField.dataType === 'number'\n ? 'number'\n : 'text'\n \"\n [(ngModel)]=\"searchValue.value\"\n />\n </igx-input-group>\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 [formatter]=\"selectedField.formatter\"\n [displayFormat]=\"selectedField.pipeArgs.format\"\n [weekStart]=\"selectedField.pipeArgs.weekStart\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_date_placeholder\n \"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-date-picker>\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 [formatter]=\"selectedField.formatter\"\n [displayFormat]=\"selectedField.pipeArgs.format\"\n [inputFormat]=\"\n $safeNavigationMigration(\n selectedField.editorOptions?.dateTimeFormat\n )\n \"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_time_placeholder\n \"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-time-picker>\n } @else if (\n selectedField && selectedField.dataType === 'dateTime'\n ) {\n <igx-input-group #inputGroup type=\"box\">\n <input\n #input\n igxInput\n tabindex=\"0\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_datetime_placeholder\n \"\n [(ngModel)]=\"searchValue.value\"\n [disabled]=\"isSearchValueInputDisabled()\"\n [locale]=\"this.locale\"\n [igxDateTimeEditor]=\"\n $safeNavigationMigration(\n selectedField.editorOptions?.dateTimeFormat\n )\n \"\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\n 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\n 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 &&\n expressionItem.expression.searchTree &&\n expressionItem.expression.searchTree.filteringOperands?.length > 0) ||\n (expressionItem.inEditMode &&\n selectedField?.filters?.condition(selectedCondition)?.isNestedQuery)\n ) {\n <ng-container>\n <igx-query-builder-tree\n [style.display]=\"\n expressionItem.inEditMode || expressionItem.expanded\n ? 'block'\n : 'none'\n \"\n [entities]=\"\n (this.selectedEntity\n ? this.selectedEntity.childEntities\n : entities?.[0]?.childEntities) ??\n entities ?? []\n \"\n [queryBuilder]=\"this.queryBuilder\"\n [parentExpression]=\"expressionItem\"\n [expectedReturnField]=\"\n $safeNavigationMigration(this.selectedField?.field)\n \"\n [expressionTree]=\"\n expressionItem.inEditMode\n ? (innerQueryNewExpressionTree ??\n getExpressionTreeCopy(\n expressionItem.expression.searchTree,\n true\n ))\n : expressionItem.expression.searchTree\n \"\n (inEditModeChange)=\"onInEditModeChanged($event)\"\n [searchValueTemplate]=\"searchValueTemplate\"\n [resourceStrings]=\"resourceStrings\"\n >\n </igx-query-builder-tree>\n </ng-container>\n }\n </div>\n </ng-template>\n\n <ng-template #expressionGroupTemplate let-expressionItem>\n <div\n class=\"igx-filter-tree\"\n (focusout)=\"parentExpression ? null : dragService.onDragFocusOut()\"\n >\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\n 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\n #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)=\"\n onGroupClick(\n groupContextMenuDropDown,\n changeGroupButton,\n expressionItem\n )\n \"\n >\n <span\n igxDrop\n (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n >\n {{\n getOperator(expressionItem) === 0\n ? this.resourceStrings.igx_query_builder_and_label\n : this.resourceStrings.igx_query_builder_or_label\n }}\n </span>\n <igx-icon\n family=\"default\"\n name=\"arrow_drop_down\"\n role=\"button\"\n ></igx-icon>\n </button>\n <igx-drop-down\n #groupContextMenuDropDown\n (selectionChanging)=\"\n onGroupContextMenuDropDownSelectionChanging($event)\n \"\n [width]=\"'fit-content'\"\n >\n <igx-drop-down-item [value]=\"'switchCondition'\">\n {{ getSwitchGroupText(expressionItem) }}\n </igx-drop-down-item>\n <igx-drop-down-item\n [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 (\n expr of expressionItem?.children;\n track trackExpressionItem(expr)\n ) {\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 #currentGroupButtonsContainer class=\"igx-filter-tree__buttons\">\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 (\n rootGroup ||\n (!rootGroup &&\n (selectedEntity || (entities?.length === 1 && !entities[0]?.name)))\n ) {\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=\"expressionGroupTemplate; context: context(rootGroup)\"\n ></ng-container>\n </div>\n }\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>\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 >\n {{ this.resourceStrings.igx_query_builder_dialog_checkbox_text }}\n </igx-checkbox>\n </section>\n</igx-dialog>\n", dependencies: [{ kind: "component", type: IgxQueryBuilderTreeComponent, selector: "igx-query-builder-tree", inputs: ["entities", "queryBuilder", "searchValueTemplate", "parentExpression", "fields", "expressionTree", "locale", "resourceStrings", "expectedReturnField"], outputs: ["expressionTreeChange", "inEditModeChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"] }, { kind: "component", type: IgxChipComponent, selector: "igx-chip", inputs: ["variant", "id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "component", type: IgxComboComponent, selector: "igx-combo", inputs: ["autoFocusSearch", "searchPlaceholder"], outputs: ["selectionChanging", "selectionChanged"] }, { kind: "directive", type: IgxComboHeaderDirective, selector: "[igxComboHeader]" }, { kind: "component", type: IgxDatePickerComponent, selector: "igx-date-picker", inputs: ["hideOutsideDays", "displayMonthsCount", "orientation", "showWeekNumbers", "activeDate", "formatter", "todayButtonLabel", "cancelButtonLabel", "spinLoop", "spinDelta", "id", "formatViews", "disabledDates", "specialDates", "calendarFormat", "value", "minValue", "maxValue", "resourceStrings", "readOnly"], outputs: ["valueChange", "validationFailed"] }, { kind: "directive", type: IgxDateTimeEditorDirective, selector: "[igxDateTimeEditor]", inputs: ["locale", "minValue", "maxValue", "spinLoop", "displayFormat", "igxDateTimeEditor", "value", "defaultFormatType", "spinDelta"], outputs: ["valueChange", "validationFailed"], exportAs: ["igxDateTimeEditor"] }, { kind: "component", type: IgxDialogComponent, selector: "igx-dialog", inputs: ["id", "isModal", "closeOnEscape", "focusTrap", "title", "message", "leftButtonLabel", "leftButtonType", "leftButtonRipple", "rightButtonLabel", "rightButtonType", "rightButtonRipple", "closeOnOutsideSelect", "positionSettings", "isOpen", "role", "titleId"], outputs: ["opening", "opened", "closing", "closed", "leftButtonSelect", "rightButtonSelect", "isOpenChange"] }, { kind: "directive", type: IgxDragIgnoreDirective, selector: "[igxDragIgnore]" }, { kind: "directive", type: IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy", "role"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "directive", type: IgxIconButtonDirective, selector: "[igxIconButton]", inputs: ["igxIconButton"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "component", type: IgxPickerClearComponent, selector: "igx-picker-clear" }, { kind: "component", type: IgxPickerToggleComponent, selector: "igx-picker-toggle", outputs: ["clicked"] }, { kind: "directive", type: IgxPrefixDirective, selector: "[igxPrefix],[igxStart],igx-prefix" }, { kind: "component", type: IgxSelectComponent, selector: "igx-select", inputs: ["placeholder", "disabled", "overlaySettings", "value", "type"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "component", type: IgxSelectItemComponent, selector: "igx-select-item", inputs: ["text"] }, { kind: "component", type: IgxTimePickerComponent, selector: "igx-time-picker", inputs: ["id", "displayFormat", "inputFormat", "mode", "minValue", "maxValue", "spinLoop", "formatter", "readOnly", "value", "resourceStrings", "okButtonLabel", "cancelButtonLabel", "itemsDelta"], outputs: ["selected", "valueChange", "validationFailed"] }, { kind: "directive", type: IgxTooltipDirective, selector: "[igxTooltip]", inputs: ["context", "id", "role"], exportAs: ["tooltip"] }, { kind: "directive", type: IgxTooltipTargetDirective, selector: "[igxTooltipTarget]", inputs: ["showDelay", "hideDelay", "hasArrow", "sticky", "closeButtonTemplate", "positionSettings", "tooltipDisabled", "showTriggers", "hideTriggers", "igxTooltipTarget", "tooltip"], outputs: ["tooltipShow", "tooltipHide"], exportAs: ["tooltipTarget"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: IgxDateFormatterPipe, name: "date" }, { kind: "pipe", type: IgxFieldFormatterPipe, name: "fieldFormatter" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
1882
1881
|
}
|
|
1883
1882
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: IgxQueryBuilderTreeComponent, decorators: [{
|
|
1884
1883
|
type: Component,
|
|
@@ -1915,7 +1914,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
|
|
|
1915
1914
|
NgTemplateOutlet
|
|
1916
1915
|
], changeDetection: ChangeDetectionStrategy.Eager, providers: [
|
|
1917
1916
|
IgxQueryBuilderDragService
|
|
1918
|
-
], template: "<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\n class=\"igx-filter-tree__inputs\"\n [style.display]=\"\n isInEditMode() &&\n (!this.isAdvancedFiltering() || this.isHierarchicalNestedQuery())\n ? 'flex'\n : 'none'\n \"\n >\n <div class=\"igx-filter-tree__inputs-field\">\n <span class=\"igx-query-builder__label\">{{\n this.resourceStrings.igx_query_builder_from_label\n }}</span>\n <igx-select\n #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\">{{\n this.resourceStrings.igx_query_builder_select_label\n }}</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]=\"{\n 'igx-drop-down__item--selected':\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedEntity.fields.length ===\n this.selectedReturnFields.length,\n }\"\n >\n <igx-checkbox\n [checked]=\"\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedEntity.fields.length ===\n this.selectedReturnFields.length\n \"\n [indeterminate]=\"\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedReturnFields.length > 0 &&\n this.selectedReturnFields.length < this.selectedEntity.fields.length\n \"\n [readonly]=\"true\"\n [disableRipple]=\"true\"\n [tabindex]=\"-1\"\n class=\"igx-combo__checkbox\"\n >\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 } @else {\n <igx-select\n #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 #expressionsContainer class=\"igx-query-builder__main\">\n <ng-container *ngTemplateOutlet=\"selectFromTemplate\"></ng-container>\n\n <ng-template\n #addExpressionsTemplate\n let-expressionItem\n let-afterExpression=\"afterExpression\"\n >\n <button\n type=\"button\"\n #addConditionButton\n igxButton=\"flat\"\n [disabled]=\"hasEditedExpression\"\n (click)=\"addCondition(expressionItem, afterExpression, true)\"\n igxDrop\n (enter)=\"\n dragService.onAddConditionEnter(addConditionButton, expressionItem)\n \"\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\n 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 (\n dragService.dropGhostExpression &&\n expressionItem === dragService.dropGhostExpression &&\n dragService.isKeyboardDrag === false\n ) {\n <div\n class=\"igx-filter-tree__expression-item igx-filter-tree__expression-item-drop-ghost\"\n >\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':\n 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)=\"\n dragService.onMoveStart(dragRef, expressionItem, false)\n \"\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 <igx-icon\n igxPrefix\n class=\"igx-drag-indicator\"\n tabindex=\"0\"\n (focus)=\"\n dragService.onChipDragIndicatorFocus(dragRef, expressionItem)\n \"\n (focusout)=\"dragService.onChipDragIndicatorFocusOut()\"\n family=\"default\"\n name=\"drag_indicator\"\n >\n </igx-icon>\n <span igxPrefix class=\"igx-filter-tree__expression-column\">\n {{\n expressionItem.fieldLabel || expressionItem.expression.fieldName\n }}\n </span>\n <span igxPrefix class=\"igx-filter-tree__expression-condition\">\n {{\n getConditionFriendlyName(\n $safeNavigationMigration(\n expressionItem.expression.condition?.name\n )\n )\n }}\n </span>\n @if (!expressionItem.expression.condition?.isUnary) {\n <span>\n @if (expressionItem.expression.searchTree) {\n <ng-container>\n <strong>{{\n expressionItem.expression.searchTree.entity\n }}</strong\n > /\n {{\n formatReturnFields(expressionItem.expression.searchTree)\n }}\n </ng-container>\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 : $any(getFormatter(\n expressionItem.expression.fieldName\n ))\n : undefined\n }}\n } @else {\n {{\n expressionItem.expression.searchVal\n | date\n : getFormat(expressionItem.expression.fieldName)\n : undefined\n : this.locale\n }}\n }\n } @else {\n @if (getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : $any(getFormatter(\n expressionItem.expression.fieldName\n ))\n : expressionItem.expression.conditionName ||\n 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 {{\n getConditionFriendlyName(\n $safeNavigationMigration(\n expressionItem.expression.condition?.name\n )\n )\n }}\n } @else {\n @if (getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : $any(getFormatter(expressionItem.expression.fieldName))\n : expressionItem.expression.conditionName ||\n 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\n #addExpressionButton\n igxDragIgnore\n igxIconButton=\"outlined\"\n [igxDropDownItemNavigation]=\"addOptionsDropDown\"\n aria-labelledby=\"add-expression\"\n (keydown)=\"invokeClick($event)\"\n (click)=\"\n clickExpressionAdd(addExpressionButton, expressionChip)\n \"\n (blur)=\"addExpressionBlur()\"\n >\n <igx-icon\n id=\"add-expression\"\n family=\"default\"\n name=\"add\"\n ></igx-icon>\n </button>\n <igx-drop-down\n #addOptionsDropDown\n (selectionChanging)=\"enterExpressionAdd($event, expressionItem)\"\n >\n <igx-drop-down-item [value]=\"'addCondition'\">\n <span>{{\n this.resourceStrings.igx_query_builder_add_condition\n }}</span>\n </igx-drop-down-item>\n <igx-drop-down-item [value]=\"'addGroup'\">\n <span>{{\n this.resourceStrings.igx_query_builder_add_group\n }}</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)=\"\n dragService.onChipEnter(editingInputsContainer, expressionItem)\n \"\n (over)=\"\n dragService.onChipEnter(editingInputsContainer, expressionItem)\n \"\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 @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(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]=\"selectedField!.filters!.condition(condition).iconName\"\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\n ? searchValueTemplate\n : defaultSearchValueTemplate;\n context: getSearchValueTemplateContext(defaultSearchValueTemplate)\n \"\n >\n </ng-container>\n\n <ng-template #defaultSearchValueTemplate>\n @if (\n !selectedField ||\n (selectedField.dataType !== 'date' &&\n selectedField.dataType !== 'time' &&\n selectedField.dataType !== 'dateTime')\n ) {\n <igx-input-group type=\"box\">\n <input\n #searchValueInput\n igxInput\n [disabled]=\"isSearchValueInputDisabled()\"\n [placeholder]=\"\n this.selectedCondition === 'inQuery' ||\n this.selectedCondition === 'notInQuery'\n ? this.resourceStrings\n .igx_query_builder_query_value_placeholder\n : this.resourceStrings.igx_query_builder_value_placeholder\n \"\n [type]=\"\n selectedField && selectedField.dataType === 'number'\n ? 'number'\n : 'text'\n \"\n [(ngModel)]=\"searchValue.value\"\n />\n </igx-input-group>\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 [formatter]=\"selectedField.formatter!\"\n [displayFormat]=\"selectedField.pipeArgs!.format!\"\n [weekStart]=\"selectedField.pipeArgs!.weekStart!\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_date_placeholder\n !\"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-date-picker>\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 [formatter]=\"selectedField.formatter!\"\n [displayFormat]=\"selectedField.pipeArgs!.format!\"\n [inputFormat]=\"selectedField.editorOptions!.dateTimeFormat!\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_time_placeholder\n !\"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-time-picker>\n } @else if (\n selectedField && selectedField.dataType === 'dateTime'\n ) {\n <igx-input-group #inputGroup type=\"box\">\n <input\n #input\n igxInput\n tabindex=\"0\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_datetime_placeholder\n \"\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\n 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\n 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 &&\n expressionItem.expression.searchTree &&\n expressionItem.expression.searchTree.filteringOperands?.length > 0) ||\n (expressionItem.inEditMode &&\n selectedField?.filters?.condition(selectedCondition)?.isNestedQuery)\n ) {\n <ng-container>\n <igx-query-builder-tree\n [style.display]=\"\n expressionItem.inEditMode || expressionItem.expanded\n ? 'block'\n : 'none'\n \"\n [entities]=\"\n (this.selectedEntity\n ? this.selectedEntity.childEntities\n : entities?.[0]?.childEntities) ??\n entities ?? []\n \"\n [queryBuilder]=\"this.queryBuilder\"\n [parentExpression]=\"expressionItem\"\n [expectedReturnField]=\"this.selectedField?.field\"\n [expressionTree]=\"\n expressionItem.inEditMode\n ? (innerQueryNewExpressionTree ||\n getExpressionTreeCopy(\n expressionItem.expression.searchTree,\n true\n ))\n : expressionItem.expression.searchTree\n \"\n (inEditModeChange)=\"onInEditModeChanged($event)\"\n [searchValueTemplate]=\"searchValueTemplate\"\n [resourceStrings]=\"resourceStrings\"\n >\n </igx-query-builder-tree>\n </ng-container>\n }\n </div>\n </ng-template>\n\n <ng-template #expressionGroupTemplate let-expressionItem>\n <div\n class=\"igx-filter-tree\"\n (focusout)=\"parentExpression ? null : dragService.onDragFocusOut()\"\n >\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\n 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\n #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)=\"\n onGroupClick(\n groupContextMenuDropDown,\n changeGroupButton,\n expressionItem\n )\n \"\n >\n <span\n igxDrop\n (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n >\n {{\n getOperator(expressionItem) === 0\n ? this.resourceStrings.igx_query_builder_and_label\n : this.resourceStrings.igx_query_builder_or_label\n }}\n </span>\n <igx-icon\n family=\"default\"\n name=\"arrow_drop_down\"\n role=\"button\"\n ></igx-icon>\n </button>\n <igx-drop-down\n #groupContextMenuDropDown\n (selectionChanging)=\"\n onGroupContextMenuDropDownSelectionChanging($event)\n \"\n [width]=\"'fit-content'\"\n >\n <igx-drop-down-item [value]=\"'switchCondition'\">\n {{ getSwitchGroupText(expressionItem) }}\n </igx-drop-down-item>\n <igx-drop-down-item\n [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 (\n expr of expressionItem?.children;\n track trackExpressionItem(expr)\n ) {\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 #currentGroupButtonsContainer class=\"igx-filter-tree__buttons\">\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 (\n rootGroup ||\n (!rootGroup &&\n (selectedEntity || (entities?.length === 1 && !entities[0]?.name)))\n ) {\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=\"expressionGroupTemplate; context: context(rootGroup)\"\n ></ng-container>\n </div>\n }\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>\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 >\n {{ this.resourceStrings.igx_query_builder_dialog_checkbox_text }}\n </igx-checkbox>\n </section>\n</igx-dialog>\n" }]
|
|
1917
|
+
], template: "<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\n class=\"igx-filter-tree__inputs\"\n [style.display]=\"\n isInEditMode() &&\n (!this.isAdvancedFiltering() || this.isHierarchicalNestedQuery())\n ? 'flex'\n : 'none'\n \"\n >\n <div class=\"igx-filter-tree__inputs-field\">\n <span class=\"igx-query-builder__label\">{{\n this.resourceStrings.igx_query_builder_from_label\n }}</span>\n <igx-select\n #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\">{{\n this.resourceStrings.igx_query_builder_select_label\n }}</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]=\"\n this.resourceStrings.igx_query_builder_select_return_fields\n \"\n searchPlaceholder=\"{{\n this.resourceStrings.igx_query_builder_search\n }}\"\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]=\"{\n 'igx-drop-down__item--selected':\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedEntity.fields.length ===\n this.selectedReturnFields.length,\n }\"\n >\n <igx-checkbox\n [checked]=\"\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedEntity.fields.length ===\n this.selectedReturnFields.length\n \"\n [indeterminate]=\"\n this.selectedEntity &&\n this.selectedReturnFields &&\n this.selectedReturnFields.length > 0 &&\n this.selectedReturnFields.length <\n this.selectedEntity.fields?.length\n \"\n [readonly]=\"true\"\n [disableRipple]=\"true\"\n [tabindex]=\"-1\"\n class=\"igx-combo__checkbox\"\n >\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 } @else {\n <igx-select\n #returnFieldSelect\n type=\"box\"\n (selectionChanging)=\"onReturnFieldSelectChanging($event)\"\n [overlaySettings]=\"returnFieldSelectOverlaySettings\"\n [disabled]=\"!selectedEntity\"\n [ngModel]=\"selectedReturnFields ? selectedReturnFields[0] : null\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_select_return_field_single\n \"\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 #expressionsContainer class=\"igx-query-builder__main\">\n <ng-container *ngTemplateOutlet=\"selectFromTemplate\"></ng-container>\n\n <ng-template\n #addExpressionsTemplate\n let-expressionItem\n let-afterExpression=\"afterExpression\"\n >\n <button\n type=\"button\"\n #addConditionButton\n igxButton=\"flat\"\n [disabled]=\"hasEditedExpression\"\n (click)=\"addCondition(expressionItem, afterExpression, true)\"\n igxDrop\n (enter)=\"\n dragService.onAddConditionEnter(addConditionButton, expressionItem)\n \"\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\n 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 (\n dragService.dropGhostExpression &&\n expressionItem === dragService.dropGhostExpression &&\n dragService.isKeyboardDrag === false\n ) {\n <div\n class=\"igx-filter-tree__expression-item igx-filter-tree__expression-item-drop-ghost\"\n >\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':\n 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)=\"\n dragService.onMoveStart(dragRef, expressionItem, false)\n \"\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 <igx-icon\n igxPrefix\n class=\"igx-drag-indicator\"\n tabindex=\"0\"\n (focus)=\"\n dragService.onChipDragIndicatorFocus(dragRef, expressionItem)\n \"\n (focusout)=\"dragService.onChipDragIndicatorFocusOut()\"\n family=\"default\"\n name=\"drag_indicator\"\n >\n </igx-icon>\n <span igxPrefix class=\"igx-filter-tree__expression-column\">\n {{\n expressionItem.fieldLabel || expressionItem.expression.fieldName\n }}\n </span>\n <span igxPrefix class=\"igx-filter-tree__expression-condition\">\n {{\n getConditionFriendlyName(\n $safeNavigationMigration(\n expressionItem.expression.condition?.name\n )\n )\n }}\n </span>\n @if (!expressionItem.expression.condition?.isUnary) {\n <span>\n @if (expressionItem.expression.searchTree) {\n <ng-container>\n <strong>{{\n expressionItem.expression.searchTree.entity\n }}</strong\n > /\n {{\n formatReturnFields(expressionItem.expression.searchTree)\n }}\n </ng-container>\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(expressionItem.expression.fieldName)\n : undefined\n : this.locale\n }}\n }\n } @else {\n @if (getFormatter(expressionItem.expression.fieldName)) {\n {{\n expressionItem.expression.searchVal\n | fieldFormatter\n : getFormatter(\n expressionItem.expression.fieldName\n )\n : expressionItem.expression.conditionName ||\n 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 {{\n getConditionFriendlyName(\n $safeNavigationMigration(\n expressionItem.expression.condition?.name\n )\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 ||\n 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\n #addExpressionButton\n igxDragIgnore\n igxIconButton=\"outlined\"\n [igxDropDownItemNavigation]=\"addOptionsDropDown\"\n aria-labelledby=\"add-expression\"\n (keydown)=\"invokeClick($event)\"\n (click)=\"\n clickExpressionAdd(addExpressionButton, expressionChip)\n \"\n (blur)=\"addExpressionBlur()\"\n >\n <igx-icon\n id=\"add-expression\"\n family=\"default\"\n name=\"add\"\n ></igx-icon>\n </button>\n <igx-drop-down\n #addOptionsDropDown\n (selectionChanging)=\"enterExpressionAdd($event, expressionItem)\"\n >\n <igx-drop-down-item [value]=\"'addCondition'\">\n <span>{{\n this.resourceStrings.igx_query_builder_add_condition\n }}</span>\n </igx-drop-down-item>\n <igx-drop-down-item [value]=\"'addGroup'\">\n <span>{{\n this.resourceStrings.igx_query_builder_add_group\n }}</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)=\"\n dragService.onChipEnter(editingInputsContainer, expressionItem)\n \"\n (over)=\"\n dragService.onChipEnter(editingInputsContainer, expressionItem)\n \"\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]=\"\n 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]=\"\n this.resourceStrings.igx_query_builder_condition_placeholder\n \"\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(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]=\"selectedField.filters.condition(condition).iconName\"\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\n ? searchValueTemplate\n : defaultSearchValueTemplate;\n context: getSearchValueTemplateContext(defaultSearchValueTemplate)\n \"\n >\n </ng-container>\n\n <ng-template #defaultSearchValueTemplate>\n @if (\n !selectedField ||\n (selectedField.dataType !== 'date' &&\n selectedField.dataType !== 'time' &&\n selectedField.dataType !== 'dateTime')\n ) {\n <igx-input-group type=\"box\">\n <input\n #searchValueInput\n igxInput\n [disabled]=\"isSearchValueInputDisabled()\"\n [placeholder]=\"\n this.selectedCondition === 'inQuery' ||\n this.selectedCondition === 'notInQuery'\n ? this.resourceStrings\n .igx_query_builder_query_value_placeholder\n : this.resourceStrings.igx_query_builder_value_placeholder\n \"\n [type]=\"\n selectedField && selectedField.dataType === 'number'\n ? 'number'\n : 'text'\n \"\n [(ngModel)]=\"searchValue.value\"\n />\n </igx-input-group>\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 [formatter]=\"selectedField.formatter\"\n [displayFormat]=\"selectedField.pipeArgs.format\"\n [weekStart]=\"selectedField.pipeArgs.weekStart\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_date_placeholder\n \"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-date-picker>\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 [formatter]=\"selectedField.formatter\"\n [displayFormat]=\"selectedField.pipeArgs.format\"\n [inputFormat]=\"\n $safeNavigationMigration(\n selectedField.editorOptions?.dateTimeFormat\n )\n \"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_time_placeholder\n \"\n >\n <!-- disable default icons -->\n <igx-picker-toggle></igx-picker-toggle>\n <igx-picker-clear></igx-picker-clear>\n </igx-time-picker>\n } @else if (\n selectedField && selectedField.dataType === 'dateTime'\n ) {\n <igx-input-group #inputGroup type=\"box\">\n <input\n #input\n igxInput\n tabindex=\"0\"\n [placeholder]=\"\n this.resourceStrings.igx_query_builder_datetime_placeholder\n \"\n [(ngModel)]=\"searchValue.value\"\n [disabled]=\"isSearchValueInputDisabled()\"\n [locale]=\"this.locale\"\n [igxDateTimeEditor]=\"\n $safeNavigationMigration(\n selectedField.editorOptions?.dateTimeFormat\n )\n \"\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\n 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\n 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 &&\n expressionItem.expression.searchTree &&\n expressionItem.expression.searchTree.filteringOperands?.length > 0) ||\n (expressionItem.inEditMode &&\n selectedField?.filters?.condition(selectedCondition)?.isNestedQuery)\n ) {\n <ng-container>\n <igx-query-builder-tree\n [style.display]=\"\n expressionItem.inEditMode || expressionItem.expanded\n ? 'block'\n : 'none'\n \"\n [entities]=\"\n (this.selectedEntity\n ? this.selectedEntity.childEntities\n : entities?.[0]?.childEntities) ??\n entities ?? []\n \"\n [queryBuilder]=\"this.queryBuilder\"\n [parentExpression]=\"expressionItem\"\n [expectedReturnField]=\"\n $safeNavigationMigration(this.selectedField?.field)\n \"\n [expressionTree]=\"\n expressionItem.inEditMode\n ? (innerQueryNewExpressionTree ??\n getExpressionTreeCopy(\n expressionItem.expression.searchTree,\n true\n ))\n : expressionItem.expression.searchTree\n \"\n (inEditModeChange)=\"onInEditModeChanged($event)\"\n [searchValueTemplate]=\"searchValueTemplate\"\n [resourceStrings]=\"resourceStrings\"\n >\n </igx-query-builder-tree>\n </ng-container>\n }\n </div>\n </ng-template>\n\n <ng-template #expressionGroupTemplate let-expressionItem>\n <div\n class=\"igx-filter-tree\"\n (focusout)=\"parentExpression ? null : dragService.onDragFocusOut()\"\n >\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\n 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\n #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)=\"\n onGroupClick(\n groupContextMenuDropDown,\n changeGroupButton,\n expressionItem\n )\n \"\n >\n <span\n igxDrop\n (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n (leave)=\"dragService.onChipLeave()\"\n >\n {{\n getOperator(expressionItem) === 0\n ? this.resourceStrings.igx_query_builder_and_label\n : this.resourceStrings.igx_query_builder_or_label\n }}\n </span>\n <igx-icon\n family=\"default\"\n name=\"arrow_drop_down\"\n role=\"button\"\n ></igx-icon>\n </button>\n <igx-drop-down\n #groupContextMenuDropDown\n (selectionChanging)=\"\n onGroupContextMenuDropDownSelectionChanging($event)\n \"\n [width]=\"'fit-content'\"\n >\n <igx-drop-down-item [value]=\"'switchCondition'\">\n {{ getSwitchGroupText(expressionItem) }}\n </igx-drop-down-item>\n <igx-drop-down-item\n [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 (\n expr of expressionItem?.children;\n track trackExpressionItem(expr)\n ) {\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 #currentGroupButtonsContainer class=\"igx-filter-tree__buttons\">\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 (\n rootGroup ||\n (!rootGroup &&\n (selectedEntity || (entities?.length === 1 && !entities[0]?.name)))\n ) {\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=\"expressionGroupTemplate; context: context(rootGroup)\"\n ></ng-container>\n </div>\n }\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>\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 >\n {{ this.resourceStrings.igx_query_builder_dialog_checkbox_text }}\n </igx-checkbox>\n </section>\n</igx-dialog>\n" }]
|
|
1919
1918
|
}], ctorParameters: () => [], propDecorators: { getClass: [{
|
|
1920
1919
|
type: HostBinding,
|
|
1921
1920
|
args: ['class']
|