Skip to content

Commit cdbc560

Browse files
authored
fix(pivot-grid): add IgxPivotGridRow to latest master (#15893)
1 parent 02b8735 commit cdbc560

File tree

4 files changed

+109
-6
lines changed

4 files changed

+109
-6
lines changed

projects/igniteui-angular-elements/src/analyzer/elements.config.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ import { IgxGridToolbarComponent } from "../../../igniteui-angular/src/lib/grids
1414
import { IgxToolbarToken } from "../../../igniteui-angular/src/lib/grids/toolbar/token";
1515
import { IgxColumnComponent } from "../../../igniteui-angular/src/lib/grids/columns/column.component";
1616
import { IgxColumnGroupComponent } from "../../../igniteui-angular/src/lib/grids/columns/column-group.component";
17+
import { IgxColumnLayoutComponent } from "../../../igniteui-angular/src/lib/grids/columns/column-layout.component";
18+
import { IgxGridToolbarExporterComponent } from "../../../igniteui-angular/src/lib/grids/toolbar/grid-toolbar-exporter.component";
19+
import { IgxGridToolbarHidingComponent } from "../../../igniteui-angular/src/lib/grids/toolbar/grid-toolbar-hiding.component";
20+
import { IgxGridToolbarPinningComponent } from "../../../igniteui-angular/src/lib/grids/toolbar/grid-toolbar-pinning.component";
1721
import { IgxRowIslandComponent } from "../../../igniteui-angular/src/lib/grids/hierarchical-grid/row-island.component";
1822
import { IgxActionStripComponent } from "../../../igniteui-angular/src/lib/action-strip/action-strip.component";
1923
import { IgxActionStripToken } from "../../../igniteui-angular/src/lib/action-strip/token";
2024
import { IgxGridEditingActionsComponent } from "../../../igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component";
2125
import { IgxGridActionsBaseDirective } from "../../../igniteui-angular/src/lib/action-strip/grid-actions/grid-actions-base.directive";
2226
import { IgxGridPinningActionsComponent } from "../../../igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component";
23-
import { IgxColumnLayoutComponent } from "../../../igniteui-angular/src/lib/grids/columns/column-layout.component";
24-
import { IgxGridToolbarExporterComponent } from "../../../igniteui-angular/src/lib/grids/toolbar/grid-toolbar-exporter.component";
25-
import { IgxGridToolbarHidingComponent } from "../../../igniteui-angular/src/lib/grids/toolbar/grid-toolbar-hiding.component";
26-
import { IgxGridToolbarPinningComponent } from "../../../igniteui-angular/src/lib/grids/toolbar/grid-toolbar-pinning.component";
2727
import { IgxGridStateComponent } from "../lib/state.component";
2828

2929
export const registerComponents = [

projects/igniteui-angular/src/lib/grids/grid-public-row.ts

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { GridSummaryCalculationMode, GridSummaryPosition } from './common/enums'
44
import { IgxGridCell } from './grid-public-cell';
55
import { IgxSummaryResult } from './summaries/grid-summary';
66
import { ITreeGridRecord } from './tree-grid/tree-grid.interfaces';
7+
import { IgxPivotGridComponent } from './pivot-grid/pivot-grid.component';
8+
import { PivotUtil } from './pivot-grid/pivot-util';
79
import { mergeWith } from 'lodash-es';
810
import { CellType, GridServiceType, GridType, IGridValidationState, RowType, ValidationStatus } from './common/grid.interface';
911

@@ -791,3 +793,71 @@ export class IgxSummaryRow implements RowType {
791793
return row;
792794
}
793795
}
796+
797+
export class IgxPivotGridRow implements RowType {
798+
799+
/** The index of the row within the grid */
800+
public index: number;
801+
802+
/**
803+
* The grid that contains the row.
804+
*/
805+
public grid: IgxPivotGridComponent;
806+
private _data?: any;
807+
808+
constructor(grid: IgxPivotGridComponent, index: number, data?: any) {
809+
this.grid = grid;
810+
this.index = index;
811+
this._data = data && data.addRow && data.recordRef ? data.recordRef : data;
812+
}
813+
814+
/**
815+
* The data passed to the row component.
816+
*/
817+
public get data(): any {
818+
return this._data ?? this.grid.dataView[this.index];
819+
}
820+
821+
/**
822+
* Returns the view index calculated per the grid page.
823+
*/
824+
public get viewIndex(): number {
825+
return this.index + this.grid.page * this.grid.perPage;
826+
}
827+
828+
/**
829+
* Gets the row key.
830+
* A row in the grid is identified either by:
831+
* - primaryKey data value,
832+
* - the whole rowData, if the primaryKey is omitted.
833+
*
834+
* ```typescript
835+
* let rowKey = row.key;
836+
* ```
837+
*/
838+
public get key(): any {
839+
const dimension = this.grid.visibleRowDimensions[this.grid.visibleRowDimensions.length - 1];
840+
const recordKey = PivotUtil.getRecordKey(this.data, dimension);
841+
return recordKey ? recordKey : null;
842+
}
843+
844+
/**
845+
* Gets whether the row is selected.
846+
* Default value is `false`.
847+
* ```typescript
848+
* row.selected = true;
849+
* ```
850+
*/
851+
public get selected(): boolean {
852+
return this.grid.selectionService.isRowSelected(this.key);
853+
}
854+
855+
public set selected(val: boolean) {
856+
if (val) {
857+
this.grid.selectionService.selectRowsWithNoEvent([this.key]);
858+
} else {
859+
this.grid.selectionService.deselectRowsWithNoEvent([this.key]);
860+
}
861+
this.grid.cdr.markForCheck();
862+
}
863+
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ import { IgxTextHighlightService } from '../../directives/text-highlight/text-hi
103103
import { IgxPivotRowHeaderGroupComponent } from './pivot-row-header-group.component';
104104
import { IgxPivotDateDimension } from './pivot-grid-dimensions';
105105
import { IgxPivotRowDimensionMrlRowComponent } from './pivot-row-dimension-mrl-row.component';
106+
import { IgxPivotGridRow } from '../grid-public-row';
106107

107108
let NEXT_ID = 0;
108109
const MINIMUM_COLUMN_WIDTH = 200;
@@ -2521,4 +2522,20 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
25212522
this.regroupTrigger++;
25222523
}
25232524
}
2525+
2526+
/**
2527+
* @hidden @internal
2528+
*/
2529+
public createRow(index: number, data?: any): RowType {
2530+
let row: RowType;
2531+
2532+
const dataIndex = this._getDataViewIndex(index);
2533+
const rec = data ?? this.dataView[dataIndex];
2534+
2535+
2536+
if (!row && rec) {
2537+
row = new IgxPivotGridRow(this, index, rec);
2538+
}
2539+
return row;
2540+
}
25242541
}

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.spec.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing';
22
import { By } from '@angular/platform-browser';
33
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
4-
import { FilteringExpressionsTree, FilteringLogic, GridColumnDataType, IgxIconComponent, IgxPivotGridComponent, IgxStringFilteringOperand } from 'igniteui-angular';
4+
import { CellType, FilteringExpressionsTree, FilteringLogic, GridColumnDataType, IGridCellEventArgs, IgxIconComponent, IgxPivotGridComponent, IgxStringFilteringOperand } from 'igniteui-angular';
55
import { IgxChipComponent } from '../../chips/chip.component';
66
import { IgxChipsAreaComponent } from '../../chips/chips-area.component';
77
import { DefaultPivotSortingStrategy } from '../../data-operations/pivot-sort-strategy';
@@ -22,6 +22,7 @@ import { Size } from '../common/enums';
2222
import { setElementSize } from '../../test-utils/helper-utils.spec';
2323
import { IgxPivotRowDimensionMrlRowComponent } from './pivot-row-dimension-mrl-row.component';
2424
import { IgxPivotRowDimensionContentComponent } from './pivot-row-dimension-content.component';
25+
import { IgxGridCellComponent } from '../cell.component';
2526

