Skip to content

Commit 1241860

Browse files
authored
Merge pull request #7104 from IgniteUI/SKrastev/grid-disabled-pin-row
IgxGrid disabled row implementation.
2 parents b4b587a + 3921462 commit 1241860

28 files changed

+188
-204
lines changed

projects/igniteui-angular/src/lib/core/i18n/grid-resources.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ export interface IGridResourceStrings {
9090
igx_grid_advanced_filter_initial_text?: string;
9191
igx_grid_advanced_filter_column_placeholder?: string;
9292
igx_grid_advanced_filter_value_placeholder?: string;
93+
igx_grid_pinned_row_indicator?: string;
9394
}
9495

9596
export const GridResourceStringsEN: IGridResourceStrings = {
@@ -183,5 +184,6 @@ export const GridResourceStringsEN: IGridResourceStrings = {
183184
igx_grid_advanced_filter_delete_filters: 'Delete filters',
184185
igx_grid_advanced_filter_initial_text: 'Start with creating a group of conditions linked with "And" or "Or"',
185186
igx_grid_advanced_filter_column_placeholder: 'Select column',
186-
igx_grid_advanced_filter_value_placeholder: 'Value'
187+
igx_grid_advanced_filter_value_placeholder: 'Value',
188+
igx_grid_pinned_row_indicator: 'Pinned'
187189
};

projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-component.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,10 @@
396396
@extend %grid-cell--pinned--column-selected !optional;
397397
}
398398

399+
@include e(td, $m: row-pinned-first) {
400+
@extend %grid-cell--row-pinned-first !optional;
401+
}
402+
399403
@include e(td, $m: pinned-chip) {
400404
@extend %grid-cell--pinned-chip !optional;
401405
}

projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,6 +1417,10 @@
14171417
}
14181418
}
14191419

