Skip to content

Commit d4c4e32

Browse files
Vasil MihalkovVasil Mihalkov
Vasil Mihalkov
authored and
Vasil Mihalkov
committed
Merge branch 'master' into vmihalkov/search-with-row-pinning
2 parents 3681529 + 53cc019 commit d4c4e32

File tree

5 files changed

+398
-29
lines changed

5 files changed

+398
-29
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
@@ -2412,6 +2412,9 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
24122412

24132413
protected _filteredSortedPinnedData;
24142414
protected _filteredSortedUnpinnedData;
2415+
protected _filteredPinnedData;
2416+
protected _filteredUnpinnedData;
2417+
24152418
/**
24162419
* @hidden
24172420
*/
@@ -2818,6 +2821,10 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
28182821
this.endEdit(true);
28192822
this.cdr.markForCheck();
28202823
});
2824+
2825+
this.onRowPinning.subscribe(() => {
2826+
this.summaryService.clearSummaryCache();
2827+
});
28212828
}
28222829

28232830
/**
@@ -2867,6 +2874,17 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
28672874
}
28682875
}
28692876

2877+
public setFilterData(data, pinned: boolean) {
2878+
if (this.hasPinnedRecords && pinned) {
2879+
this._filteredPinnedData = data;
2880+
this.filteredData = [... this._filteredPinnedData, ... this._filteredUnpinnedData];
2881+
} else if (this.hasPinnedRecords && !pinned) {
2882+
this._filteredUnpinnedData = data;
2883+
} else {
2884+
this.filteredData = data;
2885+
}
2886+
}
2887+
28702888
/**
28712889
* @hidden
28722890
* @internal
@@ -2970,6 +2988,12 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
29702988
vertScrDC.addEventListener('scroll', this.scrollHandler);
29712989
vertScrDC.addEventListener('wheel', () => this.wheelHandler());
29722990

2991+
this.pinContainers.changes.subscribe((c) => {
2992+
if (this.hasPinnedRecords) {
2993+
// on row pin containers change grid sizes should be recalculated.
2994+
this.calculateGridSizes();
2995+
}
2996+
});
29732997
}
29742998

29752999
/**
@@ -3094,6 +3118,7 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
30943118
public set expansionStates(value) {
30953119
this._expansionStates = new Map<any, boolean>(value);
30963120
this.expansionStatesChange.emit(this._expansionStates);
3121+
this.notifyChanges(true);
30973122
if (this.gridAPI.grid) {
30983123
this.cdr.detectChanges();
30993124
}
@@ -4153,8 +4178,9 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
41534178
}
41544179

41554180
get pinnedRowHeight() {
4156-
const containerHeight = this.pinContainer ? this.pinContainer.nativeElement.offsetHeight : 0;
4157-
return this._pinnedRecordIDs.length > 0 ? containerHeight : 0;
4181+
const pinContainer = this.pinContainers && this.pinContainers.length > 0 ? this.pinContainers.first : null;
4182+
const containerHeight = pinContainer ? pinContainer.nativeElement.offsetHeight : 0;
4183+
return this.hasPinnedRecords ? containerHeight : 0;
41584184
}
41594185

41604186
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:true
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:true
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)