Skip to content

Commit 0024f12

Browse files
MKirovaMKirova
MKirova
authored and
MKirova
committed
chore(*): Merge from master.
2 parents 3069b4d + 53cc019 commit 0024f12

File tree

5 files changed

+364
-28
lines changed

5 files changed

+364
-28
lines changed

projects/igniteui-angular/src/lib/grids/api.service.ts

+3
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
8686
}
8787

8888
public get_row_by_key(rowSelector: any): IgxRowDirective<IgxGridBaseDirective & GridType> {
89+
if (!this.grid) {
90+
return null;
91+
}
8992
const primaryKey = this.grid.primaryKey;
9093
if (primaryKey !== undefined && primaryKey !== null) {
9194
return this.grid.dataRowList.find((row) => row.rowData[primaryKey] === rowSelector);

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

+30-4
Original file line numberDiff line numberDiff line change
@@ -1747,8 +1747,8 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
17471747
/**
17481748
* @hidden @internal
17491749
*/
1750-
@ViewChild('pinContainer', { static: false })
1751-
public pinContainer: ElementRef;
1750+
@ViewChildren('pinContainer', { read: ElementRef })
1751+
public pinContainers: QueryList<ElementRef>;
17521752

17531753
/**
17541754
* @hidden @internal
@@ -2410,6 +2410,9 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
24102410
*/
24112411
protected destroy$ = new Subject<any>();
24122412

2413+
protected _filteredPinnedData;
2414+
protected _filteredUnpinnedData;
2415+
24132416
/**
24142417
* @hidden
24152418
*/
@@ -2824,6 +2827,10 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
28242827
this.endEdit(true);
28252828
this.cdr.markForCheck();
28262829
});
2830+
2831+
this.onRowPinning.subscribe(() => {
2832+
this.summaryService.clearSummaryCache();
2833+
});
28272834
}
28282835