1420+
%grid-cell--row-pinned-first {
1421+
overflow: hidden;
1422+
}
1423+
14201424
%grid-cell--pinned-chip {
14211425
margin-#{$right}: rem(12px);
14221426
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
<ng-template #defaultPinnedIndicator>
2+
<igx-chip *ngIf="displayPinnedChip" class="igx-grid__td--pinned-chip" [disabled]="true" [displayDensity]="'compact'">{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>
3+
</ng-template>
14
<ng-template #defaultCell>
2-
<igx-chip *ngIf="displayPinnedChip" class="igx-grid__td--pinned-chip" [disabled]="true" [displayDensity]="'compact'">Pinned</igx-chip>
35
<div igxTextHighlight style="pointer-events: none" [cssClass]="highlightClass" [activeCssClass]="activeHighlightClass" [groupName]="gridID"
46
[value]="formatter ? formatter(value) : column.dataType === 'number' ? (value | igxdecimal: grid.locale) : column.dataType === 'date' ? (value | igxdate: grid.locale) : value"
57
[row]="rowData" [column]="this.column.field" [containerClass]="'igx-grid__td-text'"
@@ -27,5 +29,7 @@
2729
</igx-date-picker>
2830
</ng-container>
2931
</ng-template>
32+
<ng-container *ngTemplateOutlet="pinnedIndicatorTemplate; context: context">
33+
</ng-container>
3034
<ng-container *ngTemplateOutlet="template; context: context">
3135
</ng-container>

projects/igniteui-angular/src/lib/grids/cell.component.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
107107
@Input()
108108
public cellTemplate: TemplateRef<any>;
109109

110+
@Input()
111+
public pinnedIndicator: TemplateRef<any>;
112+
110113
/**
111114
* Sets/gets the cell value.
112115
* ```typescript
@@ -188,6 +191,20 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
188191
return this.defaultCellTemplate;
189192
}
190193

194+
/**
195+
* Gets the cell template.
196+
* ```typescript
197+
* let template = this.cell.template;
198+
* ```
199+
* @memberof IgxGridCellComponent
200+
*/
201+
get pinnedIndicatorTemplate() {
202+
if (this.pinnedIndicator) {
203+
return this.pinnedIndicator;
204+
}
205+
return this.defaultPinnedIndicator;
206+
}
207+
191208
/**
192209
* Gets the `id` of the grid in which the cell is stored.
193210
* ```typescript
@@ -529,13 +546,17 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
529546
/**
530547
* @hidden
531548
*/
549+
@HostBinding('class.igx-grid__td--row-pinned-first')
532550
public get displayPinnedChip() {
533-
return this.row.pinned && this.row.disabled && this.visibleColumnIndex === 0 && !(this.column as any).cellTemplate;
551+
return this.row.pinned && this.row.disabled && this.visibleColumnIndex === 0;
534552
}
535553

536554
@ViewChild('defaultCell', { read: TemplateRef, static: true })
537555
protected defaultCellTemplate: TemplateRef<any>;
538556

557+
@ViewChild('defaultPinnedIndicator', { read: TemplateRef, static: true })
558+
protected defaultPinnedIndicator: TemplateRef<any>;
559+
539560
@ViewChild('inlineEditor', { read: TemplateRef, static: true })
540561
protected inlineEditorTemplate: TemplateRef<any>;
541562

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

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2441,6 +2441,11 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
24412441
*/
24422442
public columnWidthSetByUser = false;
24432443

2444+
/**
2445+
* @hidden @internal
2446+
*/
2447+
public unpinnedRecords: any[];
2448+
24442449
data: any[];
24452450
filteredData: any[];
24462451

@@ -2643,6 +2648,25 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
26432648
return false;
26442649
}
26452650

2651+
/**
2652+
* @hidden @internal
2653+
*/
2654+
public isGhostRecord(record: any): boolean {
2655+
return record.ghostRecord !== undefined;
2656+
}
2657+
2658+
/**
2659+
* @hidden
2660+
*/
2661+
public getRowIndex(rowIndex, pinned) {
2662+
if (pinned && !this.isRowPinningToTop) {
2663+
rowIndex = rowIndex + this.dataView.length;
2664+
} else if (!pinned && this.isRowPinningToTop) {
2665+
rowIndex = rowIndex + this.pinnedRecordsCount;
2666+
}
2667+
return rowIndex;
2668+
}
2669+
26462670
/**
26472671
* @hidden
26482672
* @internal
@@ -3403,7 +3427,7 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
34033427
* ```
34043428
*/
34053429
get pinnedRows(): IgxGridRowComponent[] {
3406-
return this.rowList.filter(x => x.pinned);
3430+
return this.rowList.filter(x => x.pinned && !x.disabled);
34073431
}
34083432

34093433
/**
@@ -5137,7 +5161,7 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
51375161
* ```
51385162
*/
51395163
get dataView(): any[] {
5140-
return this.verticalScrollContainer.igxForOf;
5164+
return this.unpinnedRecords ? this.unpinnedRecords : this.verticalScrollContainer.igxForOf;
51415165
}
51425166

51435167
/**

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
</igx-date-picker>
2626
</ng-container>
2727
</ng-template>
28-
<ng-container *ngIf="!editMode">
28+
<ng-container *ngIf="showExpanderIndicator">
2929
<div #indicator
3030
class="igx-grid__tree-grouping-indicator"
3131
(click)="toggle($event)" (focus)="onIndicatorFocus()" tabindex="-1">

projects/igniteui-angular/src/lib/grids/grid/expandable-cell.component.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,12 @@ export class IgxGridExpandableCellComponent extends IgxGridCellComponent impleme
9898
return this.grid.rowCollapsedIndicatorTemplate || this.defaultCollapsedTemplate;
9999
}
100100
}
101+
102+
/**
103+
* @hidden
104+
*/
105+
public get showExpanderIndicator() {
106+
const isGhost = this.row.pinned && this.row.disabled;
107+
return !this.editMode && (!this.row.pinned || isGhost);
108+
}
101109
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
[tabindex]="-1"
7878
[checked]="selected"
7979
[readonly]="true"
80-
[disabled]="disabled || deleted"
80+
[disabled]="deleted"
8181
disableRipple="true"
8282
[disableTransitions]="grid.disableTransitions"
8383
[aria-label]="rowCheckboxAriaLabel">

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,10 @@
115115
<ng-container *ngIf='data
116116
| gridTransaction:id:pipeTrigger
117117
| visibleColumns:hasVisibleColumns
118-
| rowPinning:id:true:pipeTrigger
118+
| gridRowPinning:id:true:pipeTrigger
119119
| gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true
120-
| gridSort:sortingExpressions:sortStrategy:id:pipeTrigger:true
121-
| gridDetails:hasDetails:expansionStates:pipeTrigger as pinnedData'>
122-
<div #pinContainer *ngIf='pinnedData.length > 0'
120+
| gridSort:sortingExpressions:sortStrategy:id:pipeTrigger:true as pinnedData'>
121+
<div #pinContainer *ngIf='pinnedData.length > 0'
123122
[ngClass]="{
124123
'igx-grid__tr--pinned-bottom': !isRowPinningToTop,
125124
'igx-grid__tr--pinned-top': isRowPinningToTop
@@ -135,13 +134,13 @@
135134
<ng-template igxGridFor let-rowData [igxGridForOf]="data
136135
| gridTransaction:id:pipeTrigger
137136
| visibleColumns:hasVisibleColumns
138-
| rowPinning:id:false:pipeTrigger
139137
| gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger
140138
| gridSort:sortingExpressions:sortStrategy:id:pipeTrigger
141139
| gridGroupBy:groupingExpressions:groupingExpansionState:groupsExpanded:id:groupsRecords:pipeTrigger
142140
| gridPaging:page:perPage:id:pipeTrigger
143141
| gridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:id:pipeTrigger:summaryPipeTrigger
144-
| gridDetails:hasDetails:expansionStates:pipeTrigger"
142+
| gridDetails:hasDetails:expansionStates:pipeTrigger
143+
| gridRowPinning:id:false:pipeTrigger"
145144
let-rowIndex="index" [igxForScrollOrientation]="'vertical'" [igxForScrollContainer]='verticalScroll'
146145
[igxForContainerSize]='calcHeight'
147146
[igxForItemSize]="hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight"
@@ -157,8 +156,8 @@
157156
</ng-template>
158157
<ng-container *ngTemplateOutlet="hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null">
159158
</ng-container>
160-
<ng-template #record_template let-rowIndex="index" let-rowData>
161-
<igx-grid-row [gridID]="id" [index]="rowIndex" [rowData]="rowData" #row>
159+
<ng-template #record_template let-rowIndex="index" let-rowData let-disabledRow="disabled">
160+
<igx-grid-row [gridID]="id" [index]="rowIndex" [rowData]="rowData" [disabled]="disabledRow" #row>
162161
</igx-grid-row>
163162
</ng-template>
164163
<ng-template #group_template let-rowIndex="index" let-rowData>

0 commit comments

Comments
 (0)