@@ -31,7 +31,7 @@ import {
3131} from '@angular/core' ;
3232import { DOCUMENT , NgTemplateOutlet , NgClass , NgStyle } from '@angular/common' ;
3333
34- import { first , take , takeUntil } from 'rxjs/operators' ;
34+ import { first , take , takeUntil } from 'rxjs/operators' ;
3535import { IgxGridBaseDirective } from '../grid-base.directive' ;
3636import { IgxFilteringService } from '../filtering/grid-filtering.service' ;
3737import { IgxGridSelectionService } from '../selection/selection.service' ;
@@ -1655,7 +1655,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
16551655 public autoSizeRowDimension ( dimension : IPivotDimension ) {
16561656 if ( this . getDimensionType ( dimension ) === PivotDimensionType . Row ) {
16571657 const relatedDims : string [ ] = PivotUtil . flatten ( [ dimension ] ) . map ( ( x : IPivotDimension ) => x . memberName ) ;
1658- const contentCollection = this . getContentCollection ( dimension ) ;
1658+ const contentCollection = this . getContentCollection ( dimension ) ;
16591659 const content = contentCollection . filter ( x => relatedDims . indexOf ( x . dimension . memberName ) !== - 1 ) ;
16601660 const headers = content . map ( x => x . headerGroups . toArray ( ) ) . flat ( ) . map ( x => x . header && x . header . refInstance ) ;
16611661 if ( this . pivotUI . showRowHeaders ) {
@@ -1929,8 +1929,8 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
19291929 */
19301930 public getRowDimensionByName ( memberName : string ) {
19311931 const visibleRows = this . pivotUI . rowLayout === PivotRowLayoutType . Vertical ?
1932- this . pivotConfiguration . rows :
1933- PivotUtil . flatten ( this . pivotConfiguration . rows ) ;
1932+ this . pivotConfiguration . rows :
1933+ PivotUtil . flatten ( this . pivotConfiguration . rows ) ;
19341934 const dimIndex = visibleRows . findIndex ( ( target ) => target . memberName === memberName ) ;
19351935 const dim = visibleRows [ dimIndex ] ;
19361936 return dim ;
@@ -2254,7 +2254,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
22542254 const separator = this . pivotKeys . columnDimensionSeparator ;
22552255 const dataArr = fields . map ( x => x . split ( separator ) ) . sort ( x => x . length ) ;
22562256 const hierarchy = new Map < string , any > ( ) ;
2257- const columnDimensions = PivotUtil . flatten ( this . columnDimensions ) ;
2257+ const columnDimensions = PivotUtil . flatten ( this . columnDimensions ) ;
22582258 dataArr . forEach ( arr => {
22592259 let currentHierarchy = hierarchy ;
22602260 const path = [ ] ;
@@ -2274,18 +2274,31 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
22742274 } ) ;
22752275 return hierarchy ;
22762276 }
2277-
2278- /** @hidden @internal */
2279- public currencyColumnSet : Set < string > = new Set ( ) ;
2277+ private updateColumnDataTypeByAggregator ( column : any ) {
2278+ this . values . forEach ( ( aggregatorValue ) => {
2279+ if ( ( aggregatorValue . dataType === GridColumnDataType . Currency || aggregatorValue . dataType === GridColumnDataType . Percent ) && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) === 'count' ) {
2280+ if ( column . field ?. includes ( aggregatorValue . member ) || this . values . length === 1 ) {
2281+ column . dataType = GridColumnDataType . Number ;
2282+ }
2283+ } else if ( aggregatorValue . dataType === GridColumnDataType . Currency && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) !== 'count' ) {
2284+ if ( column . field ?. includes ( aggregatorValue . member ) || this . values . length === 1 ) {
2285+ column . dataType = GridColumnDataType . Currency ;
2286+ }
2287+ } else if ( aggregatorValue . dataType === GridColumnDataType . Percent && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) !== 'count' ) {
2288+ if ( column . field ?. includes ( aggregatorValue . member ) || this . values . length === 1 ) {
2289+ column . dataType = GridColumnDataType . Percent ;
2290+ }
2291+ }
2292+ } )
2293+ }
22802294 protected generateColumnHierarchy ( fields : Map < string , any > , data , parent = null ) : IgxColumnComponent [ ] {
22812295 let columns = [ ] ;
22822296 if ( fields . size === 0 ) {
22832297 this . values . forEach ( ( value ) => {
22842298 const ref = createComponent ( IgxColumnComponent , { environmentInjector : this . envInjector , elementInjector : this . injector } ) ;
22852299 let columnDataType = value . dataType || this . resolveDataTypes ( data . length ? data [ 0 ] [ value . member ] : null ) ;
22862300
2287- if ( value . aggregate ?. key ?. toLowerCase ( ) === 'count' && columnDataType === GridColumnDataType . Currency ) {
2288- this . currencyColumnSet . add ( value . member ) ;
2301+ if ( value . aggregate ?. key ?. toLowerCase ( ) === 'count' && ( columnDataType === GridColumnDataType . Currency || columnDataType == GridColumnDataType . Percent ) ) {
22892302 columnDataType = GridColumnDataType . Number ;
22902303 }
22912304
@@ -2308,32 +2321,14 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
23082321 if ( shouldGenerate && ( value . children == null || value . children . length === 0 || value . children . size === 0 ) ) {
23092322 const col = this . createColumnForDimension ( value , data , parent , this . hasMultipleValues ) ;
23102323
2311- this . values . forEach ( ( aggregatorValue ) => {
2312- if ( col . dataType === GridColumnDataType . Currency && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) === 'count' ) {
2313- col . dataType = GridColumnDataType . Number ;
2314- this . currencyColumnSet . add ( aggregatorValue . member ) ;
2315- } else if ( this . currencyColumnSet . has ( aggregatorValue . member ) && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) !== 'count' ) {
2316- col . dataType = GridColumnDataType . Currency ;
2317- this . currencyColumnSet . delete ( aggregatorValue . member ) ;
2318- }
2319- } )
2324+ this . updateColumnDataTypeByAggregator ( col ) ;
23202325
23212326 columns . push ( col ) ;
23222327 if ( this . hasMultipleValues ) {
23232328 const measureChildren = this . getMeasureChildren ( data , col , false , value . dimension . width ) ;
23242329
23252330 measureChildren . forEach ( ( child ) => {
2326- this . values . forEach ( ( aggregatorValue ) => {
2327- if ( child . field . includes ( aggregatorValue . member ) ) {
2328- if ( child . dataType === GridColumnDataType . Currency && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) === 'count' ) {
2329- child . dataType = GridColumnDataType . Number ;
2330- this . currencyColumnSet . add ( aggregatorValue . member ) ;
2331- } else if ( this . currencyColumnSet . has ( aggregatorValue . member ) && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) !== 'count' ) {
2332- child . dataType = GridColumnDataType . Currency ;
2333- this . currencyColumnSet . delete ( aggregatorValue . member ) ;
2334- }
2335- }
2336- } )
2331+ this . updateColumnDataTypeByAggregator ( child ) ;
23372332 } )
23382333
23392334 col . children . reset ( measureChildren ) ;
@@ -2405,20 +2400,20 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
24052400 } ;
24062401 values . push ( value ) ;
24072402 break ;
2408- }
2409- case "date" :
2410- {
2411- const dimension : IPivotDimension = new IgxPivotDateDimension (
2403+ }
2404+ case "date" :
24122405 {
2413- memberName : field ,
2414- enabled : isFirstDate ,
2415- dataType : dataType
2406+ const dimension : IPivotDimension = new IgxPivotDateDimension (
2407+ {
2408+ memberName : field ,
2409+ enabled : isFirstDate ,
2410+ dataType : dataType
2411+ }
2412+ )
2413+ rowDimensions . push ( dimension ) ;
2414+ isFirstDate = false ;
2415+ break ;
24162416 }
2417- )
2418- rowDimensions . push ( dimension ) ;
2419- isFirstDate = false ;
2420- break ;
2421- }
24222417 default : {
24232418 const dimension : IPivotDimension = {
24242419 memberName : field ,
0 commit comments