igniteui-angular 12.3.6 → 12.3.7
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/bundles/igniteui-angular.umd.js +27 -26
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/esm2015/lib/grids/tree-grid/tree-grid-selection.service.js +28 -27
- package/fesm2015/igniteui-angular.js +27 -26
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/igniteui-angular.metadata.json +1 -1
- package/lib/grids/tree-grid/tree-grid-selection.service.d.ts +2 -1
- package/package.json +1 -1
|
@@ -32,7 +32,7 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
32
32
|
if (!parents.size) {
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
visibleRowIDs = this.getRowIDs(this.allData);
|
|
35
|
+
visibleRowIDs = new Set(this.getRowIDs(this.allData));
|
|
36
36
|
this.rowsToBeSelected = new Set(this.rowSelection);
|
|
37
37
|
this.rowsToBeIndeterminate = new Set(this.indeterminateRows);
|
|
38
38
|
if (crudRowID) {
|
|
@@ -119,8 +119,10 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
119
119
|
* retrieve the rows which should be added/removed to/from the old selection
|
|
120
120
|
*/
|
|
121
121
|
handleAddedAndRemovedArgs(args) {
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
const newSelectionSet = new Set(args.newSelection);
|
|
123
|
+
const oldSelectionSet = new Set(args.oldSelection);
|
|
124
|
+
args.removed = args.oldSelection.filter(x => !newSelectionSet.has(x));
|
|
125
|
+
args.added = args.newSelection.filter(x => !oldSelectionSet.has(x));
|
|
124
126
|
}
|
|
125
127
|
/**
|
|
126
128
|
* adds to rowsToBeProcessed set all visible children of the rows which was initially within the rowsToBeProcessed set
|
|
@@ -129,14 +131,15 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
129
131
|
* @param visibleRowIDs list of all visible rowIds
|
|
130
132
|
* @returns a new set with all direct parents of the rows within rowsToBeProcessed set
|
|
131
133
|
*/
|
|
132
|
-
collectRowsChildrenAndDirectParents(rowsToBeProcessed, visibleRowIDs) {
|
|
134
|
+
collectRowsChildrenAndDirectParents(rowsToBeProcessed, visibleRowIDs, adding) {
|
|
133
135
|
const processedRowsParents = new Set();
|
|
134
136
|
Array.from(rowsToBeProcessed).forEach((rowID) => {
|
|
137
|
+
this.selectDeselectRow(rowID, adding);
|
|
135
138
|
const rowTreeRecord = this.grid.gridAPI.get_rec_by_id(rowID);
|
|
136
139
|
const rowAndAllChildren = this.get_all_children(rowTreeRecord);
|
|
137
140
|
rowAndAllChildren.forEach(row => {
|
|
138
|
-
if (visibleRowIDs.
|
|
139
|
-
|
|
141
|
+
if (visibleRowIDs.has(row.rowID)) {
|
|
142
|
+
this.selectDeselectRow(row.rowID, adding);
|
|
140
143
|
}
|
|
141
144
|
});
|
|
142
145
|
if (rowTreeRecord && rowTreeRecord.parent) {
|
|
@@ -152,27 +155,19 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
152
155
|
calculateRowsNewSelectionState(args) {
|
|
153
156
|
this.rowsToBeSelected = new Set(args.oldSelection ? args.oldSelection : this.getSelectedRows());
|
|
154
157
|
this.rowsToBeIndeterminate = new Set(this.getIndeterminateRows());
|
|
155
|
-
const visibleRowIDs = this.getRowIDs(this.allData);
|
|
158
|
+
const visibleRowIDs = new Set(this.getRowIDs(this.allData));
|
|
156
159
|
const removed = new Set(args.removed);
|
|
157
160
|
const added = new Set(args.added);
|
|
158
161
|
if (removed && removed.size) {
|
|
159
162
|
let removedRowsParents = new Set();
|
|
160
|
-
removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs);
|
|
161
|
-
removed.forEach(removedRow => {
|
|
162
|
-
this.rowsToBeSelected.delete(removedRow);
|
|
163
|
-
this.rowsToBeIndeterminate.delete(removedRow);
|
|
164
|
-
});
|
|
163
|
+
removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs, false);
|
|
165
164
|
Array.from(removedRowsParents).forEach((parent) => {
|
|
166
165
|
this.handleParentSelectionState(parent, visibleRowIDs);
|
|
167
166
|
});
|
|
168
167
|
}
|
|
169
168
|
if (added && added.size) {
|
|
170
169
|
let addedRowsParents = new Set();
|
|
171
|
-
addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs);
|
|
172
|
-
added.forEach(addedRow => {
|
|
173
|
-
this.rowsToBeSelected.add(addedRow);
|
|
174
|
-
this.rowsToBeIndeterminate.delete(addedRow);
|
|
175
|
-
});
|
|
170
|
+
addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs, true);
|
|
176
171
|
Array.from(addedRowsParents).forEach((parent) => {
|
|
177
172
|
this.handleParentSelectionState(parent, visibleRowIDs);
|
|
178
173
|
});
|
|
@@ -196,31 +191,27 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
196
191
|
handleRowSelectionState(treeRow, visibleRowIDs) {
|
|
197
192
|
let visibleChildren = [];
|
|
198
193
|
if (treeRow && treeRow.children) {
|
|
199
|
-
visibleChildren = treeRow.children.filter(child => visibleRowIDs.
|
|
194
|
+
visibleChildren = treeRow.children.filter(child => visibleRowIDs.has(child.rowID));
|
|
200
195
|
}
|
|
201
196
|
if (visibleChildren.length) {
|
|
202
197
|
if (visibleChildren.every(row => this.rowsToBeSelected.has(row.rowID))) {
|
|
203
|
-
this.
|
|
204
|
-
this.rowsToBeIndeterminate.delete(treeRow.rowID);
|
|
198
|
+
this.selectDeselectRow(treeRow.rowID, true);
|
|
205
199
|
}
|
|
206
200
|
else if (visibleChildren.some(row => this.rowsToBeSelected.has(row.rowID) || this.rowsToBeIndeterminate.has(row.rowID))) {
|
|
207
201
|
this.rowsToBeIndeterminate.add(treeRow.rowID);
|
|
208
202
|
this.rowsToBeSelected.delete(treeRow.rowID);
|
|
209
203
|
}
|
|
210
204
|
else {
|
|
211
|
-
this.
|
|
212
|
-
this.rowsToBeSelected.delete(treeRow.rowID);
|
|
205
|
+
this.selectDeselectRow(treeRow.rowID, false);
|
|
213
206
|
}
|
|
214
207
|
}
|
|
215
208
|
else {
|
|
216
209
|
// if the children of the row has been deleted and the row was selected do not change its state
|
|
217
210
|
if (this.isRowSelected(treeRow.rowID)) {
|
|
218
|
-
this.
|
|
219
|
-
this.rowsToBeIndeterminate.delete(treeRow.rowID);
|
|
211
|
+
this.selectDeselectRow(treeRow.rowID, true);
|
|
220
212
|
}
|
|
221
213
|
else {
|
|
222
|
-
this.
|
|
223
|
-
this.rowsToBeIndeterminate.delete(treeRow.rowID);
|
|
214
|
+
this.selectDeselectRow(treeRow.rowID, false);
|
|
224
215
|
}
|
|
225
216
|
}
|
|
226
217
|
}
|
|
@@ -234,8 +225,18 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
234
225
|
}
|
|
235
226
|
return children;
|
|
236
227
|
}
|
|
228
|
+
selectDeselectRow(rowID, select) {
|
|
229
|
+
if (select) {
|
|
230
|
+
this.rowsToBeSelected.add(rowID);
|
|
231
|
+
this.rowsToBeIndeterminate.delete(rowID);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
this.rowsToBeSelected.delete(rowID);
|
|
235
|
+
this.rowsToBeIndeterminate.delete(rowID);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
237
238
|
}
|
|
238
239
|
IgxTreeGridSelectionService.decorators = [
|
|
239
240
|
{ type: Injectable }
|
|
240
241
|
];
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLXNlbGVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUt6RSxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsdUJBQXVCO0lBSXBFLGtEQUFrRDtJQUMzQyxxQkFBcUIsQ0FBQyxNQUFhLEVBQUUsa0JBQW1CO1FBQzNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUU7WUFDM0UsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELE9BQU87U0FDVjtRQUNELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsb0RBQW9EO0lBQzdDLHVCQUF1QixDQUFDLE1BQWE7UUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUU7WUFDOUQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE9BQU87U0FDVjtRQUNELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0scUJBQXFCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBTTtR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QkFBTTtnQkFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEQ7U0FDSjtJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxNQUF1QjtRQUM1QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNyRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN4QjtTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFFcEIsQ0FBQzs7O1lBOVFKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJVHJlZUdyaWRSZWNvcmQgfSBmcm9tICcuL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIGV4dGVuZHMgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2Uge1xuICAgIHByaXZhdGUgcm93c1RvQmVTZWxlY3RlZDogU2V0PGFueT47XG4gICAgcHJpdmF0ZSByb3dzVG9CZUluZGV0ZXJtaW5hdGU6IFNldDxhbnk+O1xuXG4gICAgLyoqIFNlbGVjdCBzcGVjaWZpZWQgcm93cy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10sIGNsZWFyUHJldlNlbGVjdGlvbj8pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZCAmJiB0aGlzLmdyaWQucm93U2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5tdWx0aXBsZUNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHMsIGNsZWFyUHJldlNlbGVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEcywgY2xlYXJQcmV2U2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIHJvd3MuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlQ2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5jYXNjYWRlRGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5kZXNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQ/KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93U2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5tdWx0aXBsZUNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdENhc2NhZGVSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDYXNjYWRlU2VsZWN0aW9uT25GaWx0ZXJBbmRDUlVEKFxuICAgICAgICBwYXJlbnRzOiBTZXQ8YW55PixcbiAgICAgICAgY3J1ZFJvd0lEPzogYW55LFxuICAgICAgICB2aXNpYmxlUm93SURzOiBhbnlbXSA9IG51bGwpIHtcbiAgICAgICAgaWYgKHZpc2libGVSb3dJRHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSB0cmVlIGdyaWQgaGFzIGZsYXQgc3RydWN0dXJlXG4gICAgICAgICAgICAvLyBkbyBub3QgZXhwbGljaXRseSBoYW5kbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiB0aGUgcm93c1xuICAgICAgICAgICAgaWYgKCFwYXJlbnRzLnNpemUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2aXNpYmxlUm93SURzID0gdGhpcy5nZXRSb3dJRHModGhpcy5hbGxEYXRhKTtcbiAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZCA9IG5ldyBTZXQodGhpcy5yb3dTZWxlY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUgPSBuZXcgU2V0KHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MpO1xuICAgICAgICAgICAgaWYgKGNydWRSb3dJRCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmRlbGV0ZShjcnVkUm93SUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcGFyZW50cy5zaXplKSB7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MgPSBuZXcgU2V0KHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGVtaXQgc2VsZWN0aW9uQ2hhbmdlRCBldmVudCwgY2FsY3VsYXRlIGl0cyBhcmdzIHRocm91Z2ggdGhlIGhhbmRsZUFkZGVkQW5kUmVtb3ZlZEFyZ3MgbWV0aG9kXG4gICAgICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJvd1NlbGVjdGlvblN0YXRlKHBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXJlbnRzLmFkZChwYXJlbnQucGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FzY2FkZVNlbGVjdGlvbk9uRmlsdGVyQW5kQ1JVRChuZXdQYXJlbnRzLCBudWxsLCB2aXNpYmxlUm93SURzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhc2NhZGVTZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoeyBhZGRlZDogcm93SURzLCByZW1vdmVkOiBbXSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBbLi4ub2xkU2VsZWN0aW9uLCAuLi5yb3dJRHNdO1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHsgb2xkU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24gfTtcblxuICAgICAgICAgICAgLy8gcmV0cmlldmUgb25seSB0aGUgcm93cyB3aXRob3V0IHRoZWlyIHBhcmVudHMvY2hpbGRyZW4gd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWRkZWRBbmRSZW1vdmVkQXJncyhhcmdzKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMucm93c1RvQmVTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MgPSBuZXcgU2V0KHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FzY2FkZURlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHsgYWRkZWQ6IFtdLCByZW1vdmVkOiByb3dJRHMgfTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG5cbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMucm93c1RvQmVTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MgPSBuZXcgU2V0KHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0aW9uU2VydmljZSgpOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDYXNjYWRlUm93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQ/KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGN1cnJTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgICAgICBvbGRTZWxlY3Rpb246IGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLCByZW1vdmVkLCBldmVudCwgY2FuY2VsOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUm93c05ld1NlbGVjdGlvblN0YXRlKGFyZ3MpO1xuXG4gICAgICAgIGFyZ3MubmV3U2VsZWN0aW9uID0gQXJyYXkuZnJvbSh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuXG4gICAgICAgIC8vIHJldHJpZXZlIHJvd3MvcGFyZW50cy9jaGlsZHJlbiB3aGljaCBoYXMgYmVlbiBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIHNlbGVjdGlvblxuICAgICAgICB0aGlzLmhhbmRsZUFkZGVkQW5kUmVtb3ZlZEFyZ3MoYXJncyk7XG5cbiAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdGVkLmVtaXQoYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBhcmdzLm5ld1NlbGVjdGlvbiBoYXNuJ3QgYmVlbiBtb2RpZmllZFxuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKEFycmF5LmZyb20odGhpcy5yb3dzVG9CZVNlbGVjdGVkKSwgYXJncy5uZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MgPSBuZXcgU2V0KHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzZWxlY3QgdGhlIHJvd3Mgd2l0aGluIHRoZSBtb2RpZmllZCBhcmdzLm5ld1NlbGVjdGlvbiB3aXRoIG5vIGV2ZW50XG4gICAgICAgICAgICB0aGlzLmNhc2NhZGVTZWxlY3RSb3dzV2l0aE5vRXZlbnQoYXJncy5uZXdTZWxlY3Rpb24sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiByZXRyaWV2ZSB0aGUgcm93cyB3aGljaCBzaG91bGQgYmUgYWRkZWQvcmVtb3ZlZCB0by9mcm9tIHRoZSBvbGQgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVBZGRlZEFuZFJlbW92ZWRBcmdzKGFyZ3M6IGFueSkge1xuICAgICAgICBhcmdzLnJlbW92ZWQgPSBhcmdzLm9sZFNlbGVjdGlvbi5maWx0ZXIoeCA9PiBhcmdzLm5ld1NlbGVjdGlvbi5pbmRleE9mKHgpIDwgMCk7XG4gICAgICAgIGFyZ3MuYWRkZWQgPSBhcmdzLm5ld1NlbGVjdGlvbi5maWx0ZXIoeCA9PiBhcmdzLm9sZFNlbGVjdGlvbi5pbmRleE9mKHgpIDwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkcyB0byByb3dzVG9CZVByb2Nlc3NlZCBzZXQgYWxsIHZpc2libGUgY2hpbGRyZW4gb2YgdGhlIHJvd3Mgd2hpY2ggd2FzIGluaXRpYWxseSB3aXRoaW4gdGhlIHJvd3NUb0JlUHJvY2Vzc2VkIHNldFxuICAgICAqXG4gICAgICogQHBhcmFtIHJvd3NUb0JlUHJvY2Vzc2VkIHNldCBvZiB0aGUgcm93cyAod2l0aG91dCB0aGVpciBwYXJlbnRzL2NoaWxkcmVuKSB0byBiZSBzZWxlY3RlZC9kZXNlbGVjdGVkXG4gICAgICogQHBhcmFtIHZpc2libGVSb3dJRHMgbGlzdCBvZiBhbGwgdmlzaWJsZSByb3dJZHNcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBzZXQgd2l0aCBhbGwgZGlyZWN0IHBhcmVudHMgb2YgdGhlIHJvd3Mgd2l0aGluIHJvd3NUb0JlUHJvY2Vzc2VkIHNldFxuICAgICAqL1xuICAgIHByaXZhdGUgY29sbGVjdFJvd3NDaGlsZHJlbkFuZERpcmVjdFBhcmVudHMocm93c1RvQmVQcm9jZXNzZWQ6IFNldDxhbnk+LCB2aXNpYmxlUm93SURzOiBhbnlbXSk6IFNldDxhbnk+IHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkUm93c1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICAgICAgQXJyYXkuZnJvbShyb3dzVG9CZVByb2Nlc3NlZCkuZm9yRWFjaCgocm93SUQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1RyZWVSZWNvcmQgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcmVjX2J5X2lkKHJvd0lEKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0FuZEFsbENoaWxkcmVuID0gdGhpcy5nZXRfYWxsX2NoaWxkcmVuKHJvd1RyZWVSZWNvcmQpO1xuICAgICAgICAgICAgcm93QW5kQWxsQ2hpbGRyZW4uZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2aXNpYmxlUm93SURzLmluZGV4T2Yocm93LnJvd0lEKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3NUb0JlUHJvY2Vzc2VkLmFkZChyb3cucm93SUQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHJvd1RyZWVSZWNvcmQgJiYgcm93VHJlZVJlY29yZC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRSb3dzUGFyZW50cy5hZGQocm93VHJlZVJlY29yZC5wYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZFJvd3NQYXJlbnRzO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogcG9wdWxhdGVzIHRoZSByb3dzVG9CZVNlbGVjdGVkIGFuZCByb3dzVG9CZUluZGV0ZXJtaW5hdGUgc2V0c1xuICAgICAqIHdpdGggdGhlIHJvd3Mgd2hpY2ggd2lsbCBiZSBldmVudHVhbGx5IGluIHNlbGVjdGVkL2luZGV0ZXJtaW5hdGUgc3RhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVJvd3NOZXdTZWxlY3Rpb25TdGF0ZShhcmdzOiBhbnkpIHtcbiAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkID0gbmV3IFNldDxhbnk+KGFyZ3Mub2xkU2VsZWN0aW9uID8gYXJncy5vbGRTZWxlY3Rpb24gOiB0aGlzLmdldFNlbGVjdGVkUm93cygpKTtcbiAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUgPSBuZXcgU2V0PGFueT4odGhpcy5nZXRJbmRldGVybWluYXRlUm93cygpKTtcblxuICAgICAgICBjb25zdCB2aXNpYmxlUm93SURzID0gdGhpcy5nZXRSb3dJRHModGhpcy5hbGxEYXRhKTtcblxuICAgICAgICBjb25zdCByZW1vdmVkID0gbmV3IFNldChhcmdzLnJlbW92ZWQpO1xuICAgICAgICBjb25zdCBhZGRlZCA9IG5ldyBTZXQoYXJncy5hZGRlZCk7XG5cbiAgICAgICAgaWYgKHJlbW92ZWQgJiYgcmVtb3ZlZC5zaXplKSB7XG4gICAgICAgICAgICBsZXQgcmVtb3ZlZFJvd3NQYXJlbnRzID0gbmV3IFNldDxhbnk+KCk7XG5cbiAgICAgICAgICAgIHJlbW92ZWRSb3dzUGFyZW50cyA9IHRoaXMuY29sbGVjdFJvd3NDaGlsZHJlbkFuZERpcmVjdFBhcmVudHMocmVtb3ZlZCwgdmlzaWJsZVJvd0lEcyk7XG5cbiAgICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaChyZW1vdmVkUm93ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuZGVsZXRlKHJlbW92ZWRSb3cpO1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShyZW1vdmVkUm93KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKHJlbW92ZWRSb3dzUGFyZW50cykuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZShwYXJlbnQsIHZpc2libGVSb3dJRHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkZWQgJiYgYWRkZWQuc2l6ZSkge1xuICAgICAgICAgICAgbGV0IGFkZGVkUm93c1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcblxuICAgICAgICAgICAgYWRkZWRSb3dzUGFyZW50cyA9IHRoaXMuY29sbGVjdFJvd3NDaGlsZHJlbkFuZERpcmVjdFBhcmVudHMoYWRkZWQsIHZpc2libGVSb3dJRHMpO1xuXG4gICAgICAgICAgICBhZGRlZC5mb3JFYWNoKGFkZGVkUm93ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuYWRkKGFkZGVkUm93KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUoYWRkZWRSb3cpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20oYWRkZWRSb3dzUGFyZW50cykuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZShwYXJlbnQsIHZpc2libGVSb3dJRHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZWN1cnNpdmVseSBoYW5kbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCBwYXJlbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZSh0cmVlUm93OiBJVHJlZUdyaWRSZWNvcmQsIHZpc2libGVSb3dJRHM6IGFueVtdKSB7XG4gICAgICAgIGlmICghdHJlZVJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uU3RhdGUodHJlZVJvdywgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgIGlmICh0cmVlUm93LnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZSh0cmVlUm93LnBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBhIGdpdmVuIHJvdyBiYXNlZCB0aGUgc2VsZWN0aW9uIHN0YXRlcyBvZiBpdHMgZGlyZWN0IGNoaWxkcmVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVSb3dTZWxlY3Rpb25TdGF0ZSh0cmVlUm93OiBJVHJlZUdyaWRSZWNvcmQsIHZpc2libGVSb3dJRHM6IGFueVtdKSB7XG4gICAgICAgIGxldCB2aXNpYmxlQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgaWYgKHRyZWVSb3cgJiYgdHJlZVJvdy5jaGlsZHJlbikge1xuICAgICAgICAgICAgdmlzaWJsZUNoaWxkcmVuID0gdHJlZVJvdy5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gdmlzaWJsZVJvd0lEcy5pbmRleE9mKGNoaWxkLnJvd0lEKSA+PSAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmlzaWJsZUNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHZpc2libGVDaGlsZHJlbi5ldmVyeShyb3cgPT4gdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmhhcyhyb3cucm93SUQpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5hZGQodHJlZVJvdy5yb3dJRCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuZGVsZXRlKHRyZWVSb3cucm93SUQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2aXNpYmxlQ2hpbGRyZW4uc29tZShyb3cgPT4gdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmhhcyhyb3cucm93SUQpIHx8IHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlLmhhcyhyb3cucm93SUQpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlLmFkZCh0cmVlUm93LnJvd0lEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuZGVsZXRlKHRyZWVSb3cucm93SUQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUodHJlZVJvdy5yb3dJRCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmRlbGV0ZSh0cmVlUm93LnJvd0lEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjaGlsZHJlbiBvZiB0aGUgcm93IGhhcyBiZWVuIGRlbGV0ZWQgYW5kIHRoZSByb3cgd2FzIHNlbGVjdGVkIGRvIG5vdCBjaGFuZ2UgaXRzIHN0YXRlXG4gICAgICAgICAgICBpZiAodGhpcy5pc1Jvd1NlbGVjdGVkKHRyZWVSb3cucm93SUQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmFkZCh0cmVlUm93LnJvd0lEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUodHJlZVJvdy5yb3dJRCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5kZWxldGUodHJlZVJvdy5yb3dJRCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuZGVsZXRlKHRyZWVSb3cucm93SUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfYWxsX2NoaWxkcmVuKHJlY29yZDogSVRyZWVHcmlkUmVjb3JkKTogYW55W10ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICAgICAgICBpZiAocmVjb3JkICYmIHJlY29yZC5jaGlsZHJlbiAmJiByZWNvcmQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHJlY29yZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goLi4udGhpcy5nZXRfYWxsX2NoaWxkcmVuKGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuXG4gICAgfVxuXG59XG4iXX0=
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLXNlbGVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUt6RSxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsdUJBQXVCO0lBSXBFLGtEQUFrRDtJQUMzQyxxQkFBcUIsQ0FBQyxNQUFhLEVBQUUsa0JBQW1CO1FBQzNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUU7WUFDM0UsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELE9BQU87U0FDVjtRQUNELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsb0RBQW9EO0lBQzdDLHVCQUF1QixDQUFDLE1BQWE7UUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUU7WUFDOUQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE9BQU87U0FDVjtRQUNELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0scUJBQXFCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBTTtR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QUFDLENBQUM7Z0JBQy9DLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEI7U0FDSjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBRXBCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFVLEVBQUUsTUFBZTtRQUNqRCxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQzs7O1lBN1FKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJVHJlZUdyaWRSZWNvcmQgfSBmcm9tICcuL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIGV4dGVuZHMgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2Uge1xuICAgIHByaXZhdGUgcm93c1RvQmVTZWxlY3RlZDogU2V0PGFueT47XG4gICAgcHJpdmF0ZSByb3dzVG9CZUluZGV0ZXJtaW5hdGU6IFNldDxhbnk+O1xuXG4gICAgLyoqIFNlbGVjdCBzcGVjaWZpZWQgcm93cy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10sIGNsZWFyUHJldlNlbGVjdGlvbj8pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZCAmJiB0aGlzLmdyaWQucm93U2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5tdWx0aXBsZUNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHMsIGNsZWFyUHJldlNlbGVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEcywgY2xlYXJQcmV2U2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIHJvd3MuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlQ2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5jYXNjYWRlRGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5kZXNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQ/KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93U2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5tdWx0aXBsZUNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdENhc2NhZGVSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDYXNjYWRlU2VsZWN0aW9uT25GaWx0ZXJBbmRDUlVEKFxuICAgICAgICBwYXJlbnRzOiBTZXQ8YW55PixcbiAgICAgICAgY3J1ZFJvd0lEPzogYW55LFxuICAgICAgICB2aXNpYmxlUm93SURzOiBTZXQ8YW55PiA9IG51bGwpIHtcbiAgICAgICAgaWYgKHZpc2libGVSb3dJRHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSB0cmVlIGdyaWQgaGFzIGZsYXQgc3RydWN0dXJlXG4gICAgICAgICAgICAvLyBkbyBub3QgZXhwbGljaXRseSBoYW5kbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiB0aGUgcm93c1xuICAgICAgICAgICAgaWYgKCFwYXJlbnRzLnNpemUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2aXNpYmxlUm93SURzID0gbmV3IFNldCh0aGlzLmdldFJvd0lEcyh0aGlzLmFsbERhdGEpKTtcbiAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZCA9IG5ldyBTZXQodGhpcy5yb3dTZWxlY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUgPSBuZXcgU2V0KHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MpO1xuICAgICAgICAgICAgaWYgKGNydWRSb3dJRCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmRlbGV0ZShjcnVkUm93SUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcGFyZW50cy5zaXplKSB7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MgPSBuZXcgU2V0KHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGVtaXQgc2VsZWN0aW9uQ2hhbmdlRCBldmVudCwgY2FsY3VsYXRlIGl0cyBhcmdzIHRocm91Z2ggdGhlIGhhbmRsZUFkZGVkQW5kUmVtb3ZlZEFyZ3MgbWV0aG9kXG4gICAgICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJvd1NlbGVjdGlvblN0YXRlKHBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXJlbnRzLmFkZChwYXJlbnQucGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FzY2FkZVNlbGVjdGlvbk9uRmlsdGVyQW5kQ1JVRChuZXdQYXJlbnRzLCBudWxsLCB2aXNpYmxlUm93SURzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhc2NhZGVTZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoeyBhZGRlZDogcm93SURzLCByZW1vdmVkOiBbXSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBbLi4ub2xkU2VsZWN0aW9uLCAuLi5yb3dJRHNdO1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHsgb2xkU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24gfTtcblxuICAgICAgICAgICAgLy8gcmV0cmlldmUgb25seSB0aGUgcm93cyB3aXRob3V0IHRoZWlyIHBhcmVudHMvY2hpbGRyZW4gd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWRkZWRBbmRSZW1vdmVkQXJncyhhcmdzKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMucm93c1RvQmVTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MgPSBuZXcgU2V0KHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FzY2FkZURlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHsgYWRkZWQ6IFtdLCByZW1vdmVkOiByb3dJRHMgfTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG5cbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMucm93c1RvQmVTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MgPSBuZXcgU2V0KHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0aW9uU2VydmljZSgpOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDYXNjYWRlUm93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQ/KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGN1cnJTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgICAgICBvbGRTZWxlY3Rpb246IGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLCByZW1vdmVkLCBldmVudCwgY2FuY2VsOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUm93c05ld1NlbGVjdGlvblN0YXRlKGFyZ3MpO1xuXG4gICAgICAgIGFyZ3MubmV3U2VsZWN0aW9uID0gQXJyYXkuZnJvbSh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuXG4gICAgICAgIC8vIHJldHJpZXZlIHJvd3MvcGFyZW50cy9jaGlsZHJlbiB3aGljaCBoYXMgYmVlbiBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIHNlbGVjdGlvblxuICAgICAgICB0aGlzLmhhbmRsZUFkZGVkQW5kUmVtb3ZlZEFyZ3MoYXJncyk7XG5cbiAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdGVkLmVtaXQoYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBhcmdzLm5ld1NlbGVjdGlvbiBoYXNuJ3QgYmVlbiBtb2RpZmllZFxuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKEFycmF5LmZyb20odGhpcy5yb3dzVG9CZVNlbGVjdGVkKSwgYXJncy5uZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MgPSBuZXcgU2V0KHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzZWxlY3QgdGhlIHJvd3Mgd2l0aGluIHRoZSBtb2RpZmllZCBhcmdzLm5ld1NlbGVjdGlvbiB3aXRoIG5vIGV2ZW50XG4gICAgICAgICAgICB0aGlzLmNhc2NhZGVTZWxlY3RSb3dzV2l0aE5vRXZlbnQoYXJncy5uZXdTZWxlY3Rpb24sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiByZXRyaWV2ZSB0aGUgcm93cyB3aGljaCBzaG91bGQgYmUgYWRkZWQvcmVtb3ZlZCB0by9mcm9tIHRoZSBvbGQgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVBZGRlZEFuZFJlbW92ZWRBcmdzKGFyZ3M6IGFueSkge1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb25TZXQgPSBuZXcgU2V0KGFyZ3MubmV3U2VsZWN0aW9uKTtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uU2V0ID0gbmV3IFNldChhcmdzLm9sZFNlbGVjdGlvbik7XG4gICAgICAgIGFyZ3MucmVtb3ZlZCA9IGFyZ3Mub2xkU2VsZWN0aW9uLmZpbHRlcih4ID0+ICFuZXdTZWxlY3Rpb25TZXQuaGFzKHgpKTtcbiAgICAgICAgYXJncy5hZGRlZCA9IGFyZ3MubmV3U2VsZWN0aW9uLmZpbHRlcih4ID0+ICFvbGRTZWxlY3Rpb25TZXQuaGFzKHgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGRzIHRvIHJvd3NUb0JlUHJvY2Vzc2VkIHNldCBhbGwgdmlzaWJsZSBjaGlsZHJlbiBvZiB0aGUgcm93cyB3aGljaCB3YXMgaW5pdGlhbGx5IHdpdGhpbiB0aGUgcm93c1RvQmVQcm9jZXNzZWQgc2V0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93c1RvQmVQcm9jZXNzZWQgc2V0IG9mIHRoZSByb3dzICh3aXRob3V0IHRoZWlyIHBhcmVudHMvY2hpbGRyZW4pIHRvIGJlIHNlbGVjdGVkL2Rlc2VsZWN0ZWRcbiAgICAgKiBAcGFyYW0gdmlzaWJsZVJvd0lEcyBsaXN0IG9mIGFsbCB2aXNpYmxlIHJvd0lkc1xuICAgICAqIEByZXR1cm5zIGEgbmV3IHNldCB3aXRoIGFsbCBkaXJlY3QgcGFyZW50cyBvZiB0aGUgcm93cyB3aXRoaW4gcm93c1RvQmVQcm9jZXNzZWQgc2V0XG4gICAgICovXG4gICAgcHJpdmF0ZSBjb2xsZWN0Um93c0NoaWxkcmVuQW5kRGlyZWN0UGFyZW50cyhyb3dzVG9CZVByb2Nlc3NlZDogU2V0PGFueT4sIHZpc2libGVSb3dJRHM6IFNldDxhbnk+LCBhZGRpbmc6IGJvb2xlYW4pOiBTZXQ8YW55PiB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZFJvd3NQYXJlbnRzID0gbmV3IFNldDxhbnk+KCk7XG4gICAgICAgIEFycmF5LmZyb20ocm93c1RvQmVQcm9jZXNzZWQpLmZvckVhY2goKHJvd0lEKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERlc2VsZWN0Um93KHJvd0lELCBhZGRpbmcpO1xuICAgICAgICAgICAgY29uc3Qgcm93VHJlZVJlY29yZCA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yZWNfYnlfaWQocm93SUQpO1xuICAgICAgICAgICAgY29uc3Qgcm93QW5kQWxsQ2hpbGRyZW4gPSB0aGlzLmdldF9hbGxfY2hpbGRyZW4ocm93VHJlZVJlY29yZCk7XG4gICAgICAgICAgICByb3dBbmRBbGxDaGlsZHJlbi5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZpc2libGVSb3dJRHMuaGFzKHJvdy5yb3dJRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REZXNlbGVjdFJvdyhyb3cucm93SUQsIGFkZGluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocm93VHJlZVJlY29yZCAmJiByb3dUcmVlUmVjb3JkLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZFJvd3NQYXJlbnRzLmFkZChyb3dUcmVlUmVjb3JkLnBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkUm93c1BhcmVudHM7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBwb3B1bGF0ZXMgdGhlIHJvd3NUb0JlU2VsZWN0ZWQgYW5kIHJvd3NUb0JlSW5kZXRlcm1pbmF0ZSBzZXRzXG4gICAgICogd2l0aCB0aGUgcm93cyB3aGljaCB3aWxsIGJlIGV2ZW50dWFsbHkgaW4gc2VsZWN0ZWQvaW5kZXRlcm1pbmF0ZSBzdGF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY2FsY3VsYXRlUm93c05ld1NlbGVjdGlvblN0YXRlKGFyZ3M6IGFueSkge1xuICAgICAgICB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQgPSBuZXcgU2V0PGFueT4oYXJncy5vbGRTZWxlY3Rpb24gPyBhcmdzLm9sZFNlbGVjdGlvbiA6IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCkpO1xuICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZSA9IG5ldyBTZXQ8YW55Pih0aGlzLmdldEluZGV0ZXJtaW5hdGVSb3dzKCkpO1xuXG4gICAgICAgIGNvbnN0IHZpc2libGVSb3dJRHMgPSBuZXcgU2V0KHRoaXMuZ2V0Um93SURzKHRoaXMuYWxsRGF0YSkpO1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBuZXcgU2V0KGFyZ3MucmVtb3ZlZCk7XG4gICAgICAgIGNvbnN0IGFkZGVkID0gbmV3IFNldChhcmdzLmFkZGVkKTtcblxuICAgICAgICBpZiAocmVtb3ZlZCAmJiByZW1vdmVkLnNpemUpIHtcbiAgICAgICAgICAgIGxldCByZW1vdmVkUm93c1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcblxuICAgICAgICAgICAgcmVtb3ZlZFJvd3NQYXJlbnRzID0gdGhpcy5jb2xsZWN0Um93c0NoaWxkcmVuQW5kRGlyZWN0UGFyZW50cyhyZW1vdmVkLCB2aXNpYmxlUm93SURzLCBmYWxzZSk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20ocmVtb3ZlZFJvd3NQYXJlbnRzKS5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhcmVudFNlbGVjdGlvblN0YXRlKHBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRlZCAmJiBhZGRlZC5zaXplKSB7XG4gICAgICAgICAgICBsZXQgYWRkZWRSb3dzUGFyZW50cyA9IG5ldyBTZXQ8YW55PigpO1xuXG4gICAgICAgICAgICBhZGRlZFJvd3NQYXJlbnRzID0gdGhpcy5jb2xsZWN0Um93c0NoaWxkcmVuQW5kRGlyZWN0UGFyZW50cyhhZGRlZCwgdmlzaWJsZVJvd0lEcywgdHJ1ZSk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20oYWRkZWRSb3dzUGFyZW50cykuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZShwYXJlbnQsIHZpc2libGVSb3dJRHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZWN1cnNpdmVseSBoYW5kbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCBwYXJlbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZSh0cmVlUm93OiBJVHJlZUdyaWRSZWNvcmQsIHZpc2libGVSb3dJRHM6IFNldDxhbnk+KSB7XG4gICAgICAgIGlmICghdHJlZVJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uU3RhdGUodHJlZVJvdywgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgIGlmICh0cmVlUm93LnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZSh0cmVlUm93LnBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBhIGdpdmVuIHJvdyBiYXNlZCB0aGUgc2VsZWN0aW9uIHN0YXRlcyBvZiBpdHMgZGlyZWN0IGNoaWxkcmVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVSb3dTZWxlY3Rpb25TdGF0ZSh0cmVlUm93OiBJVHJlZUdyaWRSZWNvcmQsIHZpc2libGVSb3dJRHM6IFNldDxhbnk+KSB7XG4gICAgICAgIGxldCB2aXNpYmxlQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgaWYgKHRyZWVSb3cgJiYgdHJlZVJvdy5jaGlsZHJlbikge1xuICAgICAgICAgICAgdmlzaWJsZUNoaWxkcmVuID0gdHJlZVJvdy5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gdmlzaWJsZVJvd0lEcy5oYXMoY2hpbGQucm93SUQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmlzaWJsZUNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHZpc2libGVDaGlsZHJlbi5ldmVyeShyb3cgPT4gdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmhhcyhyb3cucm93SUQpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVzZWxlY3RSb3codHJlZVJvdy5yb3dJRCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZpc2libGVDaGlsZHJlbi5zb21lKHJvdyA9PiB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuaGFzKHJvdy5yb3dJRCkgfHwgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuaGFzKHJvdy5yb3dJRCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuYWRkKHRyZWVSb3cucm93SUQpO1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5kZWxldGUodHJlZVJvdy5yb3dJRCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVzZWxlY3RSb3codHJlZVJvdy5yb3dJRCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGNoaWxkcmVuIG9mIHRoZSByb3cgaGFzIGJlZW4gZGVsZXRlZCBhbmQgdGhlIHJvdyB3YXMgc2VsZWN0ZWQgZG8gbm90IGNoYW5nZSBpdHMgc3RhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQodHJlZVJvdy5yb3dJRCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERlc2VsZWN0Um93KHRyZWVSb3cucm93SUQsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERlc2VsZWN0Um93KHRyZWVSb3cucm93SUQsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0X2FsbF9jaGlsZHJlbihyZWNvcmQ6IElUcmVlR3JpZFJlY29yZCk6IGFueVtdIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgaWYgKHJlY29yZCAmJiByZWNvcmQuY2hpbGRyZW4gJiYgcmVjb3JkLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiByZWNvcmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKC4uLnRoaXMuZ2V0X2FsbF9jaGlsZHJlbihjaGlsZCkpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcblxuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0RGVzZWxlY3RSb3cocm93SUQ6IGFueSwgc2VsZWN0OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChzZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5hZGQocm93SUQpO1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuZGVsZXRlKHJvd0lEKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5kZWxldGUocm93SUQpO1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuZGVsZXRlKHJvd0lEKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
|
|
@@ -64741,7 +64741,7 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
64741
64741
|
if (!parents.size) {
|
|
64742
64742
|
return;
|
|
64743
64743
|
}
|
|
64744
|
-
visibleRowIDs = this.getRowIDs(this.allData);
|
|
64744
|
+
visibleRowIDs = new Set(this.getRowIDs(this.allData));
|
|
64745
64745
|
this.rowsToBeSelected = new Set(this.rowSelection);
|
|
64746
64746
|
this.rowsToBeIndeterminate = new Set(this.indeterminateRows);
|
|
64747
64747
|
if (crudRowID) {
|
|
@@ -64828,8 +64828,10 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
64828
64828
|
* retrieve the rows which should be added/removed to/from the old selection
|
|
64829
64829
|
*/
|
|
64830
64830
|
handleAddedAndRemovedArgs(args) {
|
|
64831
|
-
|
|
64832
|
-
|
|
64831
|
+
const newSelectionSet = new Set(args.newSelection);
|
|
64832
|
+
const oldSelectionSet = new Set(args.oldSelection);
|
|
64833
|
+
args.removed = args.oldSelection.filter(x => !newSelectionSet.has(x));
|
|
64834
|
+
args.added = args.newSelection.filter(x => !oldSelectionSet.has(x));
|
|
64833
64835
|
}
|
|
64834
64836
|
/**
|
|
64835
64837
|
* adds to rowsToBeProcessed set all visible children of the rows which was initially within the rowsToBeProcessed set
|
|
@@ -64838,14 +64840,15 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
64838
64840
|
* @param visibleRowIDs list of all visible rowIds
|
|
64839
64841
|
* @returns a new set with all direct parents of the rows within rowsToBeProcessed set
|
|
64840
64842
|
*/
|
|
64841
|
-
collectRowsChildrenAndDirectParents(rowsToBeProcessed, visibleRowIDs) {
|
|
64843
|
+
collectRowsChildrenAndDirectParents(rowsToBeProcessed, visibleRowIDs, adding) {
|
|
64842
64844
|
const processedRowsParents = new Set();
|
|
64843
64845
|
Array.from(rowsToBeProcessed).forEach((rowID) => {
|
|
64846
|
+
this.selectDeselectRow(rowID, adding);
|
|
64844
64847
|
const rowTreeRecord = this.grid.gridAPI.get_rec_by_id(rowID);
|
|
64845
64848
|
const rowAndAllChildren = this.get_all_children(rowTreeRecord);
|
|
64846
64849
|
rowAndAllChildren.forEach(row => {
|
|
64847
|
-
if (visibleRowIDs.
|
|
64848
|
-
|
|
64850
|
+
if (visibleRowIDs.has(row.rowID)) {
|
|
64851
|
+
this.selectDeselectRow(row.rowID, adding);
|
|
64849
64852
|
}
|
|
64850
64853
|
});
|
|
64851
64854
|
if (rowTreeRecord && rowTreeRecord.parent) {
|
|
@@ -64861,27 +64864,19 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
64861
64864
|
calculateRowsNewSelectionState(args) {
|
|
64862
64865
|
this.rowsToBeSelected = new Set(args.oldSelection ? args.oldSelection : this.getSelectedRows());
|
|
64863
64866
|
this.rowsToBeIndeterminate = new Set(this.getIndeterminateRows());
|
|
64864
|
-
const visibleRowIDs = this.getRowIDs(this.allData);
|
|
64867
|
+
const visibleRowIDs = new Set(this.getRowIDs(this.allData));
|
|
64865
64868
|
const removed = new Set(args.removed);
|
|
64866
64869
|
const added = new Set(args.added);
|
|
64867
64870
|
if (removed && removed.size) {
|
|
64868
64871
|
let removedRowsParents = new Set();
|
|
64869
|
-
removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs);
|
|
64870
|
-
removed.forEach(removedRow => {
|
|
64871
|
-
this.rowsToBeSelected.delete(removedRow);
|
|
64872
|
-
this.rowsToBeIndeterminate.delete(removedRow);
|
|
64873
|
-
});
|
|
64872
|
+
removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs, false);
|
|
64874
64873
|
Array.from(removedRowsParents).forEach((parent) => {
|
|
64875
64874
|
this.handleParentSelectionState(parent, visibleRowIDs);
|
|
64876
64875
|
});
|
|
64877
64876
|
}
|
|
64878
64877
|
if (added && added.size) {
|
|
64879
64878
|
let addedRowsParents = new Set();
|
|
64880
|
-
addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs);
|
|
64881
|
-
added.forEach(addedRow => {
|
|
64882
|
-
this.rowsToBeSelected.add(addedRow);
|
|
64883
|
-
this.rowsToBeIndeterminate.delete(addedRow);
|
|
64884
|
-
});
|
|
64879
|
+
addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs, true);
|
|
64885
64880
|
Array.from(addedRowsParents).forEach((parent) => {
|
|
64886
64881
|
this.handleParentSelectionState(parent, visibleRowIDs);
|
|
64887
64882
|
});
|
|
@@ -64905,31 +64900,27 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
64905
64900
|
handleRowSelectionState(treeRow, visibleRowIDs) {
|
|
64906
64901
|
let visibleChildren = [];
|
|
64907
64902
|
if (treeRow && treeRow.children) {
|
|
64908
|
-
visibleChildren = treeRow.children.filter(child => visibleRowIDs.
|
|
64903
|
+
visibleChildren = treeRow.children.filter(child => visibleRowIDs.has(child.rowID));
|
|
64909
64904
|
}
|
|
64910
64905
|
if (visibleChildren.length) {
|
|
64911
64906
|
if (visibleChildren.every(row => this.rowsToBeSelected.has(row.rowID))) {
|
|
64912
|
-
this.
|
|
64913
|
-
this.rowsToBeIndeterminate.delete(treeRow.rowID);
|
|
64907
|
+
this.selectDeselectRow(treeRow.rowID, true);
|
|
64914
64908
|
}
|
|
64915
64909
|
else if (visibleChildren.some(row => this.rowsToBeSelected.has(row.rowID) || this.rowsToBeIndeterminate.has(row.rowID))) {
|
|
64916
64910
|
this.rowsToBeIndeterminate.add(treeRow.rowID);
|
|
64917
64911
|
this.rowsToBeSelected.delete(treeRow.rowID);
|
|
64918
64912
|
}
|
|
64919
64913
|
else {
|
|
64920
|
-
this.
|
|
64921
|
-
this.rowsToBeSelected.delete(treeRow.rowID);
|
|
64914
|
+
this.selectDeselectRow(treeRow.rowID, false);
|
|
64922
64915
|
}
|
|
64923
64916
|
}
|
|
64924
64917
|
else {
|
|
64925
64918
|
// if the children of the row has been deleted and the row was selected do not change its state
|
|
64926
64919
|
if (this.isRowSelected(treeRow.rowID)) {
|
|
64927
|
-
this.
|
|
64928
|
-
this.rowsToBeIndeterminate.delete(treeRow.rowID);
|
|
64920
|
+
this.selectDeselectRow(treeRow.rowID, true);
|
|
64929
64921
|
}
|
|
64930
64922
|
else {
|
|
64931
|
-
this.
|
|
64932
|
-
this.rowsToBeIndeterminate.delete(treeRow.rowID);
|
|
64923
|
+
this.selectDeselectRow(treeRow.rowID, false);
|
|
64933
64924
|
}
|
|
64934
64925
|
}
|
|
64935
64926
|
}
|
|
@@ -64943,6 +64934,16 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
|
|
|
64943
64934
|
}
|
|
64944
64935
|
return children;
|
|
64945
64936
|
}
|
|
64937
|
+
selectDeselectRow(rowID, select) {
|
|
64938
|
+
if (select) {
|
|
64939
|
+
this.rowsToBeSelected.add(rowID);
|
|
64940
|
+
this.rowsToBeIndeterminate.delete(rowID);
|
|
64941
|
+
}
|
|
64942
|
+
else {
|
|
64943
|
+
this.rowsToBeSelected.delete(rowID);
|
|
64944
|
+
this.rowsToBeIndeterminate.delete(rowID);
|
|
64945
|
+
}
|
|
64946
|
+
}
|
|
64946
64947
|
}
|
|
64947
64948
|
IgxTreeGridSelectionService.decorators = [
|
|
64948
64949
|
{ type: Injectable }
|