Skip to content

Commit ef182f2

Browse files
Merge pull request #7850 from IgniteUI/ibarakov/fix-7379-10.0.x
feat(grid): create a setter for grid's outlet #7379
2 parents f6d73b4 + da73737 commit ef182f2

14 files changed

+55
-33
lines changed

Diff for: CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ All notable changes for each version of this project will be documented in this
4343
- `IgxSelect` support for `igxHint` directive added.
4444
- Allows the user to add `igxHint` to be displayed bellow the input element.
4545

46+
## 9.1.9
47+
48+
### New Features
49+
- `IgxGrid`, `IgxTreeGrid`, `IgxHierarchicalGrid`
50+
- Expose a setter for grid's `outlet` property, which can be used to set the outlet used to attach the grid's overlays to.
51+
4652
## 9.1.4
4753

4854
### New Features

Diff for: projects/igniteui-angular/src/lib/grids/cell.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
[igxFocus]="true" [disableRipple]="true"></igx-checkbox>
2525
</ng-container>
2626
<ng-container *ngIf="column.dataType === 'date'">
27-
<igx-date-picker [style.width.%]="100" [outlet]="grid.outletDirective" mode="dropdown"
27+
<igx-date-picker [style.width.%]="100" [outlet]="grid.outlet" mode="dropdown"
2828
[locale]="grid.locale" [(value)]="editValue" [igxFocus]="true" [labelVisibility]="false">
2929
</igx-date-picker>
3030
</ng-container>

