@messaia/cdk 18.2.3-rc08 → 18.2.3-rc09
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/esm2022/lib/base/components/generic-embedded-list.component.mjs +14 -3
- package/esm2022/lib/base/components/generic-list.component.mjs +1 -1
- package/esm2022/lib/table/table.static-data-source.mjs +92 -28
- package/fesm2022/messaia-cdk.mjs +104 -29
- package/fesm2022/messaia-cdk.mjs.map +1 -1
- package/lib/base/components/generic-embedded-list.component.d.ts +8 -1
- package/lib/table/table.static-data-source.d.ts +76 -24
- package/package.json +1 -1
|
@@ -2,127 +2,191 @@ import { SelectionModel } from '@angular/cdk/collections';
|
|
|
2
2
|
import { MatTableDataSource } from '@angular/material/table';
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
4
|
/**
|
|
5
|
-
* A generic datasource for data-
|
|
5
|
+
* A generic datasource class for working with data-tables in Angular Material.
|
|
6
|
+
* This class extends MatTableDataSource to provide additional functionality like
|
|
7
|
+
* selection management, pagination, and filtering.
|
|
6
8
|
*/
|
|
7
9
|
export class TableStaticDataSource extends MatTableDataSource {
|
|
8
10
|
/**
|
|
9
|
-
* _reloadChange
|
|
10
|
-
*
|
|
11
|
+
* @property _reloadChange
|
|
12
|
+
* @description A BehaviorSubject that triggers a reload of the table data.
|
|
13
|
+
* The value is used as a reload token, ensuring the data is reloaded when it changes.
|
|
14
|
+
* @type {BehaviorSubject<number>}
|
|
11
15
|
*/
|
|
12
16
|
_reloadChange = new BehaviorSubject(0);
|
|
13
17
|
/**
|
|
14
|
-
* onDataLoaded
|
|
15
|
-
*
|
|
18
|
+
* @property onDataLoaded
|
|
19
|
+
* @description A BehaviorSubject that holds the loaded data or pagination information.
|
|
20
|
+
* This is emitted after the data is successfully loaded, providing a mechanism
|
|
21
|
+
* to track the loading state and any updates to the data.
|
|
22
|
+
* @type {BehaviorSubject<Pagination<TEntity> | any>}
|
|
16
23
|
*/
|
|
17
24
|
onDataLoaded = new BehaviorSubject(null);
|
|
18
25
|
/**
|
|
19
|
-
*
|
|
26
|
+
* @property selectionModel
|
|
27
|
+
* @description A SelectionModel to handle selection of one or more items from the data-table.
|
|
28
|
+
* It allows managing the selected items in the table and supports multiple selection.
|
|
29
|
+
* @type {SelectionModel<TEntity>}
|
|
20
30
|
*/
|
|
21
31
|
selectionModel = new SelectionModel(true, []);
|
|
22
32
|
/**
|
|
23
|
-
*
|
|
33
|
+
* @property reloadToken
|
|
34
|
+
* @description A getter to return the current reload token.
|
|
35
|
+
* The reload token is used to trigger reloading of data.
|
|
36
|
+
* @type {number}
|
|
24
37
|
*/
|
|
25
38
|
get reloadToken() { return this._reloadChange.value; }
|
|
26
39
|
/**
|
|
27
|
-
*
|
|
40
|
+
* @property fieldFilters
|
|
41
|
+
* @description An object used to store filters for specific fields in the data-table.
|
|
42
|
+
* It allows filtering of data based on specific field values.
|
|
43
|
+
* @type {any}
|
|
28
44
|
*/
|
|
29
45
|
fieldFilters = {};
|
|
30
46
|
/**
|
|
31
|
-
*
|
|
47
|
+
* @property fieldOperators
|
|
48
|
+
* @description An object that stores operators to be applied on fields for filtering.
|
|
49
|
+
* It allows complex filtering operations (e.g., equals, contains, greater than).
|
|
50
|
+
* @type {any}
|
|
32
51
|
*/
|
|
33
52
|
fieldOperators = {};
|
|
34
53
|
/**
|
|
35
|
-
*
|
|
54
|
+
* @property staticFieldFilters
|
|
55
|
+
* @description An object to store static filters that are applied to the data-table.
|
|
56
|
+
* These filters are not dynamically set by the user but are always active.
|
|
57
|
+
* @type {any}
|
|
36
58
|
*/
|
|
37
59
|
staticFieldFilters = {};
|
|
38
60
|
/**
|
|
39
|
-
*
|
|
61
|
+
* @property pageIndex
|
|
62
|
+
* @description The index of the current page being viewed in the data-table.
|
|
63
|
+
* It starts from 0 and increments with each page change.
|
|
64
|
+
* @type {number}
|
|
40
65
|
*/
|
|
41
66
|
pageIndex = 0;
|
|
42
67
|
/**
|
|
43
|
-
*
|
|
68
|
+
* @property total
|
|
69
|
+
* @description The total number of items in the data source.
|
|
70
|
+
* This is typically used to calculate pagination.
|
|
71
|
+
* @type {number}
|
|
44
72
|
*/
|
|
45
73
|
total = 0;
|
|
46
74
|
/**
|
|
47
|
-
*
|
|
75
|
+
* @property pageSize
|
|
76
|
+
* @description The number of items displayed per page in the data-table.
|
|
77
|
+
* It controls how many records are shown on a single page.
|
|
78
|
+
* @type {number}
|
|
48
79
|
*/
|
|
49
80
|
pageSize = 15;
|
|
50
81
|
/**
|
|
51
|
-
*
|
|
82
|
+
* @property pageCount
|
|
83
|
+
* @description The total number of pages based on the current page size and total items.
|
|
84
|
+
* This is calculated dynamically whenever data changes.
|
|
85
|
+
* @type {number}
|
|
52
86
|
*/
|
|
53
87
|
pageCount = 0;
|
|
54
88
|
/**
|
|
55
|
-
*
|
|
89
|
+
* @property isLoading
|
|
90
|
+
* @description A flag indicating whether the data is currently being loaded.
|
|
91
|
+
* It is used to show a loading spinner or indicator while data is being fetched.
|
|
92
|
+
* @type {boolean}
|
|
56
93
|
*/
|
|
57
94
|
isLoading = false;
|
|
58
95
|
/**
|
|
59
|
-
*
|
|
60
|
-
* @
|
|
96
|
+
* @method reload
|
|
97
|
+
* @description Reloads the table data by triggering a new random reload token.
|
|
98
|
+
* Optionally clears the selection if the `clearSelection` flag is set to true.
|
|
99
|
+
* @param {boolean} clearSelection - If true, clears the current selection after reload.
|
|
61
100
|
*/
|
|
62
101
|
reload(clearSelection = true) {
|
|
102
|
+
/* Emit a new reload token to trigger data reload */
|
|
63
103
|
this._reloadChange.next(Math.random());
|
|
104
|
+
/* Clear the selection if specified */
|
|
64
105
|
if (clearSelection) {
|
|
65
106
|
this.selectionModel.clear();
|
|
66
107
|
}
|
|
67
108
|
}
|
|
68
109
|
/**
|
|
69
|
-
*
|
|
110
|
+
* @method connect
|
|
111
|
+
* @description Called when the MatTable connects to the data source.
|
|
112
|
+
* This method subscribes to the reload token to trigger a filter update and data refresh.
|
|
70
113
|
* @docs-private
|
|
114
|
+
* @returns {BehaviorSubject<TEntity[]>} A BehaviorSubject containing the current data array.
|
|
71
115
|
*/
|
|
72
116
|
connect() {
|
|
117
|
+
/* Subscribe to the reload token and update filters accordingly */
|
|
73
118
|
this._reloadChange.subscribe(x => {
|
|
74
|
-
/*
|
|
75
|
-
Object.keys(this.fieldFilters).forEach((key) => ((this.fieldFilters[key] == null || this.fieldFilters[key]
|
|
76
|
-
Object.keys(this.staticFieldFilters).forEach((key) => ((this.staticFieldFilters[key] == null || this.staticFieldFilters[key]
|
|
119
|
+
/* Clean up any empty filters before applying them */
|
|
120
|
+
Object.keys(this.fieldFilters).forEach((key) => ((this.fieldFilters[key] == null || this.fieldFilters[key] === '' || this.fieldFilters[key] === 'undefined')) && this.fieldFilters[key] !== 0 && delete this.fieldFilters[key]);
|
|
121
|
+
Object.keys(this.staticFieldFilters).forEach((key) => ((this.staticFieldFilters[key] == null || this.staticFieldFilters[key] === '' || this.staticFieldFilters[key] === 'undefined')) && this.staticFieldFilters[key] !== 0 && delete this.staticFieldFilters[key]);
|
|
122
|
+
/* Apply filters dynamically to the table data */
|
|
77
123
|
Object.keys(this.fieldFilters).forEach((key) => {
|
|
78
124
|
this.filterPredicate = (data, filter) => !filter || `${data[key]}`.toLowerCase().includes(`${this.filter}`?.toLowerCase());
|
|
79
125
|
this.filter = this.fieldFilters[key];
|
|
80
126
|
});
|
|
81
127
|
});
|
|
128
|
+
/* Return the data for the MatTable to display */
|
|
82
129
|
return super.connect();
|
|
83
130
|
}
|
|
84
131
|
/**
|
|
85
|
-
*
|
|
132
|
+
* @method clearFilters
|
|
133
|
+
* @description Clears all current field filters and resets pagination to the first page.
|
|
134
|
+
* Optionally accepts new filters to replace the existing ones.
|
|
135
|
+
* @param {any} newFilters - New filters to apply after clearing the previous ones.
|
|
86
136
|
*/
|
|
87
137
|
clearFilters(newFilters = {}) {
|
|
138
|
+
/* Reset pagination to the first page */
|
|
88
139
|
if (this.paginator) {
|
|
89
140
|
this.paginator.pageIndex = 0;
|
|
90
141
|
}
|
|
142
|
+
/* Apply the new filters */
|
|
91
143
|
this.fieldFilters = newFilters || {};
|
|
92
144
|
this.filter = '';
|
|
93
145
|
this.reload();
|
|
94
146
|
}
|
|
95
147
|
/**
|
|
96
|
-
*
|
|
148
|
+
* @method isAllSelected
|
|
149
|
+
* @description Checks if all items in the current page are selected.
|
|
150
|
+
* @returns {boolean} True if all items are selected, false otherwise.
|
|
97
151
|
*/
|
|
98
152
|
isAllSelected() {
|
|
153
|
+
/* If there are no selected items, return false */
|
|
99
154
|
if (this.selectionModel.isEmpty()) {
|
|
100
155
|
return false;
|
|
101
156
|
}
|
|
157
|
+
/* Return true if the number of selected items matches the number of items on the current page */
|
|
102
158
|
return this.selectionModel.selected.length === this.paginator?.length;
|
|
103
159
|
}
|
|
104
160
|
/**
|
|
105
|
-
*
|
|
106
|
-
* @
|
|
107
|
-
*
|
|
161
|
+
* @method toggleSelect
|
|
162
|
+
* @description Toggles the selection of all items in the current page.
|
|
163
|
+
* If items are already selected, they are cleared. If not, they are selected.
|
|
164
|
+
* @param {MatCheckboxChange} checkbox - The checkbox change event.
|
|
165
|
+
* @param {Function} predicate - Optional predicate to filter the items before selection.
|
|
108
166
|
*/
|
|
109
167
|
toggleSelect(checkbox, predicate) {
|
|
168
|
+
/* If any items are selected, clear the selection */
|
|
110
169
|
if (this.selectionModel.hasValue()) {
|
|
111
170
|
this.selectionModel.clear();
|
|
112
171
|
checkbox.source.checked = false;
|
|
113
172
|
}
|
|
114
173
|
else {
|
|
174
|
+
/* Otherwise, select all items that match the predicate */
|
|
115
175
|
this.data.filter(predicate ? predicate : x => x)
|
|
116
176
|
.filter(x => !x['locked'])
|
|
117
177
|
.forEach(data => this.selectionModel.select(data));
|
|
178
|
+
/* If not all items are selected, uncheck the checkbox */
|
|
118
179
|
if (this.selectionModel.selected.length !== this.paginator?.length) {
|
|
119
180
|
checkbox.source.checked = false;
|
|
120
181
|
}
|
|
121
182
|
}
|
|
122
183
|
}
|
|
123
184
|
/**
|
|
124
|
-
*
|
|
185
|
+
* @method getSelected
|
|
186
|
+
* @description Retrieves the selected items based on a specific key (e.g., 'id').
|
|
187
|
+
* @param {string} key - The key to extract from the selected items.
|
|
188
|
+
* @returns {TType[]} An array of selected items.
|
|
125
189
|
*/
|
|
126
190
|
getSelected = (key = 'id') => this.selectionModel.selected.map(x => x[key]);
|
|
127
191
|
}
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc3RhdGljLWRhdGEtc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvdGFibGUvdGFibGUuc3RhdGljLWRhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3ZDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUErQixTQUFRLGtCQUEyQjtJQUU5RTs7O09BR0c7SUFDSSxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFFdEQ7OztPQUdHO0lBQ0ksWUFBWSxHQUFHLElBQUksZUFBZSxDQUE0QixJQUFJLENBQUMsQ0FBQztJQUUzRTs7T0FFRztJQUNJLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBVSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFOUQ7O09BRUc7SUFDSCxJQUFJLFdBQVcsS0FBYSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU5RDs7T0FFRztJQUNJLFlBQVksR0FBUSxFQUFFLENBQUM7SUFFOUI7O09BRUc7SUFDSSxjQUFjLEdBQVEsRUFBRSxDQUFDO0lBRWhDOztPQUVHO0lBQ0ksa0JBQWtCLEdBQVEsRUFBRSxDQUFDO0lBRXBDOztPQUVHO0lBQ0ksU0FBUyxHQUFXLENBQUMsQ0FBQztJQUU3Qjs7T0FFRztJQUNJLEtBQUssR0FBVyxDQUFDLENBQUM7SUFFekI7O09BRUc7SUFDSSxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBRTdCOztPQUVHO0lBQ0ksU0FBUyxHQUFXLENBQUMsQ0FBQztJQUU3Qjs7T0FFRztJQUNJLFNBQVMsR0FBWSxLQUFL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LE1BQU0sQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVksQ0FBQyxRQUEyQixFQUFFLFNBQXdFO1FBQ3hILElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUM5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFFLENBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUVwRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNwRSxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDakMsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXLEdBQUcsQ0FBUSxNQUFjLElBQUksRUFBVyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUUsQ0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDcEgiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcGFnaW5hdGlvbic7XHJcblxyXG4vKipcclxuICogQSBnZW5lcmljIGRhdGFzb3VyY2UgZm9yIGRhdGEtdGFibGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBUYWJsZVN0YXRpY0RhdGFTb3VyY2U8VEVudGl0eT4gZXh0ZW5kcyBNYXRUYWJsZURhdGFTb3VyY2U8VEVudGl0eT4ge1xyXG5cclxuXHQvKipcclxuXHQgKiBfcmVsb2FkQ2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpXHJcblx0ICogRXZlbnQgZW1pdHRlZCBhZnRlciB0aGUgZGF0YSBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRwdWJsaWMgX3JlbG9hZENoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcblx0LyoqXHJcblx0ICogb25EYXRhTG9hZGVkOiBmdW5jdGlvbigkZXZlbnQpXHJcblx0ICogRXZlbnQgZW1pdHRlZCBhZnRlciB0aGUgZGF0YSBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRwdWJsaWMgb25EYXRhTG9hZGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uPFRFbnRpdHk+IHwgYW55PihudWxsKTtcclxuXHJcblx0LyoqXHJcblx0ICogVXNlZCB0byBwb3dlciBzZWxlY3Rpbmcgb25lIG9yIG1vcmUgb3B0aW9ucyBmcm9tIGEgbGlzdC5cclxuXHQgKi9cclxuXHRwdWJsaWMgc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VEVudGl0eT4odHJ1ZSwgW10pO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIHJlbG9hZCB0b2tlblxyXG5cdCAqL1xyXG5cdGdldCByZWxvYWRUb2tlbigpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fcmVsb2FkQ2hhbmdlLnZhbHVlOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVzZWQgdG8gYWRkIHNvbWUgZmllbGQgZmlsdGVyc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBmaWVsZEZpbHRlcnM6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBVc2VkIHRvIGFkZCBzb21lIGZpZWxkIG9wZXJhdG9yc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBmaWVsZE9wZXJhdG9yczogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVzZWQgdG8gYWRkIHNvbWUgc3RhdGljIGZpZWxkIGZpbHRlcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgc3RhdGljRmllbGRGaWx0ZXJzOiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGN1cnJlbnQgcGFnZSBpbmRleC5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgY3VycmVudCB0b3RhbCBudW1iZXIgb2YgaXRlbXMgYmVpbmcgcGFnZWRcclxuXHQgKi9cclxuXHRwdWJsaWMgdG90YWw6IG51bWJlciA9IDA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBjdXJyZW50IHBhZ2Ugc2l6ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYWdlU2l6ZTogbnVtYmVyID0gMTU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE51bWJlciBvZiBwYWdlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYWdlQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgZmxhZyB0byBzaG93IGxvYWRpbmcgcHJvY2Vzc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogUmVsb2FkcyBpdGVtc1xyXG5cdCAqIEBwYXJhbSBjbGVhclNlbGVjdGlvbiBcclxuXHQgKi9cclxuXHRwdWJsaWMgcmVsb2FkKGNsZWFyU2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0dGhpcy5fcmVsb2FkQ2hhbmdlLm5leHQoTWF0aC5yYW5kb20oKSk7XHJcblxyXG5cdFx0aWYgKGNsZWFyU2VsZWN0aW9uKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVzZWQgYnkgdGhlIE1hdFRhYmxlLiBDYWxsZWQgd2hlbiBpdCBjb25uZWN0cyB0byB0aGUgZGF0YSBzb3VyY2UuXHJcblx0ICogQGRvY3MtcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdGNvbm5lY3QoKTogQmVoYXZpb3JTdWJqZWN0PFRFbnRpdHlbXT4ge1xyXG5cdFx0dGhpcy5fcmVsb2FkQ2hhbmdlLnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0LyogUmVtb3ZlIGVtcHR5IGZpbHRlcnMgKi9cclxuXHRcdFx0T2JqZWN0LmtleXModGhpcy5maWVsZEZpbHRlcnMpLmZvckVhY2goKGtleSkgPT4gKCh0aGlzLmZpZWxkRmlsdGVyc1trZXldID09IG51bGwgfHwgdGhpcy5maWVsZEZpbHRlcnNba2V5XSA9PSAnJyB8fCB0aGlzLmZpZWxkRmlsdGVyc1trZXldID09ICd1bmRlZmluZWQnKSkgJiYgdGhpcy5maWVsZEZpbHRlcnNba2V5XSAhPSAwICYmIGRlbGV0ZSB0aGlzLmZpZWxkRmlsdGVyc1trZXldKTtcclxuXHRcdFx0T2JqZWN0LmtleXModGhpcy5zdGF0aWNGaWVsZEZpbHRlcnMpLmZvckVhY2goKGtleSkgPT4gKCh0aGlzLnN0YXRpY0ZpZWxkRmlsdGVyc1trZXldID09IG51bGwgfHwgdGhpcy5zdGF0aWNGaWVsZEZpbHRlcnNba2V5XSA9PSAnJyB8fCB0aGlzLnN0YXRpY0ZpZWxkRmlsdGVyc1trZXldID09ICd1bmRlZmluZWQnKSkgJiYgdGhpcy5zdGF0aWNGaWVsZEZpbHRlcnNba2V5XSAhPSAwICYmIGRlbGV0ZSB0aGlzLnN0YXRpY0ZpZWxkRmlsdGVyc1trZXldKTtcclxuXHJcblx0XHRcdE9iamVjdC5rZXlzKHRoaXMuZmllbGRGaWx0ZXJzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuXHRcdFx0XHR0aGlzLmZpbHRlclByZWRpY2F0ZSA9IChkYXRhOiBURW50aXR5LCBmaWx0ZXI6IHN0cmluZykgPT4gIWZpbHRlciB8fCBgJHsoZGF0YSBhcyBhbnkpW2tleV19YC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGAke3RoaXMuZmlsdGVyfWA/LnRvTG93ZXJDYXNlKCkpO1xyXG5cdFx0XHRcdHRoaXMuZmlsdGVyID0gdGhpcy5maWVsZEZpbHRlcnNba2V5XTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gc3VwZXIuY29ubmVjdCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2xlYXJzIGZpZWxkIGZpbHRlcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgY2xlYXJGaWx0ZXJzKG5ld0ZpbHRlcnM6IGFueSA9IHt9KTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5wYWdpbmF0b3IpIHtcclxuXHRcdFx0dGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmZpZWxkRmlsdGVycyA9IG5ld0ZpbHRlcnMgfHwge307XHJcblx0XHR0aGlzLmZpbHRlciA9ICcnO1xyXG5cdFx0dGhpcy5yZWxvYWQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrcywgd2hldGhlciBhbGwgaXRlbXMgYXJlIHNlbGVjdGVkXHJcblx0ICovXHJcblx0cHVibGljIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5wYWdpbmF0b3I/Lmxlbmd0aDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvZ2dsZXMgc2VsZWN0ZWQgaXRlbXNcclxuXHQgKiBAcGFyYW0gY2hlY2tib3ggXHJcblx0ICogQHBhcmFtIHByZWRpY2F0ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0b2dnbGVTZWxlY3QoY2hlY2tib3g6IE1hdENoZWNrYm94Q2hhbmdlLCBwcmVkaWNhdGU/OiAodmFsdWU6IFRFbnRpdHksIGluZGV4OiBudW1iZXIsIGFycmF5OiBURW50aXR5W10pID0+IHVua25vd24pIHtcclxuXHRcdGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsLmhhc1ZhbHVlKCkpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xyXG5cdFx0XHRjaGVja2JveC5zb3VyY2UuY2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5kYXRhLmZpbHRlcihwcmVkaWNhdGUgPyBwcmVkaWNhdGUgOiB4ID0+IHgpXHJcblx0XHRcdFx0LmZpbHRlcih4ID0+ICEoeCBhcyBhbnkpWydsb2NrZWQnXSlcclxuXHRcdFx0XHQuZm9yRWFjaChkYXRhID0+IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGRhdGEpKTtcclxuXHJcblx0XHRcdGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmxlbmd0aCAhPT0gdGhpcy5wYWdpbmF0b3I/Lmxlbmd0aCkge1xyXG5cdFx0XHRcdGNoZWNrYm94LnNvdXJjZS5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBzZWxlY3RlZCBJdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRTZWxlY3RlZCA9IDxUVHlwZT4oa2V5OiBzdHJpbmcgPSAnaWQnKTogVFR5cGVbXSA9PiB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLm1hcCh4ID0+ICh4IGFzIGFueSlba2V5XSk7XHJcbn0iXX0=
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc3RhdGljLWRhdGEtc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvdGFibGUvdGFibGUuc3RhdGljLWRhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3ZDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8scUJBQStCLFNBQVEsa0JBQTJCO0lBRTlFOzs7OztPQUtHO0lBQ0ksYUFBYSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBRXREOzs7Ozs7T0FNRztJQUNJLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBNEIsSUFBSSxDQUFDLENBQUM7SUFFM0U7Ozs7O09BS0c7SUFDSSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQVUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTlEOzs7OztPQUtHO0lBQ0gsSUFBSSxXQUFXLEtBQWEsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFOUQ7Ozs7O09BS0c7SUFDSSxZQUFZLEdBQVEsRUFBRSxDQUFDO0lBRTlCOzs7OztPQUtHO0lBQ0ksY0FBYyxHQUFRLEVBQUUsQ0FBQztJQUVoQzs7Ozs7T0FLRztJQUNJLGtCQUFrQixHQUFRLEVBQUUsQ0FBQztJQUVwQzs7Ozs7T0FLRztJQUNJLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFFN0I7Ozs7O09BS0c7SUFDSSxLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBRXpCOzs7OztPQUtHO0lBQ0ksUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUU3Qjs7Ozs7T0FLRztJQUNJLFNBQVMsR0FBVyxDQUFDLENB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RUFBVyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUUsQ0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDcEgiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcGFnaW5hdGlvbic7XHJcblxyXG4vKipcclxuICogQSBnZW5lcmljIGRhdGFzb3VyY2UgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCBkYXRhLXRhYmxlcyBpbiBBbmd1bGFyIE1hdGVyaWFsLlxyXG4gKiBUaGlzIGNsYXNzIGV4dGVuZHMgTWF0VGFibGVEYXRhU291cmNlIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IGxpa2UgXHJcbiAqIHNlbGVjdGlvbiBtYW5hZ2VtZW50LCBwYWdpbmF0aW9uLCBhbmQgZmlsdGVyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRhYmxlU3RhdGljRGF0YVNvdXJjZTxURW50aXR5PiBleHRlbmRzIE1hdFRhYmxlRGF0YVNvdXJjZTxURW50aXR5PiB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBfcmVsb2FkQ2hhbmdlXHJcblx0ICogQGRlc2NyaXB0aW9uIEEgQmVoYXZpb3JTdWJqZWN0IHRoYXQgdHJpZ2dlcnMgYSByZWxvYWQgb2YgdGhlIHRhYmxlIGRhdGEuIFxyXG5cdCAqIFRoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgcmVsb2FkIHRva2VuLCBlbnN1cmluZyB0aGUgZGF0YSBpcyByZWxvYWRlZCB3aGVuIGl0IGNoYW5nZXMuXHJcblx0ICogQHR5cGUge0JlaGF2aW9yU3ViamVjdDxudW1iZXI+fVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBfcmVsb2FkQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgb25EYXRhTG9hZGVkXHJcblx0ICogQGRlc2NyaXB0aW9uIEEgQmVoYXZpb3JTdWJqZWN0IHRoYXQgaG9sZHMgdGhlIGxvYWRlZCBkYXRhIG9yIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXHJcblx0ICogVGhpcyBpcyBlbWl0dGVkIGFmdGVyIHRoZSBkYXRhIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQsIHByb3ZpZGluZyBhIG1lY2hhbmlzbSBcclxuXHQgKiB0byB0cmFjayB0aGUgbG9hZGluZyBzdGF0ZSBhbmQgYW55IHVwZGF0ZXMgdG8gdGhlIGRhdGEuXHJcblx0ICogQHR5cGUge0JlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uPFRFbnRpdHk+IHwgYW55Pn1cclxuXHQgKi9cclxuXHRwdWJsaWMgb25EYXRhTG9hZGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uPFRFbnRpdHk+IHwgYW55PihudWxsKTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHNlbGVjdGlvbk1vZGVsXHJcblx0ICogQGRlc2NyaXB0aW9uIEEgU2VsZWN0aW9uTW9kZWwgdG8gaGFuZGxlIHNlbGVjdGlvbiBvZiBvbmUgb3IgbW9yZSBpdGVtcyBmcm9tIHRoZSBkYXRhLXRhYmxlLlxyXG5cdCAqIEl0IGFsbG93cyBtYW5hZ2luZyB0aGUgc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIHRhYmxlIGFuZCBzdXBwb3J0cyBtdWx0aXBsZSBzZWxlY3Rpb24uXHJcblx0ICogQHR5cGUge1NlbGVjdGlvbk1vZGVsPFRFbnRpdHk+fVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxURW50aXR5Pih0cnVlLCBbXSk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSByZWxvYWRUb2tlblxyXG5cdCAqIEBkZXNjcmlwdGlvbiBBIGdldHRlciB0byByZXR1cm4gdGhlIGN1cnJlbnQgcmVsb2FkIHRva2VuLiBcclxuXHQgKiBUaGUgcmVsb2FkIHRva2VuIGlzIHVzZWQgdG8gdHJpZ2dlciByZWxvYWRpbmcgb2YgZGF0YS5cclxuXHQgKiBAdHlwZSB7bnVtYmVyfVxyXG5cdCAqL1xyXG5cdGdldCByZWxvYWRUb2tlbigpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fcmVsb2FkQ2hhbmdlLnZhbHVlOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBmaWVsZEZpbHRlcnNcclxuXHQgKiBAZGVzY3JpcHRpb24gQW4gb2JqZWN0IHVzZWQgdG8gc3RvcmUgZmlsdGVycyBmb3Igc3BlY2lmaWMgZmllbGRzIGluIHRoZSBkYXRhLXRhYmxlLlxyXG5cdCAqIEl0IGFsbG93cyBmaWx0ZXJpbmcgb2YgZGF0YSBiYXNlZCBvbiBzcGVjaWZpYyBmaWVsZCB2YWx1ZXMuXHJcblx0ICogQHR5cGUge2FueX1cclxuXHQgKi9cclxuXHRwdWJsaWMgZmllbGRGaWx0ZXJzOiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IGZpZWxkT3BlcmF0b3JzXHJcblx0ICogQGRlc2NyaXB0aW9uIEFuIG9iamVjdCB0aGF0IHN0b3JlcyBvcGVyYXRvcnMgdG8gYmUgYXBwbGllZCBvbiBmaWVsZHMgZm9yIGZpbHRlcmluZy5cclxuXHQgKiBJdCBhbGxvd3MgY29tcGxleCBmaWx0ZXJpbmcgb3BlcmF0aW9ucyAoZS5nLiwgZXF1YWxzLCBjb250YWlucywgZ3JlYXRlciB0aGFuKS5cclxuXHQgKiBAdHlwZSB7YW55fVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBmaWVsZE9wZXJhdG9yczogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBzdGF0aWNGaWVsZEZpbHRlcnNcclxuXHQgKiBAZGVzY3JpcHRpb24gQW4gb2JqZWN0IHRvIHN0b3JlIHN0YXRpYyBmaWx0ZXJzIHRoYXQgYXJlIGFwcGxpZWQgdG8gdGhlIGRhdGEtdGFibGUuXHJcblx0ICogVGhlc2UgZmlsdGVycyBhcmUgbm90IGR5bmFtaWNhbGx5IHNldCBieSB0aGUgdXNlciBidXQgYXJlIGFsd2F5cyBhY3RpdmUuXHJcblx0ICogQHR5cGUge2FueX1cclxuXHQgKi9cclxuXHRwdWJsaWMgc3RhdGljRmllbGRGaWx0ZXJzOiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHBhZ2VJbmRleFxyXG5cdCAqIEBkZXNjcmlwdGlvbiBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgcGFnZSBiZWluZyB2aWV3ZWQgaW4gdGhlIGRhdGEtdGFibGUuIFxyXG5cdCAqIEl0IHN0YXJ0cyBmcm9tIDAgYW5kIGluY3JlbWVudHMgd2l0aCBlYWNoIHBhZ2UgY2hhbmdlLlxyXG5cdCAqIEB0eXBlIHtudW1iZXJ9XHJcblx0ICovXHJcblx0cHVibGljIHBhZ2VJbmRleDogbnVtYmVyID0gMDtcclxuXHJcblx0LyoqXHJcblx0ICogQHByb3BlcnR5IHRvdGFsXHJcblx0ICogQGRlc2NyaXB0aW9uIFRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGRhdGEgc291cmNlLiBcclxuXHQgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHRvIGNhbGN1bGF0ZSBwYWdpbmF0aW9uLlxyXG5cdCAqIEB0eXBlIHtudW1iZXJ9XHJcblx0ICovXHJcblx0cHVibGljIHRvdGFsOiBudW1iZXIgPSAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgcGFnZVNpemVcclxuXHQgKiBAZGVzY3JpcHRpb24gVGhlIG51bWJlciBvZiBpdGVtcyBkaXNwbGF5ZWQgcGVyIHBhZ2UgaW4gdGhlIGRhdGEtdGFibGUuXHJcblx0ICogSXQgY29udHJvbHMgaG93IG1hbnkgcmVjb3JkcyBhcmUgc2hvd24gb24gYSBzaW5nbGUgcGFnZS5cclxuXHQgKiBAdHlwZSB7bnVtYmVyfVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYWdlU2l6ZTogbnVtYmVyID0gMTU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcm9wZXJ0eSBwYWdlQ291bnRcclxuXHQgKiBAZGVzY3JpcHRpb24gVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyBiYXNlZCBvbiB0aGUgY3VycmVudCBwYWdlIHNpemUgYW5kIHRvdGFsIGl0ZW1zLlxyXG5cdCAqIFRoaXMgaXMgY2FsY3VsYXRlZCBkeW5hbWljYWxseSB3aGVuZXZlciBkYXRhIGNoYW5nZXMuXHJcblx0ICogQHR5cGUge251bWJlcn1cclxuXHQgKi9cclxuXHRwdWJsaWMgcGFnZUNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBAcHJvcGVydHkgaXNMb2FkaW5nXHJcblx0ICogQGRlc2NyaXB0aW9uIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRhdGEgaXMgY3VycmVudGx5IGJlaW5nIGxvYWRlZC5cclxuXHQgKiBJdCBpcyB1c2VkIHRvIHNob3cgYSBsb2FkaW5nIHNwaW5uZXIgb3IgaW5kaWNhdG9yIHdoaWxlIGRhdGEgaXMgYmVpbmcgZmV0Y2hlZC5cclxuXHQgKiBAdHlwZSB7Ym9vbGVhbn1cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBtZXRob2QgcmVsb2FkXHJcblx0ICogQGRlc2NyaXB0aW9uIFJlbG9hZHMgdGhlIHRhYmxlIGRhdGEgYnkgdHJpZ2dlcmluZyBhIG5ldyByYW5kb20gcmVsb2FkIHRva2VuLlxyXG5cdCAqIE9wdGlvbmFsbHkgY2xlYXJzIHRoZSBzZWxlY3Rpb24gaWYgdGhlIGBjbGVhclNlbGVjdGlvbmAgZmxhZyBpcyBzZXQgdG8gdHJ1ZS5cclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGNsZWFyU2VsZWN0aW9uIC0gSWYgdHJ1ZSwgY2xlYXJzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhZnRlciByZWxvYWQuXHJcblx0ICovXHJcblx0cHVibGljIHJlbG9hZChjbGVhclNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuXHRcdC8qIEVtaXQgYSBuZXcgcmVsb2FkIHRva2VuIHRvIHRyaWdnZXIgZGF0YSByZWxvYWQgKi9cclxuXHRcdHRoaXMuX3JlbG9hZENoYW5nZS5uZXh0KE1hdGgucmFuZG9tKCkpO1xyXG5cclxuXHRcdC8qIENsZWFyIHRoZSBzZWxlY3Rpb24gaWYgc3BlY2lmaWVkICovXHJcblx0XHRpZiAoY2xlYXJTZWxlY3Rpb24pIHtcclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQG1ldGhvZCBjb25uZWN0XHJcblx0ICogQGRlc2NyaXB0aW9uIENhbGxlZCB3aGVuIHRoZSBNYXRUYWJsZSBjb25uZWN0cyB0byB0aGUgZGF0YSBzb3VyY2UuIFxyXG5cdCAqIFRoaXMgbWV0aG9kIHN1YnNjcmliZXMgdG8gdGhlIHJlbG9hZCB0b2tlbiB0byB0cmlnZ2VyIGEgZmlsdGVyIHVwZGF0ZSBhbmQgZGF0YSByZWZyZXNoLlxyXG5cdCAqIEBkb2NzLXByaXZhdGVcclxuXHQgKiBAcmV0dXJucyB7QmVoYXZpb3JTdWJqZWN0PFRFbnRpdHlbXT59IEEgQmVoYXZpb3JTdWJqZWN0IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZGF0YSBhcnJheS5cclxuXHQgKi9cclxuXHRjb25uZWN0KCk6IEJlaGF2aW9yU3ViamVjdDxURW50aXR5W10+IHtcclxuXHRcdC8qIFN1YnNjcmliZSB0byB0aGUgcmVsb2FkIHRva2VuIGFuZCB1cGRhdGUgZmlsdGVycyBhY2NvcmRpbmdseSAqL1xyXG5cdFx0dGhpcy5fcmVsb2FkQ2hhbmdlLnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0LyogQ2xlYW4gdXAgYW55IGVtcHR5IGZpbHRlcnMgYmVmb3JlIGFwcGx5aW5nIHRoZW0gKi9cclxuXHRcdFx0T2JqZWN0LmtleXModGhpcy5maWVsZEZpbHRlcnMpLmZvckVhY2goKGtleSkgPT5cclxuXHRcdFx0XHQoKHRoaXMuZmllbGRGaWx0ZXJzW2tleV0gPT0gbnVsbCB8fCB0aGlzLmZpZWxkRmlsdGVyc1trZXldID09PSAnJyB8fCB0aGlzLmZpZWxkRmlsdGVyc1trZXldID09PSAndW5kZWZpbmVkJykpICYmIHRoaXMuZmllbGRGaWx0ZXJzW2tleV0gIT09IDAgJiYgZGVsZXRlIHRoaXMuZmllbGRGaWx0ZXJzW2tleV0pO1xyXG5cdFx0XHRPYmplY3Qua2V5cyh0aGlzLnN0YXRpY0ZpZWxkRmlsdGVycykuZm9yRWFjaCgoa2V5KSA9PlxyXG5cdFx0XHRcdCgodGhpcy5zdGF0aWNGaWVsZEZpbHRlcnNba2V5XSA9PSBudWxsIHx8IHRoaXMuc3RhdGljRmllbGRGaWx0ZXJzW2tleV0gPT09ICcnIHx8IHRoaXMuc3RhdGljRmllbGRGaWx0ZXJzW2tleV0gPT09ICd1bmRlZmluZWQnKSkgJiYgdGhpcy5zdGF0aWNGaWVsZEZpbHRlcnNba2V5XSAhPT0gMCAmJiBkZWxldGUgdGhpcy5zdGF0aWNGaWVsZEZpbHRlcnNba2V5XSk7XHJcblxyXG5cdFx0XHQvKiBBcHBseSBmaWx0ZXJzIGR5bmFtaWNhbGx5IHRvIHRoZSB0YWJsZSBkYXRhICovXHJcblx0XHRcdE9iamVjdC5rZXlzKHRoaXMuZmllbGRGaWx0ZXJzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuXHRcdFx0XHR0aGlzLmZpbHRlclByZWRpY2F0ZSA9IChkYXRhOiBURW50aXR5LCBmaWx0ZXI6IHN0cmluZykgPT4gIWZpbHRlciB8fCBgJHsoZGF0YSBhcyBhbnkpW2tleV19YC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGAke3RoaXMuZmlsdGVyfWA/LnRvTG93ZXJDYXNlKCkpO1xyXG5cdFx0XHRcdHRoaXMuZmlsdGVyID0gdGhpcy5maWVsZEZpbHRlcnNba2V5XTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBSZXR1cm4gdGhlIGRhdGEgZm9yIHRoZSBNYXRUYWJsZSB0byBkaXNwbGF5ICovXHJcblx0XHRyZXR1cm4gc3VwZXIuY29ubmVjdCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQG1ldGhvZCBjbGVhckZpbHRlcnNcclxuXHQgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCBjdXJyZW50IGZpZWxkIGZpbHRlcnMgYW5kIHJlc2V0cyBwYWdpbmF0aW9uIHRvIHRoZSBmaXJzdCBwYWdlLlxyXG5cdCAqIE9wdGlvbmFsbHkgYWNjZXB0cyBuZXcgZmlsdGVycyB0byByZXBsYWNlIHRoZSBleGlzdGluZyBvbmVzLlxyXG5cdCAqIEBwYXJhbSB7YW55fSBuZXdGaWx0ZXJzIC0gTmV3IGZpbHRlcnMgdG8gYXBwbHkgYWZ0ZXIgY2xlYXJpbmcgdGhlIHByZXZpb3VzIG9uZXMuXHJcblx0ICovXHJcblx0cHVibGljIGNsZWFyRmlsdGVycyhuZXdGaWx0ZXJzOiBhbnkgPSB7fSk6IHZvaWQge1xyXG5cdFx0LyogUmVzZXQgcGFnaW5hdGlvbiB0byB0aGUgZmlyc3QgcGFnZSAqL1xyXG5cdFx0aWYgKHRoaXMucGFnaW5hdG9yKSB7XHJcblx0XHRcdHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQXBwbHkgdGhlIG5ldyBmaWx0ZXJzICovXHJcblx0XHR0aGlzLmZpZWxkRmlsdGVycyA9IG5ld0ZpbHRlcnMgfHwge307XHJcblx0XHR0aGlzLmZpbHRlciA9ICcnO1xyXG5cdFx0dGhpcy5yZWxvYWQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBtZXRob2QgaXNBbGxTZWxlY3RlZFxyXG5cdCAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYWxsIGl0ZW1zIGluIHRoZSBjdXJyZW50IHBhZ2UgYXJlIHNlbGVjdGVkLlxyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGFsbCBpdGVtcyBhcmUgc2VsZWN0ZWQsIGZhbHNlIG90aGVyd2lzZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuXHRcdC8qIElmIHRoZXJlIGFyZSBubyBzZWxlY3RlZCBpdGVtcywgcmV0dXJuIGZhbHNlICovXHJcblx0XHRpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJldHVybiB0cnVlIGlmIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIG9uIHRoZSBjdXJyZW50IHBhZ2UgKi9cclxuXHRcdHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5wYWdpbmF0b3I/Lmxlbmd0aDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBtZXRob2QgdG9nZ2xlU2VsZWN0XHJcblx0ICogQGRlc2NyaXB0aW9uIFRvZ2dsZXMgdGhlIHNlbGVjdGlvbiBvZiBhbGwgaXRlbXMgaW4gdGhlIGN1cnJlbnQgcGFnZS5cclxuXHQgKiBJZiBpdGVtcyBhcmUgYWxyZWFkeSBzZWxlY3RlZCwgdGhleSBhcmUgY2xlYXJlZC4gSWYgbm90LCB0aGV5IGFyZSBzZWxlY3RlZC5cclxuXHQgKiBAcGFyYW0ge01hdENoZWNrYm94Q2hhbmdlfSBjaGVja2JveCAtIFRoZSBjaGVja2JveCBjaGFuZ2UgZXZlbnQuXHJcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIC0gT3B0aW9uYWwgcHJlZGljYXRlIHRvIGZpbHRlciB0aGUgaXRlbXMgYmVmb3JlIHNlbGVjdGlvbi5cclxuXHQgKi9cclxuXHRwdWJsaWMgdG9nZ2xlU2VsZWN0KGNoZWNrYm94OiBNYXRDaGVja2JveENoYW5nZSwgcHJlZGljYXRlPzogKHZhbHVlOiBURW50aXR5LCBpbmRleDogbnVtYmVyLCBhcnJheTogVEVudGl0eVtdKSA9PiB1bmtub3duKSB7XHJcblx0XHQvKiBJZiBhbnkgaXRlbXMgYXJlIHNlbGVjdGVkLCBjbGVhciB0aGUgc2VsZWN0aW9uICovXHJcblx0XHRpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbC5oYXNWYWx1ZSgpKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcclxuXHRcdFx0Y2hlY2tib3guc291cmNlLmNoZWNrZWQgPSBmYWxzZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8qIE90aGVyd2lzZSwgc2VsZWN0IGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRoZSBwcmVkaWNhdGUgKi9cclxuXHRcdFx0dGhpcy5kYXRhLmZpbHRlcihwcmVkaWNhdGUgPyBwcmVkaWNhdGUgOiB4ID0+IHgpXHJcblx0XHRcdFx0LmZpbHRlcih4ID0+ICEoeCBhcyBhbnkpWydsb2NrZWQnXSlcclxuXHRcdFx0XHQuZm9yRWFjaChkYXRhID0+IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGRhdGEpKTtcclxuXHJcblx0XHRcdC8qIElmIG5vdCBhbGwgaXRlbXMgYXJlIHNlbGVjdGVkLCB1bmNoZWNrIHRoZSBjaGVja2JveCAqL1xyXG5cdFx0XHRpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5sZW5ndGggIT09IHRoaXMucGFnaW5hdG9yPy5sZW5ndGgpIHtcclxuXHRcdFx0XHRjaGVja2JveC5zb3VyY2UuY2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAbWV0aG9kIGdldFNlbGVjdGVkXHJcblx0ICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUgc2VsZWN0ZWQgaXRlbXMgYmFzZWQgb24gYSBzcGVjaWZpYyBrZXkgKGUuZy4sICdpZCcpLlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIGV4dHJhY3QgZnJvbSB0aGUgc2VsZWN0ZWQgaXRlbXMuXHJcblx0ICogQHJldHVybnMge1RUeXBlW119IEFuIGFycmF5IG9mIHNlbGVjdGVkIGl0ZW1zLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRTZWxlY3RlZCA9IDxUVHlwZT4oa2V5OiBzdHJpbmcgPSAnaWQnKTogVFR5cGVbXSA9PiB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLm1hcCh4ID0+ICh4IGFzIGFueSlba2V5XSk7XHJcbn0iXX0=
|
package/fesm2022/messaia-cdk.mjs
CHANGED
|
@@ -13970,126 +13970,190 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
13970
13970
|
}] });
|
|
13971
13971
|
|
|
13972
13972
|
/**
|
|
13973
|
-
* A generic datasource for data-
|
|
13973
|
+
* A generic datasource class for working with data-tables in Angular Material.
|
|
13974
|
+
* This class extends MatTableDataSource to provide additional functionality like
|
|
13975
|
+
* selection management, pagination, and filtering.
|
|
13974
13976
|
*/
|
|
13975
13977
|
class TableStaticDataSource extends MatTableDataSource {
|
|
13976
13978
|
/**
|
|
13977
|
-
* _reloadChange
|
|
13978
|
-
*
|
|
13979
|
+
* @property _reloadChange
|
|
13980
|
+
* @description A BehaviorSubject that triggers a reload of the table data.
|
|
13981
|
+
* The value is used as a reload token, ensuring the data is reloaded when it changes.
|
|
13982
|
+
* @type {BehaviorSubject<number>}
|
|
13979
13983
|
*/
|
|
13980
13984
|
_reloadChange = new BehaviorSubject(0);
|
|
13981
13985
|
/**
|
|
13982
|
-
* onDataLoaded
|
|
13983
|
-
*
|
|
13986
|
+
* @property onDataLoaded
|
|
13987
|
+
* @description A BehaviorSubject that holds the loaded data or pagination information.
|
|
13988
|
+
* This is emitted after the data is successfully loaded, providing a mechanism
|
|
13989
|
+
* to track the loading state and any updates to the data.
|
|
13990
|
+
* @type {BehaviorSubject<Pagination<TEntity> | any>}
|
|
13984
13991
|
*/
|
|
13985
13992
|
onDataLoaded = new BehaviorSubject(null);
|
|
13986
13993
|
/**
|
|
13987
|
-
*
|
|
13994
|
+
* @property selectionModel
|
|
13995
|
+
* @description A SelectionModel to handle selection of one or more items from the data-table.
|
|
13996
|
+
* It allows managing the selected items in the table and supports multiple selection.
|
|
13997
|
+
* @type {SelectionModel<TEntity>}
|
|
13988
13998
|
*/
|
|
13989
13999
|
selectionModel = new SelectionModel(true, []);
|
|
13990
14000
|
/**
|
|
13991
|
-
*
|
|
14001
|
+
* @property reloadToken
|
|
14002
|
+
* @description A getter to return the current reload token.
|
|
14003
|
+
* The reload token is used to trigger reloading of data.
|
|
14004
|
+
* @type {number}
|
|
13992
14005
|
*/
|
|
13993
14006
|
get reloadToken() { return this._reloadChange.value; }
|
|
13994
14007
|
/**
|
|
13995
|
-
*
|
|
14008
|
+
* @property fieldFilters
|
|
14009
|
+
* @description An object used to store filters for specific fields in the data-table.
|
|
14010
|
+
* It allows filtering of data based on specific field values.
|
|
14011
|
+
* @type {any}
|
|
13996
14012
|
*/
|
|
13997
14013
|
fieldFilters = {};
|
|
13998
14014
|
/**
|
|
13999
|
-
*
|
|
14015
|
+
* @property fieldOperators
|
|
14016
|
+
* @description An object that stores operators to be applied on fields for filtering.
|
|
14017
|
+
* It allows complex filtering operations (e.g., equals, contains, greater than).
|
|
14018
|
+
* @type {any}
|
|
14000
14019
|
*/
|
|
14001
14020
|
fieldOperators = {};
|
|
14002
14021
|
/**
|
|
14003
|
-
*
|
|
14022
|
+
* @property staticFieldFilters
|
|
14023
|
+
* @description An object to store static filters that are applied to the data-table.
|
|
14024
|
+
* These filters are not dynamically set by the user but are always active.
|
|
14025
|
+
* @type {any}
|
|
14004
14026
|
*/
|
|
14005
14027
|
staticFieldFilters = {};
|
|
14006
14028
|
/**
|
|
14007
|
-
*
|
|
14029
|
+
* @property pageIndex
|
|
14030
|
+
* @description The index of the current page being viewed in the data-table.
|
|
14031
|
+
* It starts from 0 and increments with each page change.
|
|
14032
|
+
* @type {number}
|
|
14008
14033
|
*/
|
|
14009
14034
|
pageIndex = 0;
|
|
14010
14035
|
/**
|
|
14011
|
-
*
|
|
14036
|
+
* @property total
|
|
14037
|
+
* @description The total number of items in the data source.
|
|
14038
|
+
* This is typically used to calculate pagination.
|
|
14039
|
+
* @type {number}
|
|
14012
14040
|
*/
|
|
14013
14041
|
total = 0;
|
|
14014
14042
|
/**
|
|
14015
|
-
*
|
|
14043
|
+
* @property pageSize
|
|
14044
|
+
* @description The number of items displayed per page in the data-table.
|
|
14045
|
+
* It controls how many records are shown on a single page.
|
|
14046
|
+
* @type {number}
|
|
14016
14047
|
*/
|
|
14017
14048
|
pageSize = 15;
|
|
14018
14049
|
/**
|
|
14019
|
-
*
|
|
14050
|
+
* @property pageCount
|
|
14051
|
+
* @description The total number of pages based on the current page size and total items.
|
|
14052
|
+
* This is calculated dynamically whenever data changes.
|
|
14053
|
+
* @type {number}
|
|
14020
14054
|
*/
|
|
14021
14055
|
pageCount = 0;
|
|
14022
14056
|
/**
|
|
14023
|
-
*
|
|
14057
|
+
* @property isLoading
|
|
14058
|
+
* @description A flag indicating whether the data is currently being loaded.
|
|
14059
|
+
* It is used to show a loading spinner or indicator while data is being fetched.
|
|
14060
|
+
* @type {boolean}
|
|
14024
14061
|
*/
|
|
14025
14062
|
isLoading = false;
|
|
14026
14063
|
/**
|
|
14027
|
-
*
|
|
14028
|
-
* @
|
|
14064
|
+
* @method reload
|
|
14065
|
+
* @description Reloads the table data by triggering a new random reload token.
|
|
14066
|
+
* Optionally clears the selection if the `clearSelection` flag is set to true.
|
|
14067
|
+
* @param {boolean} clearSelection - If true, clears the current selection after reload.
|
|
14029
14068
|
*/
|
|
14030
14069
|
reload(clearSelection = true) {
|
|
14070
|
+
/* Emit a new reload token to trigger data reload */
|
|
14031
14071
|
this._reloadChange.next(Math.random());
|
|
14072
|
+
/* Clear the selection if specified */
|
|
14032
14073
|
if (clearSelection) {
|
|
14033
14074
|
this.selectionModel.clear();
|
|
14034
14075
|
}
|
|
14035
14076
|
}
|
|
14036
14077
|
/**
|
|
14037
|
-
*
|
|
14078
|
+
* @method connect
|
|
14079
|
+
* @description Called when the MatTable connects to the data source.
|
|
14080
|
+
* This method subscribes to the reload token to trigger a filter update and data refresh.
|
|
14038
14081
|
* @docs-private
|
|
14082
|
+
* @returns {BehaviorSubject<TEntity[]>} A BehaviorSubject containing the current data array.
|
|
14039
14083
|
*/
|
|
14040
14084
|
connect() {
|
|
14085
|
+
/* Subscribe to the reload token and update filters accordingly */
|
|
14041
14086
|
this._reloadChange.subscribe(x => {
|
|
14042
|
-
/*
|
|
14043
|
-
Object.keys(this.fieldFilters).forEach((key) => ((this.fieldFilters[key] == null || this.fieldFilters[key]
|
|
14044
|
-
Object.keys(this.staticFieldFilters).forEach((key) => ((this.staticFieldFilters[key] == null || this.staticFieldFilters[key]
|
|
14087
|
+
/* Clean up any empty filters before applying them */
|
|
14088
|
+
Object.keys(this.fieldFilters).forEach((key) => ((this.fieldFilters[key] == null || this.fieldFilters[key] === '' || this.fieldFilters[key] === 'undefined')) && this.fieldFilters[key] !== 0 && delete this.fieldFilters[key]);
|
|
14089
|
+
Object.keys(this.staticFieldFilters).forEach((key) => ((this.staticFieldFilters[key] == null || this.staticFieldFilters[key] === '' || this.staticFieldFilters[key] === 'undefined')) && this.staticFieldFilters[key] !== 0 && delete this.staticFieldFilters[key]);
|
|
14090
|
+
/* Apply filters dynamically to the table data */
|
|
14045
14091
|
Object.keys(this.fieldFilters).forEach((key) => {
|
|
14046
14092
|
this.filterPredicate = (data, filter) => !filter || `${data[key]}`.toLowerCase().includes(`${this.filter}`?.toLowerCase());
|
|
14047
14093
|
this.filter = this.fieldFilters[key];
|
|
14048
14094
|
});
|
|
14049
14095
|
});
|
|
14096
|
+
/* Return the data for the MatTable to display */
|
|
14050
14097
|
return super.connect();
|
|
14051
14098
|
}
|
|
14052
14099
|
/**
|
|
14053
|
-
*
|
|
14100
|
+
* @method clearFilters
|
|
14101
|
+
* @description Clears all current field filters and resets pagination to the first page.
|
|
14102
|
+
* Optionally accepts new filters to replace the existing ones.
|
|
14103
|
+
* @param {any} newFilters - New filters to apply after clearing the previous ones.
|
|
14054
14104
|
*/
|
|
14055
14105
|
clearFilters(newFilters = {}) {
|
|
14106
|
+
/* Reset pagination to the first page */
|
|
14056
14107
|
if (this.paginator) {
|
|
14057
14108
|
this.paginator.pageIndex = 0;
|
|
14058
14109
|
}
|
|
14110
|
+
/* Apply the new filters */
|
|
14059
14111
|
this.fieldFilters = newFilters || {};
|
|
14060
14112
|
this.filter = '';
|
|
14061
14113
|
this.reload();
|
|
14062
14114
|
}
|
|
14063
14115
|
/**
|
|
14064
|
-
*
|
|
14116
|
+
* @method isAllSelected
|
|
14117
|
+
* @description Checks if all items in the current page are selected.
|
|
14118
|
+
* @returns {boolean} True if all items are selected, false otherwise.
|
|
14065
14119
|
*/
|
|
14066
14120
|
isAllSelected() {
|
|
14121
|
+
/* If there are no selected items, return false */
|
|
14067
14122
|
if (this.selectionModel.isEmpty()) {
|
|
14068
14123
|
return false;
|
|
14069
14124
|
}
|
|
14125
|
+
/* Return true if the number of selected items matches the number of items on the current page */
|
|
14070
14126
|
return this.selectionModel.selected.length === this.paginator?.length;
|
|
14071
14127
|
}
|
|
14072
14128
|
/**
|
|
14073
|
-
*
|
|
14074
|
-
* @
|
|
14075
|
-
*
|
|
14129
|
+
* @method toggleSelect
|
|
14130
|
+
* @description Toggles the selection of all items in the current page.
|
|
14131
|
+
* If items are already selected, they are cleared. If not, they are selected.
|
|
14132
|
+
* @param {MatCheckboxChange} checkbox - The checkbox change event.
|
|
14133
|
+
* @param {Function} predicate - Optional predicate to filter the items before selection.
|
|
14076
14134
|
*/
|
|
14077
14135
|
toggleSelect(checkbox, predicate) {
|
|
14136
|
+
/* If any items are selected, clear the selection */
|
|
14078
14137
|
if (this.selectionModel.hasValue()) {
|
|
14079
14138
|
this.selectionModel.clear();
|
|
14080
14139
|
checkbox.source.checked = false;
|
|
14081
14140
|
}
|
|
14082
14141
|
else {
|
|
14142
|
+
/* Otherwise, select all items that match the predicate */
|
|
14083
14143
|
this.data.filter(predicate ? predicate : x => x)
|
|
14084
14144
|
.filter(x => !x['locked'])
|
|
14085
14145
|
.forEach(data => this.selectionModel.select(data));
|
|
14146
|
+
/* If not all items are selected, uncheck the checkbox */
|
|
14086
14147
|
if (this.selectionModel.selected.length !== this.paginator?.length) {
|
|
14087
14148
|
checkbox.source.checked = false;
|
|
14088
14149
|
}
|
|
14089
14150
|
}
|
|
14090
14151
|
}
|
|
14091
14152
|
/**
|
|
14092
|
-
*
|
|
14153
|
+
* @method getSelected
|
|
14154
|
+
* @description Retrieves the selected items based on a specific key (e.g., 'id').
|
|
14155
|
+
* @param {string} key - The key to extract from the selected items.
|
|
14156
|
+
* @returns {TType[]} An array of selected items.
|
|
14093
14157
|
*/
|
|
14094
14158
|
getSelected = (key = 'id') => this.selectionModel.selected.map(x => x[key]);
|
|
14095
14159
|
}
|
|
@@ -20370,6 +20434,13 @@ class GenericEmbeddedListComponent extends GenericListComponent {
|
|
|
20370
20434
|
* If true, pagination controls will be available for navigating through the data.
|
|
20371
20435
|
*/
|
|
20372
20436
|
paginable = false;
|
|
20437
|
+
/**
|
|
20438
|
+
* @property pageSize
|
|
20439
|
+
* @description The number of items displayed per page in the data-table.
|
|
20440
|
+
* It controls how many records are shown on a single page.
|
|
20441
|
+
* @type {number}
|
|
20442
|
+
*/
|
|
20443
|
+
pageSize = 10;
|
|
20373
20444
|
/**
|
|
20374
20445
|
* The name of the property representing the list of items.
|
|
20375
20446
|
*/
|
|
@@ -20433,10 +20504,12 @@ class GenericEmbeddedListComponent extends GenericListComponent {
|
|
|
20433
20504
|
if (!this.parent?.id && this.paginable) {
|
|
20434
20505
|
/* Initializes the dataSource with the entities */
|
|
20435
20506
|
this.dataSource = new TableStaticDataSource(...this.form?.value[this.itemsPropertyName]);
|
|
20507
|
+
/* Set the default page size */
|
|
20508
|
+
this.dataSource.pageSize = this.pageSize;
|
|
20436
20509
|
/* Sets the paginator for the dataSource */
|
|
20437
20510
|
this.dataSource.paginator = this.paginator;
|
|
20438
20511
|
/* Subscribes to the dataSource connection and assigns the result to the items array */
|
|
20439
|
-
this.
|
|
20512
|
+
this.connect();
|
|
20440
20513
|
}
|
|
20441
20514
|
}
|
|
20442
20515
|
/**
|
|
@@ -20502,7 +20575,7 @@ class GenericEmbeddedListComponent extends GenericListComponent {
|
|
|
20502
20575
|
super.addRowMenuItems();
|
|
20503
20576
|
}
|
|
20504
20577
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GenericEmbeddedListComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
20505
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: GenericEmbeddedListComponent, inputs: { form: "form", parent: "parent", hashPrefix: "hashPrefix", paginable: "paginable" }, usesInheritance: true, ngImport: i0 });
|
|
20578
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: GenericEmbeddedListComponent, inputs: { form: "form", parent: "parent", hashPrefix: "hashPrefix", paginable: "paginable", pageSize: "pageSize" }, usesInheritance: true, ngImport: i0 });
|
|
20506
20579
|
}
|
|
20507
20580
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GenericEmbeddedListComponent, decorators: [{
|
|
20508
20581
|
type: Directive
|
|
@@ -20514,6 +20587,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
20514
20587
|
type: Input
|
|
20515
20588
|
}], paginable: [{
|
|
20516
20589
|
type: Input
|
|
20590
|
+
}], pageSize: [{
|
|
20591
|
+
type: Input
|
|
20517
20592
|
}] } });
|
|
20518
20593
|
|
|
20519
20594
|
// @dynamic
|