Skip to content

Commit 06442af

Browse files
authored
Merge branch 'master' into vkombov/feat-10125-master
2 parents 74af506 + 9268abc commit 06442af

File tree

8 files changed

+64
-120
lines changed

8 files changed

+64
-120
lines changed

projects/igniteui-angular/src/lib/grids/columns/column.component.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import { IgxGridFilteringCellComponent } from '../filtering/base/grid-filtering-
3838
import { IgxGridHeaderGroupComponent } from '../headers/grid-header-group.component';
3939
import {
4040
IgxSummaryOperand, IgxNumberSummaryOperand, IgxDateSummaryOperand,
41-
IgxCurrencySummaryOperand, IgxPercentSummaryOperand, IgxSummaryResult, IgxTimeSummaryOperand
41+
IgxSummaryResult, IgxTimeSummaryOperand
4242
} from '../summaries/grid-summary';
4343
import {
4444
IgxCellTemplateDirective,
@@ -1711,6 +1711,8 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
17111711
this.summaries = IgxSummaryOperand;
17121712
break;
17131713
case GridColumnDataType.Number:
1714+
case GridColumnDataType.Currency:
1715+
case GridColumnDataType.Percent:
17141716
this.summaries = IgxNumberSummaryOperand;
17151717
break;
17161718
case GridColumnDataType.Date:
@@ -1720,12 +1722,6 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
17201722
case GridColumnDataType.Time:
17211723
this.summaries = IgxTimeSummaryOperand;
17221724
break;
1723-
case GridColumnDataType.Currency:
1724-
this.summaries = IgxCurrencySummaryOperand;
1725-
break;
1726-
case GridColumnDataType.Percent:
1727-
this.summaries = IgxPercentSummaryOperand;
1728-
break;
17291725
default:
17301726
this.summaries = IgxSummaryOperand;
17311727
break;

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

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { SortingDirection } from '../../data-operations/sorting-expression.inter
3131
import { DropPosition } from '../moving/moving.service';
3232
import { DatePipe } from '@angular/common';
3333
import { IgxGridGroupByRowComponent } from './groupby-row.component';
34+
import { IColumnPipeArgs } from 'igniteui-angular';
3435

3536
describe('IgxGrid - Summaries #grid', () => {
3637

@@ -154,7 +155,7 @@ describe('IgxGrid - Summaries #grid', () => {
154155
it('should properly render custom summaries', () => {
155156
const summaryRow = GridSummaryFunctions.getRootSummaryRow(fixture);
156157
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 3, ['Count', 'Sum', 'Avg'], ['10', '39,004', '3,900.4']);
157-
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 4, ['Earliest'], ['5/17/1990']);
158+
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 4, ['Earliest', 'Items InStock'], ['May 17, 1990', '1337']);
158159

159160
grid.filter('UnitsInStock', '0', IgxNumberFilteringOperand.instance().condition('lessThan'), true);
160161
fixture.detectChanges();
@@ -181,7 +182,7 @@ describe('IgxGrid - Summaries #grid', () => {
181182
it('should change custom summaries at runtime', () => {
182183
const summaryRow = GridSummaryFunctions.getRootSummaryRow(fixture);
183184
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 3, ['Count', 'Sum', 'Avg'], ['10', '39,004', '3,900.4']);
184-
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 4, ['Earliest'], ['5/17/1990']);
185+
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 4, ['Earliest', 'Items InStock'], ['May 17, 1990', '1337']);
185186
GridSummaryFunctions.verifyVisibleSummariesHeight(fixture, 3, grid.defaultSummaryHeight);
186187
grid.getColumnByName('UnitsInStock').summaries = fixture.componentInstance.dealsSummaryMinMax;
187188
fixture.detectChanges();
@@ -192,20 +193,20 @@ describe('IgxGrid - Summaries #grid', () => {
192193
it('should be able to access alldata from each summary', () => {
193194
const summaryRow = GridSummaryFunctions.getRootSummaryRow(fixture);
194195
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 3, ['Count', 'Sum', 'Avg'], ['10', '39,004', '3,900.4']);
195-
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 4, ['Earliest'], ['5/17/1990']);
196+
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 4, ['Earliest', 'Items InStock'], ['May 17, 1990', '1337']);
196197
GridSummaryFunctions.verifyVisibleSummariesHeight(fixture, 3, grid.defaultSummaryHeight);
197198
grid.getColumnByName('UnitsInStock').summaries = fixture.componentInstance.inStockSummary;
198199
fixture.detectChanges();
199200

200201
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 3, ['Count', 'Min', 'Max', 'Sum', 'Avg', 'Items InStock'],
201-
['10', '0', '20000', '39004', '3900.4', '6']);
202-
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 4, ['Earliest'], ['5/17/1990']);
202+
['10', '0', '20,000', '39,004', '3,900.4', '6']);
203+
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 4, ['Earliest', 'Items InStock'], ['May 17, 1990', '1337']);
203204

204205
grid.getCellByColumn(4, 'InStock').update(true);
205206
fixture.detectChanges();
206207

207208
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 3, ['Count', 'Min', 'Max', 'Sum', 'Avg', 'Items InStock'],
208-
['10', '0', '20000', '39004', '3900.4', '7']);
209+
['10', '0', '20,000', '39,004', '3,900.4', '7']);
209210