2627
const CSS_CLASS_LIST = 'igx-drop-down__list';
2728
const CSS_CLASS_ITEM = 'igx-drop-down__item';
@@ -2104,8 +2105,23 @@ describe('IgxPivotGrid #pivotGrid', () => {
21042105

21052106
expect(pivotGrid.rowList.length).toBe(10);
21062107
});
2107-
});
21082108

2109+
it('should have the correct IGridCellEventArgs when clicking on a cell', () => {
2110+
const pivotGrid = fixture.componentInstance.pivotGrid;
2111+
spyOn(pivotGrid.cellClick, 'emit').and.callThrough();
2112+
fixture.detectChanges();
2113+
2114+
const cell = pivotGrid.gridAPI.get_cell_by_index(0, 'Bulgaria-UnitsSold') as CellType;
2115+
2116+
pivotGrid.cellClick.emit({ cell, event: null });
2117+
cell.nativeElement.click();
2118+
const cellClickargs: IGridCellEventArgs = { cell, event: new MouseEvent('click') };
2119+
2120+
const gridCell = cellClickargs.cell as IgxGridCellComponent;
2121+
const firstEntry = gridCell.rowData.aggregationValues.entries().next().value;
2122+
expect(firstEntry).toEqual(['USA-UnitsSold', 829]);
2123+
});
2124+
});
21092125
});
21102126

21112127
describe('IgxPivotGrid complex hierarchy #pivotGrid', () => {

0 commit comments

Comments
 (0)