@sumaris-net/ngx-components 2.8.0-rc1 → 2.8.0-rc2
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/doc/changelog.md +1 -0
- package/esm2022/public_api.mjs +3 -1
- package/esm2022/src/app/admin/users/users.mjs +5 -3
- package/esm2022/src/app/core/core.testing.module.mjs +2 -2
- package/esm2022/src/app/core/services/model/settings.model.mjs +2 -1
- package/esm2022/src/app/core/table/table.class.mjs +9 -5
- package/esm2022/src/app/core/table/table.module.mjs +16 -3
- package/esm2022/src/app/core/table/table.pipes.mjs +74 -0
- package/esm2022/src/app/core/table/testing/table.testing.mjs +39 -17
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +40 -22
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +3 -3
- package/esm2022/src/app/shared/pipes/form.pipes.mjs +10 -10
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +28 -3
- package/esm2022/src/app/shared/pipes/selection.pipes.mjs +176 -0
- package/fesm2022/sumaris-net.ngx-components.mjs +375 -56
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +2 -0
- package/src/app/core/services/model/settings.model.d.ts +1 -0
- package/src/app/core/table/table.module.d.ts +4 -3
- package/src/app/core/table/table.pipes.d.ts +28 -0
- package/src/app/core/table/testing/table.testing.d.ts +9 -5
- package/src/app/core/table/testing/table2.testing.d.ts +10 -5
- package/src/app/shared/pipes/form.pipes.d.ts +1 -1
- package/src/app/shared/pipes/pipes.module.d.ts +5 -4
- package/src/app/shared/pipes/selection.pipes.d.ts +62 -0
- package/src/assets/manifest.json +1 -1
- package/src/theme/_ngx-components.scss +4 -0
- package/src/theme/_ngx-components.table.scss +4 -14
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { Directive, Pipe } from '@angular/core';
|
|
2
|
+
import { filter } from 'rxjs/operators';
|
|
3
|
+
import { equals } from '../functions';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class AbstractSelectionModelPipe {
|
|
6
|
+
_ref;
|
|
7
|
+
_result = undefined;
|
|
8
|
+
_lastSelection = null;
|
|
9
|
+
_lastValue;
|
|
10
|
+
_lastOpts;
|
|
11
|
+
_shouldSubscribeToChanges = true;
|
|
12
|
+
_onSelectionChanges;
|
|
13
|
+
constructor(_ref) {
|
|
14
|
+
this._ref = _ref;
|
|
15
|
+
}
|
|
16
|
+
transform(selection, value, opts) {
|
|
17
|
+
if (!selection) {
|
|
18
|
+
this._dispose();
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
// if we ask another time for the same form and opts, return the last value
|
|
22
|
+
if (selection === this._lastSelection && value === this._lastValue && equals(opts, this._lastOpts)) {
|
|
23
|
+
return this._result;
|
|
24
|
+
}
|
|
25
|
+
// store the query, in case it changes
|
|
26
|
+
this._lastSelection = selection;
|
|
27
|
+
// store the params, in case they change
|
|
28
|
+
this._lastValue = value;
|
|
29
|
+
this._lastOpts = opts;
|
|
30
|
+
// set the result
|
|
31
|
+
this._result = this._transform(selection, value, opts);
|
|
32
|
+
// if there is already a subscription, clean it
|
|
33
|
+
this._dispose();
|
|
34
|
+
// subscribe to valueChanges event
|
|
35
|
+
if (this._shouldSubscribeToChanges) {
|
|
36
|
+
this._onSelectionChanges = this._subscribe(selection, value, opts);
|
|
37
|
+
}
|
|
38
|
+
return this._result;
|
|
39
|
+
}
|
|
40
|
+
ngOnDestroy() {
|
|
41
|
+
this._dispose();
|
|
42
|
+
}
|
|
43
|
+
_subscribe(selection, value, opts) {
|
|
44
|
+
// subscribe to valueChanges event
|
|
45
|
+
return selection.changed.pipe(filter((selectionChange) => this._filterSelectionChange(selectionChange, value, opts))).subscribe((_) => {
|
|
46
|
+
const result = this._transform(selection, value);
|
|
47
|
+
if (this._result !== result) {
|
|
48
|
+
this._result = result;
|
|
49
|
+
this._ref.markForCheck();
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Clean any existing subscription to change events
|
|
55
|
+
*/
|
|
56
|
+
_dispose() {
|
|
57
|
+
this._onSelectionChanges?.unsubscribe();
|
|
58
|
+
this._onSelectionChanges = undefined;
|
|
59
|
+
}
|
|
60
|
+
_filterSelectionChange(selectionChange, value, opts) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AbstractSelectionModelPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
64
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: AbstractSelectionModelPipe, ngImport: i0 });
|
|
65
|
+
}
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AbstractSelectionModelPipe, decorators: [{
|
|
67
|
+
type: Directive
|
|
68
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
|
|
69
|
+
export class IsSelectedPipe extends AbstractSelectionModelPipe {
|
|
70
|
+
constructor(_ref) {
|
|
71
|
+
super(_ref);
|
|
72
|
+
}
|
|
73
|
+
_transform(selection, value) {
|
|
74
|
+
return selection.isSelected(value);
|
|
75
|
+
}
|
|
76
|
+
_filterSelectionChange(selectionChange, value) {
|
|
77
|
+
return selectionChange?.added?.includes(value) || selectionChange?.removed?.includes(value) || false;
|
|
78
|
+
}
|
|
79
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsSelectedPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
80
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IsSelectedPipe, name: "isSelected", pure: false });
|
|
81
|
+
}
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsSelectedPipe, decorators: [{
|
|
83
|
+
type: Pipe,
|
|
84
|
+
args: [{
|
|
85
|
+
name: 'isSelected',
|
|
86
|
+
pure: false,
|
|
87
|
+
}]
|
|
88
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
|
|
89
|
+
export class IsNotEmptySelectionPipe extends AbstractSelectionModelPipe {
|
|
90
|
+
constructor(_ref) {
|
|
91
|
+
super(_ref);
|
|
92
|
+
}
|
|
93
|
+
_transform(selection) {
|
|
94
|
+
return selection.hasValue();
|
|
95
|
+
}
|
|
96
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsNotEmptySelectionPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
97
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IsNotEmptySelectionPipe, name: "isNotEmptySelection", pure: false });
|
|
98
|
+
}
|
|
99
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsNotEmptySelectionPipe, decorators: [{
|
|
100
|
+
type: Pipe,
|
|
101
|
+
args: [{
|
|
102
|
+
name: 'isNotEmptySelection',
|
|
103
|
+
pure: false,
|
|
104
|
+
}]
|
|
105
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
|
|
106
|
+
export class IsEmptySelectionPipe extends AbstractSelectionModelPipe {
|
|
107
|
+
constructor(_ref) {
|
|
108
|
+
super(_ref);
|
|
109
|
+
}
|
|
110
|
+
_transform(selection) {
|
|
111
|
+
return selection.isEmpty();
|
|
112
|
+
}
|
|
113
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsEmptySelectionPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
114
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IsEmptySelectionPipe, name: "isEmptySelection", pure: false });
|
|
115
|
+
}
|
|
116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsEmptySelectionPipe, decorators: [{
|
|
117
|
+
type: Pipe,
|
|
118
|
+
args: [{
|
|
119
|
+
name: 'isEmptySelection',
|
|
120
|
+
pure: false,
|
|
121
|
+
}]
|
|
122
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
|
|
123
|
+
export class SelectionLengthPipe extends AbstractSelectionModelPipe {
|
|
124
|
+
constructor(_ref) {
|
|
125
|
+
super(_ref);
|
|
126
|
+
}
|
|
127
|
+
_transform(selection) {
|
|
128
|
+
return selection.selected.length;
|
|
129
|
+
}
|
|
130
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SelectionLengthPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
131
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: SelectionLengthPipe, name: "selectionLength", pure: false });
|
|
132
|
+
}
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SelectionLengthPipe, decorators: [{
|
|
134
|
+
type: Pipe,
|
|
135
|
+
args: [{
|
|
136
|
+
name: 'selectionLength',
|
|
137
|
+
pure: false,
|
|
138
|
+
}]
|
|
139
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
|
|
140
|
+
export class IsMultipleSelectionPipe extends AbstractSelectionModelPipe {
|
|
141
|
+
constructor(_ref) {
|
|
142
|
+
super(_ref);
|
|
143
|
+
this._shouldSubscribeToChanges = false;
|
|
144
|
+
}
|
|
145
|
+
_transform(selection) {
|
|
146
|
+
return selection.isMultipleSelection();
|
|
147
|
+
}
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsMultipleSelectionPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
149
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IsMultipleSelectionPipe, name: "isMultipleSelection", pure: false });
|
|
150
|
+
}
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsMultipleSelectionPipe, decorators: [{
|
|
152
|
+
type: Pipe,
|
|
153
|
+
args: [{
|
|
154
|
+
name: 'isMultipleSelection',
|
|
155
|
+
pure: false,
|
|
156
|
+
}]
|
|
157
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
|
|
158
|
+
export class IsSingleSelectionPipe extends AbstractSelectionModelPipe {
|
|
159
|
+
constructor(_ref) {
|
|
160
|
+
super(_ref);
|
|
161
|
+
this._shouldSubscribeToChanges = false;
|
|
162
|
+
}
|
|
163
|
+
_transform(selection) {
|
|
164
|
+
return !selection.isMultipleSelection();
|
|
165
|
+
}
|
|
166
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsSingleSelectionPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
167
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IsSingleSelectionPipe, name: "isSingleSelection", pure: false });
|
|
168
|
+
}
|
|
169
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsSingleSelectionPipe, decorators: [{
|
|
170
|
+
type: Pipe,
|
|
171
|
+
args: [{
|
|
172
|
+
name: 'isSingleSelection',
|
|
173
|
+
pure: false,
|
|
174
|
+
}]
|
|
175
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvc2VsZWN0aW9uLnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFhLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFHN0YsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBR3RDLE1BQU0sT0FBZ0IsMEJBQTBCO0lBU2Q7SUFSdEIsT0FBTyxHQUFNLFNBQVMsQ0FBQztJQUV6QixjQUFjLEdBQStCLElBQUksQ0FBQztJQUNsRCxVQUFVLENBQUk7SUFDZCxTQUFTLENBQUk7SUFDWCx5QkFBeUIsR0FBRyxJQUFJLENBQUM7SUFDbkMsbUJBQW1CLENBQTJCO0lBRXRELFlBQWdDLElBQXVCO1FBQXZCLFNBQUksR0FBSixJQUFJLENBQW1CO0lBQUcsQ0FBQztJQUUzRCxTQUFTLENBQUMsU0FBOEIsRUFBRSxLQUFTLEVBQUUsSUFBUTtRQUMzRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxJQUFJLFNBQVMsS0FBSyxJQUFJLENBQUMsY0FBYyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkcsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7UUFFaEMsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcs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QUFNLE9BQU8scUJBQXNCLFNBQVEsMEJBQXlDO0lBQ2xGLFlBQVksSUFBdUI7UUFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBQ1MsVUFBVSxDQUFDLFNBQThCO1FBQ2pELE9BQU8sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMxQyxDQUFDO3VHQVBVLHFCQUFxQjtxR0FBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQUpqQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxtQkFBbUI7b0JBQ3pCLElBQUksRUFBRSxLQUFLO2lCQUNaIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgT25EZXN0cm95LCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25DaGFuZ2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZXF1YWxzIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8VCwgUiwgTyA9IHZvaWQ+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIF9yZXN1bHQ6IFIgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfbGFzdFNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYXN0VmFsdWU6IFQ7XG4gIHByaXZhdGUgX2xhc3RPcHRzOiBPO1xuICBwcm90ZWN0ZWQgX3Nob3VsZFN1YnNjcmliZVRvQ2hhbmdlcyA9IHRydWU7XG4gIHByaXZhdGUgX29uU2VsZWN0aW9uQ2hhbmdlczogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3JlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PiwgdmFsdWU/OiBULCBvcHRzPzogTyk6IFIge1xuICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlKCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFzayBhbm90aGVyIHRpbWUgZm9yIHRoZSBzYW1lIGZvcm0gYW5kIG9wdHMsIHJldHVybiB0aGUgbGFzdCB2YWx1ZVxuICAgIGlmIChzZWxlY3Rpb24gPT09IHRoaXMuX2xhc3RTZWxlY3Rpb24gJiYgdmFsdWUgPT09IHRoaXMuX2xhc3RWYWx1ZSAmJiBlcXVhbHMob3B0cywgdGhpcy5fbGFzdE9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIHN0b3JlIHRoZSBxdWVyeSwgaW4gY2FzZSBpdCBjaGFuZ2VzXG4gICAgdGhpcy5fbGFzdFNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcblxuICAgIC8vIHN0b3JlIHRoZSBwYXJhbXMsIGluIGNhc2UgdGhleSBjaGFuZ2VcbiAgICB0aGlzLl9sYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9sYXN0T3B0cyA9IG9wdHM7XG5cbiAgICAvLyBzZXQgdGhlIHJlc3VsdFxuICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX3RyYW5zZm9ybShzZWxlY3Rpb24sIHZhbHVlLCBvcHRzKTtcblxuICAgIC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdWJzY3JpcHRpb24sIGNsZWFuIGl0XG4gICAgdGhpcy5fZGlzcG9zZSgpO1xuXG4gICAgLy8gc3Vic2NyaWJlIHRvIHZhbHVlQ2hhbmdlcyBldmVudFxuICAgIGlmICh0aGlzLl9zaG91bGRTdWJzY3JpYmVUb0NoYW5nZXMpIHtcbiAgICAgIHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlcyA9IHRoaXMuX3N1YnNjcmliZShzZWxlY3Rpb24sIHZhbHVlLCBvcHRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zdWJzY3JpYmUoc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxUPiwgdmFsdWU6IFQsIG9wdHM/OiBPKTogU3Vic2NyaXB0aW9uIHtcbiAgICAvLyBzdWJzY3JpYmUgdG8gdmFsdWVDaGFuZ2VzIGV2ZW50XG4gICAgcmV0dXJuIHNlbGVjdGlvbi5jaGFuZ2VkLnBpcGUoZmlsdGVyKChzZWxlY3Rpb25DaGFuZ2UpID0+IHRoaXMuX2ZpbHRlclNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2UsIHZhbHVlLCBvcHRzKSkpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fdHJhbnNmb3JtKHNlbGVjdGlvbiwgdmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX3Jlc3VsdCAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5fcmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIGFueSBleGlzdGluZyBzdWJzY3JpcHRpb24gdG8gY2hhbmdlIGV2ZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIF9kaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlcz8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9vblNlbGVjdGlvbkNoYW5nZXMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX3RyYW5zZm9ybShzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPFQ+LCB2YWx1ZT86IFQsIG9wdHM/OiBPKTogUjtcblxuICBwcm90ZWN0ZWQgX2ZpbHRlclNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxhbnk+LCB2YWx1ZT86IFQsIG9wdHM/OiBPKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnaXNTZWxlY3RlZCcsXG4gIHB1cmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBJc1NlbGVjdGVkUGlwZSBleHRlbmRzIEFic3RyYWN0U2VsZWN0aW9uTW9kZWxQaXBlPGFueSwgYm9vbGVhbj4ge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PiwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaXNTZWxlY3RlZCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2ZpbHRlclNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxhbnk+LCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHNlbGVjdGlvbkNoYW5nZT8uYWRkZWQ/LmluY2x1ZGVzKHZhbHVlKSB8fCBzZWxlY3Rpb25DaGFuZ2U/LnJlbW92ZWQ/LmluY2x1ZGVzKHZhbHVlKSB8fCBmYWxzZTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc05vdEVtcHR5U2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzTm90RW1wdHlTZWxlY3Rpb25QaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgYm9vbGVhbj4ge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaGFzVmFsdWUoKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc0VtcHR5U2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzRW1wdHlTZWxlY3Rpb25QaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgYm9vbGVhbj4ge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaXNFbXB0eSgpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3NlbGVjdGlvbkxlbmd0aCcsXG4gIHB1cmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25MZW5ndGhQaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgbnVtYmVyPiB7XG4gIGNvbnN0cnVjdG9yKF9yZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoX3JlZik7XG4gIH1cbiAgcHJvdGVjdGVkIF90cmFuc2Zvcm0oc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+KTogbnVtYmVyIHtcbiAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc011bHRpcGxlU2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzTXVsdGlwbGVTZWxlY3Rpb25QaXBlIGV4dGVuZHMgQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbFBpcGU8dm9pZCwgYm9vbGVhbj4ge1xuICBjb25zdHJ1Y3RvcihfcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKF9yZWYpO1xuICAgIHRoaXMuX3Nob3VsZFN1YnNjcmliZVRvQ2hhbmdlcyA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWxlY3Rpb24uaXNNdWx0aXBsZVNlbGVjdGlvbigpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2lzU2luZ2xlU2VsZWN0aW9uJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIElzU2luZ2xlU2VsZWN0aW9uUGlwZSBleHRlbmRzIEFic3RyYWN0U2VsZWN0aW9uTW9kZWxQaXBlPHZvaWQsIGJvb2xlYW4+IHtcbiAgY29uc3RydWN0b3IoX3JlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihfcmVmKTtcbiAgICB0aGlzLl9zaG91bGRTdWJzY3JpYmVUb0NoYW5nZXMgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgX3RyYW5zZm9ybShzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXNlbGVjdGlvbi5pc011bHRpcGxlU2VsZWN0aW9uKCk7XG4gIH1cbn1cbiJdfQ==
|