28292836
/**
@@ -2873,6 +2880,17 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
28732880
}
28742881
}
28752882

2883+
public setFilterData(data, pinned: boolean) {
2884+
if (this.hasPinnedRecords && pinned) {
2885+
this._filteredPinnedData = data;
2886+
this.filteredData = [... this._filteredPinnedData, ... this._filteredUnpinnedData];
2887+
} else if (this.hasPinnedRecords && !pinned) {
2888+
this._filteredUnpinnedData = data;
2889+
} else {
2890+
this.filteredData = data;
2891+
}
2892+
}
2893+
28762894
/**
28772895
* @hidden
28782896
* @internal
@@ -2964,6 +2982,12 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
29642982
vertScrDC.addEventListener('scroll', this.scrollHandler);
29652983
vertScrDC.addEventListener('wheel', () => this.wheelHandler());
29662984

2985+
this.pinContainers.changes.subscribe((c) => {
2986+
if (this.hasPinnedRecords) {
2987+
// on row pin containers change grid sizes should be recalculated.
2988+
this.calculateGridSizes();
2989+
}
2990+
});
29672991
}
29682992

29692993
/**
@@ -3088,6 +3112,7 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
30883112
public set expansionStates(value) {
30893113
this._expansionStates = new Map<any, boolean>(value);
30903114
this.expansionStatesChange.emit(this._expansionStates);
3115+
this.notifyChanges(true);
30913116
if (this.gridAPI.grid) {
30923117
this.cdr.detectChanges();
30933118
}
@@ -4147,8 +4172,9 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
41474172
}
41484173

41494174
get pinnedRowHeight() {
4150-
const containerHeight = this.pinContainer ? this.pinContainer.nativeElement.offsetHeight : 0;
4151-
return this._pinnedRecordIDs.length > 0 ? containerHeight : 0;
4175+
const pinContainer = this.pinContainers && this.pinContainers.length > 0 ? this.pinContainers.first : null;
4176+
const containerHeight = pinContainer ? pinContainer.nativeElement.offsetHeight : 0;
4177+
return this.hasPinnedRecords ? containerHeight : 0;
41524178
}
41534179

41544180
get totalHeight() {

projects/igniteui-angular/src/lib/grids/grid/grid.component.html

+24-19
Original file line numberDiff line numberDiff line change
@@ -108,22 +108,29 @@
108108
<span *ngIf="hasMovableColumns && draggedColumn && pinnedColumns.length > 0"
109109
[igxColumnMovingDrop]="headerContainer" [attr.droppable]="true" id="left"
110110
class="igx-grid__scroll-on-drag-pinned" [style.left.px]="pinnedWidth"></span>
111-
<ng-template #pinnedRecordsTemplate>
112-
<ng-container *ngFor="let rowData of data
113-
| gridTransaction:id:pipeTrigger
114-
| visibleColumns:hasVisibleColumns
115-
| rowPinning:id:true:pipeTrigger
116-
| gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger
117-
| gridSort:sortingExpressions:sortStrategy:id:pipeTrigger
118-
| gridDetails:hasDetails:expansionStates:pipeTrigger; let rowIndex = index">
119-
<ng-container *ngTemplateOutlet="getRowTemplate(rowData); context: getContext(rowData, rowIndex, true)">
111+
<ng-container *ngTemplateOutlet="hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null">
112+
</ng-container>
113+
<ng-template #pinnedRecordsTemplate>
114+
<ng-container *ngIf='data
115+
| gridTransaction:id:pipeTrigger
116+
| visibleColumns:hasVisibleColumns
117+
| rowPinning:id:true:pipeTrigger
118+
| gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true
119+
| gridSort:sortingExpressions:sortStrategy:id:pipeTrigger
120+
| gridDetails:hasDetails:expansionStates:pipeTrigger as pinnedData'>
121+
<div #pinContainer *ngIf='pinnedData.length > 0'
122+
[ngClass]="{
123+
'igx-grid__tr--pinned-bottom': !isRowPinningToTop,
124+
'igx-grid__tr--pinned-top': isRowPinningToTop
125+
}"
126+
class='igx-grid__tr--pinned' [style.bottom.px]=' !isRowPinningToTop ? pinnedBottom : null'>
127+
<ng-container *ngFor="let rowData of pinnedData; let rowIndex = index">
128+
<ng-container *ngTemplateOutlet="getRowTemplate(rowData); context: getContext(rowData, rowIndex, true)">
129+
</ng-container>
120130
</ng-container>
121-
</ng-container>
122-
</ng-template>
123-
<div #pinContainer *ngIf='hasPinnedRecords && isRowPinningToTop' class='igx-grid__tr--pinned igx-grid__tr--pinned-top'>
124-
<ng-container *ngTemplateOutlet="pinnedRecordsTemplate">
125-
</ng-container>
126-
</div>
131+
</div>
132+
</ng-container>
133+
</ng-template>
127134
<ng-template igxGridFor let-rowData [igxGridForOf]="data
128135
| gridTransaction:id:pipeTrigger
129136
| visibleColumns:hasVisibleColumns
@@ -148,10 +155,8 @@
148155
(onBeforeViewDetach)='viewDetachHandler($event)'>
149156
</ng-template>
150157
</ng-template>
151-
<div #pinContainer *ngIf='hasPinnedRecords && !isRowPinningToTop' class='igx-grid__tr--pinned igx-grid__tr--pinned-bottom' [style.bottom.px]='pinnedBottom'>
152-
<ng-container *ngTemplateOutlet="pinnedRecordsTemplate">
153-
</ng-container>
154-
</div>
158+
<ng-container *ngTemplateOutlet="hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null">
159+
</ng-container>
155160
<ng-template #record_template let-rowIndex="index" let-rowData>
156161
<igx-grid-row [gridID]="id" [index]="rowIndex" [rowData]="rowData" #row>
157162
</igx-grid-row>

projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ export class IgxGridFilteringPipe implements PipeTransform {
135135

136136
public transform(collection: any[], expressionsTree: IFilteringExpressionsTree,
137137
filterStrategy: IFilteringStrategy,
138-
advancedExpressionsTree: IFilteringExpressionsTree, id: string, pipeTrigger: number, filteringPipeTrigger: number) {
138+
advancedExpressionsTree: IFilteringExpressionsTree, id: string, pipeTrigger: number, filteringPipeTrigger: number, pinned?) {
139139
const grid = this.gridAPI.grid;
140140
const state = {
141141
expressionsTree: expressionsTree,
@@ -148,7 +148,7 @@ export class IgxGridFilteringPipe implements PipeTransform {
148148
}
149149

150150
const result = DataUtil.filter(cloneArray(collection), state);
151-
grid.filteredData = result;
151+
grid.setFilterData(result, pinned);
152152
return result;
153153
}
154154
}

0 commit comments

Comments
 (0)