210211
grid.filter('UnitsInStock', 0, IgxNumberFilteringOperand.instance().condition('equals'));
211212
fixture.detectChanges();
@@ -292,7 +293,7 @@ describe('IgxGrid - Summaries #grid', () => {
292293
expect(grid.hasSummarizedColumns).toBe(false);
293294
});
294295

295-
it('should change summary operand through grid API ', () => {
296+
it('should change summary operand through grid API', () => {
296297
grid.enableSummaries([{ fieldName: 'UnitsInStock', customSummary: fix.componentInstance.dealsSummaryMinMax }]);
297298
fix.detectChanges();
298299

@@ -2442,11 +2443,6 @@ class DealsSummary extends IgxNumberSummaryOperand {
24422443
public operate(summaries?: any[]): IgxSummaryResult[] {
24432444
const result = super.operate(summaries).filter((obj) => {
24442445
if (obj.key === 'average' || obj.key === 'sum' || obj.key === 'count') {
2445-
const summaryResult = obj.summaryResult;
2446-
// apply formatting to float numbers
2447-
if (Number(summaryResult) === summaryResult) {
2448-
obj.summaryResult = summaryResult.toLocaleString('en-us', { maximumFractionDigits: 2 });
2449-
}
24502446
return obj;
24512447
}
24522448
});
@@ -2462,11 +2458,6 @@ class DealsSummaryMinMax extends IgxNumberSummaryOperand {
24622458
public operate(summaries?: any[]): IgxSummaryResult[] {
24632459
const result = super.operate(summaries).filter((obj) => {
24642460
if (obj.key === 'min' || obj.key === 'max') {
2465-
const summaryResult = obj.summaryResult;
2466-
// apply formatting to float numbers
2467-
if (Number(summaryResult) === summaryResult) {
2468-
obj.summaryResult = summaryResult.toLocaleString('en-us', { maximumFractionDigits: 2 });
2469-
}
24702461
return obj;
24712462
}
24722463
});
@@ -2482,11 +2473,14 @@ class EarliestSummary extends IgxDateSummaryOperand {
24822473
public operate(summaries?: any[]): IgxSummaryResult[] {
24832474
const result = super.operate(summaries).filter((obj) => {
24842475
if (obj.key === 'earliest') {
2485-
const date = obj.summaryResult ? new Date(obj.summaryResult) : undefined;
2486-
obj.summaryResult = date ? new Intl.DateTimeFormat('en-US').format(date) : undefined;
24872476
return obj;
24882477
}
24892478
});
2479+
result.push({
2480+
key: 'test',
2481+
label: 'Items InStock',
2482+
summaryResult: 1337
2483+
});
24902484
return result;
24912485
}
24922486
}
@@ -2541,14 +2535,15 @@ class AllDataAvgSummary extends IgxSummaryOperand {
25412535

25422536
@Component({
25432537
template: `
2544-
<igx-grid #grid1 [data]="data" [primaryKey]="'ProductID'" [allowFiltering]="true">
2538+
<igx-grid #grid1 [data]="data" [primaryKey]="'ProductID'" [locale]="locale" [allowFiltering]="true">
25452539
<igx-column field="ProductID" header="Product ID">
25462540
</igx-column>
25472541
<igx-column field="ProductName" [hasSummary]="true">
25482542
</igx-column>
25492543
<igx-column field="InStock" [dataType]="'boolean'" [hasSummary]="true">
25502544
</igx-column>
2551-
<igx-column field="UnitsInStock" [dataType]="'number'" [hasSummary]="true" [summaries]="dealsSummary">
2545+
<igx-column field="UnitsInStock" [dataType]="'number'" [hasSummary]="true" [pipeArgs]="formatOptions"
2546+
[summaries]="dealsSummary">
25522547
</igx-column>
25532548
<igx-column field="OrderDate" width="200px" [dataType]="'date'" [sortable]="true" [hasSummary]="true"
25542549
[summaries]="earliest">
@@ -2566,5 +2561,9 @@ export class CustomSummariesComponent {
25662561
public earliest = EarliestSummary;
25672562
public inStockSummary = InStockSummary;
25682563
public allDataAvgSummary = AllDataAvgSummary;
2564+
public formatOptions: IColumnPipeArgs = {
2565+
digitsInfo: '1.0-2'
2566+
};
2567+
public locale = 'en-US';
25692568
}
25702569

projects/igniteui-angular/src/lib/grids/summaries/grid-summary.ts

Lines changed: 22 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,19 @@ export interface IgxSummaryResult {
66
key: string;
77
label: string;
88
summaryResult: any;
9+
/**
10+
* Apply default formatting based on the grid column type.
11+
* ```typescript
12+
* const result: IgxSummaryResult = {
13+
* key: 'key',
14+
* label: 'label',
15+
* defaultFormatting: true
16+
* }
17+
* ```
18+
*
19+
* @memberof IgxSummaryResult
20+
*/
21+
defaultFormatting?: boolean;
922
}
1023

1124
export interface ISummaryRecord {
@@ -65,6 +78,7 @@ export class IgxSummaryOperand {
6578
return [{
6679
key: 'count',
6780
label: 'Count',
81+
defaultFormatting: false,
6882
summaryResult: IgxSummaryOperand.count(data)
6983
}];
7084
}
@@ -160,21 +174,25 @@ export class IgxNumberSummaryOperand extends IgxSummaryOperand {
160174
result.push({
161175
key: 'min',
162176
label: 'Min',
177+
defaultFormatting: true,
163178
summaryResult: IgxNumberSummaryOperand.min(data)
164179
});
165180
result.push({
166181
key: 'max',
167182
label: 'Max',
183+
defaultFormatting: true,
168184
summaryResult: IgxNumberSummaryOperand.max(data)
169185
});
170186
result.push({
171187
key: 'sum',
172188
label: 'Sum',
189+
defaultFormatting: true,
173190
summaryResult: IgxNumberSummaryOperand.sum(data)
174191
});
175192
result.push({
176193
key: 'average',
177194
label: 'Avg',
195+
defaultFormatting: true,
178196
summaryResult: IgxNumberSummaryOperand.average(data)
179197
});
180198
return result;
@@ -244,11 +262,13 @@ export class IgxDateSummaryOperand extends IgxSummaryOperand {
244262
result.push({
245263
key: 'earliest',
246264
label: 'Earliest',
265+
defaultFormatting: true,
247266
summaryResult: IgxDateSummaryOperand.earliest(data)
248267
});
249268
result.push({
250269
key: 'latest',
251270
label: 'Latest',
271+
defaultFormatting: true,
252272
summaryResult: IgxDateSummaryOperand.latest(data)
253273
});
254274
return result;
@@ -295,70 +315,15 @@ export class IgxTimeSummaryOperand extends IgxSummaryOperand {
295315
result.push({
296316
key: 'earliest',
297317
label: 'Earliest',
318+
defaultFormatting: true,
298319
summaryResult: IgxTimeSummaryOperand.earliestTime(data)
299320
});
300321
result.push({
301322
key: 'latest',
302323
label: 'Latest',
324+
defaultFormatting: true,
303325
summaryResult: IgxTimeSummaryOperand.latestTime(data)
304326
});
305327
return result;
306328
}
307329
}
308-
309-
export class IgxCurrencySummaryOperand extends IgxSummaryOperand {
310-
311-
public operate(data: any[] = [], allData: any[] = [], fieldName?: string): IgxSummaryResult[] {
312-
const result = super.operate(data, allData, fieldName);
313-
result.push({
314-
key: 'min',
315-
label: 'Min',
316-
summaryResult: IgxNumberSummaryOperand.min(data)
317-
});
318-
result.push({
319-
key: 'max',
320-
label: 'Max',
321-
summaryResult: IgxNumberSummaryOperand.max(data)
322-
});
323-
result.push({
324-
key: 'sum',
325-
label: 'Sum',
326-
summaryResult: IgxNumberSummaryOperand.sum(data)
327-
});
328-
result.push({
329-
key: 'average',
330-
label: 'Avg',
331-
summaryResult: IgxNumberSummaryOperand.average(data)
332-
});
333-
return result;
334-
}
335-
}
336-
337-
export class IgxPercentSummaryOperand extends IgxSummaryOperand {
338-
339-
public operate(data: any[] = [], allData: any[] = [], fieldName?: string): IgxSummaryResult[] {
340-
const result = super.operate(data, allData, fieldName);
341-
result.push({
342-
key: 'min',
343-
label: 'Min',
344-
summaryResult: IgxNumberSummaryOperand.min(data)
345-
});
346-
result.push({
347-
key: 'max',
348-
label: 'Max',
349-
summaryResult: IgxNumberSummaryOperand.max(data)
350-
});
351-
result.push({
352-
key: 'sum',
353-
label: 'Sum',
354-
summaryResult: IgxNumberSummaryOperand.sum(data)
355-
});
356-
result.push({
357-
key: 'average',
358-
label: 'Avg',
359-
summaryResult: IgxNumberSummaryOperand.average(data)
360-
});
361-
return result;
362-
}
363-
}
364-

projects/igniteui-angular/src/lib/grids/summaries/summary-cell.component.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
{{
1616
summaryFormatter
1717
? (summary | summaryFormatter:column.summaries:summaryFormatter)
18-
: (isNumberOperand() && summary.key !== 'count')
18+
: (isNumberColumn() && summary.defaultFormatting)
1919
? (summary.summaryResult | number:column.pipeArgs.digitsInfo:grid.locale)
20-
: ((isDateOperand() || isTimeOperand()) && summary.key !== 'count')
20+
: (isDateKindColumn() && summary.defaultFormatting)
2121
? (summary.summaryResult | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)
22-
: (isCurrencyOperand() && summary.key !== 'count')
22+
: (isCurrencyColumn() && summary.defaultFormatting)
2323
? (summary.summaryResult | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)
24-
: (isPercentOperand() && summary.key !== 'count')
24+
: (isPercentColumn() && summary.defaultFormatting)
2525
? (summary.summaryResult | percent:column.pipeArgs.digitsInfo:grid.locale)
26-
: (summary.key === 'count' && (isNumberOperand() || isDateOperand() || isCurrencyOperand() || isPercentOperand()))
26+
: (summary.key === 'count')
2727
? (summary.summaryResult | number:undefined:grid.locale)
2828
: summary.summaryResult
2929
}}

projects/igniteui-angular/src/lib/grids/summaries/summary-cell.component.ts

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
import { Component, Input, HostBinding, HostListener, ChangeDetectionStrategy, ElementRef } from '@angular/core';
22
import {
3-
IgxCurrencySummaryOperand,
4-
IgxDateSummaryOperand,
5-
IgxNumberSummaryOperand,
6-
IgxPercentSummaryOperand,
73
IgxSummaryOperand,
8-
IgxSummaryResult,
9-
IgxTimeSummaryOperand
4+
IgxSummaryResult
105
} from './grid-summary';
116
import { IgxColumnComponent } from '../columns/column.component';
127
import { GridColumnDataType } from '../../data-operations/data-util';
@@ -118,35 +113,30 @@ export class IgxSummaryCellComponent {
118113
/**
119114
* @hidden @internal
120115
*/
121-
public isNumberOperand(): boolean {
122-
return this.column.summaries?.constructor === IgxNumberSummaryOperand;
116+
public isNumberColumn(): boolean {
117+
return this.column.dataType === GridColumnDataType.Number;
123118
}
124119

125120
/**
126121
* @hidden @internal
127122
*/
128-
public isDateOperand(): boolean {
129-
return this.column.summaries?.constructor === IgxDateSummaryOperand;
123+
public isDateKindColumn(): boolean {
124+
return this.column.dataType === GridColumnDataType.Date ||
125+
this.column.dataType === GridColumnDataType.DateTime ||
126+
this.column.dataType === GridColumnDataType.Time;
130127
}
131128

132129
/**
133130
* @hidden @internal
134131
*/
135-
public isTimeOperand(): boolean {
136-
return this.column.summaries?.constructor === IgxTimeSummaryOperand;
132+
public isCurrencyColumn(): boolean {
133+
return this.column.dataType === GridColumnDataType.Currency;
137134
}
138135

139136
/**
140137
* @hidden @internal
141138
*/
142-
public isCurrencyOperand(): boolean {
143-
return this.column.summaries?.constructor === IgxCurrencySummaryOperand;
144-
}
145-
146-
/**
147-
* @hidden @internal
148-
*/
149-
public isPercentOperand(): boolean {
150-
return this.column.summaries?.constructor === IgxPercentSummaryOperand;
139+
public isPercentColumn(): boolean {
140+
return this.column.dataType === GridColumnDataType.Percent;
151141
}
152142
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {
1212
import { configureTestSuite } from '../../test-utils/configure-suite';
1313
import { setupGridScrollDetection } from '../../test-utils/helper-utils.spec';
1414
import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec';
15-
import { IgxTreeGridRowComponent } from './tree-grid-row.component';
1615
import { GridSummaryFunctions, GridFunctions } from '../../test-utils/grid-functions.spec';
1716
import { IgxNumberFilteringOperand } from '../../data-operations/filtering-condition';
1817
import { DebugElement } from '@angular/core';
@@ -431,7 +430,7 @@ describe('IgxTreeGrid - Summaries #tGrid', () => {
431430

432431
let summaryRow = GridSummaryFunctions.getSummaryRowByDataRowIndex(fix, 7);
433432
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 3,
434-
['Count', 'Min', 'Max', 'Sum', 'Avg', 'Test'], ['3', '29', '43', '103', '34.333333333333336', '2']);
433+
['Count', 'Min', 'Max', 'Sum', 'Avg', 'Test'], ['3', '29', '43', '103', '34.333', '2']);
435434

436435
summaryRow = GridSummaryFunctions.getSummaryRowByDataRowIndex(fix, 6);
437436
GridSummaryFunctions.verifyColumnSummaries(summaryRow, 3,

0 commit comments

Comments
 (0)