@clr/angular 15.0.0 → 15.0.2
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/clarity.api.md +10 -3
- package/data/datagrid/datagrid-column-toggle-trackby.d.ts +6 -0
- package/data/datagrid/datagrid-column-toggle.d.ts +2 -2
- package/data/datagrid/datagrid-row.d.ts +4 -1
- package/data/datagrid/datagrid.d.ts +3 -2
- package/data/datagrid/index.d.ts +1 -0
- package/data/datagrid/providers/items.d.ts +10 -1
- package/data/datagrid/providers/selection.d.ts +0 -4
- package/esm2020/data/datagrid/datagrid-column-toggle-trackby.mjs +7 -0
- package/esm2020/data/datagrid/datagrid-column-toggle.mjs +3 -2
- package/esm2020/data/datagrid/datagrid-items-trackby.mjs +13 -2
- package/esm2020/data/datagrid/datagrid-items.mjs +2 -2
- package/esm2020/data/datagrid/datagrid-row.mjs +20 -5
- package/esm2020/data/datagrid/datagrid.mjs +11 -5
- package/esm2020/data/datagrid/index.mjs +1 -1
- package/esm2020/data/datagrid/providers/items.mjs +20 -2
- package/esm2020/data/datagrid/providers/selection.mjs +16 -27
- package/esm2020/forms/datepicker/daypicker.mjs +3 -3
- package/fesm2015/clr-angular.mjs +85 -40
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +85 -40
- package/fesm2020/clr-angular.mjs.map +1 -1
- package/package.json +1 -1
package/fesm2020/clr-angular.mjs
CHANGED
|
@@ -8644,10 +8644,10 @@ class ClrDaypicker {
|
|
|
8644
8644
|
}
|
|
8645
8645
|
}
|
|
8646
8646
|
ClrDaypicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDaypicker, deps: [{ token: ViewManagerService }, { token: DateNavigationService }, { token: LocaleHelperService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
8647
|
-
ClrDaypicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDaypicker, selector: "clr-daypicker", host: { properties: { "class.daypicker": "true" } }, ngImport: i0, template: "<div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n<div class=\"calendar-header\">\n <div class=\"calendar-pickers\">\n <button\n class=\"calendar-btn monthpicker-trigger\"\n type=\"button\"\n (click)=\"changeToMonthView()\"\n [attr.aria-label]=\"monthAttrString\"\n [attr.title]=\"monthAttrString\"\n >\n {{calendarMonth}}\n </button>\n <button\n class=\"calendar-btn yearpicker-trigger\"\n type=\"button\"\n (click)=\"changeToYearView()\"\n [attr.aria-label]=\"yearAttrString\"\n [attr.title]=\"yearAttrString\"\n >\n {{calendarYear}}\n </button>\n </div>\n <div class=\"calendar-switchers\">\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"previousMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerPreviousMonth\"\n >\n <cds-icon shape=\"angle\" direction=\"left\" [attr.title]=\"commonStrings.keys.datepickerPreviousMonth\"></cds-icon>\n </button>\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"currentMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerCurrentMonth\"\n >\n <cds-icon shape=\"event\" [attr.title]=\"commonStrings.keys.datepickerCurrentMonth\"></cds-icon>\n </button>\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"nextMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerNextMonth\"\n >\n <cds-icon shape=\"angle\" direction=\"right\"></cds-icon>\n </button>\n </div>\n</div>\n<clr-calendar></clr-calendar>\n<div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n", dependencies: [{ kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrCalendar, selector: "clr-calendar" }] });
|
|
8647
|
+
ClrDaypicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDaypicker, selector: "clr-daypicker", host: { properties: { "class.daypicker": "true" } }, ngImport: i0, template: "<div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n<div class=\"calendar-header\">\n <div class=\"calendar-pickers\">\n <button\n class=\"calendar-btn monthpicker-trigger\"\n type=\"button\"\n (click)=\"changeToMonthView()\"\n [attr.aria-label]=\"monthAttrString\"\n [attr.title]=\"monthAttrString\"\n >\n {{calendarMonth}}\n </button>\n <button\n class=\"calendar-btn yearpicker-trigger\"\n type=\"button\"\n (click)=\"changeToYearView()\"\n [attr.aria-label]=\"yearAttrString\"\n [attr.title]=\"yearAttrString\"\n >\n {{calendarYear}}\n </button>\n </div>\n <div class=\"calendar-switchers\">\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"previousMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerPreviousMonth\"\n >\n <cds-icon shape=\"angle\" direction=\"left\" [attr.title]=\"commonStrings.keys.datepickerPreviousMonth\"></cds-icon>\n </button>\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"currentMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerCurrentMonth\"\n >\n <cds-icon shape=\"event\" [attr.title]=\"commonStrings.keys.datepickerCurrentMonth\"></cds-icon>\n </button>\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"nextMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerNextMonth\"\n >\n <cds-icon shape=\"angle\" direction=\"right\" [attr.title]=\"commonStrings.keys.datepickerNextMonth\"></cds-icon>\n </button>\n </div>\n</div>\n<clr-calendar></clr-calendar>\n<div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n", dependencies: [{ kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrCalendar, selector: "clr-calendar" }] });
|
|
8648
8648
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDaypicker, decorators: [{
|
|
8649
8649
|
type: Component,
|
|
8650
|
-
args: [{ selector: 'clr-daypicker', host: { '[class.daypicker]': 'true' }, template: "<div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n<div class=\"calendar-header\">\n <div class=\"calendar-pickers\">\n <button\n class=\"calendar-btn monthpicker-trigger\"\n type=\"button\"\n (click)=\"changeToMonthView()\"\n [attr.aria-label]=\"monthAttrString\"\n [attr.title]=\"monthAttrString\"\n >\n {{calendarMonth}}\n </button>\n <button\n class=\"calendar-btn yearpicker-trigger\"\n type=\"button\"\n (click)=\"changeToYearView()\"\n [attr.aria-label]=\"yearAttrString\"\n [attr.title]=\"yearAttrString\"\n >\n {{calendarYear}}\n </button>\n </div>\n <div class=\"calendar-switchers\">\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"previousMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerPreviousMonth\"\n >\n <cds-icon shape=\"angle\" direction=\"left\" [attr.title]=\"commonStrings.keys.datepickerPreviousMonth\"></cds-icon>\n </button>\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"currentMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerCurrentMonth\"\n >\n <cds-icon shape=\"event\" [attr.title]=\"commonStrings.keys.datepickerCurrentMonth\"></cds-icon>\n </button>\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"nextMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerNextMonth\"\n >\n <cds-icon shape=\"angle\" direction=\"right\"></cds-icon>\n </button>\n </div>\n</div>\n<clr-calendar></clr-calendar>\n<div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n" }]
|
|
8650
|
+
args: [{ selector: 'clr-daypicker', host: { '[class.daypicker]': 'true' }, template: "<div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n<div class=\"calendar-header\">\n <div class=\"calendar-pickers\">\n <button\n class=\"calendar-btn monthpicker-trigger\"\n type=\"button\"\n (click)=\"changeToMonthView()\"\n [attr.aria-label]=\"monthAttrString\"\n [attr.title]=\"monthAttrString\"\n >\n {{calendarMonth}}\n </button>\n <button\n class=\"calendar-btn yearpicker-trigger\"\n type=\"button\"\n (click)=\"changeToYearView()\"\n [attr.aria-label]=\"yearAttrString\"\n [attr.title]=\"yearAttrString\"\n >\n {{calendarYear}}\n </button>\n </div>\n <div class=\"calendar-switchers\">\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"previousMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerPreviousMonth\"\n >\n <cds-icon shape=\"angle\" direction=\"left\" [attr.title]=\"commonStrings.keys.datepickerPreviousMonth\"></cds-icon>\n </button>\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"currentMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerCurrentMonth\"\n >\n <cds-icon shape=\"event\" [attr.title]=\"commonStrings.keys.datepickerCurrentMonth\"></cds-icon>\n </button>\n <button\n class=\"calendar-btn switcher\"\n type=\"button\"\n (click)=\"nextMonth()\"\n [attr.aria-label]=\"commonStrings.keys.datepickerNextMonth\"\n >\n <cds-icon shape=\"angle\" direction=\"right\" [attr.title]=\"commonStrings.keys.datepickerNextMonth\"></cds-icon>\n </button>\n </div>\n</div>\n<clr-calendar></clr-calendar>\n<div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n" }]
|
|
8651
8651
|
}], ctorParameters: function () { return [{ type: ViewManagerService }, { type: DateNavigationService }, { type: LocaleHelperService }, { type: ClrCommonStringsService }]; } });
|
|
8652
8652
|
|
|
8653
8653
|
/*
|
|
@@ -12692,8 +12692,10 @@ class Items {
|
|
|
12692
12692
|
this.loading = false;
|
|
12693
12693
|
/**
|
|
12694
12694
|
* Tracking function to identify objects. Default is reference equality.
|
|
12695
|
+
*
|
|
12696
|
+
* @deprecated in v15 and scheduled for removal in v17 (CDE-71)
|
|
12695
12697
|
*/
|
|
12696
|
-
this.
|
|
12698
|
+
this.iteratorTrackBy = (_index, item) => item;
|
|
12697
12699
|
/**
|
|
12698
12700
|
* Whether we should use smart items for this datagrid or let the user handle
|
|
12699
12701
|
* everything.
|
|
@@ -12767,6 +12769,22 @@ class Items {
|
|
|
12767
12769
|
this._filterItems();
|
|
12768
12770
|
}
|
|
12769
12771
|
}
|
|
12772
|
+
canTrackBy() {
|
|
12773
|
+
// all items are needed unless `datagridTrackBy` is set because `iteratorTrackBy` requires the item's index
|
|
12774
|
+
return !!this.datagridTrackBy || Array.isArray(this.all);
|
|
12775
|
+
}
|
|
12776
|
+
trackBy(item, index) {
|
|
12777
|
+
if (this.datagridTrackBy) {
|
|
12778
|
+
return this.datagridTrackBy(item);
|
|
12779
|
+
}
|
|
12780
|
+
else if (Array.isArray(this.all)) {
|
|
12781
|
+
index = index ?? this.all.indexOf(item);
|
|
12782
|
+
return this.iteratorTrackBy(index, item);
|
|
12783
|
+
}
|
|
12784
|
+
else {
|
|
12785
|
+
throw new Error('improper call to Items#trackBy');
|
|
12786
|
+
}
|
|
12787
|
+
}
|
|
12770
12788
|
get displayed() {
|
|
12771
12789
|
// Ideally we could return an immutable array, but we don't have it in Clarity yet.
|
|
12772
12790
|
return this._displayed;
|
|
@@ -12866,7 +12884,7 @@ class ClrDatagridItems {
|
|
|
12866
12884
|
this._rawItems = items ? items : []; // local copy for ngOnChange diffing
|
|
12867
12885
|
}
|
|
12868
12886
|
set trackBy(value) {
|
|
12869
|
-
this.items.
|
|
12887
|
+
this.items.iteratorTrackBy = value;
|
|
12870
12888
|
this.iterableProxy.ngForTrackBy = value;
|
|
12871
12889
|
}
|
|
12872
12890
|
/**
|
|
@@ -13375,17 +13393,15 @@ class Selection {
|
|
|
13375
13393
|
}
|
|
13376
13394
|
case SelectionType.Single: {
|
|
13377
13395
|
let newSingle;
|
|
13378
|
-
const trackBy = this._items.trackBy;
|
|
13379
13396
|
let selectionUpdated = false;
|
|
13380
13397
|
// if the currentSingle has been set before data was loaded, we look up and save the ref from current data set
|
|
13381
13398
|
if (this.currentSingle && !this.prevSingleSelectionRef) {
|
|
13382
|
-
if (this._items.
|
|
13383
|
-
|
|
13384
|
-
this.prevSingleSelectionRef = this._items.trackBy(lookup, this.currentSingle);
|
|
13399
|
+
if (this._items.canTrackBy()) {
|
|
13400
|
+
this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
|
|
13385
13401
|
}
|
|
13386
13402
|
}
|
|
13387
13403
|
updatedItems.forEach((item, index) => {
|
|
13388
|
-
const ref = trackBy(
|
|
13404
|
+
const ref = this._items.trackBy(item, index);
|
|
13389
13405
|
// If one of the updated items is the previously selectedSingle, set it as the new one
|
|
13390
13406
|
if (this.prevSingleSelectionRef === ref) {
|
|
13391
13407
|
newSingle = item;
|
|
@@ -13415,15 +13431,13 @@ class Selection {
|
|
|
13415
13431
|
}
|
|
13416
13432
|
case SelectionType.Multi: {
|
|
13417
13433
|
let leftOver = this.current.slice();
|
|
13418
|
-
const trackBy = this._items.trackBy;
|
|
13419
13434
|
let selectionUpdated = false;
|
|
13420
13435
|
// if the current has been set before data was loaded, we look up and save the ref from current data set
|
|
13421
13436
|
if (this.current.length > 0 && this.prevSelectionRefs.length !== this.current.length) {
|
|
13422
|
-
if (this._items.
|
|
13437
|
+
if (this._items.canTrackBy()) {
|
|
13423
13438
|
this.prevSelectionRefs = [];
|
|
13424
13439
|
this.current.forEach(item => {
|
|
13425
|
-
|
|
13426
|
-
this.prevSelectionRefs.push(this._items.trackBy(lookup, item));
|
|
13440
|
+
this.prevSelectionRefs.push(this._items.trackBy(item));
|
|
13427
13441
|
});
|
|
13428
13442
|
}
|
|
13429
13443
|
}
|
|
@@ -13433,7 +13447,7 @@ class Selection {
|
|
|
13433
13447
|
//
|
|
13434
13448
|
// The both loops below that goes over updatedItems could be combined into one.
|
|
13435
13449
|
updatedItems.forEach((item, index) => {
|
|
13436
|
-
const ref = trackBy(
|
|
13450
|
+
const ref = this._items.trackBy(item, index);
|
|
13437
13451
|
if (this.lockedRefs.indexOf(ref) > -1) {
|
|
13438
13452
|
updateLockedRef.push(ref);
|
|
13439
13453
|
}
|
|
@@ -13443,7 +13457,7 @@ class Selection {
|
|
|
13443
13457
|
// the if statement below results in broken behavior.
|
|
13444
13458
|
if (leftOver.length > 0) {
|
|
13445
13459
|
updatedItems.forEach((item, index) => {
|
|
13446
|
-
const ref = trackBy(
|
|
13460
|
+
const ref = this._items.trackBy(item, index);
|
|
13447
13461
|
// Look in current selected refs array if item is selected, and update actual value
|
|
13448
13462
|
const selectedIndex = this.prevSelectionRefs.indexOf(ref);
|
|
13449
13463
|
if (selectedIndex > -1) {
|
|
@@ -13519,9 +13533,8 @@ class Selection {
|
|
|
13519
13533
|
return;
|
|
13520
13534
|
}
|
|
13521
13535
|
this._currentSingle = value;
|
|
13522
|
-
if (this._items.
|
|
13523
|
-
|
|
13524
|
-
this.prevSingleSelectionRef = this._items.trackBy(lookup, value);
|
|
13536
|
+
if (this._items.canTrackBy() && value) {
|
|
13537
|
+
this.prevSingleSelectionRef = this._items.trackBy(value);
|
|
13525
13538
|
}
|
|
13526
13539
|
this.emitChange();
|
|
13527
13540
|
}
|
|
@@ -13566,10 +13579,9 @@ class Selection {
|
|
|
13566
13579
|
*/
|
|
13567
13580
|
selectItem(item) {
|
|
13568
13581
|
this.current = this.current.concat(item);
|
|
13569
|
-
if (this._items.
|
|
13582
|
+
if (this._items.canTrackBy()) {
|
|
13570
13583
|
// Push selected ref onto array
|
|
13571
|
-
|
|
13572
|
-
this.prevSelectionRefs.push(this._items.trackBy(lookup, item));
|
|
13584
|
+
this.prevSelectionRefs.push(this._items.trackBy(item));
|
|
13573
13585
|
}
|
|
13574
13586
|
}
|
|
13575
13587
|
/**
|
|
@@ -13577,7 +13589,7 @@ class Selection {
|
|
|
13577
13589
|
*/
|
|
13578
13590
|
deselectItem(indexOfItem) {
|
|
13579
13591
|
this.current = this.current.slice(0, indexOfItem).concat(this.current.slice(indexOfItem + 1));
|
|
13580
|
-
if (
|
|
13592
|
+
if (indexOfItem < this.prevSelectionRefs.length) {
|
|
13581
13593
|
// Keep selected refs array in sync
|
|
13582
13594
|
const removedItems = this.prevSelectionRefs.splice(indexOfItem, 1);
|
|
13583
13595
|
// locked reference is no longer needed (if any)
|
|
@@ -13627,21 +13639,16 @@ class Selection {
|
|
|
13627
13639
|
}
|
|
13628
13640
|
/**
|
|
13629
13641
|
* Make sure that it could be locked
|
|
13630
|
-
*
|
|
13631
|
-
* @remark
|
|
13632
|
-
* Check also is items.all an array, if not there is no nothing to lock or compare to
|
|
13633
|
-
*
|
|
13634
13642
|
*/
|
|
13635
13643
|
canItBeLocked() {
|
|
13636
|
-
|
|
13637
|
-
return this._selectionType !== SelectionType.None && Array.isArray(this._items.all);
|
|
13644
|
+
return this._selectionType !== SelectionType.None && this._items.canTrackBy();
|
|
13638
13645
|
}
|
|
13639
13646
|
/**
|
|
13640
13647
|
* Lock and unlock item
|
|
13641
13648
|
*/
|
|
13642
13649
|
lockItem(item, lock) {
|
|
13643
13650
|
if (this.canItBeLocked()) {
|
|
13644
|
-
const ref = this._items.trackBy(
|
|
13651
|
+
const ref = this._items.trackBy(item);
|
|
13645
13652
|
if (lock === true) {
|
|
13646
13653
|
// Add to lockedRef
|
|
13647
13654
|
this.lockedRefs.push(ref);
|
|
@@ -13661,7 +13668,7 @@ class Selection {
|
|
|
13661
13668
|
* into the array when there is no need for that.
|
|
13662
13669
|
*/
|
|
13663
13670
|
if (this.canItBeLocked()) {
|
|
13664
|
-
const ref = this._items.trackBy(
|
|
13671
|
+
const ref = this._items.trackBy(item);
|
|
13665
13672
|
return this.lockedRefs.indexOf(ref) > -1;
|
|
13666
13673
|
}
|
|
13667
13674
|
return false;
|
|
@@ -13786,6 +13793,8 @@ class ClrDatagridRow {
|
|
|
13786
13793
|
this.SELECTION_TYPE = SelectionType;
|
|
13787
13794
|
this.expandAnimationTrigger = false;
|
|
13788
13795
|
this._selected = false;
|
|
13796
|
+
// By default, every item is selectable; it becomes not selectable only if it's explicitly set to false
|
|
13797
|
+
this._selectable = true;
|
|
13789
13798
|
this.selectedChanged = new EventEmitter(false);
|
|
13790
13799
|
this.expandedChange = new EventEmitter(false);
|
|
13791
13800
|
this._detailOpenLabel = '';
|
|
@@ -13812,6 +13821,16 @@ class ClrDatagridRow {
|
|
|
13812
13821
|
}
|
|
13813
13822
|
}));
|
|
13814
13823
|
}
|
|
13824
|
+
/**
|
|
13825
|
+
* Model of the row, to use for selection
|
|
13826
|
+
*/
|
|
13827
|
+
set item(item) {
|
|
13828
|
+
this._item = item;
|
|
13829
|
+
this.clrDgSelectable = this._selectable;
|
|
13830
|
+
}
|
|
13831
|
+
get item() {
|
|
13832
|
+
return this._item;
|
|
13833
|
+
}
|
|
13815
13834
|
/**
|
|
13816
13835
|
* The default behavior in Chrome and Firefox for shift-clicking on a label is to perform text-selection.
|
|
13817
13836
|
* This prevents our intended range-selection, because this text-selection overrides our shift-click event.
|
|
@@ -13855,9 +13874,12 @@ class ClrDatagridRow {
|
|
|
13855
13874
|
this.selection.setSelected(this.item, value);
|
|
13856
13875
|
}
|
|
13857
13876
|
}
|
|
13858
|
-
// By default every item is selectable; it becomes not selectable only if it's explicitly set to false
|
|
13859
13877
|
set clrDgSelectable(value) {
|
|
13860
|
-
|
|
13878
|
+
if (this.item) {
|
|
13879
|
+
this.selection.lockItem(this.item, value === 'false' || value === false);
|
|
13880
|
+
}
|
|
13881
|
+
// Store this value locally, to be initialized when item is initialized
|
|
13882
|
+
this._selectable = value;
|
|
13861
13883
|
}
|
|
13862
13884
|
get clrDgSelectable() {
|
|
13863
13885
|
return !this.selection.isLocked(this.item);
|
|
@@ -13978,7 +14000,7 @@ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
|
|
|
13978
14000
|
DatagridIfExpandService,
|
|
13979
14001
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
13980
14002
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
13981
|
-
], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable clr-col-null\" *ngIf=\"selection.rowSelectionMode\" (mousedown)=\"clearRanges($event)\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [
|
|
14003
|
+
], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable clr-col-null\" *ngIf=\"selection.rowSelectionMode\" (mousedown)=\"clearRanges($event)\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrRadio, selector: "[clrRadio]" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }] });
|
|
13982
14004
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridRow, decorators: [{
|
|
13983
14005
|
type: Component,
|
|
13984
14006
|
args: [{ selector: 'clr-dg-row', host: {
|
|
@@ -13990,7 +14012,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
|
|
|
13990
14012
|
DatagridIfExpandService,
|
|
13991
14013
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
13992
14014
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
13993
|
-
], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable clr-col-null\" *ngIf=\"selection.rowSelectionMode\" (mousedown)=\"clearRanges($event)\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [
|
|
14015
|
+
], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable clr-col-null\" *ngIf=\"selection.rowSelectionMode\" (mousedown)=\"clearRanges($event)\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n" }]
|
|
13994
14016
|
}], ctorParameters: function () { return [{ type: Selection }, { type: RowActionService }, { type: ExpandableRowsCount }, { type: DatagridIfExpandService }, { type: DetailService }, { type: DisplayModeService }, { type: i0.ViewContainerRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: ClrCommonStringsService }, { type: Items }, { type: undefined, decorators: [{
|
|
13995
14017
|
type: Inject,
|
|
13996
14018
|
args: [DOCUMENT]
|
|
@@ -14433,6 +14455,9 @@ class ClrDatagrid {
|
|
|
14433
14455
|
set rowSelectionMode(value) {
|
|
14434
14456
|
this.selection.rowSelectionMode = value;
|
|
14435
14457
|
}
|
|
14458
|
+
set trackBy(value) {
|
|
14459
|
+
this.items.datagridTrackBy = value;
|
|
14460
|
+
}
|
|
14436
14461
|
/**
|
|
14437
14462
|
* Indicates if all currently displayed items are selected
|
|
14438
14463
|
*/
|
|
@@ -14471,9 +14496,9 @@ class ClrDatagrid {
|
|
|
14471
14496
|
});
|
|
14472
14497
|
// Try to update only when there is something cached and its open.
|
|
14473
14498
|
if (this.detailService.state && this.detailService.isOpen) {
|
|
14474
|
-
const row = this.
|
|
14475
|
-
|
|
14476
|
-
|
|
14499
|
+
const row = this.items.canTrackBy()
|
|
14500
|
+
? this.rows.find(row => this.items.trackBy(row.item) === this.items.trackBy(this.detailService.state))
|
|
14501
|
+
: undefined;
|
|
14477
14502
|
/**
|
|
14478
14503
|
* Reopen updated row or close it
|
|
14479
14504
|
*/
|
|
@@ -14566,7 +14591,7 @@ class ClrDatagrid {
|
|
|
14566
14591
|
}
|
|
14567
14592
|
}
|
|
14568
14593
|
ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: ColumnsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
14569
|
-
ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"] }, outputs: { refresh: "clrDgRefresh", selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen" } }, providers: [
|
|
14594
|
+
ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"], trackBy: ["clrDgItemsTrackBy", "trackBy"] }, outputs: { refresh: "clrDgRefresh", selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen" } }, providers: [
|
|
14570
14595
|
Selection,
|
|
14571
14596
|
Sort,
|
|
14572
14597
|
FiltersProvider,
|
|
@@ -14642,6 +14667,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
|
|
|
14642
14667
|
}], rowSelectionMode: [{
|
|
14643
14668
|
type: Input,
|
|
14644
14669
|
args: ['clrDgRowSelection']
|
|
14670
|
+
}], trackBy: [{
|
|
14671
|
+
type: Input,
|
|
14672
|
+
args: ['clrDgItemsTrackBy']
|
|
14645
14673
|
}], placeholder: [{
|
|
14646
14674
|
type: ContentChild,
|
|
14647
14675
|
args: [ClrDatagridPlaceholder]
|
|
@@ -14840,6 +14868,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
|
|
|
14840
14868
|
args: ['clrDgActionOverflowOpenChange']
|
|
14841
14869
|
}] } });
|
|
14842
14870
|
|
|
14871
|
+
/*
|
|
14872
|
+
* Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
|
|
14873
|
+
* This software is released under MIT license.
|
|
14874
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
14875
|
+
*/
|
|
14876
|
+
const columnToggleTrackByFn = index => index;
|
|
14877
|
+
|
|
14843
14878
|
/*
|
|
14844
14879
|
* Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
|
|
14845
14880
|
* This software is released under MIT license.
|
|
@@ -14850,8 +14885,18 @@ class ClrDatagridItemsTrackBy {
|
|
|
14850
14885
|
this._items = _items;
|
|
14851
14886
|
}
|
|
14852
14887
|
set trackBy(value) {
|
|
14888
|
+
/**
|
|
14889
|
+
* This is a workaround to prevent the items `trackBy` function from
|
|
14890
|
+
* being replaced when the "manage columns" button is clicked. This is
|
|
14891
|
+
* not a complete solution. If there is another `ngForTrackBy` function
|
|
14892
|
+
* within the datagrid in application code, it could sill replace the
|
|
14893
|
+
* items `trackBy` function whether it is the row iterator or not.
|
|
14894
|
+
*/
|
|
14895
|
+
if (value === columnToggleTrackByFn) {
|
|
14896
|
+
return;
|
|
14897
|
+
}
|
|
14853
14898
|
if (this._items) {
|
|
14854
|
-
this._items.
|
|
14899
|
+
this._items.iteratorTrackBy = value;
|
|
14855
14900
|
}
|
|
14856
14901
|
}
|
|
14857
14902
|
}
|
|
@@ -14947,7 +14992,7 @@ class ClrDatagridColumnToggle {
|
|
|
14947
14992
|
};
|
|
14948
14993
|
// Without tracking the checkboxes get rerendered on model update, which leads
|
|
14949
14994
|
// to loss of focus after checkbox toggle.
|
|
14950
|
-
this.trackByFn =
|
|
14995
|
+
this.trackByFn = columnToggleTrackByFn;
|
|
14951
14996
|
this.subscription = popoverToggleService.openChange.subscribe(change => (this.openState = change));
|
|
14952
14997
|
}
|
|
14953
14998
|
get allColumnsVisible() {
|