@clr/angular 13.14.1 → 13.14.3
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/fesm2015/clr-angular.mjs
CHANGED
|
@@ -8826,10 +8826,10 @@ class ClrDaypicker {
|
|
|
8826
8826
|
}
|
|
8827
8827
|
}
|
|
8828
8828
|
ClrDaypicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ClrDaypicker, deps: [{ token: ViewManagerService }, { token: DateNavigationService }, { token: LocaleHelperService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
8829
|
-
ClrDaypicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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", components: [{ type: ClrCalendar, selector: "clr-calendar" }], directives: [{ type: CdsIconCustomTag, selector: "cds-icon" }] });
|
|
8829
|
+
ClrDaypicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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", components: [{ type: ClrCalendar, selector: "clr-calendar" }], directives: [{ type: CdsIconCustomTag, selector: "cds-icon" }] });
|
|
8830
8830
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ClrDaypicker, decorators: [{
|
|
8831
8831
|
type: Component,
|
|
8832
|
-
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" }]
|
|
8832
|
+
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" }]
|
|
8833
8833
|
}], ctorParameters: function () { return [{ type: ViewManagerService }, { type: DateNavigationService }, { type: LocaleHelperService }, { type: ClrCommonStringsService }]; } });
|
|
8834
8834
|
|
|
8835
8835
|
/*
|
|
@@ -13952,8 +13952,10 @@ class Items {
|
|
|
13952
13952
|
this.loading = false;
|
|
13953
13953
|
/**
|
|
13954
13954
|
* Tracking function to identify objects. Default is reference equality.
|
|
13955
|
+
*
|
|
13956
|
+
* @deprecated in v15 and scheduled for removal in v17 (CDE-71)
|
|
13955
13957
|
*/
|
|
13956
|
-
this.
|
|
13958
|
+
this.iteratorTrackBy = (_index, item) => item;
|
|
13957
13959
|
/**
|
|
13958
13960
|
* Whether we should use smart items for this datagrid or let the user handle
|
|
13959
13961
|
* everything.
|
|
@@ -14027,6 +14029,22 @@ class Items {
|
|
|
14027
14029
|
this._filterItems();
|
|
14028
14030
|
}
|
|
14029
14031
|
}
|
|
14032
|
+
canTrackBy() {
|
|
14033
|
+
// all items are needed unless `datagridTrackBy` is set because `iteratorTrackBy` requires the item's index
|
|
14034
|
+
return !!this.datagridTrackBy || Array.isArray(this.all);
|
|
14035
|
+
}
|
|
14036
|
+
trackBy(item, index) {
|
|
14037
|
+
if (this.datagridTrackBy) {
|
|
14038
|
+
return this.datagridTrackBy(item);
|
|
14039
|
+
}
|
|
14040
|
+
else if (Array.isArray(this.all)) {
|
|
14041
|
+
index = index !== null && index !== void 0 ? index : this.all.indexOf(item);
|
|
14042
|
+
return this.iteratorTrackBy(index, item);
|
|
14043
|
+
}
|
|
14044
|
+
else {
|
|
14045
|
+
throw new Error('improper call to Items#trackBy');
|
|
14046
|
+
}
|
|
14047
|
+
}
|
|
14030
14048
|
get displayed() {
|
|
14031
14049
|
// Ideally we could return an immutable array, but we don't have it in Clarity yet.
|
|
14032
14050
|
return this._displayed;
|
|
@@ -14126,7 +14144,7 @@ class ClrDatagridItems {
|
|
|
14126
14144
|
this._rawItems = items ? items : []; // local copy for ngOnChange diffing
|
|
14127
14145
|
}
|
|
14128
14146
|
set trackBy(value) {
|
|
14129
|
-
this.items.
|
|
14147
|
+
this.items.iteratorTrackBy = value;
|
|
14130
14148
|
this.iterableProxy.ngForTrackBy = value;
|
|
14131
14149
|
}
|
|
14132
14150
|
/**
|
|
@@ -14646,17 +14664,15 @@ class Selection {
|
|
|
14646
14664
|
}
|
|
14647
14665
|
case SelectionType.Single: {
|
|
14648
14666
|
let newSingle;
|
|
14649
|
-
const trackBy = this._items.trackBy;
|
|
14650
14667
|
let selectionUpdated = false;
|
|
14651
14668
|
// if the currentSingle has been set before data was loaded, we look up and save the ref from current data set
|
|
14652
14669
|
if (this.currentSingle && !this.prevSingleSelectionRef) {
|
|
14653
|
-
if (this._items.
|
|
14654
|
-
|
|
14655
|
-
this.prevSingleSelectionRef = this._items.trackBy(lookup, this.currentSingle);
|
|
14670
|
+
if (this._items.canTrackBy()) {
|
|
14671
|
+
this.prevSingleSelectionRef = this._items.trackBy(this.currentSingle);
|
|
14656
14672
|
}
|
|
14657
14673
|
}
|
|
14658
14674
|
updatedItems.forEach((item, index) => {
|
|
14659
|
-
const ref = trackBy(
|
|
14675
|
+
const ref = this._items.trackBy(item, index);
|
|
14660
14676
|
// If one of the updated items is the previously selectedSingle, set it as the new one
|
|
14661
14677
|
if (this.prevSingleSelectionRef === ref) {
|
|
14662
14678
|
newSingle = item;
|
|
@@ -14686,15 +14702,13 @@ class Selection {
|
|
|
14686
14702
|
}
|
|
14687
14703
|
case SelectionType.Multi: {
|
|
14688
14704
|
let leftOver = this.current.slice();
|
|
14689
|
-
const trackBy = this._items.trackBy;
|
|
14690
14705
|
let selectionUpdated = false;
|
|
14691
14706
|
// if the current has been set before data was loaded, we look up and save the ref from current data set
|
|
14692
14707
|
if (this.current.length > 0 && this.prevSelectionRefs.length !== this.current.length) {
|
|
14693
|
-
if (this._items.
|
|
14708
|
+
if (this._items.canTrackBy()) {
|
|
14694
14709
|
this.prevSelectionRefs = [];
|
|
14695
14710
|
this.current.forEach(item => {
|
|
14696
|
-
|
|
14697
|
-
this.prevSelectionRefs.push(this._items.trackBy(lookup, item));
|
|
14711
|
+
this.prevSelectionRefs.push(this._items.trackBy(item));
|
|
14698
14712
|
});
|
|
14699
14713
|
}
|
|
14700
14714
|
}
|
|
@@ -14704,7 +14718,7 @@ class Selection {
|
|
|
14704
14718
|
//
|
|
14705
14719
|
// The both loops below that goes over updatedItems could be combined into one.
|
|
14706
14720
|
updatedItems.forEach((item, index) => {
|
|
14707
|
-
const ref = trackBy(
|
|
14721
|
+
const ref = this._items.trackBy(item, index);
|
|
14708
14722
|
if (this.lockedRefs.indexOf(ref) > -1) {
|
|
14709
14723
|
updateLockedRef.push(ref);
|
|
14710
14724
|
}
|
|
@@ -14714,7 +14728,7 @@ class Selection {
|
|
|
14714
14728
|
// the if statement below results in broken behavior.
|
|
14715
14729
|
if (leftOver.length > 0) {
|
|
14716
14730
|
updatedItems.forEach((item, index) => {
|
|
14717
|
-
const ref = trackBy(
|
|
14731
|
+
const ref = this._items.trackBy(item, index);
|
|
14718
14732
|
// Look in current selected refs array if item is selected, and update actual value
|
|
14719
14733
|
const selectedIndex = this.prevSelectionRefs.indexOf(ref);
|
|
14720
14734
|
if (selectedIndex > -1) {
|
|
@@ -14790,9 +14804,8 @@ class Selection {
|
|
|
14790
14804
|
return;
|
|
14791
14805
|
}
|
|
14792
14806
|
this._currentSingle = value;
|
|
14793
|
-
if (this._items.
|
|
14794
|
-
|
|
14795
|
-
this.prevSingleSelectionRef = this._items.trackBy(lookup, value);
|
|
14807
|
+
if (this._items.canTrackBy() && value) {
|
|
14808
|
+
this.prevSingleSelectionRef = this._items.trackBy(value);
|
|
14796
14809
|
}
|
|
14797
14810
|
this.emitChange();
|
|
14798
14811
|
}
|
|
@@ -14837,10 +14850,9 @@ class Selection {
|
|
|
14837
14850
|
*/
|
|
14838
14851
|
selectItem(item) {
|
|
14839
14852
|
this.current = this.current.concat(item);
|
|
14840
|
-
if (this._items.
|
|
14853
|
+
if (this._items.canTrackBy()) {
|
|
14841
14854
|
// Push selected ref onto array
|
|
14842
|
-
|
|
14843
|
-
this.prevSelectionRefs.push(this._items.trackBy(lookup, item));
|
|
14855
|
+
this.prevSelectionRefs.push(this._items.trackBy(item));
|
|
14844
14856
|
}
|
|
14845
14857
|
}
|
|
14846
14858
|
/**
|
|
@@ -14848,7 +14860,7 @@ class Selection {
|
|
|
14848
14860
|
*/
|
|
14849
14861
|
deselectItem(indexOfItem) {
|
|
14850
14862
|
this.current = this.current.slice(0, indexOfItem).concat(this.current.slice(indexOfItem + 1));
|
|
14851
|
-
if (
|
|
14863
|
+
if (indexOfItem < this.prevSelectionRefs.length) {
|
|
14852
14864
|
// Keep selected refs array in sync
|
|
14853
14865
|
const removedItems = this.prevSelectionRefs.splice(indexOfItem, 1);
|
|
14854
14866
|
// locked reference is no longer needed (if any)
|
|
@@ -14898,21 +14910,16 @@ class Selection {
|
|
|
14898
14910
|
}
|
|
14899
14911
|
/**
|
|
14900
14912
|
* Make sure that it could be locked
|
|
14901
|
-
*
|
|
14902
|
-
* @remark
|
|
14903
|
-
* Check also is items.all an array, if not there is no nothing to lock or compare to
|
|
14904
|
-
*
|
|
14905
14913
|
*/
|
|
14906
14914
|
canItBeLocked() {
|
|
14907
|
-
|
|
14908
|
-
return this._selectionType !== SelectionType.None && Array.isArray(this._items.all);
|
|
14915
|
+
return this._selectionType !== SelectionType.None && this._items.canTrackBy();
|
|
14909
14916
|
}
|
|
14910
14917
|
/**
|
|
14911
14918
|
* Lock and unlock item
|
|
14912
14919
|
*/
|
|
14913
14920
|
lockItem(item, lock) {
|
|
14914
14921
|
if (this.canItBeLocked()) {
|
|
14915
|
-
const ref = this._items.trackBy(
|
|
14922
|
+
const ref = this._items.trackBy(item);
|
|
14916
14923
|
if (lock === true) {
|
|
14917
14924
|
// Add to lockedRef
|
|
14918
14925
|
this.lockedRefs.push(ref);
|
|
@@ -14932,7 +14939,7 @@ class Selection {
|
|
|
14932
14939
|
* into the array when there is no need for that.
|
|
14933
14940
|
*/
|
|
14934
14941
|
if (this.canItBeLocked()) {
|
|
14935
|
-
const ref = this._items.trackBy(
|
|
14942
|
+
const ref = this._items.trackBy(item);
|
|
14936
14943
|
return this.lockedRefs.indexOf(ref) > -1;
|
|
14937
14944
|
}
|
|
14938
14945
|
return false;
|
|
@@ -15057,6 +15064,8 @@ class ClrDatagridRow {
|
|
|
15057
15064
|
this.SELECTION_TYPE = SelectionType;
|
|
15058
15065
|
this.expandAnimationTrigger = false;
|
|
15059
15066
|
this._selected = false;
|
|
15067
|
+
// By default, every item is selectable; it becomes not selectable only if it's explicitly set to false
|
|
15068
|
+
this._selectable = true;
|
|
15060
15069
|
this.selectedChanged = new EventEmitter(false);
|
|
15061
15070
|
this.expandedChange = new EventEmitter(false);
|
|
15062
15071
|
this._detailOpenLabel = '';
|
|
@@ -15083,6 +15092,16 @@ class ClrDatagridRow {
|
|
|
15083
15092
|
}
|
|
15084
15093
|
}));
|
|
15085
15094
|
}
|
|
15095
|
+
/**
|
|
15096
|
+
* Model of the row, to use for selection
|
|
15097
|
+
*/
|
|
15098
|
+
set item(item) {
|
|
15099
|
+
this._item = item;
|
|
15100
|
+
this.clrDgSelectable = this._selectable;
|
|
15101
|
+
}
|
|
15102
|
+
get item() {
|
|
15103
|
+
return this._item;
|
|
15104
|
+
}
|
|
15086
15105
|
/**
|
|
15087
15106
|
* The default behavior in Chrome and Firefox for shift-clicking on a label is to perform text-selection.
|
|
15088
15107
|
* This prevents our intended range-selection, because this text-selection overrides our shift-click event.
|
|
@@ -15126,9 +15145,12 @@ class ClrDatagridRow {
|
|
|
15126
15145
|
this.selection.setSelected(this.item, value);
|
|
15127
15146
|
}
|
|
15128
15147
|
}
|
|
15129
|
-
// By default every item is selectable; it becomes not selectable only if it's explicitly set to false
|
|
15130
15148
|
set clrDgSelectable(value) {
|
|
15131
|
-
|
|
15149
|
+
if (this.item) {
|
|
15150
|
+
this.selection.lockItem(this.item, value === 'false' || value === false);
|
|
15151
|
+
}
|
|
15152
|
+
// Store this value locally, to be initialized when item is initialized
|
|
15153
|
+
this._selectable = value;
|
|
15132
15154
|
}
|
|
15133
15155
|
get clrDgSelectable() {
|
|
15134
15156
|
return !this.selection.isLocked(this.item);
|
|
@@ -15249,7 +15271,7 @@ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
|
|
|
15249
15271
|
DatagridIfExpandService,
|
|
15250
15272
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
15251
15273
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
15252
|
-
], 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 [
|
|
15274
|
+
], 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", components: [{ type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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]" }, { type: ClrRadio, selector: "[clrRadio]" }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
|
|
15253
15275
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ClrDatagridRow, decorators: [{
|
|
15254
15276
|
type: Component,
|
|
15255
15277
|
args: [{ selector: 'clr-dg-row', host: {
|
|
@@ -15261,7 +15283,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
15261
15283
|
DatagridIfExpandService,
|
|
15262
15284
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
15263
15285
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
15264
|
-
], 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 [
|
|
15286
|
+
], 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" }]
|
|
15265
15287
|
}], ctorParameters: function () {
|
|
15266
15288
|
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: [{
|
|
15267
15289
|
type: Inject,
|
|
@@ -15711,6 +15733,9 @@ class ClrDatagrid {
|
|
|
15711
15733
|
set rowSelectionMode(value) {
|
|
15712
15734
|
this.selection.rowSelectionMode = value;
|
|
15713
15735
|
}
|
|
15736
|
+
set trackBy(value) {
|
|
15737
|
+
this.items.datagridTrackBy = value;
|
|
15738
|
+
}
|
|
15714
15739
|
/**
|
|
15715
15740
|
* Indicates if all currently displayed items are selected
|
|
15716
15741
|
*/
|
|
@@ -15749,9 +15774,9 @@ class ClrDatagrid {
|
|
|
15749
15774
|
});
|
|
15750
15775
|
// Try to update only when there is something cached and its open.
|
|
15751
15776
|
if (this.detailService.state && this.detailService.isOpen) {
|
|
15752
|
-
const row = this.
|
|
15753
|
-
|
|
15754
|
-
|
|
15777
|
+
const row = this.items.canTrackBy()
|
|
15778
|
+
? this.rows.find(row => this.items.trackBy(row.item) === this.items.trackBy(this.detailService.state))
|
|
15779
|
+
: undefined;
|
|
15755
15780
|
/**
|
|
15756
15781
|
* Reopen updated row or close it
|
|
15757
15782
|
*/
|
|
@@ -15844,7 +15869,7 @@ class ClrDatagrid {
|
|
|
15844
15869
|
}
|
|
15845
15870
|
}
|
|
15846
15871
|
ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", 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 });
|
|
15847
|
-
ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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: [
|
|
15872
|
+
ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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: [
|
|
15848
15873
|
Selection,
|
|
15849
15874
|
Sort,
|
|
15850
15875
|
FiltersProvider,
|
|
@@ -15922,6 +15947,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
15922
15947
|
}], rowSelectionMode: [{
|
|
15923
15948
|
type: Input,
|
|
15924
15949
|
args: ['clrDgRowSelection']
|
|
15950
|
+
}], trackBy: [{
|
|
15951
|
+
type: Input,
|
|
15952
|
+
args: ['clrDgItemsTrackBy']
|
|
15925
15953
|
}], placeholder: [{
|
|
15926
15954
|
type: ContentChild,
|
|
15927
15955
|
args: [ClrDatagridPlaceholder]
|
|
@@ -16199,6 +16227,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
16199
16227
|
}]
|
|
16200
16228
|
}] });
|
|
16201
16229
|
|
|
16230
|
+
/*
|
|
16231
|
+
* Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
|
|
16232
|
+
* This software is released under MIT license.
|
|
16233
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
16234
|
+
*/
|
|
16235
|
+
const columnToggleTrackByFn = index => index;
|
|
16236
|
+
|
|
16202
16237
|
/*
|
|
16203
16238
|
* Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
|
|
16204
16239
|
* This software is released under MIT license.
|
|
@@ -16209,8 +16244,18 @@ class ClrDatagridItemsTrackBy {
|
|
|
16209
16244
|
this._items = _items;
|
|
16210
16245
|
}
|
|
16211
16246
|
set trackBy(value) {
|
|
16247
|
+
/**
|
|
16248
|
+
* This is a workaround to prevent the items `trackBy` function from
|
|
16249
|
+
* being replaced when the "manage columns" button is clicked. This is
|
|
16250
|
+
* not a complete solution. If there is another `ngForTrackBy` function
|
|
16251
|
+
* within the datagrid in application code, it could sill replace the
|
|
16252
|
+
* items `trackBy` function whether it is the row iterator or not.
|
|
16253
|
+
*/
|
|
16254
|
+
if (value === columnToggleTrackByFn) {
|
|
16255
|
+
return;
|
|
16256
|
+
}
|
|
16212
16257
|
if (this._items) {
|
|
16213
|
-
this._items.
|
|
16258
|
+
this._items.iteratorTrackBy = value;
|
|
16214
16259
|
}
|
|
16215
16260
|
}
|
|
16216
16261
|
}
|
|
@@ -16250,7 +16295,7 @@ class ClrDatagridColumnToggle {
|
|
|
16250
16295
|
};
|
|
16251
16296
|
// Without tracking the checkboxes get rerendered on model update, which leads
|
|
16252
16297
|
// to loss of focus after checkbox toggle.
|
|
16253
|
-
this.trackByFn =
|
|
16298
|
+
this.trackByFn = columnToggleTrackByFn;
|
|
16254
16299
|
this.subscription = popoverToggleService.openChange.subscribe(change => (this.openState = change));
|
|
16255
16300
|
}
|
|
16256
16301
|
get allColumnsVisible() {
|