Skip to content

Commit 1777562

Browse files
authored
fix(pivot): fixed row height to scale with headers (#14811)
1 parent a653a10 commit 1777562

File tree

6 files changed

+77
-7
lines changed

6 files changed

+77
-7
lines changed

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
@@ -3264,6 +3264,10 @@
32643264
max-height: 100%;
32653265
}
32663266
}
3267+
3268+
%igx-grid__tr-pivot--row-area {
3269+
padding-bottom: rem(4px);
3270+
}
32673271
}
32683272

32693273
%grid-thead--pivot {

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3627,7 +3627,7 @@ export abstract class IgxGridBaseDirective implements GridType,
36273627
this.zone.run(() => {
36283628
// do not trigger reflow if element is detached.
36293629
if (this.nativeElement.isConnected) {
3630-
if (this._gridSize !== this.gridSize) {
3630+
if (this.shouldResize) {
36313631
// resizing occurs due to the change of --ig-size css var
36323632
this._gridSize = this.gridSize;
36333633
this.updateDefaultRowHeight();
@@ -5318,6 +5318,10 @@ export abstract class IgxGridBaseDirective implements GridType,
53185318
return this.width && this.width.indexOf('%') !== -1;
53195319
}
53205320

5321+
protected get shouldResize(): boolean {
5322+
return this._gridSize !== this.gridSize;
5323+
}
5324+
53215325
/**
53225326
* @hidden @internal
53235327
*/

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.
@@ -1092,6 +1095,16 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
10921095
});
10931096
}
10941097

1098+
/**
1099+
* @hidden @internal
1100+
*/
1101+
public ngOnChanges(changes: SimpleChanges) {
1102+
if (changes.superCompactMode && !changes.superCompactMode.isFirstChange()) {
1103+
this._shouldUpdateSizes = true;
1104+
resizeObservable(this.verticalScrollContainer.displayContainer).pipe(take(1), takeUntil(this.destroy$)).subscribe(() => this.resizeNotify.next());
1105+
}
1106+
}
1107+
10951108
/**
10961109
* Notifies for dimension change.
10971110
*/
@@ -1125,6 +1138,18 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
11251138
return rows.concat((config.columns || [])).concat(config.filters || []).filter(x => x !== null && x !== undefined);
11261139
}
11271140

1141+
protected override get shouldResize(): boolean {
1142+
if (!this.dataRowList.first?.cells || this.dataRowList.first.cells.length === 0) {
1143+
return false;
1144+
}
1145+
const isSizePropChanged = super.shouldResize;
1146+
if (isSizePropChanged || this._shouldUpdateSizes) {
1147+
this._shouldUpdateSizes = false;
1148+
return true;
1149+
}
1150+
return false;
1151+
}
1152+
11281153
/** @hidden @internal */
11291154
public createFilterESF(dropdown: any, column: ColumnType, options: OverlaySettings, shouldReatach: boolean) {
11301155
options.outlet = this.outlet;

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,43 @@ 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+
});
798+
762799

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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@
255255
</igx-grid-header-group>
256256
</ng-container>
257257
</ng-container>
258-
<div class="igx-grid-thead--virtualizationWrapper" [style.max-height.px]='maxContainerHeight' (click)="grid.navigation.focusOutRowHeader($event)">
258+
<div class="igx-grid-thead--virtualizationWrapper" [style.max-height.px]='maxContainerHeight' (click)="grid.navigation.focusOutRowHeader($event)">
259259
<div class="igx-grid-thead__group igx-grid-thead--virtualizationContainer" [style.height.px]='totalDepth > 1 ? grid.rowHeight : undefined' *ngFor='let dimLevelColumns of columnDimensionsByLevel; let i = index' [style.width.px]='grid.unpinnedWidth'>
260260
<ng-template igxGridFor #headerVirtualContainer let-column
261261
[igxGridForOf]="dimLevelColumns" [igxGridForOfUniqueSizeCache] = 'true' [igxForScrollContainer]="grid.parentVirtDir"

0 commit comments

Comments
 (0)