igniteui-angular 19.2.7 → 19.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/igniteui-angular.mjs +213 -174
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/core/styles/components/grid/_excel-filtering-theme.scss +1 -1
- package/lib/core/styles/components/input/_input-group-component.scss +2 -1
- package/lib/core/styles/components/input/_input-group-theme.scss +53 -5
- package/lib/core/styles/components/label/_label-theme.scss +4 -1
- package/lib/core/styles/components/radio/_radio-component.scss +12 -0
- package/lib/core/styles/components/radio/_radio-theme.scss +30 -8
- package/lib/core/utils.d.ts +4 -4
- package/lib/data-operations/filtering-strategy.d.ts +4 -5
- package/lib/directives/radio/radio-group.directive.d.ts +33 -15
- package/lib/directives/tooltip/tooltip.directive.d.ts +11 -2
- package/lib/grids/common/pipes.d.ts +1 -1
- package/lib/grids/common/strategy.d.ts +1 -1
- package/lib/grids/grid/grid-validation.service.d.ts +1 -1
- package/lib/grids/grid-public-cell.d.ts +2 -2
- package/lib/grids/summaries/grid-summary.service.d.ts +1 -1
- package/lib/grids/tree-grid/tree-grid.filtering.strategy.d.ts +4 -4
- package/package.json +1 -1
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, HostListener, Input, Directive, EventEmitter, InjectionToken, isDevMode, inject, PLATFORM_ID, Inject, ElementRef, ViewContainerRef, createComponent, HostBinding, Output, Self, Optional, booleanAttribute, SecurityContext, DestroyRef, Component, ContentChild, ContentChildren, RendererStyleFlags2, Pipe, ViewChild, LOCALE_ID, forwardRef, Host,
|
|
2
|
+
import { Injectable, HostListener, Input, Directive, EventEmitter, InjectionToken, isDevMode, inject, PLATFORM_ID, Inject, ElementRef, ViewContainerRef, createComponent, HostBinding, Output, Self, Optional, booleanAttribute, SecurityContext, DestroyRef, Component, ContentChild, ContentChildren, RendererStyleFlags2, Pipe, ViewChild, contentChildren, QueryList, signal, effect, LOCALE_ID, forwardRef, Host, ViewChildren, TemplateRef, ChangeDetectionStrategy, SimpleChange, ChangeDetectorRef, NgZone, SkipSelf, CUSTOM_ELEMENTS_SCHEMA, reflectComponentType, NgModule } from '@angular/core';
|
|
3
3
|
import * as i4 from '@angular/forms';
|
|
4
4
|
import { NgModel, NgControl, FormControlName, NG_VALUE_ACCESSOR, Validators, NG_VALIDATORS, FormGroup, FormsModule, RequiredValidator, MinValidator, MaxValidator, EmailValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
-
import { Observable, NEVER, Subject, fromEvent, BehaviorSubject, interval, animationFrameScheduler, noop, merge, Subscription, timer, sampleTime, filter as filter$1, pipe } from 'rxjs';
|
|
6
|
-
import { takeUntil, filter, throttle, throttleTime, first as first$2,
|
|
5
|
+
import { Observable, NEVER, Subject, fromEvent, BehaviorSubject, interval, animationFrameScheduler, noop, takeUntil as takeUntil$1, merge, Subscription, timer, sampleTime, filter as filter$1, pipe } from 'rxjs';
|
|
6
|
+
import { takeUntil, filter, throttle, throttleTime, first as first$2, take, debounce, tap, switchMap, skipLast, debounceTime, map, shareReplay, takeWhile, timeout, pluck } from 'rxjs/operators';
|
|
7
7
|
import { isPlatformBrowser, formatDate as formatDate$1, CurrencyPipe, FormatWidth, getLocaleDateFormat, formatPercent, formatNumber, getLocaleCurrencyCode, DatePipe, getLocaleDateTimeFormat, DOCUMENT, NgTemplateOutlet, NgClass, TitleCasePipe, getLocaleFirstDayOfWeek, NgStyle, getLocaleCurrencySymbol, formatCurrency as formatCurrency$1, getLocaleNumberFormat, NumberFormatStyle, DecimalPipe, PercentPipe, getCurrencySymbol, AsyncPipe } from '@angular/common';
|
|
8
8
|
import { mergeWith, isEqual as isEqual$1 } from 'lodash-es';
|
|
9
9
|
import { strToU8, zip } from 'fflate';
|
|
@@ -238,17 +238,9 @@ const getResizeObserver = () => globalThis.window?.ResizeObserver;
|
|
|
238
238
|
/**
|
|
239
239
|
* @hidden
|
|
240
240
|
*/
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
return arr;
|
|
245
|
-
}
|
|
246
|
-
let i = array.length;
|
|
247
|
-
while (i--) {
|
|
248
|
-
arr[i] = deep ? cloneValue(array[i]) : array[i];
|
|
249
|
-
}
|
|
250
|
-
return arr;
|
|
251
|
-
};
|
|
241
|
+
function cloneArray(array, deep = false) {
|
|
242
|
+
return deep ? (array ?? []).map(cloneValue) : (array ?? []).slice();
|
|
243
|
+
}
|
|
252
244
|
/**
|
|
253
245
|
* Doesn't clone leaf items
|
|
254
246
|
*
|
|
@@ -306,7 +298,7 @@ const cloneValue = (value) => {
|
|
|
306
298
|
return new Date(value.getTime());
|
|
307
299
|
}
|
|
308
300
|
if (Array.isArray(value)) {
|
|
309
|
-
return
|
|
301
|
+
return value.slice();
|
|
310
302
|
}
|
|
311
303
|
if (value instanceof Map || value instanceof Set) {
|
|
312
304
|
return value;
|
|
@@ -613,10 +605,8 @@ const resizeObservable = (target) => {
|
|
|
613
605
|
return unsubscribe;
|
|
614
606
|
});
|
|
615
607
|
}
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
return NEVER;
|
|
619
|
-
}
|
|
608
|
+
// if on a server env return a empty observable that does not complete immediately
|
|
609
|
+
return NEVER;
|
|
620
610
|
};
|
|
621
611
|
/**
|
|
622
612
|
* @hidden
|
|
@@ -626,7 +616,7 @@ const resizeObservable = (target) => {
|
|
|
626
616
|
*/
|
|
627
617
|
const compareMaps = (map1, map2) => {
|
|
628
618
|
if (!map2) {
|
|
629
|
-
return !map1
|
|
619
|
+
return !map1;
|
|
630
620
|
}
|
|
631
621
|
if (map1.size !== map2.size) {
|
|
632
622
|
return false;
|
|
@@ -646,24 +636,34 @@ const compareMaps = (map1, map2) => {
|
|
|
646
636
|
}
|
|
647
637
|
return match;
|
|
648
638
|
};
|
|
639
|
+
function _isObject(entity) {
|
|
640
|
+
return entity != null && typeof entity === 'object';
|
|
641
|
+
}
|
|
642
|
+
function columnFieldPath(path) {
|
|
643
|
+
return path?.split('.') ?? [];
|
|
644
|
+
}
|
|
649
645
|
/**
|
|
650
|
-
*
|
|
651
646
|
* Given a property access path in the format `x.y.z` resolves and returns
|
|
652
647
|
* the value of the `z` property in the passed object.
|
|
653
648
|
*
|
|
654
649
|
* @hidden
|
|
655
650
|
* @internal
|
|
656
651
|
*/
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
652
|
+
function resolveNestedPath(obj, pathParts, defaultValue) {
|
|
653
|
+
if (!_isObject(obj) || pathParts.length < 1) {
|
|
654
|
+
return defaultValue;
|
|
655
|
+
}
|
|
656
|
+
let current = obj;
|
|
657
|
+
for (const key of pathParts) {
|
|
658
|
+
if (_isObject(current) && key in current) {
|
|
659
|
+
current = current[key];
|
|
663
660
|
}
|
|
664
|
-
|
|
661
|
+
else {
|
|
662
|
+
return defaultValue;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
665
|
return current;
|
|
666
|
-
}
|
|
666
|
+
}
|
|
667
667
|
/**
|
|
668
668
|
*
|
|
669
669
|
* Given a property access path in the format `x.y.z` and a value
|
|
@@ -779,7 +779,6 @@ function getComponentCssSizeVar(size) {
|
|
|
779
779
|
return 'var(--ig-size, var(--ig-size-small))';
|
|
780
780
|
case "2":
|
|
781
781
|
return 'var(--ig-size, var(--ig-size-medium))';
|
|
782
|
-
case "3":
|
|
783
782
|
default:
|
|
784
783
|
return 'var(--ig-size, var(--ig-size-large))';
|
|
785
784
|
}
|
|
@@ -1050,7 +1049,7 @@ class IgxSorting {
|
|
|
1050
1049
|
* @internal
|
|
1051
1050
|
*/
|
|
1052
1051
|
getFieldValue(obj, key, isDate = false, isTime = false) {
|
|
1053
|
-
let resolvedValue = resolveNestedPath(obj, key);
|
|
1052
|
+
let resolvedValue = resolveNestedPath(obj, columnFieldPath(key));
|
|
1054
1053
|
const date = parseDate(resolvedValue);
|
|
1055
1054
|
if (date && isDate && isTime) {
|
|
1056
1055
|
resolvedValue = date;
|
|
@@ -3349,9 +3348,6 @@ class BaseFilteringStrategy {
|
|
|
3349
3348
|
if (!records) { // child grid is not yet created
|
|
3350
3349
|
return true;
|
|
3351
3350
|
}
|
|
3352
|
-
else if (records.length === 0) { // child grid is empty
|
|
3353
|
-
return false;
|
|
3354
|
-
}
|
|
3355
3351
|
for (let index = 0; index < records.length; index++) {
|
|
3356
3352
|
const record = records[index];
|
|
3357
3353
|
if ((shouldMatchRecords && this.matchRecord(record, expr.searchTree, grid, expr.searchTree.entity)) ||
|
|
@@ -3373,7 +3369,7 @@ class BaseFilteringStrategy {
|
|
|
3373
3369
|
const expressionsTree = expressions;
|
|
3374
3370
|
const operator = expressionsTree.operator;
|
|
3375
3371
|
let matchOperand;
|
|
3376
|
-
if (expressionsTree.filteringOperands
|
|
3372
|
+
if (expressionsTree.filteringOperands?.length) {
|
|
3377
3373
|
for (const operand of expressionsTree.filteringOperands) {
|
|
3378
3374
|
matchOperand = this.matchRecord(rec, operand, grid, entity);
|
|
3379
3375
|
// Return false if at least one operand does not match and the filtering logic is And
|
|
@@ -3423,15 +3419,14 @@ class BaseFilteringStrategy {
|
|
|
3423
3419
|
return null;
|
|
3424
3420
|
}
|
|
3425
3421
|
getFilterItems(column, tree) {
|
|
3422
|
+
const applyFormatter = column.formatter && this.shouldFormatFilterValues(column);
|
|
3426
3423
|
let data = column.grid.gridAPI.filterDataByExpressions(tree);
|
|
3427
3424
|
data = column.grid.gridAPI.sortDataByExpressions(data, [{ fieldName: column.field, dir: SortingDirection.Asc, ignoreCase: column.sortingIgnoreCase }]);
|
|
3428
|
-
const
|
|
3425
|
+
const pathParts = columnFieldPath(column.field);
|
|
3429
3426
|
let filterItems = data.map(record => {
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
|
|
3433
|
-
column.formatter(value, record) :
|
|
3434
|
-
value;
|
|
3427
|
+
const value = applyFormatter ?
|
|
3428
|
+
column.formatter(resolveNestedPath(record, pathParts), record) :
|
|
3429
|
+
resolveNestedPath(record, pathParts);
|
|
3435
3430
|
return {
|
|
3436
3431
|
value,
|
|
3437
3432
|
label: this.getFilterItemLabel(column, value, !applyFormatter, record)
|
|
@@ -3508,31 +3503,18 @@ class NoopFilteringStrategy extends BaseFilteringStrategy {
|
|
|
3508
3503
|
}
|
|
3509
3504
|
class FilteringStrategy extends BaseFilteringStrategy {
|
|
3510
3505
|
static { this._instance = null; }
|
|
3511
|
-
constructor() {
|
|
3512
|
-
super();
|
|
3513
|
-
}
|
|
3514
3506
|
static instance() {
|
|
3515
3507
|
return this._instance || (this._instance = new this());
|
|
3516
3508
|
}
|
|
3517
3509
|
filter(data, expressionsTree, advancedExpressionsTree, grid) {
|
|
3518
|
-
|
|
3519
|
-
let rec;
|
|
3520
|
-
const len = data.length;
|
|
3521
|
-
const res = [];
|
|
3522
|
-
if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) {
|
|
3510
|
+
if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree))) {
|
|
3523
3511
|
return data;
|
|
3524
3512
|
}
|
|
3525
|
-
|
|
3526
|
-
rec = data[i];
|
|
3527
|
-
if (this.matchRecord(rec, expressionsTree, grid) && this.matchRecord(rec, advancedExpressionsTree, grid)) {
|
|
3528
|
-
res.push(rec);
|
|
3529
|
-
}
|
|
3530
|
-
}
|
|
3531
|
-
return res;
|
|
3513
|
+
return data.filter(record => this.matchRecord(record, expressionsTree, grid) && this.matchRecord(record, advancedExpressionsTree, grid));
|
|
3532
3514
|
}
|
|
3533
3515
|
getFieldValue(rec, fieldName, isDate = false, isTime = false, grid) {
|
|
3534
3516
|
const column = grid?.getColumnByName(fieldName);
|
|
3535
|
-
let value = resolveNestedPath(rec, fieldName);
|
|
3517
|
+
let value = resolveNestedPath(rec, columnFieldPath(fieldName));
|
|
3536
3518
|
value = column?.formatter && this.shouldFormatFilterValues(column) ?
|
|
3537
3519
|
column.formatter(value, rec) :
|
|
3538
3520
|
value && (isDate || isTime) ? parseDate(value) : value;
|
|
@@ -3568,14 +3550,14 @@ class TreeGridFilteringStrategy extends BaseFilteringStrategy {
|
|
|
3568
3550
|
const hierarchicalRecord = rec;
|
|
3569
3551
|
let value = this.isHierarchicalFilterField(fieldName) ?
|
|
3570
3552
|
this.getHierarchicalFieldValue(hierarchicalRecord, fieldName) :
|
|
3571
|
-
resolveNestedPath(hierarchicalRecord.data, fieldName);
|
|
3553
|
+
resolveNestedPath(hierarchicalRecord.data, columnFieldPath(fieldName));
|
|
3572
3554
|
value = column?.formatter && this.shouldFormatFilterValues(column) ?
|
|
3573
3555
|
column.formatter(value, rec.data) :
|
|
3574
3556
|
value && (isDate || isTime) ? parseDate(value) : value;
|
|
3575
3557
|
return value;
|
|
3576
3558
|
}
|
|
3577
3559
|
getHierarchicalFieldValue(record, field) {
|
|
3578
|
-
const value = resolveNestedPath(record.data, field);
|
|
3560
|
+
const value = resolveNestedPath(record.data, columnFieldPath(field));
|
|
3579
3561
|
return record.parent ?
|
|
3580
3562
|
`${this.getHierarchicalFieldValue(record.parent, field)}${value ? `.[${value}]` : ''}` :
|
|
3581
3563
|
`[${value}]`;
|
|
@@ -3618,8 +3600,9 @@ class TreeGridFilteringStrategy extends BaseFilteringStrategy {
|
|
|
3618
3600
|
return Promise.resolve(items);
|
|
3619
3601
|
}
|
|
3620
3602
|
getHierarchicalFilterItems(records, column, parent) {
|
|
3603
|
+
const pathParts = columnFieldPath(column.field);
|
|
3621
3604
|
return records?.map(record => {
|
|
3622
|
-
let value = resolveNestedPath(record.data,
|
|
3605
|
+
let value = resolveNestedPath(record.data, pathParts);
|
|
3623
3606
|
const applyFormatter = column.formatter && this.shouldFormatFilterValues(column);
|
|
3624
3607
|
value = applyFormatter ?
|
|
3625
3608
|
column.formatter(value, record.data) :
|
|
@@ -4061,7 +4044,7 @@ class IgxBaseExporter {
|
|
|
4061
4044
|
}
|
|
4062
4045
|
record.data = columns.reduce((a, e) => {
|
|
4063
4046
|
if (!e.skip) {
|
|
4064
|
-
let rawValue = resolveNestedPath(record.data, e.field);
|
|
4047
|
+
let rawValue = resolveNestedPath(record.data, columnFieldPath(e.field));
|
|
4065
4048
|
const shouldApplyFormatter = e.formatter && !e.skipFormatter && record.type !== ExportRecordType.GroupedRecord;
|
|
4066
4049
|
const isOfDateType = e.dataType === 'date' || e.dataType === 'dateTime' || e.dataType === 'time';
|
|
4067
4050
|
if (isOfDateType &&
|
|
@@ -19195,6 +19178,19 @@ let nextId = 0;
|
|
|
19195
19178
|
* ```
|
|
19196
19179
|
*/
|
|
19197
19180
|
class IgxRadioGroupDirective {
|
|
19181
|
+
/**
|
|
19182
|
+
* Returns reference to the child radio buttons.
|
|
19183
|
+
*
|
|
19184
|
+
* @example
|
|
19185
|
+
* ```typescript
|
|
19186
|
+
* let radioButtons = this.radioGroup.radioButtons;
|
|
19187
|
+
* ```
|
|
19188
|
+
*/
|
|
19189
|
+
get radioButtons() {
|
|
19190
|
+
const buttons = Array.from(this._radioButtons());
|
|
19191
|
+
this._radioButtonsList.reset(buttons);
|
|
19192
|
+
return this._radioButtonsList;
|
|
19193
|
+
}
|
|
19198
19194
|
/**
|
|
19199
19195
|
* Sets/gets the `value` attribute.
|
|
19200
19196
|
*
|
|
@@ -19283,6 +19279,26 @@ class IgxRadioGroupDirective {
|
|
|
19283
19279
|
this._invalid = value;
|
|
19284
19280
|
this._setRadioButtonsInvalid();
|
|
19285
19281
|
}
|
|
19282
|
+
/**
|
|
19283
|
+
* A css class applied to the component if any of the
|
|
19284
|
+
* child radio buttons labelPosition is set to `before`.
|
|
19285
|
+
*
|
|
19286
|
+
* @hidden
|
|
19287
|
+
* @internal
|
|
19288
|
+
*/
|
|
19289
|
+
get labelBefore() {
|
|
19290
|
+
return this._radioButtons().some((radio) => radio.labelPosition === 'before');
|
|
19291
|
+
}
|
|
19292
|
+
/**
|
|
19293
|
+
* A css class applied to the component if all
|
|
19294
|
+
* child radio buttons are disabled.
|
|
19295
|
+
*
|
|
19296
|
+
* @hidden
|
|
19297
|
+
* @internal
|
|
19298
|
+
*/
|
|
19299
|
+
get disabled() {
|
|
19300
|
+
return this._radioButtons().every((radio) => radio.disabled);
|
|
19301
|
+
}
|
|
19286
19302
|
handleClick(event) {
|
|
19287
19303
|
event.stopPropagation();
|
|
19288
19304
|
if (this.selected) {
|
|
@@ -19291,7 +19307,7 @@ class IgxRadioGroupDirective {
|
|
|
19291
19307
|
}
|
|
19292
19308
|
handleKeyDown(event) {
|
|
19293
19309
|
const { key } = event;
|
|
19294
|
-
const buttons = this.
|
|
19310
|
+
const buttons = this._radioButtons().filter(radio => !radio.disabled);
|
|
19295
19311
|
const checked = buttons.find((radio) => radio.checked);
|
|
19296
19312
|
if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) {
|
|
19297
19313
|
let index = checked ? buttons.indexOf(checked) : -1;
|
|
@@ -19357,60 +19373,12 @@ class IgxRadioGroupDirective {
|
|
|
19357
19373
|
set alignment(value) {
|
|
19358
19374
|
this.vertical = value === RadioGroupAlignment.vertical;
|
|
19359
19375
|
}
|
|
19360
|
-
/**
|
|
19361
|
-
* @hidden
|
|
19362
|
-
* @internal
|
|
19363
|
-
*/
|
|
19364
|
-
ngAfterContentInit() {
|
|
19365
|
-
// The initial value can possibly be set by NgModel and it is possible that
|
|
19366
|
-
// the OnInit of the NgModel occurs after the OnInit of this class.
|
|
19367
|
-
this._isInitialized = true;
|
|
19368
|
-
this.radioButtons.changes.pipe(startWith(0), takeUntil(this.destroy$)).subscribe(() => {
|
|
19369
|
-
this.queryChange$.next();
|
|
19370
|
-
setTimeout(() => this._initRadioButtons());
|
|
19371
|
-
});
|
|
19372
|
-
if (this.ngControl) {
|
|
19373
|
-
this.radioButtons.forEach((button) => {
|
|
19374
|
-
if (this.ngControl.disabled) {
|
|
19375
|
-
button.disabled = this.ngControl.disabled;
|
|
19376
|
-
}
|
|
19377
|
-
});
|
|
19378
|
-
}
|
|
19379
|
-
}
|
|
19380
|
-
/**
|
|
19381
|
-
* @hidden
|
|
19382
|
-
* @internal
|
|
19383
|
-
*/
|
|
19384
|
-
ngAfterViewInit() {
|
|
19385
|
-
if (this.ngControl) {
|
|
19386
|
-
this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {
|
|
19387
|
-
this.invalid = false;
|
|
19388
|
-
});
|
|
19389
|
-
if (this.ngControl.control.validator || this.ngControl.control.asyncValidator) {
|
|
19390
|
-
this._required = this.ngControl?.control?.hasValidator(Validators.required);
|
|
19391
|
-
}
|
|
19392
|
-
}
|
|
19393
|
-
if (this.radioButtons) {
|
|
19394
|
-
this.radioButtons.forEach((button) => {
|
|
19395
|
-
button.blurRadio
|
|
19396
|
-
.pipe(takeUntil(this.destroy$))
|
|
19397
|
-
.subscribe(() => {
|
|
19398
|
-
this.updateValidityOnBlur();
|
|
19399
|
-
});
|
|
19400
|
-
fromEvent(button.nativeElement, 'keyup')
|
|
19401
|
-
.pipe(takeUntil(this.destroy$))
|
|
19402
|
-
.subscribe((event) => {
|
|
19403
|
-
this.updateOnKeyUp(event);
|
|
19404
|
-
});
|
|
19405
|
-
});
|
|
19406
|
-
}
|
|
19407
|
-
}
|
|
19408
19376
|
/**
|
|
19409
19377
|
* @hidden
|
|
19410
19378
|
* @internal
|
|
19411
19379
|
*/
|
|
19412
19380
|
updateValidityOnBlur() {
|
|
19413
|
-
this.
|
|
19381
|
+
this._radioButtons().forEach((button) => {
|
|
19414
19382
|
button.focused = false;
|
|
19415
19383
|
if (button.invalid) {
|
|
19416
19384
|
this.invalid = true;
|
|
@@ -19422,9 +19390,9 @@ class IgxRadioGroupDirective {
|
|
|
19422
19390
|
* @internal
|
|
19423
19391
|
*/
|
|
19424
19392
|
updateOnKeyUp(event) {
|
|
19425
|
-
const checked = this.
|
|
19393
|
+
const checked = this._radioButtons().find(x => x.checked);
|
|
19426
19394
|
if (event.key === "Tab") {
|
|
19427
|
-
this.
|
|
19395
|
+
this._radioButtons().forEach((radio) => {
|
|
19428
19396
|
if (radio === checked) {
|
|
19429
19397
|
checked.focused = true;
|
|
19430
19398
|
}
|
|
@@ -19437,10 +19405,10 @@ class IgxRadioGroupDirective {
|
|
|
19437
19405
|
_updateTabIndex() {
|
|
19438
19406
|
// Needed so that the keyboard navigation of a radio group
|
|
19439
19407
|
// placed inside a dialog works properly
|
|
19440
|
-
if (this.
|
|
19441
|
-
const checked = this.
|
|
19408
|
+
if (this._radioButtons) {
|
|
19409
|
+
const checked = this._radioButtons().find(x => x.checked);
|
|
19442
19410
|
if (checked) {
|
|
19443
|
-
this.
|
|
19411
|
+
this._radioButtons().forEach((button) => {
|
|
19444
19412
|
checked.nativeElement.tabIndex = 0;
|
|
19445
19413
|
if (button !== checked) {
|
|
19446
19414
|
button.nativeElement.tabIndex = -1;
|
|
@@ -19481,8 +19449,8 @@ class IgxRadioGroupDirective {
|
|
|
19481
19449
|
* @internal
|
|
19482
19450
|
*/
|
|
19483
19451
|
registerOnTouched(fn) {
|
|
19484
|
-
if (this.
|
|
19485
|
-
this.
|
|
19452
|
+
if (this._radioButtons) {
|
|
19453
|
+
this._radioButtons().forEach((button) => {
|
|
19486
19454
|
button.registerOnTouched(fn);
|
|
19487
19455
|
});
|
|
19488
19456
|
}
|
|
@@ -19499,6 +19467,8 @@ class IgxRadioGroupDirective {
|
|
|
19499
19467
|
this.ngControl = ngControl;
|
|
19500
19468
|
this._directionality = _directionality;
|
|
19501
19469
|
this.cdr = cdr;
|
|
19470
|
+
this._radioButtons = contentChildren(IgxRadioComponent, { descendants: true });
|
|
19471
|
+
this._radioButtonsList = new QueryList();
|
|
19502
19472
|
/**
|
|
19503
19473
|
* An event that is emitted after the radio group `value` is changed.
|
|
19504
19474
|
*
|
|
@@ -19553,7 +19523,7 @@ class IgxRadioGroupDirective {
|
|
|
19553
19523
|
* @hidden
|
|
19554
19524
|
* @internal
|
|
19555
19525
|
*/
|
|
19556
|
-
this._isInitialized = false;
|
|
19526
|
+
this._isInitialized = signal(false);
|
|
19557
19527
|
/**
|
|
19558
19528
|
* @hidden
|
|
19559
19529
|
* @internal
|
|
@@ -19577,31 +19547,72 @@ class IgxRadioGroupDirective {
|
|
|
19577
19547
|
if (this.ngControl !== null) {
|
|
19578
19548
|
this.ngControl.valueAccessor = this;
|
|
19579
19549
|
}
|
|
19550
|
+
effect(() => {
|
|
19551
|
+
this.initialize();
|
|
19552
|
+
Promise.resolve().then(() => {
|
|
19553
|
+
this.setRadioButtons();
|
|
19554
|
+
});
|
|
19555
|
+
});
|
|
19580
19556
|
}
|
|
19581
19557
|
/**
|
|
19582
19558
|
* @hidden
|
|
19583
19559
|
* @internal
|
|
19584
19560
|
*/
|
|
19585
|
-
|
|
19586
|
-
|
|
19587
|
-
|
|
19588
|
-
|
|
19589
|
-
|
|
19590
|
-
|
|
19591
|
-
|
|
19592
|
-
|
|
19593
|
-
|
|
19561
|
+
initialize() {
|
|
19562
|
+
// The initial value can possibly be set by NgModel and it is possible that
|
|
19563
|
+
// the OnInit of the NgModel occurs after the OnInit of this class.
|
|
19564
|
+
this._isInitialized.set(true);
|
|
19565
|
+
if (this.ngControl) {
|
|
19566
|
+
this.ngControl.statusChanges
|
|
19567
|
+
.pipe(takeUntil$1(this.destroy$))
|
|
19568
|
+
.subscribe(() => {
|
|
19569
|
+
this.invalid = false;
|
|
19570
|
+
});
|
|
19571
|
+
if (this.ngControl.control.validator || this.ngControl.control.asyncValidator) {
|
|
19572
|
+
this._required = this.ngControl?.control?.hasValidator(Validators.required);
|
|
19573
|
+
}
|
|
19574
|
+
this._radioButtons().forEach((button) => {
|
|
19575
|
+
if (this.ngControl.disabled) {
|
|
19576
|
+
button.disabled = this.ngControl.disabled;
|
|
19594
19577
|
}
|
|
19595
|
-
button.change.pipe(takeUntil(button.destroy$), takeUntil(this.destroy$), takeUntil(this.queryChange$)).subscribe((ev) => this._selectedRadioButtonChanged(ev));
|
|
19596
19578
|
});
|
|
19597
19579
|
}
|
|
19598
19580
|
}
|
|
19581
|
+
/**
|
|
19582
|
+
* @hidden
|
|
19583
|
+
* @internal
|
|
19584
|
+
*/
|
|
19585
|
+
setRadioButtons() {
|
|
19586
|
+
this._radioButtons().forEach((button) => {
|
|
19587
|
+
button.name = this._name;
|
|
19588
|
+
button.required = this._required;
|
|
19589
|
+
if (button.value === this._value) {
|
|
19590
|
+
button.checked = true;
|
|
19591
|
+
this._selected = button;
|
|
19592
|
+
this.cdr.markForCheck();
|
|
19593
|
+
}
|
|
19594
|
+
this._setRadioButtonEvents(button);
|
|
19595
|
+
});
|
|
19596
|
+
}
|
|
19597
|
+
/**
|
|
19598
|
+
* @hidden
|
|
19599
|
+
* @internal
|
|
19600
|
+
*/
|
|
19601
|
+
_setRadioButtonEvents(button) {
|
|
19602
|
+
button.change.pipe(takeUntil$1(button.destroy$), takeUntil$1(this.destroy$), takeUntil$1(this.queryChange$)).subscribe((ev) => this._selectedRadioButtonChanged(ev));
|
|
19603
|
+
button.blurRadio
|
|
19604
|
+
.pipe(takeUntil$1(this.destroy$))
|
|
19605
|
+
.subscribe(() => this.updateValidityOnBlur());
|
|
19606
|
+
fromEvent(button.nativeElement, 'keyup')
|
|
19607
|
+
.pipe(takeUntil$1(this.destroy$))
|
|
19608
|
+
.subscribe((event) => this.updateOnKeyUp(event));
|
|
19609
|
+
}
|
|
19599
19610
|
/**
|
|
19600
19611
|
* @hidden
|
|
19601
19612
|
* @internal
|
|
19602
19613
|
*/
|
|
19603
19614
|
_selectedRadioButtonChanged(args) {
|
|
19604
|
-
this.
|
|
19615
|
+
this._radioButtons().forEach((button) => {
|
|
19605
19616
|
button.checked = button.id === args.owner.id;
|
|
19606
19617
|
if (button.checked && button.ngControl) {
|
|
19607
19618
|
this.invalid = button.ngControl.invalid;
|
|
@@ -19622,8 +19633,8 @@ class IgxRadioGroupDirective {
|
|
|
19622
19633
|
* @internal
|
|
19623
19634
|
*/
|
|
19624
19635
|
_setRadioButtonNames() {
|
|
19625
|
-
if (this.
|
|
19626
|
-
this.
|
|
19636
|
+
if (this._radioButtons) {
|
|
19637
|
+
this._radioButtons().forEach((button) => {
|
|
19627
19638
|
button.name = this._name;
|
|
19628
19639
|
});
|
|
19629
19640
|
}
|
|
@@ -19633,8 +19644,8 @@ class IgxRadioGroupDirective {
|
|
|
19633
19644
|
* @internal
|
|
19634
19645
|
*/
|
|
19635
19646
|
_selectRadioButton() {
|
|
19636
|
-
if (this.
|
|
19637
|
-
this.
|
|
19647
|
+
if (this._radioButtons) {
|
|
19648
|
+
this._radioButtons().forEach((button) => {
|
|
19638
19649
|
if (this._value === null) {
|
|
19639
19650
|
// no value - uncheck all radio buttons
|
|
19640
19651
|
if (button.checked) {
|
|
@@ -19666,8 +19677,8 @@ class IgxRadioGroupDirective {
|
|
|
19666
19677
|
* @internal
|
|
19667
19678
|
*/
|
|
19668
19679
|
_setRadioButtonsRequired() {
|
|
19669
|
-
if (this.
|
|
19670
|
-
this.
|
|
19680
|
+
if (this._radioButtons) {
|
|
19681
|
+
this._radioButtons().forEach((button) => {
|
|
19671
19682
|
button.required = this._required;
|
|
19672
19683
|
});
|
|
19673
19684
|
}
|
|
@@ -19677,14 +19688,14 @@ class IgxRadioGroupDirective {
|
|
|
19677
19688
|
* @internal
|
|
19678
19689
|
*/
|
|
19679
19690
|
_setRadioButtonsInvalid() {
|
|
19680
|
-
if (this.
|
|
19681
|
-
this.
|
|
19691
|
+
if (this._radioButtons) {
|
|
19692
|
+
this._radioButtons().forEach((button) => {
|
|
19682
19693
|
button.invalid = this._invalid;
|
|
19683
19694
|
});
|
|
19684
19695
|
}
|
|
19685
19696
|
}
|
|
19686
19697
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IgxRadioGroupDirective, deps: [{ token: i4.NgControl, optional: true, self: true }, { token: IgxDirectionality }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19687
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
19698
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.2.5", type: IgxRadioGroupDirective, isStandalone: true, selector: "igx-radio-group, [igxRadioGroup]", inputs: { value: "value", name: "name", required: ["required", "required", booleanAttribute], selected: "selected", invalid: ["invalid", "invalid", booleanAttribute], alignment: "alignment" }, outputs: { change: "change" }, host: { listeners: { "click": "handleClick($event)", "keydown": "handleKeyDown($event)" }, properties: { "class.igx-radio-group": "this.cssClass", "class.igx-radio-group--vertical": "this.vertical", "class.igx-radio-group--before": "this.labelBefore", "class.igx-radio-group--disabled": "this.disabled" } }, queries: [{ propertyName: "_radioButtons", predicate: IgxRadioComponent, descendants: true, isSignal: true }], exportAs: ["igxRadioGroup"], ngImport: i0 }); }
|
|
19688
19699
|
}
|
|
19689
19700
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IgxRadioGroupDirective, decorators: [{
|
|
19690
19701
|
type: Directive,
|
|
@@ -19697,10 +19708,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
19697
19708
|
type: Optional
|
|
19698
19709
|
}, {
|
|
19699
19710
|
type: Self
|
|
19700
|
-
}] }, { type: IgxDirectionality }, { type: i0.ChangeDetectorRef }], propDecorators: {
|
|
19701
|
-
type: ContentChildren,
|
|
19702
|
-
args: [IgxRadioComponent, { descendants: true }]
|
|
19703
|
-
}], value: [{
|
|
19711
|
+
}] }, { type: IgxDirectionality }, { type: i0.ChangeDetectorRef }], propDecorators: { value: [{
|
|
19704
19712
|
type: Input
|
|
19705
19713
|
}], name: [{
|
|
19706
19714
|
type: Input
|
|
@@ -19720,6 +19728,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
19720
19728
|
}], vertical: [{
|
|
19721
19729
|
type: HostBinding,
|
|
19722
19730
|
args: ['class.igx-radio-group--vertical']
|
|
19731
|
+
}], labelBefore: [{
|
|
19732
|
+
type: HostBinding,
|
|
19733
|
+
args: ['class.igx-radio-group--before']
|
|
19734
|
+
}], disabled: [{
|
|
19735
|
+
type: HostBinding,
|
|
19736
|
+
args: ['class.igx-radio-group--disabled']
|
|
19723
19737
|
}], handleClick: [{
|
|
19724
19738
|
type: HostListener,
|
|
19725
19739
|
args: ['click', ['$event']]
|
|
@@ -20908,6 +20922,21 @@ class IgxTooltipDirective extends IgxToggleDirective {
|
|
|
20908
20922
|
* Returns whether open time out has started
|
|
20909
20923
|
*/
|
|
20910
20924
|
this.toBeShown = false;
|
|
20925
|
+
this._destroy$ = new Subject();
|
|
20926
|
+
this.onDocumentTouchStart = this.onDocumentTouchStart.bind(this);
|
|
20927
|
+
this.overlayService.opening.pipe(takeUntil$1(this._destroy$)).subscribe(() => {
|
|
20928
|
+
document.addEventListener('touchstart', this.onDocumentTouchStart, { passive: true });
|
|
20929
|
+
});
|
|
20930
|
+
this.overlayService.closed.pipe(takeUntil$1(this._destroy$)).subscribe(() => {
|
|
20931
|
+
document.removeEventListener('touchstart', this.onDocumentTouchStart);
|
|
20932
|
+
});
|
|
20933
|
+
}
|
|
20934
|
+
/** @hidden */
|
|
20935
|
+
ngOnDestroy() {
|
|
20936
|
+
super.ngOnDestroy();
|
|
20937
|
+
document.removeEventListener('touchstart', this.onDocumentTouchStart);
|
|
20938
|
+
this._destroy$.next(true);
|
|
20939
|
+
this._destroy$.complete();
|
|
20911
20940
|
}
|
|
20912
20941
|
/**
|
|
20913
20942
|
* If there is open animation in progress this method will finish is.
|
|
@@ -20951,6 +20980,9 @@ class IgxTooltipDirective extends IgxToggleDirective {
|
|
|
20951
20980
|
overlaySettings.positionStrategy.settings.closeAnimation = animation;
|
|
20952
20981
|
}
|
|
20953
20982
|
}
|
|
20983
|
+
onDocumentTouchStart(event) {
|
|
20984
|
+
this.tooltipTarget?.onDocumentTouchStart(event);
|
|
20985
|
+
}
|
|
20954
20986
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IgxTooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxOverlayService }, { token: IgxNavigationService, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
20955
20987
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.5", type: IgxTooltipDirective, isStandalone: true, selector: "[igxTooltip]", inputs: { context: "context", id: "id" }, host: { properties: { "class.igx-tooltip--hidden": "this.hiddenClass", "class.igx-tooltip": "this.defaultClass", "attr.id": "this.id", "attr.role": "this.role" } }, exportAs: ["tooltip"], usesInheritance: true, ngImport: i0 }); }
|
|
20956
20988
|
}
|
|
@@ -21164,6 +21196,7 @@ class IgxTooltipTargetDirective extends IgxToggleActionDirective {
|
|
|
21164
21196
|
if (shouldReturn) {
|
|
21165
21197
|
return;
|
|
21166
21198
|
}
|
|
21199
|
+
this.target.tooltipTarget = this;
|
|
21167
21200
|
const showingArgs = { target: this, tooltip: this.target, cancel: false };
|
|
21168
21201
|
this.tooltipShow.emit(showingArgs);
|
|
21169
21202
|
if (showingArgs.cancel) {
|
|
@@ -21229,18 +21262,23 @@ class IgxTooltipTargetDirective extends IgxToggleActionDirective {
|
|
|
21229
21262
|
this._overlayDefaults.closeOnOutsideClick = false;
|
|
21230
21263
|
this._overlayDefaults.closeOnEscape = true;
|
|
21231
21264
|
this.target.closing.pipe(takeUntil(this.destroy$)).subscribe((event) => {
|
|
21265
|
+
if (this.target.tooltipTarget !== this) {
|
|
21266
|
+
return;
|
|
21267
|
+
}
|
|
21232
21268
|
const hidingArgs = { target: this, tooltip: this.target, cancel: false };
|
|
21233
21269
|
this.tooltipHide.emit(hidingArgs);
|
|
21234
21270
|
if (hidingArgs.cancel) {
|
|
21235
21271
|
event.cancel = true;
|
|
21236
21272
|
}
|
|
21237
21273
|
});
|
|
21274
|
+
this.nativeElement.addEventListener('touchstart', this.onTouchStart = this.onTouchStart.bind(this), { passive: true });
|
|
21238
21275
|
}
|
|
21239
21276
|
/**
|
|
21240
21277
|
* @hidden
|
|
21241
21278
|
*/
|
|
21242
21279
|
ngOnDestroy() {
|
|
21243
21280
|
this.hideTooltip();
|
|
21281
|
+
this.nativeElement.removeEventListener('touchstart', this.onTouchStart);
|
|
21244
21282
|
this.destroy$.next();
|
|
21245
21283
|
this.destroy$.complete();
|
|
21246
21284
|
}
|
|
@@ -21258,6 +21296,7 @@ class IgxTooltipTargetDirective extends IgxToggleActionDirective {
|
|
|
21258
21296
|
this.target.forceClose(this.mergedOverlaySettings);
|
|
21259
21297
|
this.target.toBeHidden = false;
|
|
21260
21298
|
}
|
|
21299
|
+
this.target.tooltipTarget = this;
|
|
21261
21300
|
const showingArgs = { target: this, tooltip: this.target, cancel: false };
|
|
21262
21301
|
this.tooltipShow.emit(showingArgs);
|
|
21263
21302
|
if (showingArgs.cancel) {
|
|
@@ -21325,7 +21364,7 @@ class IgxTooltipTargetDirective extends IgxToggleActionDirective {
|
|
|
21325
21364
|
return false;
|
|
21326
21365
|
}
|
|
21327
21366
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IgxTooltipTargetDirective, deps: [{ token: i0.ElementRef }, { token: IgxNavigationService, optional: true }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
21328
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.5", type: IgxTooltipTargetDirective, isStandalone: true, selector: "[igxTooltipTarget]", inputs: { showDelay: "showDelay", hideDelay: "hideDelay", tooltipDisabled: ["tooltipDisabled", "tooltipDisabled", booleanAttribute], target: ["igxTooltipTarget", "target"], tooltip: "tooltip" }, outputs: { tooltipShow: "tooltipShow", tooltipHide: "tooltipHide" }, host: { listeners: { "click": "onClick()", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()"
|
|
21367
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.5", type: IgxTooltipTargetDirective, isStandalone: true, selector: "[igxTooltipTarget]", inputs: { showDelay: "showDelay", hideDelay: "hideDelay", tooltipDisabled: ["tooltipDisabled", "tooltipDisabled", booleanAttribute], target: ["igxTooltipTarget", "target"], tooltip: "tooltip" }, outputs: { tooltipShow: "tooltipShow", tooltipHide: "tooltipHide" }, host: { listeners: { "click": "onClick()", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, exportAs: ["tooltipTarget"], usesInheritance: true, ngImport: i0 }); }
|
|
21329
21368
|
}
|
|
21330
21369
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IgxTooltipTargetDirective, decorators: [{
|
|
21331
21370
|
type: Directive,
|
|
@@ -21361,12 +21400,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
21361
21400
|
}], onMouseLeave: [{
|
|
21362
21401
|
type: HostListener,
|
|
21363
21402
|
args: ['mouseleave']
|
|
21364
|
-
}], onTouchStart: [{
|
|
21365
|
-
type: HostListener,
|
|
21366
|
-
args: ['touchstart']
|
|
21367
|
-
}], onDocumentTouchStart: [{
|
|
21368
|
-
type: HostListener,
|
|
21369
|
-
args: ['document:touchstart', ['$event']]
|
|
21370
21403
|
}] } });
|
|
21371
21404
|
|
|
21372
21405
|
/* NOTE: Tooltip directives collection for ease-of-use import in standalone components scenario */
|
|
@@ -31651,7 +31684,7 @@ class IgxCalendarBaseDirective {
|
|
|
31651
31684
|
case 'month':
|
|
31652
31685
|
return `${this.resourceStrings.igx_calendar_previous_month}, ${detail}`;
|
|
31653
31686
|
case 'year':
|
|
31654
|
-
return this.resourceStrings.igx_calendar_previous_year
|
|
31687
|
+
return this.resourceStrings.igx_calendar_previous_year;
|
|
31655
31688
|
case 'decade':
|
|
31656
31689
|
return this.resourceStrings.igx_calendar_previous_years.replace('{0}', '15');
|
|
31657
31690
|
}
|
|
@@ -31661,7 +31694,7 @@ class IgxCalendarBaseDirective {
|
|
|
31661
31694
|
case 'month':
|
|
31662
31695
|
return `${this.resourceStrings.igx_calendar_next_month}, ${detail}`;
|
|
31663
31696
|
case 'year':
|
|
31664
|
-
return this.resourceStrings.igx_calendar_next_year
|
|
31697
|
+
return this.resourceStrings.igx_calendar_next_year;
|
|
31665
31698
|
case 'decade':
|
|
31666
31699
|
return this.resourceStrings.igx_calendar_next_years.replace('{0}', '15');
|
|
31667
31700
|
}
|
|
@@ -34091,7 +34124,7 @@ class IgxMonthPickerComponent extends IgxCalendarBaseDirective {
|
|
|
34091
34124
|
multi: false,
|
|
34092
34125
|
provide: KeyboardNavigationService
|
|
34093
34126
|
},
|
|
34094
|
-
], viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true }, { propertyName: "monthsView", first: true, predicate: ["months"], descendants: true, read: IgxMonthsViewComponent }, { propertyName: "dacadeView", first: true, predicate: ["decade"], descendants: true, read: IgxYearsViewComponent }, { propertyName: "daysView", first: true, predicate: ["days"], descendants: true, read: IgxDaysViewComponent }, { propertyName: "yearsBtn", first: true, predicate: ["yearsBtn"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Previous arrow icon -->\n<ng-template #prevArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_prev\"></igx-icon>\n</ng-template>\n\n<!-- Next arrow icon -->\n<ng-template #nextArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_next\"></igx-icon>\n</ng-template>\n\n<!-- Previous picker button -->\n<ng-template #prevPageButton let-obj>\n <div\n #prevPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n [attr.aria-label]=\"prevNavLabel((getPrevYearDate(viewDate) | date: '
|
|
34127
|
+
], viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true }, { propertyName: "monthsView", first: true, predicate: ["months"], descendants: true, read: IgxMonthsViewComponent }, { propertyName: "dacadeView", first: true, predicate: ["decade"], descendants: true, read: IgxYearsViewComponent }, { propertyName: "daysView", first: true, predicate: ["days"], descendants: true, read: IgxDaysViewComponent }, { propertyName: "yearsBtn", first: true, predicate: ["yearsBtn"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Previous arrow icon -->\n<ng-template #prevArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_prev\"></igx-icon>\n</ng-template>\n\n<!-- Next arrow icon -->\n<ng-template #nextArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_next\"></igx-icon>\n</ng-template>\n\n<!-- Previous picker button -->\n<ng-template #prevPageButton let-obj>\n <div\n #prevPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n [attr.aria-label]=\"prevNavLabel((getPrevYearDate(viewDate) | date: 'yyyy'))\"\n data-action=\"prev\"\n igxCalendarScrollPage\n (mousedown)=\"previousPage()\"\n (keydown)=\"changePageKB($event, false)\"\n >\n <ng-container *ngTemplateOutlet=\"prevArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Next picker button -->\n<ng-template #nextPageButton let-obj>\n <div\n #nextPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n role=\"button\"\n [attr.aria-label]=\"nextNavLabel((getNextYearDate(viewDate) | date: 'yyyy'))\"\n data-action=\"next\"\n igxCalendarScrollPage\n (mousedown)=\"nextPage()\"\n (keydown)=\"changePageKB($event)\"\n >\n <ng-container *ngTemplateOutlet=\"nextArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Year -->\n<ng-template #defaultYear let-obj>\n @if (activeView === 'year') {\n <span class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">{{ formattedYear(obj.date) }}</span>\n }\n <span\n #yearsBtn\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(obj.date | date: 'yyyy') + ', ' + resourceStrings.igx_calendar_select_year\"\n (keydown)=\"onActiveViewDecadeKB(obj.date, $event, obj.index)\"\n (mousedown)=\"onActiveViewDecade($event, obj.date, obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedYear(obj.date) }}\n </span>\n</ng-template>\n\n<!-- Decade -->\n<ng-template #defaultDecade>\n <span>{{ getDecadeRange().start }} - {{ getDecadeRange().end }}</span>\n</ng-template>\n\n<!-- PICKER IN MONTHS -->\n<ng-template #calendarYearPicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\">\n <ng-container\n *ngTemplateOutlet=\"defaultYear; context: getContext(0)\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<!-- PICKER IN YEARS -->\n<ng-template #calendarDecadePicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\" aria-live=\"polite\">\n <ng-container\n *ngTemplateOutlet=\"defaultDecade;\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<div\n #wrapper\n [tabIndex]=\"0\"\n class=\"igx-calendar__wrapper\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.aria-multiselectable]=\"selection !== 'single'\"\n aria-labelledby=\"calendar-desc\"\n role=\"grid\"\n (focus)=\"this.onWrapperFocus($event)\"\n (blur)=\"this.onWrapperBlur($event)\"\n >\n <caption id=\"calendar-desc\" tabindex=\"-1\" class=\"igx-calendar__aria-off-screen\">\n {{ resourceStrings.igx_calendar_singular_single_selection}}\n </caption>\n\n <section class=\"igx-calendar__pickers\">\n @if (isDefaultView) {\n <ng-container *ngTemplateOutlet=\"calendarYearPicker\"></ng-container>\n }\n\n @if (isDecadeView) {\n <ng-container *ngTemplateOutlet=\"calendarDecadePicker\"></ng-container>\n }\n </section>\n\n <section class=\"igx-calendar__body\">\n @if (isDefaultView) {\n <igx-months-view\n #months\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (selected)=\"selectMonth($event)\"\n (pageChanged)=\"updateDate($event)\"\n (mousedown)=\"$event.preventDefault()\">\n >\n </igx-months-view>\n }\n\n @if (isDecadeView) {\n <igx-years-view\n #decade\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (selected)=\"selectYear($event)\"\n (pageChanged)=\"updateDate($event)\"\n (mousedown)=\"$event.preventDefault()\"\n >\n </igx-years-view>\n }\n </section>\n</div>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "name", "active"] }, { kind: "component", type: IgxMonthsViewComponent, selector: "igx-months-view", inputs: ["id", "standalone", "monthFormat", "formatView"] }, { kind: "component", type: IgxYearsViewComponent, selector: "igx-years-view", inputs: ["standalone", "yearFormat"] }] }); }
|
|
34095
34128
|
}
|
|
34096
34129
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IgxMonthPickerComponent, decorators: [{
|
|
34097
34130
|
type: Component,
|
|
@@ -34111,7 +34144,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
34111
34144
|
IgxIconComponent,
|
|
34112
34145
|
IgxMonthsViewComponent,
|
|
34113
34146
|
IgxYearsViewComponent,
|
|
34114
|
-
], template: "<!-- Previous arrow icon -->\n<ng-template #prevArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_prev\"></igx-icon>\n</ng-template>\n\n<!-- Next arrow icon -->\n<ng-template #nextArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_next\"></igx-icon>\n</ng-template>\n\n<!-- Previous picker button -->\n<ng-template #prevPageButton let-obj>\n <div\n #prevPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n [attr.aria-label]=\"prevNavLabel((getPrevYearDate(viewDate) | date: '
|
|
34147
|
+
], template: "<!-- Previous arrow icon -->\n<ng-template #prevArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_prev\"></igx-icon>\n</ng-template>\n\n<!-- Next arrow icon -->\n<ng-template #nextArrow let-obj>\n <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_next\"></igx-icon>\n</ng-template>\n\n<!-- Previous picker button -->\n<ng-template #prevPageButton let-obj>\n <div\n #prevPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n [attr.aria-label]=\"prevNavLabel((getPrevYearDate(viewDate) | date: 'yyyy'))\"\n data-action=\"prev\"\n igxCalendarScrollPage\n (mousedown)=\"previousPage()\"\n (keydown)=\"changePageKB($event, false)\"\n >\n <ng-container *ngTemplateOutlet=\"prevArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Next picker button -->\n<ng-template #nextPageButton let-obj>\n <div\n #nextPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n role=\"button\"\n [attr.aria-label]=\"nextNavLabel((getNextYearDate(viewDate) | date: 'yyyy'))\"\n data-action=\"next\"\n igxCalendarScrollPage\n (mousedown)=\"nextPage()\"\n (keydown)=\"changePageKB($event)\"\n >\n <ng-container *ngTemplateOutlet=\"nextArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Year -->\n<ng-template #defaultYear let-obj>\n @if (activeView === 'year') {\n <span class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">{{ formattedYear(obj.date) }}</span>\n }\n <span\n #yearsBtn\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(obj.date | date: 'yyyy') + ', ' + resourceStrings.igx_calendar_select_year\"\n (keydown)=\"onActiveViewDecadeKB(obj.date, $event, obj.index)\"\n (mousedown)=\"onActiveViewDecade($event, obj.date, obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedYear(obj.date) }}\n </span>\n</ng-template>\n\n<!-- Decade -->\n<ng-template #defaultDecade>\n <span>{{ getDecadeRange().start }} - {{ getDecadeRange().end }}</span>\n</ng-template>\n\n<!-- PICKER IN MONTHS -->\n<ng-template #calendarYearPicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\">\n <ng-container\n *ngTemplateOutlet=\"defaultYear; context: getContext(0)\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<!-- PICKER IN YEARS -->\n<ng-template #calendarDecadePicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\" aria-live=\"polite\">\n <ng-container\n *ngTemplateOutlet=\"defaultDecade;\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<div\n #wrapper\n [tabIndex]=\"0\"\n class=\"igx-calendar__wrapper\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.aria-multiselectable]=\"selection !== 'single'\"\n aria-labelledby=\"calendar-desc\"\n role=\"grid\"\n (focus)=\"this.onWrapperFocus($event)\"\n (blur)=\"this.onWrapperBlur($event)\"\n >\n <caption id=\"calendar-desc\" tabindex=\"-1\" class=\"igx-calendar__aria-off-screen\">\n {{ resourceStrings.igx_calendar_singular_single_selection}}\n </caption>\n\n <section class=\"igx-calendar__pickers\">\n @if (isDefaultView) {\n <ng-container *ngTemplateOutlet=\"calendarYearPicker\"></ng-container>\n }\n\n @if (isDecadeView) {\n <ng-container *ngTemplateOutlet=\"calendarDecadePicker\"></ng-container>\n }\n </section>\n\n <section class=\"igx-calendar__body\">\n @if (isDefaultView) {\n <igx-months-view\n #months\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (selected)=\"selectMonth($event)\"\n (pageChanged)=\"updateDate($event)\"\n (mousedown)=\"$event.preventDefault()\">\n >\n </igx-months-view>\n }\n\n @if (isDecadeView) {\n <igx-years-view\n #decade\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (selected)=\"selectYear($event)\"\n (pageChanged)=\"updateDate($event)\"\n (mousedown)=\"$event.preventDefault()\"\n >\n </igx-years-view>\n }\n </section>\n</div>\n" }]
|
|
34115
34148
|
}], propDecorators: { id: [{
|
|
34116
34149
|
type: HostBinding,
|
|
34117
34150
|
args: ["attr.id"]
|
|
@@ -42991,7 +43024,7 @@ class IgxGridCell {
|
|
|
42991
43024
|
// will return undefined for a column layout, because getCellByColumnVisibleIndex may return the column layout at that index.
|
|
42992
43025
|
// getCellByColumnVisibleIndex is deprecated and will be removed in future version
|
|
42993
43026
|
return this.column.field ?
|
|
42994
|
-
this.column.hasNestedPath ? resolveNestedPath(this.row?.data, this.column.field) : this.row?.data[this.column.field]
|
|
43027
|
+
this.column.hasNestedPath ? resolveNestedPath(this.row?.data, columnFieldPath(this.column.field)) : this.row?.data[this.column.field]
|
|
42995
43028
|
: undefined;
|
|
42996
43029
|
}
|
|
42997
43030
|
/**
|
|
@@ -60998,10 +61031,11 @@ class IgxGridCellStyleClassesPipe {
|
|
|
60998
61031
|
return '';
|
|
60999
61032
|
}
|
|
61000
61033
|
const result = [];
|
|
61034
|
+
const pathParts = columnFieldPath(field);
|
|
61001
61035
|
for (const cssClass of Object.keys(cssClasses)) {
|
|
61002
61036
|
const callbackOrValue = cssClasses[cssClass];
|
|
61003
61037
|
const apply = typeof callbackOrValue === 'function' ?
|
|
61004
|
-
callbackOrValue(data, field, resolveNestedPath(data,
|
|
61038
|
+
callbackOrValue(data, field, resolveNestedPath(data, pathParts), index) : callbackOrValue;
|
|
61005
61039
|
if (apply) {
|
|
61006
61040
|
result.push(cssClass);
|
|
61007
61041
|
}
|
|
@@ -61028,9 +61062,10 @@ class IgxGridCellStylesPipe {
|
|
|
61028
61062
|
if (!styles) {
|
|
61029
61063
|
return css;
|
|
61030
61064
|
}
|
|
61065
|
+
const pathParts = columnFieldPath(field);
|
|
61031
61066
|
for (const prop of Object.keys(styles)) {
|
|
61032
61067
|
const res = styles[prop];
|
|
61033
|
-
css[prop] = typeof res === 'function' ? res(data, field, resolveNestedPath(data,
|
|
61068
|
+
css[prop] = typeof res === 'function' ? res(data, field, resolveNestedPath(data, pathParts), index) : res;
|
|
61034
61069
|
}
|
|
61035
61070
|
return css;
|
|
61036
61071
|
}
|
|
@@ -61324,7 +61359,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
61324
61359
|
}] }], propDecorators: { transform: [] } });
|
|
61325
61360
|
class IgxGridDataMapperPipe {
|
|
61326
61361
|
transform(data, field, _, val, isNestedPath) {
|
|
61327
|
-
return isNestedPath ? resolveNestedPath(data, field) : val;
|
|
61362
|
+
return isNestedPath ? resolveNestedPath(data, columnFieldPath(field)) : val;
|
|
61328
61363
|
}
|
|
61329
61364
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IgxGridDataMapperPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
61330
61365
|
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.5", ngImport: i0, type: IgxGridDataMapperPipe, isStandalone: true, name: "dataMapper" }); }
|
|
@@ -61355,14 +61390,14 @@ class IgxGridTransactionStatePipe {
|
|
|
61355
61390
|
if (rowEditable) {
|
|
61356
61391
|
const rowCurrentState = transactions.getAggregatedValue(row_id, false);
|
|
61357
61392
|
if (rowCurrentState) {
|
|
61358
|
-
const value = resolveNestedPath(rowCurrentState, field);
|
|
61393
|
+
const value = resolveNestedPath(rowCurrentState, columnFieldPath(field));
|
|
61359
61394
|
return value !== undefined && value !== null;
|
|
61360
61395
|
}
|
|
61361
61396
|
}
|
|
61362
61397
|
else {
|
|
61363
61398
|
const transaction = transactions.getState(row_id);
|
|
61364
|
-
const value = resolveNestedPath(transaction?.value ?? {}, field);
|
|
61365
|
-
return transaction
|
|
61399
|
+
const value = resolveNestedPath(transaction?.value ?? {}, columnFieldPath(field));
|
|
61400
|
+
return transaction?.value && (value || value === 0 || value === false);
|
|
61366
61401
|
}
|
|
61367
61402
|
}
|
|
61368
61403
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IgxGridTransactionStatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
@@ -62723,7 +62758,7 @@ class IgxGridValidationService {
|
|
|
62723
62758
|
* @internal
|
|
62724
62759
|
*/
|
|
62725
62760
|
addFormControl(formGroup, data, column) {
|
|
62726
|
-
const value = resolveNestedPath(data || {}, column.field);
|
|
62761
|
+
const value = resolveNestedPath(data || {}, columnFieldPath(column.field));
|
|
62727
62762
|
const field = this.getFieldKey(column.field);
|
|
62728
62763
|
const control = new FormControl(value, { updateOn: this.grid.validationTrigger });
|
|
62729
62764
|
control.addValidators(column.validators);
|
|
@@ -63640,7 +63675,7 @@ class IgxGridSummaryService {
|
|
|
63640
63675
|
}
|
|
63641
63676
|
if (!args) {
|
|
63642
63677
|
this.summaryCacheMap.clear();
|
|
63643
|
-
if (this.grid
|
|
63678
|
+
if (this.grid?.rootSummariesEnabled) {
|
|
63644
63679
|
this.retriggerRootPipe++;
|
|
63645
63680
|
}
|
|
63646
63681
|
return;
|
|
@@ -63729,15 +63764,17 @@ class IgxGridSummaryService {
|
|
|
63729
63764
|
if (!this.hasSummarizedColumns || !data) {
|
|
63730
63765
|
return rowSummaries;
|
|
63731
63766
|
}
|
|
63732
|
-
this.grid.columns.filter(col => col.hasSummary)
|
|
63767
|
+
const columns = this.grid.columns.filter(col => col.hasSummary);
|
|
63768
|
+
const columnPathParts = columns.map(col => columnFieldPath(col.field));
|
|
63769
|
+
for (const [idx, column] of columns.entries()) {
|
|
63733
63770
|
if (!rowSummaries.get(column.field)) {
|
|
63734
|
-
let summaryResult = column.summaries.operate(data.map(r => resolveNestedPath(r,
|
|
63771
|
+
let summaryResult = column.summaries.operate(data.map(r => resolveNestedPath(r, columnPathParts[idx])), data, column.field, groupRecord, this.grid.locale, column.pipeArgs);
|
|
63735
63772
|
summaryResult = column.disabledSummaries.length > 0
|
|
63736
63773
|
? summaryResult.filter(s => !column.disabledSummaries.includes(s.key))
|
|
63737
63774
|
: summaryResult;
|
|
63738
63775
|
rowSummaries.set(column.field, summaryResult);
|
|
63739
63776
|
}
|
|
63740
|
-
}
|
|
63777
|
+
}
|
|
63741
63778
|
return rowSummaries;
|
|
63742
63779
|
}
|
|
63743
63780
|
resetSummaryHeight() {
|
|
@@ -69748,7 +69785,7 @@ class IgxGridBaseDirective {
|
|
|
69748
69785
|
const key = this.type !== 'pivot' && headers ? col.header || col.field : col.field;
|
|
69749
69786
|
const rowData = source[row].ghostRecord ? source[row].recordRef : source[row];
|
|
69750
69787
|
const value = this.type === 'pivot' ? rowData.aggregationValues.get(col.field)
|
|
69751
|
-
: resolveNestedPath(rowData, col.field);
|
|
69788
|
+
: resolveNestedPath(rowData, columnFieldPath(col.field));
|
|
69752
69789
|
record[key] = formatters && col.formatter ? col.formatter(value, rowData) : value;
|
|
69753
69790
|
if (columnData) {
|
|
69754
69791
|
if (!record[key]) {
|
|
@@ -70217,14 +70254,15 @@ class IgxGridBaseDirective {
|
|
|
70217
70254
|
const searchText = caseSensitive ? this._lastSearchInfo.searchText : this._lastSearchInfo.searchText.toLowerCase();
|
|
70218
70255
|
const data = this.filteredSortedData;
|
|
70219
70256
|
const columnItems = this.visibleColumns.filter((c) => !c.columnGroup).sort((c1, c2) => c1.visibleIndex - c2.visibleIndex);
|
|
70257
|
+
const columnsPathParts = columnItems.map(col => columnFieldPath(col.field));
|
|
70220
70258
|
data.forEach((dataRow, rowIndex) => {
|
|
70221
|
-
columnItems.forEach((c) => {
|
|
70259
|
+
columnItems.forEach((c, cid) => {
|
|
70222
70260
|
const pipeArgs = this.getColumnByName(c.field).pipeArgs;
|
|
70223
|
-
const value = c.formatter ? c.formatter(resolveNestedPath(dataRow,
|
|
70224
|
-
c.dataType === 'number' ? formatNumber(resolveNestedPath(dataRow,
|
|
70261
|
+
const value = c.formatter ? c.formatter(resolveNestedPath(dataRow, columnsPathParts[cid]), dataRow) :
|
|
70262
|
+
c.dataType === 'number' ? formatNumber(resolveNestedPath(dataRow, columnsPathParts[cid]), this.locale, pipeArgs.digitsInfo) :
|
|
70225
70263
|
c.dataType === 'date'
|
|
70226
|
-
? formatDate(resolveNestedPath(dataRow,
|
|
70227
|
-
: resolveNestedPath(dataRow,
|
|
70264
|
+
? formatDate(resolveNestedPath(dataRow, columnsPathParts[cid]), pipeArgs.format, this.locale, pipeArgs.timezone)
|
|
70265
|
+
: resolveNestedPath(dataRow, columnsPathParts[cid]);
|
|
70228
70266
|
if (value !== undefined && value !== null && c.searchable) {
|
|
70229
70267
|
let searchValue = caseSensitive ? String(value) : String(value).toLowerCase();
|
|
70230
70268
|
if (exactMatch) {
|
|
@@ -77249,10 +77287,11 @@ class IgxPivotGridCellStyleClassesPipe {
|
|
|
77249
77287
|
return '';
|
|
77250
77288
|
}
|
|
77251
77289
|
const result = [];
|
|
77290
|
+
const pathParts = columnFieldPath(columnData.field);
|
|
77252
77291
|
for (const cssClass of Object.keys(cssClasses)) {
|
|
77253
77292
|
const callbackOrValue = cssClasses[cssClass];
|
|
77254
77293
|
const apply = typeof callbackOrValue === 'function' ?
|
|
77255
|
-
callbackOrValue(rowData, columnData, resolveNestedPath(rowData,
|
|
77294
|
+
callbackOrValue(rowData, columnData, resolveNestedPath(rowData, pathParts), index) : callbackOrValue;
|
|
77256
77295
|
if (apply) {
|
|
77257
77296
|
result.push(cssClass);
|
|
77258
77297
|
}
|
|
@@ -86144,7 +86183,7 @@ class IgxGridHierarchicalPipe {
|
|
|
86144
86183
|
v[childKey] = [];
|
|
86145
86184
|
}
|
|
86146
86185
|
const hasNestedPath = childKey?.includes('.');
|
|
86147
|
-
const childData = !hasNestedPath ? v[childKey] : resolveNestedPath(v, childKey);
|
|
86186
|
+
const childData = !hasNestedPath ? v[childKey] : resolveNestedPath(v, columnFieldPath(childKey));
|
|
86148
86187
|
childGridsData[childKey] = childData;
|
|
86149
86188
|
});
|
|
86150
86189
|
if (grid.gridAPI.get_row_expansion_state(v)) {
|