@@ -32,7 +32,7 @@ import {
3232} from '@angular/core' ;
3333import { NgTemplateOutlet , NgClass , NgStyle } from '@angular/common' ;
3434
35- import { first , take , takeUntil } from 'rxjs/operators' ;
35+ import { first , take , takeUntil } from 'rxjs/operators' ;
3636import { IgxGridBaseDirective } from '../grid-base.directive' ;
3737import { IgxFilteringService } from '../filtering/grid-filtering.service' ;
3838import { IgxGridSelectionService } from '../selection/selection.service' ;
@@ -1666,7 +1666,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
16661666 public autoSizeRowDimension ( dimension : IPivotDimension ) {
16671667 if ( this . getDimensionType ( dimension ) === PivotDimensionType . Row ) {
16681668 const relatedDims : string [ ] = PivotUtil . flatten ( [ dimension ] ) . map ( ( x : IPivotDimension ) => x . memberName ) ;
1669- const contentCollection = this . getContentCollection ( dimension ) ;
1669+ const contentCollection = this . getContentCollection ( dimension ) ;
16701670 const content = contentCollection . filter ( x => relatedDims . indexOf ( x . dimension . memberName ) !== - 1 ) ;
16711671 const headers = content . map ( x => x . headerGroups . toArray ( ) ) . flat ( ) . map ( x => x . header && x . header . refInstance ) ;
16721672 if ( this . pivotUI . showRowHeaders ) {
@@ -1940,8 +1940,8 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
19401940 */
19411941 public getRowDimensionByName ( memberName : string ) {
19421942 const visibleRows = this . pivotUI . rowLayout === PivotRowLayoutType . Vertical ?
1943- this . pivotConfiguration . rows :
1944- PivotUtil . flatten ( this . pivotConfiguration . rows ) ;
1943+ this . pivotConfiguration . rows :
1944+ PivotUtil . flatten ( this . pivotConfiguration . rows ) ;
19451945 const dimIndex = visibleRows . findIndex ( ( target ) => target . memberName === memberName ) ;
19461946 const dim = visibleRows [ dimIndex ] ;
19471947 return dim ;
@@ -2265,7 +2265,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
22652265 const separator = this . pivotKeys . columnDimensionSeparator ;
22662266 const dataArr = fields . map ( x => x . split ( separator ) ) . sort ( x => x . length ) ;
22672267 const hierarchy = new Map < string , any > ( ) ;
2268- const columnDimensions = PivotUtil . flatten ( this . columnDimensions ) ;
2268+ const columnDimensions = PivotUtil . flatten ( this . columnDimensions ) ;
22692269 dataArr . forEach ( arr => {
22702270 let currentHierarchy = hierarchy ;
22712271 const path = [ ] ;
@@ -2285,18 +2285,31 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
22852285 } ) ;
22862286 return hierarchy ;
22872287 }
2288-
2289- /** @hidden @internal */
2290- public currencyColumnSet : Set < string > = new Set ( ) ;
2288+ private updateColumnDataTypeByAggregator ( column : any ) {
2289+ this . values . forEach ( ( aggregatorValue ) => {
2290+ if ( ( aggregatorValue . dataType === GridColumnDataType . Currency || aggregatorValue . dataType === GridColumnDataType . Percent ) && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) === 'count' ) {
2291+ if ( column . field ?. includes ( aggregatorValue . member ) || this . values . length === 1 ) {
2292+ column . dataType = GridColumnDataType . Number ;
2293+ }
2294+ } else if ( aggregatorValue . dataType === GridColumnDataType . Currency && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) !== 'count' ) {
2295+ if ( column . field ?. includes ( aggregatorValue . member ) || this . values . length === 1 ) {
2296+ column . dataType = GridColumnDataType . Currency ;
2297+ }
2298+ } else if ( aggregatorValue . dataType === GridColumnDataType . Percent && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) !== 'count' ) {
2299+ if ( column . field ?. includes ( aggregatorValue . member ) || this . values . length === 1 ) {
2300+ column . dataType = GridColumnDataType . Percent ;
2301+ }
2302+ }
2303+ } )
2304+ }
22912305 protected generateColumnHierarchy ( fields : Map < string , any > , data , parent = null ) : IgxColumnComponent [ ] {
22922306 let columns = [ ] ;
22932307 if ( fields . size === 0 ) {
22942308 this . values . forEach ( ( value ) => {
22952309 const ref = createComponent ( IgxColumnComponent , { environmentInjector : this . envInjector , elementInjector : this . injector } ) ;
22962310 let columnDataType = value . dataType || this . resolveDataTypes ( data . length ? data [ 0 ] [ value . member ] : null ) ;
22972311
2298- if ( value . aggregate ?. key ?. toLowerCase ( ) === 'count' && columnDataType === GridColumnDataType . Currency ) {
2299- this . currencyColumnSet . add ( value . member ) ;
2312+ if ( value . aggregate ?. key ?. toLowerCase ( ) === 'count' && ( columnDataType === GridColumnDataType . Currency || columnDataType == GridColumnDataType . Percent ) ) {
23002313 columnDataType = GridColumnDataType . Number ;
23012314 }
23022315
@@ -2319,32 +2332,14 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
23192332 if ( shouldGenerate && ( value . children == null || value . children . length === 0 || value . children . size === 0 ) ) {
23202333 const col = this . createColumnForDimension ( value , data , parent , this . hasMultipleValues ) ;
23212334
2322- this . values . forEach ( ( aggregatorValue ) => {
2323- if ( col . dataType === GridColumnDataType . Currency && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) === 'count' ) {
2324- col . dataType = GridColumnDataType . Number ;
2325- this . currencyColumnSet . add ( aggregatorValue . member ) ;
2326- } else if ( this . currencyColumnSet . has ( aggregatorValue . member ) && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) !== 'count' ) {
2327- col . dataType = GridColumnDataType . Currency ;
2328- this . currencyColumnSet . delete ( aggregatorValue . member ) ;
2329- }
2330- } )
2335+ this . updateColumnDataTypeByAggregator ( col ) ;
23312336
23322337 columns . push ( col ) ;
23332338 if ( this . hasMultipleValues ) {
23342339 const measureChildren = this . getMeasureChildren ( data , col , false , value . dimension . width ) ;
23352340
23362341 measureChildren . forEach ( ( child ) => {
2337- this . values . forEach ( ( aggregatorValue ) => {
2338- if ( child . field . includes ( aggregatorValue . member ) ) {
2339- if ( child . dataType === GridColumnDataType . Currency && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) === 'count' ) {
2340- child . dataType = GridColumnDataType . Number ;
2341- this . currencyColumnSet . add ( aggregatorValue . member ) ;
2342- } else if ( this . currencyColumnSet . has ( aggregatorValue . member ) && aggregatorValue . aggregate ?. key ?. toLowerCase ( ) !== 'count' ) {
2343- child . dataType = GridColumnDataType . Currency ;
2344- this . currencyColumnSet . delete ( aggregatorValue . member ) ;
2345- }
2346- }
2347- } )
2342+ this . updateColumnDataTypeByAggregator ( child ) ;
23482343 } )
23492344
23502345 col . children . reset ( measureChildren ) ;
@@ -2416,20 +2411,20 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
24162411 } ;
24172412 values . push ( value ) ;
24182413 break ;
2419- }
2420- case "date" :
2421- {
2422- const dimension : IPivotDimension = new IgxPivotDateDimension (
2414+ }
2415+ case "date" :
24232416 {
2424- memberName : field ,
2425- enabled : isFirstDate ,
2426- dataType : dataType
2417+ const dimension : IPivotDimension = new IgxPivotDateDimension (
2418+ {
2419+ memberName : field ,
2420+ enabled : isFirstDate ,
2421+ dataType : dataType
2422+ }
2423+ )
2424+ rowDimensions . push ( dimension ) ;
2425+ isFirstDate = false ;
2426+ break ;
24272427 }
2428- )
2429- rowDimensions . push ( dimension ) ;
2430- isFirstDate = false ;
2431- break ;
2432- }
24332428 default : {
24342429 const dimension : IPivotDimension = {
24352430 memberName : field ,
0 commit comments