Diff for: projects/igniteui-angular/src/lib/grids/common/grid.interface.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export interface GridType extends IGridDataBindable {
3030
selectionService: any;
3131
navigation: any;
3232
filteringService: any;
33-
outletDirective: any;
33+
outlet: any;
3434

3535
calcHeight: number;
3636

Diff for: projects/igniteui-angular/src/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ <h6 class="igx-filter-empty__title">
184184
mode="dropdown"
185185
[(ngModel)]="searchValue"
186186
[locale]="grid.locale"
187-
[outlet]="grid.outletDirective">
187+
[outlet]="grid.outlet">
188188
<ng-template igxDatePickerTemplate let-openDialog="openDialog" let-value="value">
189189
<igx-input-group #dropDownTarget type="box" [displayDensity]="'compact'">
190190
<input #searchValueInput

Diff for: projects/igniteui-angular/src/lib/grids/filtering/base/grid-filtering-row.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
tabindex="0"
4747
mode="dropdown"
4848
[value]="value"
49-
[outlet]="filteringService.grid.outletDirective"
49+
[outlet]="filteringService.grid.outlet"
5050
[locale]="filteringService.grid.locale"
5151
(onSelection)="onDateSelected($event)"
5252
(onClosed)="datePickerClose()">

Diff for: projects/igniteui-angular/src/lib/grids/filtering/base/grid-filtering-row.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ export class IgxGridFilteringRowComponent implements AfterViewInit {
147147
constructor(public filteringService: IgxFilteringService, public element: ElementRef, public cdr: ChangeDetectorRef) { }
148148

149149
ngAfterViewInit() {
150-
this._conditionsOverlaySettings.outlet = this.column.grid.outletDirective;
151-
this._operatorsOverlaySettings.outlet = this.column.grid.outletDirective;
150+
this._conditionsOverlaySettings.outlet = this.column.grid.outlet;
151+
this._operatorsOverlaySettings.outlet = this.column.grid.outlet;
152152

153153
const selectedItem = this.expressionsList.find(expr => expr.isSelected === true);
154154
if (selectedItem) {

Diff for: projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-date-expression.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
</igx-select-item>
1515
</igx-select>
1616

17-
<igx-date-picker #datePicker mode="dropdown" [(ngModel)]="expressionUI.expression.searchVal" [locale]="grid.locale" [outlet]="grid.outletDirective">
17+
<igx-date-picker #datePicker mode="dropdown" [(ngModel)]="expressionUI.expression.searchVal" [locale]="grid.locale" [outlet]="grid.outlet">
1818
<ng-template igxDatePickerTemplate let-openDialog="openDialog" let-value="value">
1919
<igx-input-group #dropDownTarget type="box" [displayDensity]="displayDensity">
2020
<input #input

Diff for: projects/igniteui-angular/src/lib/grids/grid-base.directive.ts

+21-14
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,8 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
210210
positionStrategy: new ConnectedPositioningStrategy(this._advancedFilteringPositionSettings),
211211
};
212212

213+
protected _userOutletDirective: IgxOverlayOutletDirective;
214+
213215
/**
214216
* @hidden @internal
215217
*/
@@ -1797,20 +1799,12 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
17971799
@ViewChild('tfoot', { static: true })
17981800
public tfoot: ElementRef;
17991801

1800-
18011802
/**
18021803
* @hidden @internal
18031804
*/
18041805
@ViewChild('igxFilteringOverlayOutlet', { read: IgxOverlayOutletDirective, static: true })
18051806
protected _outletDirective: IgxOverlayOutletDirective;
18061807

1807-
/**
1808-
* @hidden @internal
1809-
*/
1810-
public get outletDirective() {
1811-
return this._outletDirective;
1812-
}
1813-
18141808
/**
18151809
* @hidden @internal
18161810
*/
@@ -1835,7 +1829,7 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
18351829
* @hidden @internal
18361830
*/
18371831
public get parentRowOutletDirective() {
1838-
return this.outletDirective;
1832+
return this.outlet;
18391833
}
18401834

18411835
/**
@@ -2918,7 +2912,7 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
29182912
return;
29192913
}
29202914

2921-
if (this.overlayService.getOverlayById(event.id)?.settings?.outlet === this.outletDirective &&
2915+
if (this.overlayService.getOverlayById(event.id)?.settings?.outlet === this.outlet &&
29222916
this.overlayIDs.indexOf(event.id) < 0) {
29232917
this.overlayIDs.push(event.id);
29242918
}
@@ -3363,10 +3357,23 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
33633357
}
33643358

33653359
/**
3366-
* @hidden @internal
3360+
* Gets the outlet used to attach the grid's overlays to.
3361+
* @remark
3362+
* If set, returns the outlet defined outside the grid. Otherwise returns the grid's internal outlet directive.
3363+
*/
3364+
get outlet() {
3365+
return this.resolveOutlet();
3366+
}
3367+
3368+
protected resolveOutlet() {
3369+
return this._userOutletDirective ? this._userOutletDirective : this._outletDirective;
3370+
}
3371+
3372+
/**
3373+
* Sets the outlet used to attach the grid's overlays to.
33673374
*/
3368-
protected get outlet() {
3369-
return this.outletDirective;
3375+
set outlet(val: any) {
3376+
this._userOutletDirective = val;
33703377
}
33713378

33723379
/**
@@ -6493,7 +6500,7 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
64936500
if (!this._advancedFilteringOverlayId) {
64946501
this._advancedFilteringOverlaySettings.positionStrategy.settings.target =
64956502
(this as any).rootGrid ? (this as any).rootGrid.nativeElement : this.nativeElement;
6496-
this._advancedFilteringOverlaySettings.outlet = this.outletDirective;
6503+
this._advancedFilteringOverlaySettings.outlet = this.outlet;
64976504

64986505
this._advancedFilteringOverlayId = this.overlayService.attach(
64996506
IgxAdvancedFilteringDialogComponent,

Diff for: projects/igniteui-angular/src/lib/grids/grid/expandable-cell.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<igx-checkbox (change)="editValue = $event.checked" [value]="editValue" [checked]="editValue" [disableRipple]="true"></igx-checkbox>
2424
</ng-container>
2525
<ng-container *ngIf="column.dataType === 'date'">
26-
<igx-date-picker [style.width.%]="100" [outlet]="grid.outletDirective" mode="dropdown"
26+
<igx-date-picker [style.width.%]="100" [outlet]="grid.outlet" mode="dropdown"
2727
[locale]="grid.locale" [(value)]="editValue" [igxFocus]="true" [labelVisibility]="false">
2828
</igx-date-picker>
2929
</ng-container>

Diff for: projects/igniteui-angular/src/lib/grids/headers/grid-header-group.component.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
[column]="child"
1515
[gridID]="child.grid.id"
1616
[igxColumnMovingDrag]="child"
17-
[ghostHost]="grid.outletDirective.nativeElement"
17+
[ghostHost]="grid.outlet.nativeElement"
1818
[attr.droppable]="true"
1919
[igxColumnMovingDrop]="child">
2020
</igx-grid-header-group>
@@ -48,7 +48,7 @@
4848
'igx-grid__th--selected': selected,
4949
'igx-grid__th--active': activeGroup}"
5050
[igxColumnMovingDrag]="column"
51-
[ghostHost]="grid.outletDirective.nativeElement"
51+
[ghostHost]="grid.outlet.nativeElement"
5252
[attr.droppable]="true"
5353
[igxColumnMovingDrop]="column"
5454
(pointerdown)="activate()"
@@ -81,7 +81,7 @@
8181

8282
<ng-container *ngIf="!column.columnGroup">
8383
<span *ngIf="grid.hasMovableColumns" class="igx-grid__th-drop-indicator-left"></span>
84-
<igx-grid-header [igxColumnMovingDrag]="column" [ghostHost]="grid.outletDirective.nativeElement" [attr.droppable]="true" (pointerdown)="activate()" [igxColumnMovingDrop]="column" [gridID]="column.grid.id" [column]="column"></igx-grid-header>
84+
<igx-grid-header [igxColumnMovingDrag]="column" [ghostHost]="grid.outlet.nativeElement" [attr.droppable]="true" (pointerdown)="activate()" [igxColumnMovingDrop]="column" [gridID]="column.grid.id" [column]="column"></igx-grid-header>
8585
<igx-grid-filtering-cell *ngIf="grid.allowFiltering && grid.filterMode == 'quickFilter'" [column]="column" [attr.draggable]="false"></igx-grid-filtering-cell>
8686
<span *ngIf="!column.columnGroup && column.resizable" class="igx-grid__th-resize-handle"
8787
[igxResizeHandle]="column"

Diff for: projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.ts

+12-3
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,19 @@ export class IgxHierarchicalGridBaseDirective extends IgxGridBaseDirective {
7070
}
7171

7272
/**
73-
* @hidden
73+
* Gets the outlet used to attach the grid's overlays to.
74+
* @remark
75+
* If set, returns the outlet defined outside the grid. Otherwise returns the grid's internal outlet directive.
76+
*/
77+
get outlet() {
78+
return this.rootGrid ? this.rootGrid.resolveOutlet() : this.resolveOutlet();
79+
}
80+
81+
/**
82+
* Sets the outlet used to attach the grid's overlays to.
7483
*/
75-
protected get outlet() {
76-
return this.rootGrid ? this.rootGrid.outletDirective : this.outletDirective;
84+
set outlet(val: any) {
85+
this._userOutletDirective = val;
7786
}
7887

7988
/**

Diff for: projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar.component.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ export class IgxGridToolbarComponent extends DisplayDensityBase implements After
302302
*/
303303
public exportClicked() {
304304
this._overlaySettings.positionStrategy.settings.target = this.exportButton.nativeElement;
305-
this._overlaySettings.outlet = this.grid.outletDirective;
305+
this._overlaySettings.outlet = this.grid.outlet;
306306
this.exportDropdown.toggle(this._overlaySettings);
307307
}
308308

@@ -351,7 +351,7 @@ export class IgxGridToolbarComponent extends DisplayDensityBase implements After
351351
*/
352352
public toggleColumnHidingUI() {
353353
this._overlaySettings.positionStrategy.settings.target = this.columnHidingButton.nativeElement;
354-
this._overlaySettings.outlet = this.grid.outletDirective;
354+
this._overlaySettings.outlet = this.grid.outlet;
355355
this.columnHidingDropdown.toggle(this._overlaySettings);
356356
}
357357

@@ -363,7 +363,7 @@ export class IgxGridToolbarComponent extends DisplayDensityBase implements After
363363
*/
364364
public toggleColumnPinningUI() {
365365
this._overlaySettings.positionStrategy.settings.target = this.columnPinningButton.nativeElement;
366-
this._overlaySettings.outlet = this.grid.outletDirective;
366+
this._overlaySettings.outlet = this.grid.outlet;
367367
this.columnPinningDropdown.toggle(this._overlaySettings);
368368
}
369369

Diff for: projects/igniteui-angular/src/lib/grids/tree-grid/tree-cell.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<igx-checkbox (change)="editValue = $event.checked" [value]="editValue" [checked]="editValue" [disableRipple]="true"></igx-checkbox>
2424
</ng-container>
2525
<ng-container *ngIf="column.dataType === 'date'">
26-
<igx-date-picker [style.width.%]="100" [outlet]="grid.outletDirective" mode="dropdown"
26+
<igx-date-picker [style.width.%]="100" [outlet]="grid.outlet" mode="dropdown"
2727
[locale]="grid.locale" [(value)]="editValue" [igxFocus]="focused" [labelVisibility]="false">
2828
</igx-date-picker>
2929
</ng-container>

Diff for: src/app/grid-column-selection/grid-column-selection.sample.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export class GridColumnSelectionSampleComponent implements OnInit {
120120

121121
public toggleColumnSelection() {
122122
this._overlaySettings.positionStrategy.settings.target = this.columnSelectionButton.nativeElement;
123-
this._overlaySettings.outlet = this.grid1.outletDirective;
123+
this._overlaySettings.outlet = this.grid1.outlet;
124124
this.columnSelectionDropdown.toggle(this._overlaySettings);
125125
}
126126

0 commit comments

Comments
 (0)