Skip to content

Commit d025473

Browse files
MKirovaMKirova
authored andcommitted
chore(*): Break up merge groups on cell selection.
1 parent a6fc511 commit d025473

File tree

8 files changed

+18
-16
lines changed

8 files changed

+18
-16
lines changed

projects/igniteui-angular/src/lib/data-operations/data-util.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,11 @@ export class DataUtil {
9191
return grouping.groupBy(data, state, grid, groupsRecords, fullResult);
9292
}
9393

94-
public static merge<T>(data: T[], columns: ColumnType[], strategy: IGridMergeStrategy = new DefaultMergeStrategy(), activeRowIndex = -1, grid: GridType = null,
94+
public static merge<T>(data: T[], columns: ColumnType[], strategy: IGridMergeStrategy = new DefaultMergeStrategy(), activeRowIndexes = [], grid: GridType = null,
9595
): any[] {
9696
let result = [];
9797
for (const col of columns) {
98-
strategy.merge(data, col.field, col.mergingComparer, result, activeRowIndex, grid);
98+
strategy.merge(data, col.field, col.mergingComparer, result, activeRowIndexes, grid);
9999
}
100100
return result;
101101
}

projects/igniteui-angular/src/lib/data-operations/merge-strategy.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export interface IGridMergeStrategy {
1616
field: string,
1717
comparer: (prevRecord: any, currentRecord: any, field: string) => boolean,
1818
result: any[],
19-
activeRowIndex? : number,
19+
activeRowIndexes : number[],
2020
grid?: GridType
2121
) => any[];
2222
comparer: (prevRecord: any, record: any, field: string) => boolean;
@@ -35,7 +35,7 @@ export class DefaultMergeStrategy implements IGridMergeStrategy {
3535
field: string,
3636
comparer: (prevRecord: any, record: any, field: string) => boolean = this.comparer,
3737
result: any[],
38-
activeRowIndex?: number,
38+
activeRowIndexes : number[],
3939
grid?: GridType
4040
) {
4141
let prev = null;
@@ -44,7 +44,7 @@ export class DefaultMergeStrategy implements IGridMergeStrategy {
4444

4545
const recData = result[index];
4646
// if this is active row or some special record type - add and skip merging
47-
if (activeRowIndex === index || (grid && grid.isDetailRecord(rec) || grid.isGroupByRecord(rec) || grid.isChildGridRecord(rec))) {
47+
if (activeRowIndexes.indexOf(index) != -1 || (grid && grid.isDetailRecord(rec) || grid.isGroupByRecord(rec) || grid.isChildGridRecord(rec))) {
4848
if(!recData) {
4949
result.push(rec);
5050
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4054,8 +4054,10 @@ export abstract class IgxGridBaseDirective implements GridType,
40544054
}
40554055

40564056

4057-
protected get activeRowIndex() {
4058-
return this.navigation.activeNode?.row;
4057+
protected get activeRowIndexes(): number[] {
4058+
const activeRow = this.navigation.activeNode?.row;
4059+
const selectedCellIndexes = (this.selectionService.selection?.keys() as any)?.toArray();
4060+
return [activeRow, ...selectedCellIndexes];
40594061
}
40604062

40614063
protected get hasCellsToMerge() {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
| gridRowPinning:id:true:pipeTrigger
6464
| gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true
6565
| gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger:true
66-
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:activeRowIndex:pipeTrigger; as pinnedData) {
66+
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:activeRowIndexes:pipeTrigger; as pinnedData) {
6767
@if (pinnedData.length > 0) {
6868
<div #pinContainer
6969
[ngClass]="{
@@ -90,7 +90,7 @@
9090
| gridDetails:hasDetails:expansionStates:pipeTrigger
9191
| gridAddRow:false:pipeTrigger
9292
| gridRowPinning:id:false:pipeTrigger
93-
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:((hasPinnedRecords && isRowPinningToTop) ? activeRowIndex - pinnedRecordsCount : activeRowIndex):pipeTrigger"
93+
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:activeRowIndexes:pipeTrigger"
9494
let-rowIndex="index" [igxForScrollOrientation]="'vertical'" [igxForScrollContainer]="verticalScroll"
9595
[igxForContainerSize]="calcHeight"
9696
[igxForItemSize]="hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight"

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ export class IgxGridCellMergePipe implements PipeTransform {
8585

8686
constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }
8787

88-
public transform(collection: any, visibleColumns: ColumnType[], mergeMode: GridCellMergeMode, sortExpr: ISortingExpression[], activeRowIndex: number, _pipeTrigger: number) {
88+
public transform(collection: any, visibleColumns: ColumnType[], mergeMode: GridCellMergeMode, sortExpr: ISortingExpression[], activeRowIndexes: number[], _pipeTrigger: number) {
8989
const colsToMerge = this.grid.columnsToMerge;
9090
if (colsToMerge.length=== 0) {
9191
return collection;
9292
}
93-
const result = DataUtil.merge(cloneArray(collection), colsToMerge, this.grid.mergeStrategy, activeRowIndex, this.grid);
93+
const result = DataUtil.merge(cloneArray(collection), colsToMerge, this.grid.mergeStrategy, activeRowIndexes, this.grid);
9494
return result;
9595
}
9696
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
| gridRowPinning:id:true:pipeTrigger
4747
| gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true
4848
| gridSort:sortingExpressions:[]:sortStrategy:id:pipeTrigger:true
49-
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:activeRowIndex:pipeTrigger; as pinnedData
49+
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:activeRowIndexes:pipeTrigger; as pinnedData
5050
) {
5151
@if (pinnedData.length > 0) {
5252
<div #pinContainer class="igx-grid__tr--pinned"
@@ -71,7 +71,7 @@
7171
| gridHierarchical:expansionStates:id:primaryKey:childLayoutKeys:pipeTrigger
7272
| gridAddRow:false:pipeTrigger
7373
| gridRowPinning:id:false:pipeTrigger
74-
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:((hasPinnedRecords && isRowPinningToTop) ? activeRowIndex - pinnedRecordsCount : activeRowIndex):pipeTrigger"
74+
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:activeRowIndexes:pipeTrigger"
7575
[igxForScrollOrientation]="'vertical'" [igxForScrollContainer]="verticalScroll"
7676
[igxForContainerSize]="calcHeight" [igxForItemSize]="renderedRowHeight" [igxForTrackBy]="trackChanges"
7777
#verticalScrollContainer (chunkPreload)="dataLoading($event)" (dataChanging)="dataRebinding($event)" (dataChanged)="dataRebound($event)">

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
| gridRowPinning:id:true:pipeTrigger
4848
| treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger:true
4949
| treeGridSorting:sortingExpressions:treeGroupArea?.expressions:sortStrategy:pipeTrigger:true
50-
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:activeRowIndex:pipeTrigger; as pinnedData
50+
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:activeRowIndexes:pipeTrigger; as pinnedData
5151
) {
5252
@if (pinnedData.length > 0) {
5353
<div #pinContainer
@@ -76,7 +76,7 @@
7676
| treeGridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger
7777
| treeGridAddRow:false:pipeTrigger
7878
| gridRowPinning:id:false:pipeTrigger
79-
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:((hasPinnedRecords && isRowPinningToTop) ? activeRowIndex - pinnedRecordsCount : activeRowIndex):pipeTrigger"
79+
| gridCellMerge:visibleColumns:cellMergeMode:sortingExpressions:activeRowIndexes:pipeTrigger"
8080
let-rowIndex="index" [igxForScrollOrientation]="'vertical'" [igxForScrollContainer]='verticalScroll'
8181
[igxForContainerSize]='calcHeight' [igxForItemSize]="renderedRowHeight" #verticalScrollContainer
8282
(dataChanging)="dataRebinding($event)" (dataChanged)="dataRebound($event)">

src/app/grid-cellMerging/grid-cellMerging.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<h4 class="sample-title">Grid with cell merge</h4>
2-
<igx-grid [data]="data" width="800px" height="550px" [primaryKey]="'ProductID'" [moving]="true"
2+
<igx-grid [data]="data" width="800px" height="550px" [moving]="true"
33
[cellMergeMode]="'always'" [rowSelection]="'single'">
44
<igx-column field="ProductID" header="Product ID" width="200px">
55
<ng-template igxCell let-cell="cell" let-val>

0 commit comments

Comments
 (0)