Skip to content

Commit ca178ce

Browse files
authored
fix(pivot): fixed row height to scale with headers (#14873)
1 parent c42fb3f commit ca178ce

File tree

5 files changed

+75
-7
lines changed

5 files changed

+75
-7
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3093,8 +3093,11 @@
30933093
max-height: 100%;
30943094
}
30953095
}
3096-
}
30973096

3097+
%igx-grid__tr-pivot--row-area {
3098+
padding-bottom: rem(4px);
3099+
}
3100+
}
30983101

30993102
%grid-thead--pivot {
31003103
display: flex;

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3620,7 +3620,7 @@ export abstract class IgxGridBaseDirective implements GridType,
36203620
this.zone.run(() => {
36213621
// do not trigger reflow if element is detached.
36223622
if (this.nativeElement.isConnected) {
3623-
if (this._gridSize !== this.gridSize) {
3623+
if (this.shouldResize) {
36243624
// resizing occurs due to the change of --ig-size css var
36253625
this._gridSize = this.gridSize;
36263626
this.updateDefaultRowHeight();
@@ -5312,6 +5312,10 @@ export abstract class IgxGridBaseDirective implements GridType,
53125312
return this.width && this.width.indexOf('%') !== -1;
53135313
}
53145314

5315+
protected get shouldResize(): boolean {
5316+
return this._gridSize !== this.gridSize;
5317+
}
5318+
53155319
/**
53165320
* @hidden @internal
53175321
*/

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
</ng-template>
5050
</ng-template>
5151
<ng-template #record_template let-rowIndex="index" let-rowData>
52-
<igx-pivot-row [style.height.px]="renderedRowHeight" [gridID]="id" [index]="rowIndex" [data]="rowData"
52+
<igx-pivot-row [gridID]="id" [index]="rowIndex" [data]="rowData"
5353
[ngClass]="rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:false:rowData:pipeTrigger"
5454
[ngStyle]="rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger" #row>
5555
</igx-pivot-row>

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

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ import {
2525
createComponent,
2626
EnvironmentInjector,
2727
CUSTOM_ELEMENTS_SCHEMA,
28-
booleanAttribute
28+
booleanAttribute,
29+
OnChanges,
30+
SimpleChanges
2931
} from '@angular/core';
3032
import { DOCUMENT, NgTemplateOutlet, NgIf, NgClass, NgStyle, NgFor } from '@angular/common';
3133

32-
import { first} from 'rxjs/operators';
34+
import { first, take, takeUntil} from 'rxjs/operators';
3335
import { IgxGridBaseDirective } from '../grid-base.directive';
3436
import { IgxFilteringService } from '../filtering/grid-filtering.service';
3537
import { IgxGridSelectionService } from '../selection/selection.service';
@@ -67,7 +69,7 @@ import { IgxGridExcelStyleFilteringComponent, IgxExcelStyleColumnOperationsTempl
6769
import { IgxPivotGridNavigationService } from './pivot-grid-navigation.service';
6870
import { IgxPivotColumnResizingService } from '../resizing/pivot-grid/pivot-resizing.service';
6971
import { IgxFlatTransactionFactory, IgxOverlayService, State, Transaction, TransactionService } from '../../services/public_api';
70-
import { cloneArray, PlatformUtil } from '../../core/utils';
72+
import { cloneArray, PlatformUtil, resizeObservable } from '../../core/utils';
7173
import { IgxPivotFilteringService } from './pivot-filtering.service';
7274
import { DataUtil } from '../../data-operations/data-util';
7375
import { IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';
@@ -197,7 +199,7 @@ const MINIMUM_COLUMN_WIDTH_SUPER_COMPACT = 104;
197199
schemas: [CUSTOM_ELEMENTS_SCHEMA]
198200
})
199201
export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnInit, AfterContentInit,
200-
GridType, AfterViewInit {
202+
GridType, AfterViewInit, OnChanges {
201203

202204
/**
203205
* Emitted when the dimension collection is changed via the grid chip area.
@@ -695,6 +697,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
695697
};
696698
private _sortableColumns = true;
697699
private _visibleRowDimensions: IPivotDimension[] = [];
700+
private _shouldUpdateSizes = false;
698701

699702
/**
700703
* Gets/Sets the default expand state for all rows.
@@ -1086,6 +1089,16 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
10861089
});
10871090
}
10881091

1092+
/**
1093+
* @hidden @internal
1094+
*/
1095+
public ngOnChanges(changes: SimpleChanges) {
1096+
if (changes.superCompactMode && !changes.superCompactMode.isFirstChange()) {
1097+
this._shouldUpdateSizes = true;
1098+
resizeObservable(this.verticalScrollContainer.displayContainer).pipe(take(1), takeUntil(this.destroy$)).subscribe(() => this.resizeNotify.next());
1099+
}
1100+
}
1101+
10891102
/**
10901103
* Notifies for dimension change.
10911104
*/
@@ -1119,6 +1132,18 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
11191132
return rows.concat((config.columns || [])).concat(config.filters || []).filter(x => x !== null && x !== undefined);
11201133
}
11211134

1135+
protected override get shouldResize(): boolean {
1136+
if (!this.dataRowList.first?.cells || this.dataRowList.first.cells.length === 0) {
1137+
return false;
1138+
}
1139+
const isSizePropChanged = super.shouldResize;
1140+
if (isSizePropChanged || this._shouldUpdateSizes) {
1141+
this._shouldUpdateSizes = false;
1142+
return true;
1143+
}
1144+
return false;
1145+
}
1146+
11221147
/** @hidden @internal */
11231148
public createFilterESF(dropdown: any, column: ColumnType, options: OverlaySettings, shouldReatach: boolean) {
11241149
options.outlet = this.outlet;

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,42 @@ describe('IgxPivotGrid #pivotGrid', () => {
759759
expect(pivotGrid.columns.length).toBe(3);
760760
});
761761

762+
it('should calculate row headers according to grid size', async() => {
763+
const pivotGrid = fixture.componentInstance.pivotGrid;
764+
const rowHeightSmall = 32;
765+
const rowHeightMedium = 40;
766+
const rowHeightLarge = 50;
767+
768+
pivotGrid.superCompactMode = false;
769+
setElementSize(pivotGrid.nativeElement, Size.Large);
770+
771+
await wait(100);
772+
fixture.detectChanges();
773+
774+
expect(pivotGrid.gridSize).toBe(Size.Large);
775+
const dimensionContents = fixture.debugElement.queryAll(By.css('.igx-grid__tbody-pivot-dimension'));
776+
let rowHeaders = dimensionContents[0].queryAll(By.directive(IgxPivotRowDimensionHeaderGroupComponent));
777+
let rowHeader = rowHeaders[0].queryAll(By.directive(IgxPivotRowDimensionHeaderComponent));
778+
expect(rowHeader[0].nativeElement.offsetHeight).toBe(rowHeightLarge);
779+
780+
setElementSize(pivotGrid.nativeElement, Size.Small);
781+
await wait(100);
782+
fixture.detectChanges();
783+
784+
expect(pivotGrid.gridSize).toBe(Size.Small);
785+
rowHeaders = dimensionContents[0].queryAll(By.directive(IgxPivotRowDimensionHeaderGroupComponent));
786+
rowHeader = rowHeaders[0].queryAll(By.directive(IgxPivotRowDimensionHeaderComponent));
787+
expect(rowHeader[0].nativeElement.offsetHeight).toBe(rowHeightSmall);
788+
789+
setElementSize(pivotGrid.nativeElement, Size.Medium);
790+
await wait(100);
791+
fixture.detectChanges();
792+
793+
expect(pivotGrid.gridSize).toBe(Size.Medium);
794+
rowHeaders = dimensionContents[0].queryAll(By.directive(IgxPivotRowDimensionHeaderGroupComponent));
795+
rowHeader = rowHeaders[0].queryAll(By.directive(IgxPivotRowDimensionHeaderComponent));
796+
expect(rowHeader[0].nativeElement.offsetHeight).toBe(rowHeightMedium);
797+
});
762798

763799
describe('IgxPivotGrid Features #pivotGrid', () => {
764800
it('should show excel style filtering via dimension chip.', async () => {

0 commit comments

Comments
 (0)