Skip to content

Commit a4de69e

Browse files
Teodosia HristodorovaTeodosia Hristodorova
Teodosia Hristodorova
authored and
Teodosia Hristodorova
committed
Merge branch 'mevtimov/feat-8040' of https://github.com/IgniteUI/igniteui-angular into mevtimov/feat-8040
2 parents b61348e + 7320872 commit a4de69e

19 files changed

+335
-28
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ All notable changes for each version of this project will be documented in this
1818
```
1919
- `IgxGrid`, `IgxTreeGrid`, `IgxHierarchicalGrid`
2020
- Support for `currency` type columns is added in the grid.
21+
- Support for `percent` type columns is added in the grid.
2122
- Added support for filtering based on the formatted cell values using the `FormattedValuesFilteringStrategy` for `IgxGrid`/`IgxHierarchicalGrid` and `TreeGridFormattedValuesFilteringStrategy` for `IgxTreeGrid`.
2223
- `IgxPaginator`
2324
- `paging` and `pagingDone` events are now emitted.
@@ -38,22 +39,27 @@ All notable changes for each version of this project will be documented in this
3839
- `IgxDialog`
3940
- The dialog content has been moved inside the dialog window container in the template. This means that if you have added something in-between the opening and closing tags of the dialog, you may have to adjust its styling a bit since that content is now rendered inside a container that has padding on it.
4041
- `IgxCalendar`
42+
- **Breaking Change**
4143
- A new string enumeration `IgxCalendarView` is exported. Either the new one or the current `CalendarView` can be used. `CalendarView` will be deprecated in a future release.
4244
- `onSelection` is now `selected`
4345
- `onViewChanging` is now `viewChanging`
4446
- `onDateSelection` is now `dateSelection`
4547
- `onYearSelection` is now `yearSelection`
4648
- `onMonthSelection` is now `monthSelection`
4749
- `IgxYearsViewComponent`
50+
- **Breaking Change**
4851
- `onSelection` is now `selected`
4952
- `onYearSelection` is now `yearSelection`
5053
- `IgxDaysViewComponent`
54+
- **Breaking Change**
5155
- `onDateSelection` is now `dateSelection`
5256
- `onViewChanging` is now `viewChanging`
5357
- `IgxMonthsViewComponent`
58+
- **Breaking Change**
5459
- `onSelection` is now `selected`
5560
- `onMonthSelection` is now `monthSelection`
5661
- `IgxMonthPickerComponent`
62+
- **Breaking Change**
5763
- `onSelection` is now `selected`
5864
- `IgxRadioGroup`
5965
- Added new property `alignment` that determines the radio group alignment. Available options are `horizontal` (default) and `vertical`.

projects/igniteui-angular/migrations/update-11_1_0/changes/members.json

+4
Original file line numberDiff line numberDiff line change
@@ -287,13 +287,17 @@
287287
"member": "onRowExport",
288288
"replaceWith": "rowExporting",
289289
"definedIn": [
290+
"IgxExcelExporterService",
291+
"IgxCsvExporterService",
290292
"IgxBaseExporter"
291293
]
292294
},
293295
{
294296
"member": "onColumnExport",
295297
"replaceWith": "columnExporting",
296298
"definedIn": [
299+
"IgxExcelExporterService",
300+
"IgxCsvExporterService",
297301
"IgxBaseExporter"
298302
]
299303
},

projects/igniteui-angular/src/lib/data-operations/data-util.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ export const DataType = mkenum({
2525
Number: 'number',
2626
Boolean: 'boolean',
2727
Date: 'date',
28-
Currency: 'currency'
28+
Currency: 'currency',
29+
Percent: 'percent'
2930
});
3031
export type DataType = (typeof DataType)[keyof typeof DataType];
3132

@@ -219,7 +220,7 @@ export class DataUtil {
219220
}
220221

221222
public static parseValue(dataType: DataType, value: any): any {
222-
if (dataType === DataType.Number || dataType === DataType.Currency) {
223+
if (dataType === DataType.Number || dataType === DataType.Currency || dataType === DataType.Percent) {
223224
value = parseFloat(value);
224225
}
225226

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

+22-2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)
2525
: column.dataType === 'currency'
2626
? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)
27+
: column.dataType === 'percent'
28+
? (value | percent:column.pipeArgs.digitsInfo:grid.locale)
2729
: value
2830
"
2931
[row]="rowData"
@@ -39,6 +41,8 @@
3941
? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)
4042
: column.dataType === 'currency'
4143
? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)
44+
: column.dataType === 'percent'
45+
? (value | percent:column.pipeArgs.digitsInfo:grid.locale)
4246
: value
4347
}}</div>
4448
<igx-icon
@@ -54,8 +58,9 @@
5458
[groupName]="gridID"
5559
[value]="formatter ? (value | columnFormatter:formatter) : column.dataType === 'number' ?
5660
(value | number:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'date' ?
57-
(value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'?
58-
(value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : value"
61+
(value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency' ?
62+
(value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?
63+
(value | percent:column.pipeArgs.digitsInfo:grid.locale) : value"
5964
[row]="rowData"
6065
[column]="this.column.field"
6166
[containerClass]="'igx-grid__td-text'"
@@ -81,6 +86,7 @@
8186
[value]="editValue"
8287
(input)="editValue = $event.target.value"
8388
[igxFocus]="true"
89+
[step]="step"
8490
type="number"
8591
/>
8692
</igx-input-group>
@@ -114,11 +120,25 @@
114120
[value]="editValue"
115121
(input)="editValue = $event.target.value"
116122
[igxFocus]="true"
123+
[step]="step"
117124
type="number"
118125
/>
119126
<igx-suffix *ngIf="!grid.currencyPositionLeft" >{{ currencyCodeSymbol }}</igx-suffix>
120127
</igx-input-group>
121128
</ng-container>
129+
<ng-container *ngIf="column.dataType === 'percent'">
130+
<igx-input-group displayDensity="compact">
131+
<input
132+
igxInput
133+
[value]="editValue"
134+
(input)="editValue = $event.target.value"
135+
[igxFocus]="true"
136+
[step]="step"
137+
type="number"
138+
/>
139+
<igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>
140+
</igx-input-group>
141+
</ng-container>
122142
</ng-template>
123143
<ng-container *ngTemplateOutlet="pinnedIndicatorTemplate; context: context">
124144
</ng-container>

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

+17-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { GridSelectionMode } from './common/enums';
2727
import { GridType } from './common/grid.interface';
2828
import { ISearchInfo } from './grid/public_api';
2929
import { getCurrencySymbol, getLocaleCurrencyCode} from '@angular/common';
30+
import { DataType } from '../data-operations/data-util';
3031

3132
/**
3233
* Providing reference to `IgxGridCellComponent`:
@@ -283,7 +284,12 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
283284

284285
@HostBinding('attr.title')
285286
public get title() {
286-
return this.editMode || this.cellTemplate ? '' : this.value;
287+
return this.editMode || this.cellTemplate ? '' : this.column.dataType === DataType.Percent ?
288+
this.grid.percentPipe.transform(this.value, this.column.pipeArgs.digitsInfo, this.grid.locale) :
289+
this.column.dataType === DataType.Currency ?
290+
this.grid.currencyPipe.transform(this.value, this.currencyCode, this.column.pipeArgs.display,
291+
this.column.pipeArgs.digitsInfo, this.grid.locale) :
292+
this.value;
287293
}
288294

289295
@HostBinding('class.igx-grid__td--bool-true')
@@ -594,6 +600,16 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
594600
*/
595601
public activeHighlightClass = 'igx-highlight__active';
596602

603+
/** @hidden @internal */
604+
public get step(): number {
605+
const digitsInfo = this.column.pipeArgs.digitsInfo;
606+
if (!digitsInfo) {
607+
return 1;
608+
}
609+
const step = +digitsInfo.substr(digitsInfo.indexOf('.') + 1, 1);
610+
return 1 / (Math.pow(10, step));
611+
}
612+
597613
/** @hidden @internal */
598614
public get currencyCode(): string {
599615
return this.column.pipeArgs.currencyCode ?

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

+12-7
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ import { IgxGridHeaderComponent } from '../headers/grid-header.component';
3535
import { IgxGridFilteringCellComponent } from '../filtering/base/grid-filtering-cell.component';
3636
import { IgxGridHeaderGroupComponent } from '../headers/grid-header-group.component';
3737
import { getNodeSizeViaRange } from '../../core/utils';
38-
import { IgxSummaryOperand, IgxNumberSummaryOperand, IgxDateSummaryOperand, IgxCurrencySummaryOperand } from '../summaries/grid-summary';
38+
import { IgxSummaryOperand, IgxNumberSummaryOperand, IgxDateSummaryOperand,
39+
IgxCurrencySummaryOperand, IgxPercentSummaryOperand } from '../summaries/grid-summary';
3940
import {
4041
IgxCellTemplateDirective,
4142
IgxCellHeaderTemplateDirective,
@@ -734,7 +735,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
734735
/**
735736
* @hidden
736737
*/
737-
get maxWidthPx() {
738+
public get maxWidthPx() {
738739
const gridAvailableSize = this.grid.calcWidth;
739740
const isPercentageWidth = this.maxWidth && typeof this.maxWidth === 'string' && this.maxWidth.indexOf('%') !== -1;
740741
return isPercentageWidth ? parseFloat(this.maxWidth) / 100 * gridAvailableSize : parseFloat(this.maxWidth);
@@ -743,7 +744,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
743744
/**
744745
* @hidden
745746
*/
746-
get maxWidthPercent() {
747+
public get maxWidthPercent() {
747748
const gridAvailableSize = this.grid.calcWidth;
748749
const isPercentageWidth = this.maxWidth && typeof this.maxWidth === 'string' && this.maxWidth.indexOf('%') !== -1;
749750
return isPercentageWidth ? parseFloat(this.maxWidth) : parseFloat(this.maxWidth) / gridAvailableSize * 100;
@@ -752,7 +753,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
752753
/**
753754
* @hidden
754755
*/
755-
get minWidthPx() {
756+
public get minWidthPx() {
756757
const gridAvailableSize = this.grid.calcWidth;
757758
const isPercentageWidth = this.minWidth && typeof this.minWidth === 'string' && this.minWidth.indexOf('%') !== -1;
758759
return isPercentageWidth ? parseFloat(this.minWidth) / 100 * gridAvailableSize : parseFloat(this.minWidth);
@@ -761,7 +762,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
761762
/**
762763
* @hidden
763764
*/
764-
get minWidthPercent() {
765+
public get minWidthPercent() {
765766
const gridAvailableSize = this.grid.calcWidth;
766767
const isPercentageWidth = this.minWidth && typeof this.minWidth === 'string' && this.minWidth.indexOf('%') !== -1;
767768
return isPercentageWidth ? parseFloat(this.minWidth) : parseFloat(this.minWidth) / gridAvailableSize * 100;
@@ -803,7 +804,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
803804
*
804805
* @memberof IgxColumnComponent
805806
*/
806-
get index(): number {
807+
public get index(): number {
807808
return this.grid.columns.indexOf(this);
808809
}
809810

@@ -962,7 +963,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
962963
*
963964
* @memberof IgxColumnComponent
964965
*/
965-
get defaultMinWidth(): string {
966+
public get defaultMinWidth(): string {
966967
if (!this.grid) {
967968
return '80';
968969
}
@@ -1536,6 +1537,9 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
15361537
case DataType.Currency:
15371538
this.summaries = IgxCurrencySummaryOperand;
15381539
break;
1540+
case DataType.Percent:
1541+
this.summaries = IgxPercentSummaryOperand;
1542+
break;
15391543
default:
15401544
this.summaries = IgxSummaryOperand;
15411545
break;
@@ -1548,6 +1552,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
15481552
break;
15491553
case DataType.Number:
15501554
case DataType.Currency:
1555+
case DataType.Percent:
15511556
this.filters = IgxNumberFilteringOperand.instance();
15521557
break;
15531558
case DataType.Date:

projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.ts

+1
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ export class IgxExcelStyleConditionalFilterComponent implements OnDestroy {
165165
case DataType.Boolean:
166166
return this.esf.grid.resourceStrings.igx_grid_excel_boolean_filter;
167167
case DataType.Number:
168+
case DataType.Percent:
168169
return this.esf.grid.resourceStrings.igx_grid_excel_number_filter;
169170
case DataType.Date:
170171
return this.esf.grid.resourceStrings.igx_grid_excel_date_filter;

projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.ts

+1
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ export class IgxExcelStyleCustomDialogComponent implements AfterViewInit {
225225
return IgxBooleanFilteringOperand.instance().condition(conditionName);
226226
case DataType.Number:
227227
case DataType.Currency:
228+
case DataType.Percent:
228229
return IgxNumberFilteringOperand.instance().condition(conditionName);
229230
case DataType.Date:
230231
return IgxDateFilteringOperand.instance().condition(conditionName);

projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.ts

+1
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ export class IgxExcelStyleDefaultExpressionComponent implements AfterViewInit {
9696
switch (this.column.dataType) {
9797
case DataType.Number:
9898
case DataType.Currency:
99+
case DataType.Percent:
99100
return 'number';
100101
default:
101102
return 'text';

projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-search.component.ts

+2
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ export class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {
247247
switch (this.esf.column?.dataType) {
248248
case DataType.Number:
249249
case DataType.Currency:
250+
case DataType.Percent:
250251
return 'number';
251252
default:
252253
return 'text';
@@ -417,6 +418,7 @@ export class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {
417418
return IgxBooleanFilteringOperand.instance().condition(conditionName);
418419
case DataType.Number:
419420
case DataType.Currency:
421+
case DataType.Percent:
420422
return IgxNumberFilteringOperand.instance().condition(conditionName);
421423
case DataType.Date:
422424
return IgxDateFilteringOperand.instance().condition(conditionName);

projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts

+5
Original file line numberDiff line numberDiff line change
@@ -789,6 +789,11 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy {
789789
this.column.pipeArgs.currencyCode : getLocaleCurrencyCode(this.grid.locale),
790790
this.column.pipeArgs.display, this.column.pipeArgs.digitsInfo, this.grid.locale);
791791
}
792+
if (this.column.dataType === DataType.Percent) {
793+
return this.column.formatter ?
794+
applyFormatter ? this.column.formatter(element) : element :
795+
this.grid.percentPipe.transform(element, this.column.pipeArgs.digitsInfo, this.grid.locale);
796+
}
792797
return this.column.formatter && applyFormatter ?
793798
this.column.formatter(element) :
794799
element;

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { DOCUMENT, DatePipe, DecimalPipe, getLocaleNumberFormat, NumberFormatStyle, CurrencyPipe } from '@angular/common';
1+
import { DOCUMENT, DatePipe, DecimalPipe, getLocaleNumberFormat, NumberFormatStyle, CurrencyPipe, PercentPipe } from '@angular/common';
22
import {
33
AfterContentInit,
44
AfterViewInit,
@@ -2729,6 +2729,10 @@ export abstract class IgxGridBaseDirective extends DisplayDensityBase implements
27292729
* @hidden @internal
27302730
*/
27312731
public currencyPipe: CurrencyPipe;
2732+
/**
2733+
* @hidden @internal
2734+
*/
2735+
public percentPipe: PercentPipe;
27322736
/**
27332737
* @hidden @internal
27342738
*/
@@ -3078,6 +3082,7 @@ export abstract class IgxGridBaseDirective extends DisplayDensityBase implements
30783082
this.datePipe = new DatePipe(this.locale);
30793083
this.decimalPipe = new DecimalPipe(this.locale);
30803084
this.currencyPipe = new CurrencyPipe(this.locale);
3085+
this.percentPipe = new PercentPipe(this.locale);
30813086
this.cdr.detach();
30823087
}
30833088

0 commit comments

Comments
 (0)