Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,13 @@ export class IgxAdvancedFilteringDialogComponent implements AfterViewInit, OnDes
private _grid: GridType;

constructor(public cdr: ChangeDetectorRef, protected platform: PlatformUtil) { }

/**
* @hidden @internal
*/
public ngAfterViewInit(): void {
this.queryBuilder.setPickerOutlet(this.grid.outlet);
this.queryBuilder.isAdvancedFiltering = true;
}

/**
Expand Down Expand Up @@ -197,6 +199,10 @@ export class IgxAdvancedFilteringDialogComponent implements AfterViewInit, OnDes
* @hidden @internal
*/
public generateEntity() {
if (this.queryBuilder) {
this.queryBuilder.isAdvancedFiltering = true;
}

if (this.queryBuilder?.entities) {
return this.queryBuilder?.entities;
} else if (this.grid.type === 'hierarchical') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ export class QueryBuilderFunctions {
* Get the root group.
*/
public static getQueryBuilderTreeRootGroup(fix: ComponentFixture<any>, level = 0) {
const exprContainer = QueryBuilderFunctions.getQueryBuilderExpressionsContainer(fix, level).children[1];
const exprContainer = QueryBuilderFunctions.getQueryBuilderExpressionsContainer(fix, level).children[0];
const rootGroup = exprContainer.querySelector(`:scope > .${QueryBuilderSelectors.FILTER_TREE}`);
return rootGroup;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,88 +7,90 @@
</ng-template>

<ng-template #selectFromTemplate>
<div class="igx-filter-tree__inputs" [style.display]="(isInEditMode() && (!this.isAdvancedFiltering() || this.isHierarchicalNestedQuery())) ? 'flex' : 'none'">
<div class="igx-filter-tree__inputs-field">
<span class="igx-query-builder__label">{{ this.resourceStrings.igx_query_builder_from_label }}</span>
<igx-select #entitySelect
type="box"
(selectionChanging)="onEntitySelectChanging($event)"
(opening)="exitEditAddMode(true)"
[overlaySettings]="entitySelectOverlaySettings"
[ngModel]="selectedEntity"
[style.display]="isInEditMode() ? 'block' : 'none'"
[placeholder]="this.resourceStrings.igx_query_builder_select_entity"
[disabled]="disableEntityChange"
>
@for (entity of entities; track entity.name) {
<igx-select-item [value]="entity">
{{entity.name}}
</igx-select-item>
}
</igx-select>
</div>

<div class="igx-filter-tree__inputs-field">
@if (!this.isHierarchicalNestedQuery()) {
<span class="igx-query-builder__label">{{ this.resourceStrings.igx_query_builder_select_label }}</span>
}
@if (!parentExpression) {
<igx-combo
#returnFieldsCombo
[itemsMaxHeight]="250"
[data]="fields"
[displayKey]="'field'"
[valueKey]="'field'"
[disabled]="disableReturnFieldsChange"
[(ngModel)]="selectedReturnFields"
[overlaySettings]="returnFieldSelectOverlaySettings"
[placeholder]="this.resourceStrings.igx_query_builder_select_return_fields"
searchPlaceholder="{{ this.resourceStrings.igx_query_builder_search }}"
[style.display]="isInEditMode() ? 'block' : 'none'"
(selectionChanging)="onReturnFieldSelectChanging($event)"
(opening)="exitEditAddMode()"
>
<ng-template igxComboHeader>
<div
class="igx-drop-down__item igx-drop-down__item--query-builder"
(click)="onSelectAllClicked()"
[ngClass]="{'igx-drop-down__item--selected': this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length}"
>
<igx-checkbox
[checked]="this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length"
[indeterminate]="this.selectedEntity && this.selectedReturnFields && this.selectedReturnFields.length > 0 && this.selectedReturnFields.length < this.selectedEntity.fields?.length"
[readonly]="true"
[disableRipple]="true"
[tabindex]="-1"
class="igx-combo__checkbox">
</igx-checkbox>
<div class="igx-drop-down__inner">
{{ this.resourceStrings.igx_query_builder_select_all }}
</div>
</div>
</ng-template>
</igx-combo>
}
@else {
<igx-select #returnFieldSelect
@if (isViewInit() && isInEditMode() && (!this.isAdvancedFiltering() || this.isHierarchicalNestedQuery())) {
<div class="igx-filter-tree__inputs" [style.display]="'flex'">
<div class="igx-filter-tree__inputs-field">
<span class="igx-query-builder__label">{{ this.resourceStrings.igx_query_builder_from_label }}</span>
<igx-select #entitySelect
type="box"
(selectionChanging)="onReturnFieldSelectChanging($event)"
[overlaySettings]="returnFieldSelectOverlaySettings"
[disabled]="!selectedEntity"
[ngModel]="selectedReturnFields[0]"
[placeholder]="this.resourceStrings.igx_query_builder_select_return_field_single"
(selectionChanging)="onEntitySelectChanging($event)"
(opening)="exitEditAddMode(true)"
[overlaySettings]="entitySelectOverlaySettings"
[ngModel]="selectedEntity"
[style.display]="isInEditMode() ? 'block' : 'none'"
(opening)="exitEditAddMode()"
[placeholder]="this.resourceStrings.igx_query_builder_select_entity"
[disabled]="disableEntityChange"
>
@for (field of fields; track field.field) {
<igx-select-item [value]="field.field">
{{ field.field }}
@for (entity of entities; track entity.name) {
<igx-select-item [value]="entity">
{{entity.name}}
</igx-select-item>
}
</igx-select>
}
</div>

<div class="igx-filter-tree__inputs-field">
@if (!this.isHierarchicalNestedQuery()) {
<span class="igx-query-builder__label">{{ this.resourceStrings.igx_query_builder_select_label }}</span>
}
@if (!parentExpression) {
<igx-combo
#returnFieldsCombo
[itemsMaxHeight]="250"
[data]="fields"
[displayKey]="'field'"
[valueKey]="'field'"
[disabled]="disableReturnFieldsChange"
[(ngModel)]="selectedReturnFields"
[overlaySettings]="returnFieldSelectOverlaySettings"
[placeholder]="this.resourceStrings.igx_query_builder_select_return_fields"
searchPlaceholder="{{ this.resourceStrings.igx_query_builder_search }}"
[style.display]="isInEditMode() ? 'block' : 'none'"
(selectionChanging)="onReturnFieldSelectChanging($event)"
(opening)="exitEditAddMode()"
>
<ng-template igxComboHeader>
<div
class="igx-drop-down__item igx-drop-down__item--query-builder"
(click)="onSelectAllClicked()"
[ngClass]="{'igx-drop-down__item--selected': this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length}"
>
<igx-checkbox
[checked]="this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length"
[indeterminate]="this.selectedEntity && this.selectedReturnFields && this.selectedReturnFields.length > 0 && this.selectedReturnFields.length < this.selectedEntity.fields?.length"
[readonly]="true"
[disableRipple]="true"
[tabindex]="-1"
class="igx-combo__checkbox">
</igx-checkbox>
<div class="igx-drop-down__inner">
{{ this.resourceStrings.igx_query_builder_select_all }}
</div>
</div>
</ng-template>
</igx-combo>
}
@else {
<igx-select #returnFieldSelect
type="box"
(selectionChanging)="onReturnFieldSelectChanging($event)"
[overlaySettings]="returnFieldSelectOverlaySettings"
[disabled]="!selectedEntity"
[ngModel]="selectedReturnFields ? selectedReturnFields[0] : null"
[placeholder]="this.resourceStrings.igx_query_builder_select_return_field_single"
[style.display]="isInEditMode() ? 'block' : 'none'"
(opening)="exitEditAddMode()"
>
@for (field of fields; track field.field) {
<igx-select-item [value]="field.field">
{{ field.field }}
</igx-select-item>
}
</igx-select>
}
</div>
</div>
</div>
}
</ng-template>

<div
Expand Down Expand Up @@ -466,7 +468,7 @@
<ng-container>
<igx-query-builder-tree
[style.display]="expressionItem.inEditMode || expressionItem.expanded ? 'block' : 'none'"
[entities]="(this.selectedEntity ? this.selectedEntity.childEntities : entities[0].childEntities) ?? entities"
[entities]="(this.selectedEntity ? this.selectedEntity.childEntities : entities[0]?.childEntities) ?? entities"
[queryBuilder]="this.queryBuilder"
[parentExpression]="expressionItem"
[expectedReturnField]="this.selectedField?.field"
Expand Down Expand Up @@ -570,7 +572,7 @@

@if (rootGroup || (!rootGroup && (selectedEntity || (entities?.length === 1 && !entities[0]?.name)))) {
<div class="igx-filter-tree__section">
@if (!this.isAdvancedFiltering()) {
@if (isViewInit() && !this.isAdvancedFiltering()) {
<span class="igx-query-builder__label">Where</span>
}
<ng-container
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
public set expressionTree(expressionTree: IExpressionTree) {
this._expressionTree = expressionTree;
if (!expressionTree) {
this._selectedEntity = this.isAdvancedFiltering() && this.entities.length === 1 ? this.entities[0] : null;
this._selectedEntity = this.entities.length === 1 ? this.entities[0] : null;
this._selectedReturnFields = this._selectedEntity ? this._selectedEntity.fields?.map(f => f.field) : [];
}

Expand Down Expand Up @@ -475,6 +475,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
private _locale;
private _entityNewValue: EntityType;
private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);
private _viewInitialized = false;

/**
* Returns if the select entity dropdown at the root level is disabled after the initial selection.
Expand Down Expand Up @@ -521,9 +522,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {

/** @hidden */
protected isAdvancedFiltering(): boolean {
return (this.entities?.length === 1 && !this.entities[0]?.name) ||
this.entities?.find(e => e.childEntities?.length > 0) !== undefined ||
this.entities !== this.queryBuilder?.entities;
return this.queryBuilder?.isAdvancedFiltering;
}

/** @hidden */
Expand Down Expand Up @@ -570,6 +569,8 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {

// Trigger additional change detection cycle
this.cdr.detectChanges();

this._viewInitialized = true;
}

/**
Expand Down Expand Up @@ -868,7 +869,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
this._editedExpression = null;
}

if (this.selectedReturnFields.length === 0) {
if (this.selectedReturnFields?.length === 0) {
this.selectedReturnFields = this.fields.map(f => f.field);
}

Expand Down Expand Up @@ -1188,9 +1189,11 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
this._editedExpression = expressionItem;
this.cdr.detectChanges();

this.entitySelectOverlaySettings.target = this.entitySelect.element;
this.entitySelectOverlaySettings.excludeFromOutsideClick = [this.entitySelect.element as HTMLElement];
this.entitySelectOverlaySettings.positionStrategy = new AutoPositionStrategy();
if (this.entitySelect) {
this.entitySelectOverlaySettings.target = this.entitySelect.element;
this.entitySelectOverlaySettings.excludeFromOutsideClick = [this.entitySelect.element as HTMLElement];
this.entitySelectOverlaySettings.positionStrategy = new AutoPositionStrategy();
}

if (this.returnFieldSelect) {
this.returnFieldSelectOverlaySettings.target = this.returnFieldSelect.element;
Expand Down Expand Up @@ -1449,8 +1452,13 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
return text;
}

public isViewInit(): boolean {
return this._viewInitialized;
}

public isInEditMode(): boolean {
return !this.parentExpression || (this.parentExpression && this.parentExpression.inEditMode);
const isInEditMode = !this.parentExpression || (this.parentExpression && this.parentExpression.inEditMode);
return isInEditMode;
}

public onInEditModeChanged(expressionItem: ExpressionOperandItem) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,13 @@ export class IgxQueryBuilderComponent implements OnDestroy {
@Output()
public expressionTreeChange = new EventEmitter<IExpressionTree>();

/**
* @hidden @internal
*
* used by the grid
*/
public isAdvancedFiltering = false;

/**
* @hidden @internal
*/
Expand Down
Loading