ng-configcat-publicapi-ui 2.2.1 → 2.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -15
- package/bundles/ng-configcat-publicapi-ui.umd.js +1917 -1758
- package/bundles/ng-configcat-publicapi-ui.umd.js.map +1 -1
- package/esm2015/lib/_models/index.js +3 -3
- package/esm2015/lib/_models/settingValuesModel.js +2 -2
- package/esm2015/lib/_models/updateSettingValuesModel.js +2 -2
- package/esm2015/lib/_services/form-helper.js +21 -21
- package/esm2015/lib/_services/index.js +2 -2
- package/esm2015/lib/_services/public-api.service.js +69 -71
- package/esm2015/lib/_services/setting-list-form-helper.js +135 -128
- package/esm2015/lib/authorization/authorization.component.js +54 -49
- package/esm2015/lib/base/base.component.js +42 -40
- package/esm2015/lib/configuration.js +13 -10
- package/esm2015/lib/dialogs/concurrent-dialog/concurrent-dialog.component.js +29 -26
- package/esm2015/lib/dialogs/expand-dialog/expand-dialog.component.js +81 -70
- package/esm2015/lib/dialogs/reason-dialog/reason-dialog.component.js +40 -35
- package/esm2015/lib/dialogs/save-snackbar/save-snackbar.component.js +18 -15
- package/esm2015/lib/ng-configcat-publicapi-ui.module.js +160 -101
- package/esm2015/lib/selects/config-select/config-select.component.js +61 -48
- package/esm2015/lib/selects/environment-select/environment-select.component.js +47 -40
- package/esm2015/lib/selects/product-select/product-select.component.js +40 -34
- package/esm2015/lib/selects/setting-select/setting-select.component.js +47 -40
- package/esm2015/lib/setting-item/setting-item.component.js +121 -106
- package/esm2015/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.js +87 -69
- package/esm2015/lib/setting-list/setting/rollout-rules/rollout-rules.component.js +287 -260
- package/esm2015/lib/setting-list/setting/setting.component.js +131 -112
- package/esm2015/lib/setting-list/setting/value/value.component.js +39 -31
- package/esm2015/lib/setting-list/setting-list.component.js +195 -179
- package/esm2015/ng-configcat-publicapi-ui.js +5 -19
- package/esm2015/public-api.js +12 -12
- package/fesm2015/ng-configcat-publicapi-ui.js +1536 -1378
- package/fesm2015/ng-configcat-publicapi-ui.js.map +1 -1
- package/lib/_models/index.d.ts +2 -2
- package/lib/_models/settingValuesModel.d.ts +11 -11
- package/lib/_models/updateSettingValuesModel.d.ts +7 -7
- package/lib/_services/form-helper.d.ts +4 -4
- package/lib/_services/index.d.ts +1 -1
- package/lib/_services/public-api.service.d.ts +18 -15
- package/lib/_services/setting-list-form-helper.d.ts +17 -14
- package/lib/authorization/authorization.component.d.ts +18 -15
- package/lib/base/base.component.d.ts +16 -13
- package/lib/configuration.d.ts +8 -5
- package/lib/dialogs/concurrent-dialog/concurrent-dialog.component.d.ts +12 -9
- package/lib/dialogs/expand-dialog/expand-dialog.component.d.ts +24 -20
- package/lib/dialogs/reason-dialog/reason-dialog.component.d.ts +15 -12
- package/lib/dialogs/save-snackbar/save-snackbar.component.d.ts +8 -5
- package/lib/ng-configcat-publicapi-ui.module.d.ts +44 -6
- package/lib/selects/config-select/config-select.component.d.ts +17 -14
- package/lib/selects/environment-select/environment-select.component.d.ts +17 -14
- package/lib/selects/product-select/product-select.component.d.ts +14 -11
- package/lib/selects/setting-select/setting-select.component.d.ts +17 -14
- package/lib/setting-item/setting-item.component.d.ts +34 -31
- package/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.d.ts +27 -22
- package/lib/setting-list/setting/rollout-rules/rollout-rules.component.d.ts +52 -46
- package/lib/setting-list/setting/setting.component.d.ts +40 -37
- package/lib/setting-list/setting/value/value.component.d.ts +19 -16
- package/lib/setting-list/setting-list.component.d.ts +46 -42
- package/ng-configcat-publicapi-ui.d.ts +5 -18
- package/package.json +8 -10
- package/public-api.d.ts +8 -8
- package/ng-configcat-publicapi-ui.metadata.json +0 -1
|
@@ -1,34 +1,40 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { BaseComponent } from '../../base/base.component';
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
ProductSelectComponent
|
|
29
|
-
{ type:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { BaseComponent } from '../../base/base.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../_services";
|
|
5
|
+
import * as i2 from "@angular/material/form-field";
|
|
6
|
+
import * as i3 from "@angular/material/select";
|
|
7
|
+
import * as i4 from "@angular/material/core";
|
|
8
|
+
import * as i5 from "@angular/forms";
|
|
9
|
+
import * as i6 from "@angular/common";
|
|
10
|
+
export class ProductSelectComponent extends BaseComponent {
|
|
11
|
+
constructor(publicApiService) {
|
|
12
|
+
super(publicApiService);
|
|
13
|
+
this.products = [];
|
|
14
|
+
}
|
|
15
|
+
ngOnInit() {
|
|
16
|
+
this.products = [];
|
|
17
|
+
this.createProductsService().getProducts().subscribe(products => {
|
|
18
|
+
this.products = products;
|
|
19
|
+
if (this.products.length > 0) {
|
|
20
|
+
this.valueFormControl.setValue(this.products[0].productId, {
|
|
21
|
+
emitEvent: true,
|
|
22
|
+
emitModelToViewChange: true, emitViewToModelChange: true
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
ProductSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: ProductSelectComponent, deps: [{ token: i1.PublicApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
29
|
+
ProductSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.12", type: ProductSelectComponent, selector: "configcat-product-select", inputs: { valueFormControl: "valueFormControl" }, usesInheritance: true, ngImport: i0, template: "<mat-form-field class=\"form-field\">\n <mat-select placeholder=\"Product\" [formControl]=\"valueFormControl\" name=\"productValue\">\n <mat-option *ngFor=\"let product of products\" [value]=\"product.productId\">{{product.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>", styles: [".form-field{width:100%}\n"], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: ProductSelectComponent, decorators: [{
|
|
31
|
+
type: Component,
|
|
32
|
+
args: [{
|
|
33
|
+
selector: 'configcat-product-select',
|
|
34
|
+
templateUrl: './product-select.component.html',
|
|
35
|
+
styleUrls: ['./product-select.component.css']
|
|
36
|
+
}]
|
|
37
|
+
}], ctorParameters: function () { return [{ type: i1.PublicApiService }]; }, propDecorators: { valueFormControl: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}] } });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3NlbGVjdHMvcHJvZHVjdC1zZWxlY3QvcHJvZHVjdC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3NlbGVjdHMvcHJvZHVjdC1zZWxlY3QvcHJvZHVjdC1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsS0FBSyxFQUFtQyxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBVTFELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxhQUFhO0lBS3ZELFlBQ0UsZ0JBQWtDO1FBQ2xDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBSjFCLGFBQVEsR0FBbUIsRUFBRSxDQUFDO0lBSzlCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzlELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFO29CQUN6RCxTQUFTLEVBQUUsSUFBSTtvQkFDZixxQkFBcUIsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsSUFBSTtpQkFDekQsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O29IQXJCVSxzQkFBc0I7d0dBQXRCLHNCQUFzQix5SUNYbkMsOFNBS2lCOzRGRE1KLHNCQUFzQjtrQkFMbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxXQUFXLEVBQUUsaUNBQWlDO29CQUM5QyxTQUFTLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztpQkFDOUM7dUdBR1UsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9wdGlvbmFsLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Jhc2UvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdE1vZGVsIH0gZnJvbSAnbmctY29uZmlnY2F0LXB1YmxpY2FwaSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFB1YmxpY0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb25maWdjYXQtcHJvZHVjdC1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LXNlbGVjdC5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHZhbHVlRm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDtcbiAgcHJvZHVjdHM6IFByb2R1Y3RNb2RlbFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljQXBpU2VydmljZTogUHVibGljQXBpU2VydmljZSkge1xuICAgIHN1cGVyKHB1YmxpY0FwaVNlcnZpY2UpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9kdWN0cyA9IFtdO1xuICAgIHRoaXMuY3JlYXRlUHJvZHVjdHNTZXJ2aWNlKCkuZ2V0UHJvZHVjdHMoKS5zdWJzY3JpYmUocHJvZHVjdHMgPT4ge1xuICAgICAgdGhpcy5wcm9kdWN0cyA9IHByb2R1Y3RzO1xuICAgICAgaWYgKHRoaXMucHJvZHVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnZhbHVlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5wcm9kdWN0c1swXS5wcm9kdWN0SWQsIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IHRydWUsXG4gICAgICAgICAgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiB0cnVlLCBlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS1maWVsZFwiPlxuICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiUHJvZHVjdFwiIFtmb3JtQ29udHJvbF09XCJ2YWx1ZUZvcm1Db250cm9sXCIgbmFtZT1cInByb2R1Y3RWYWx1ZVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBwcm9kdWN0c1wiIFt2YWx1ZV09XCJwcm9kdWN0LnByb2R1Y3RJZFwiPnt7cHJvZHVjdC5uYW1lfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbjwvbWF0LWZvcm0tZmllbGQ+Il19
|
|
@@ -1,40 +1,47 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { BaseComponent } from '../../base/base.component';
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
this.
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
SettingSelectComponent
|
|
34
|
-
{ type:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { BaseComponent } from '../../base/base.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../_services";
|
|
5
|
+
import * as i2 from "@angular/material/form-field";
|
|
6
|
+
import * as i3 from "@angular/material/select";
|
|
7
|
+
import * as i4 from "@angular/material/core";
|
|
8
|
+
import * as i5 from "@angular/common";
|
|
9
|
+
import * as i6 from "@angular/forms";
|
|
10
|
+
export class SettingSelectComponent extends BaseComponent {
|
|
11
|
+
constructor(publicApiService) {
|
|
12
|
+
super(publicApiService);
|
|
13
|
+
this.settings = [];
|
|
14
|
+
}
|
|
15
|
+
ngOnInit() {
|
|
16
|
+
this.settings = [];
|
|
17
|
+
this.reloadSettings();
|
|
18
|
+
}
|
|
19
|
+
ngOnChanges() {
|
|
20
|
+
this.reloadSettings();
|
|
21
|
+
}
|
|
22
|
+
reloadSettings() {
|
|
23
|
+
if (this.configId) {
|
|
24
|
+
this.createSettingsService().getSettings(this.configId).subscribe(settings => {
|
|
25
|
+
this.settings = settings;
|
|
26
|
+
if (this.settings.length > 0) {
|
|
27
|
+
this.valueFormControl.setValue(this.settings[0].settingId);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
SettingSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: SettingSelectComponent, deps: [{ token: i1.PublicApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
34
|
+
SettingSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.12", type: SettingSelectComponent, selector: "configcat-setting-select", inputs: { valueFormControl: "valueFormControl", configId: "configId" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<mat-form-field class=\"form-field\">\n <mat-select placeholder=\"Feature flag or setting\" [formControl]=\"valueFormControl\" *ngIf=\"settings\" name=\"value\">\n <mat-option *ngFor=\"let setting of settings\" [value]=\"setting.settingId\">{{setting.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>", styles: [".form-field{width:100%}\n"], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: SettingSelectComponent, decorators: [{
|
|
36
|
+
type: Component,
|
|
37
|
+
args: [{
|
|
38
|
+
selector: 'configcat-setting-select',
|
|
39
|
+
templateUrl: './setting-select.component.html',
|
|
40
|
+
styleUrls: ['./setting-select.component.css']
|
|
41
|
+
}]
|
|
42
|
+
}], ctorParameters: function () { return [{ type: i1.PublicApiService }]; }, propDecorators: { valueFormControl: [{
|
|
43
|
+
type: Input
|
|
44
|
+
}], configId: [{
|
|
45
|
+
type: Input
|
|
46
|
+
}] } });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3NlbGVjdHMvc2V0dGluZy1zZWxlY3Qvc2V0dGluZy1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3NlbGVjdHMvc2V0dGluZy1zZWxlY3Qvc2V0dGluZy1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsS0FBSyxFQUFtQyxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBVTFELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxhQUFhO0lBTXZELFlBQ0UsZ0JBQWtDO1FBQ2xDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBSjFCLGFBQVEsR0FBbUIsRUFBRSxDQUFDO0lBSzlCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMzRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDNUQ7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7b0hBN0JVLHNCQUFzQjt3R0FBdEIsc0JBQXNCLG9MQ1huQywwVUFLaUI7NEZETUosc0JBQXNCO2tCQUxsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFdBQVcsRUFBRSxpQ0FBaUM7b0JBQzlDLFNBQVMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO2lCQUM5Qzt1R0FHVSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPcHRpb25hbCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iYXNlL2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IFNldHRpbmdNb2RlbCB9IGZyb20gJ25nLWNvbmZpZ2NhdC1wdWJsaWNhcGknO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQdWJsaWNBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY29uZmlnY2F0LXNldHRpbmctc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NldHRpbmctc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2V0dGluZy1zZWxlY3QuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNldHRpbmdTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpIHZhbHVlRm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgY29uZmlnSWQhOiBzdHJpbmc7XG4gIHNldHRpbmdzOiBTZXR0aW5nTW9kZWxbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpY0FwaVNlcnZpY2U6IFB1YmxpY0FwaVNlcnZpY2UpIHtcbiAgICBzdXBlcihwdWJsaWNBcGlTZXJ2aWNlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ3MgPSBbXTtcbiAgICB0aGlzLnJlbG9hZFNldHRpbmdzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLnJlbG9hZFNldHRpbmdzKCk7XG4gIH1cblxuICByZWxvYWRTZXR0aW5ncygpIHtcbiAgICBpZiAodGhpcy5jb25maWdJZCkge1xuICAgICAgdGhpcy5jcmVhdGVTZXR0aW5nc1NlcnZpY2UoKS5nZXRTZXR0aW5ncyh0aGlzLmNvbmZpZ0lkKS5zdWJzY3JpYmUoc2V0dGluZ3MgPT4ge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnZhbHVlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5zZXR0aW5nc1swXS5zZXR0aW5nSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIkZlYXR1cmUgZmxhZyBvciBzZXR0aW5nXCIgW2Zvcm1Db250cm9sXT1cInZhbHVlRm9ybUNvbnRyb2xcIiAqbmdJZj1cInNldHRpbmdzXCIgbmFtZT1cInZhbHVlXCI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZXR0aW5nIG9mIHNldHRpbmdzXCIgW3ZhbHVlXT1cInNldHRpbmcuc2V0dGluZ0lkXCI+e3tzZXR0aW5nLm5hbWV9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0PlxuPC9tYXQtZm9ybS1maWVsZD4iXX0=
|
|
@@ -1,106 +1,121 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { BaseComponent } from '../base/base.component';
|
|
3
|
-
import { throwError } from 'rxjs';
|
|
4
|
-
import { map, catchError } from 'rxjs/operators';
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
]
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { BaseComponent } from '../base/base.component';
|
|
3
|
+
import { throwError, of } from 'rxjs';
|
|
4
|
+
import { map, catchError } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../_services";
|
|
7
|
+
import * as i2 from "../setting-list/setting-list.component";
|
|
8
|
+
export class SettingItemComponent extends BaseComponent {
|
|
9
|
+
constructor(publicApiService) {
|
|
10
|
+
super(publicApiService);
|
|
11
|
+
this.canEditSetting = true;
|
|
12
|
+
this.canDeleteSetting = true;
|
|
13
|
+
this.deleteSettingText = 'Delete setting';
|
|
14
|
+
this.showEnvironmentName = true;
|
|
15
|
+
this.editSettingRequested = new EventEmitter();
|
|
16
|
+
this.deleteSettingRequested = new EventEmitter();
|
|
17
|
+
this.loadSucceeded = new EventEmitter();
|
|
18
|
+
this.loadFailed = new EventEmitter();
|
|
19
|
+
this.saveSucceeded = new EventEmitter();
|
|
20
|
+
this.saveFailed = new EventEmitter();
|
|
21
|
+
this.formValuesChanged = new EventEmitter();
|
|
22
|
+
this.loadSettingValues = () => {
|
|
23
|
+
return this.createSettingValuesService().getSettingValue(this.environmentId, this.settingId)
|
|
24
|
+
.pipe(map(settingValue => {
|
|
25
|
+
this.settingValue = settingValue;
|
|
26
|
+
const settingValues = {
|
|
27
|
+
settingValues: [settingValue],
|
|
28
|
+
readOnly: settingValue.readOnly,
|
|
29
|
+
config: settingValue.config,
|
|
30
|
+
environment: settingValue.environment
|
|
31
|
+
};
|
|
32
|
+
this.loadSucceeded.emit(settingValues);
|
|
33
|
+
return settingValues;
|
|
34
|
+
}), catchError(error => {
|
|
35
|
+
this.loadFailed.emit(error);
|
|
36
|
+
return throwError(error);
|
|
37
|
+
}));
|
|
38
|
+
};
|
|
39
|
+
this.handleSave = (model) => {
|
|
40
|
+
if (model.settingValues.length === 0) {
|
|
41
|
+
return of();
|
|
42
|
+
}
|
|
43
|
+
const updateModel = model.settingValues[0];
|
|
44
|
+
return this.createSettingValuesService().replaceSettingValue(this.environmentId, this.settingId, updateModel, model.reason)
|
|
45
|
+
.pipe(map(settingValue => {
|
|
46
|
+
this.settingValue = settingValue;
|
|
47
|
+
const settingValues = {
|
|
48
|
+
settingValues: [settingValue],
|
|
49
|
+
readOnly: settingValue.readOnly,
|
|
50
|
+
config: settingValue.config,
|
|
51
|
+
environment: settingValue.environment
|
|
52
|
+
};
|
|
53
|
+
this.saveSucceeded.emit(settingValues);
|
|
54
|
+
return settingValues;
|
|
55
|
+
}), catchError(error => {
|
|
56
|
+
this.saveFailed.emit(error);
|
|
57
|
+
return throwError(error);
|
|
58
|
+
}));
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
ngOnInit() {
|
|
62
|
+
}
|
|
63
|
+
onEditSettingRequested(setting) {
|
|
64
|
+
this.editSettingRequested.emit({
|
|
65
|
+
setting: setting.setting,
|
|
66
|
+
environment: this.settingValue.environment,
|
|
67
|
+
config: this.settingValue.config
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
onDeleteSettingRequested(setting) {
|
|
71
|
+
this.deleteSettingRequested.emit({
|
|
72
|
+
setting: setting.setting,
|
|
73
|
+
environment: this.settingValue.environment,
|
|
74
|
+
config: this.settingValue.config
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
onFormValuesChanged() {
|
|
78
|
+
this.formValuesChanged.emit();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
SettingItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: SettingItemComponent, deps: [{ token: i1.PublicApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
82
|
+
SettingItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.12", type: SettingItemComponent, selector: "configcat-setting-item", inputs: { productId: "productId", environmentId: "environmentId", configId: "configId", settingId: "settingId", canEditSetting: "canEditSetting", canDeleteSetting: "canDeleteSetting", deleteSettingText: "deleteSettingText", showEnvironmentName: "showEnvironmentName" }, outputs: { editSettingRequested: "editSettingRequested", deleteSettingRequested: "deleteSettingRequested", loadSucceeded: "loadSucceeded", loadFailed: "loadFailed", saveSucceeded: "saveSucceeded", saveFailed: "saveFailed", formValuesChanged: "formValuesChanged" }, usesInheritance: true, ngImport: i0, template: "<configcat-setting-list [canEditSetting]=\"canEditSetting\" [canDeleteSetting]=\"canDeleteSetting\"\n [onSave]=\"handleSave\" [loadSettingValues]=\"loadSettingValues\"\n (editSettingRequested)=\"onEditSettingRequested($event)\" (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n [deleteSettingText]=\"deleteSettingText\"\n [showEnvironmentName]=\"showEnvironmentName\" (formValuesChanged)=\"onFormValuesChanged()\">\n</configcat-setting-list>", styles: [".container{font-family:Montserrat,Roboto,\"Helvetica Neue\",sans-serif;background-color:#f3f3f3;border:1px solid rgba(0,0,0,.12);border-radius:4px;margin:1em 0}.container .setting-full{position:relative;display:flex;flex-wrap:nowrap}.container .setting-full .setting-details{display:flex;flex-direction:column;width:400px;padding:1em 0 1em 1em}.container .setting-full .setting-details>*{margin:.5em}.container .setting-full .setting-details .setting-name{flex-direction:row}.container .setting-full .setting-details .setting-name .name{font-weight:bold;word-wrap:break-word;max-width:100%}.container .setting-full .setting-details .setting-key{word-wrap:break-word}.container .setting-full .setting-details .description{font-size:.8em}.container .setting-full .setting-details code{background-color:#d3d3d3;padding:3px 6px}.container .setting-full .rules-list{width:100%;padding:1em}.container .setting-full .targeting-button{margin-left:1rem;margin-bottom:1em}.all-other{min-height:40px;justify-content:flex-start;border:1px solid #d5d5d5;border-radius:4px;background-color:#fff;margin:.5em 1em;padding:4px 0 4px .5em}.all-other .chip{background-color:#67b1fc3d}.all-other .served-value{margin-left:auto;min-width:100px}.end{margin-left:auto}.flex{display:flex;flex-wrap:wrap;align-items:center}.show-hide-toggle{margin-left:1em;cursor:pointer}@media (max-width: 1200px){.setting-full .setting-details{width:300px}}@media (max-width: 700px){.setting-full{flex-wrap:wrap}.setting-full .setting-details{padding:.2em 0 .2em .2em}.setting-full .all-other{margin:.5em .3em}}\n"], components: [{ type: i2.SettingListComponent, selector: "configcat-setting-list", inputs: ["canEditSetting", "canDeleteSetting", "onSave", "loadSettingValues", "deleteSettingText", "showEnvironmentName"], outputs: ["editSettingRequested", "deleteSettingRequested", "formValuesChanged"] }] });
|
|
83
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: SettingItemComponent, decorators: [{
|
|
84
|
+
type: Component,
|
|
85
|
+
args: [{
|
|
86
|
+
selector: 'configcat-setting-item',
|
|
87
|
+
templateUrl: './setting-item.component.html',
|
|
88
|
+
styleUrls: ['./setting-item.component.scss']
|
|
89
|
+
}]
|
|
90
|
+
}], ctorParameters: function () { return [{ type: i1.PublicApiService }]; }, propDecorators: { productId: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], environmentId: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], configId: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], settingId: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}], canEditSetting: [{
|
|
99
|
+
type: Input
|
|
100
|
+
}], canDeleteSetting: [{
|
|
101
|
+
type: Input
|
|
102
|
+
}], deleteSettingText: [{
|
|
103
|
+
type: Input
|
|
104
|
+
}], showEnvironmentName: [{
|
|
105
|
+
type: Input
|
|
106
|
+
}], editSettingRequested: [{
|
|
107
|
+
type: Output
|
|
108
|
+
}], deleteSettingRequested: [{
|
|
109
|
+
type: Output
|
|
110
|
+
}], loadSucceeded: [{
|
|
111
|
+
type: Output
|
|
112
|
+
}], loadFailed: [{
|
|
113
|
+
type: Output
|
|
114
|
+
}], saveSucceeded: [{
|
|
115
|
+
type: Output
|
|
116
|
+
}], saveFailed: [{
|
|
117
|
+
type: Output
|
|
118
|
+
}], formValuesChanged: [{
|
|
119
|
+
type: Output
|
|
120
|
+
}] } });
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWl0ZW0vc2V0dGluZy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWl0ZW0vc2V0dGluZy1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9CLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQWMsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBU2pELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxhQUFhO0lBd0JyRCxZQUNFLGdCQUFrQztRQUNsQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQW5CakIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLHNCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBQ3JDLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUUxQix5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFDLDJCQUFzQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUs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eEIsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVztZQUMxQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7O2tIQXRHVSxvQkFBb0I7c0dBQXBCLG9CQUFvQiw0bUJDYmpDLHFkQUt5Qjs0RkRRWixvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsV0FBVyxFQUFFLCtCQUErQjtvQkFDNUMsU0FBUyxFQUFFLENBQUMsK0JBQStCLENBQUM7aUJBQzdDO3VHQUdVLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUcsaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9wdGlvbmFsLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlL2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IFNldHRpbmdWYWx1ZU1vZGVsLCBVcGRhdGVTZXR0aW5nVmFsdWVNb2RlbCB9IGZyb20gJ25nLWNvbmZpZ2NhdC1wdWJsaWNhcGknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFB1YmxpY0FwaVNlcnZpY2UgfSBmcm9tICcuLi9fc2VydmljZXMnO1xuaW1wb3J0IHsgU2V0dGluZ1ZhbHVlc01vZGVsLCBVcGRhdGVTZXR0aW5nVmFsdWVzTW9kZWwgfSBmcm9tICcuLi9fbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY29uZmlnY2F0LXNldHRpbmctaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZXR0aW5nLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZXR0aW5nLWl0ZW0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTZXR0aW5nSXRlbUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHByb2R1Y3RJZCE6IHN0cmluZztcbiAgQElucHV0KCkgZW52aXJvbm1lbnRJZCE6IHN0cmluZztcbiAgQElucHV0KCkgY29uZmlnSWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNldHRpbmdJZCE6IG51bWJlcjtcblxuICBASW5wdXQoKSBjYW5FZGl0U2V0dGluZyA9IHRydWU7XG4gIEBJbnB1dCgpIGNhbkRlbGV0ZVNldHRpbmcgPSB0cnVlO1xuICBASW5wdXQoKSBkZWxldGVTZXR0aW5nVGV4dCA9ICdEZWxldGUgc2V0dGluZyc7XG4gIEBJbnB1dCgpIHNob3dFbnZpcm9ubWVudE5hbWUgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBlZGl0U2V0dGluZ1JlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRlbGV0ZVNldHRpbmdSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGxvYWRTdWNjZWVkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBsb2FkRmFpbGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2F2ZVN1Y2NlZWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNhdmVGYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGZvcm1WYWx1ZXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHNldHRpbmdWYWx1ZSE6IFNldHRpbmdWYWx1ZU1vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpY0FwaVNlcnZpY2U6IFB1YmxpY0FwaVNlcnZpY2UpIHtcbiAgICBzdXBlcihwdWJsaWNBcGlTZXJ2aWNlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgbG9hZFNldHRpbmdWYWx1ZXMgPSAoKTogT2JzZXJ2YWJsZTxTZXR0aW5nVmFsdWVzTW9kZWw+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTZXR0aW5nVmFsdWVzU2VydmljZSgpLmdldFNldHRpbmdWYWx1ZSh0aGlzLmVudmlyb25tZW50SWQsIHRoaXMuc2V0dGluZ0lkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChzZXR0aW5nVmFsdWUgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ1ZhbHVlID0gc2V0dGluZ1ZhbHVlO1xuXG4gICAgICAgICAgY29uc3Qgc2V0dGluZ1ZhbHVlcyA9IHtcbiAgICAgICAgICAgIHNldHRpbmdWYWx1ZXM6IFtzZXR0aW5nVmFsdWVdLFxuICAgICAgICAgICAgcmVhZE9ubHk6IHNldHRpbmdWYWx1ZS5yZWFkT25seSxcbiAgICAgICAgICAgIGNvbmZpZzogc2V0dGluZ1ZhbHVlLmNvbmZpZyxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBzZXR0aW5nVmFsdWUuZW52aXJvbm1lbnRcbiAgICAgICAgICB9IGFzIFNldHRpbmdWYWx1ZXNNb2RlbDtcblxuICAgICAgICAgIHRoaXMubG9hZFN1Y2NlZWRlZC5lbWl0KHNldHRpbmdWYWx1ZXMpO1xuICAgICAgICAgIHJldHVybiBzZXR0aW5nVmFsdWVzO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkRmFpbGVkLmVtaXQoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBoYW5kbGVTYXZlID0gKG1vZGVsOiBVcGRhdGVTZXR0aW5nVmFsdWVzTW9kZWwpOiBPYnNlcnZhYmxlPFNldHRpbmdWYWx1ZXNNb2RlbD4gPT4ge1xuICAgIGlmIChtb2RlbC5zZXR0aW5nVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZU1vZGVsID0gbW9kZWwuc2V0dGluZ1ZhbHVlc1swXSBhcyBVcGRhdGVTZXR0aW5nVmFsdWVNb2RlbDtcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNldHRpbmdWYWx1ZXNTZXJ2aWNlKCkucmVwbGFjZVNldHRpbmdWYWx1ZShcbiAgICAgIHRoaXMuZW52aXJvbm1lbnRJZCwgdGhpcy5zZXR0aW5nSWQsIHVwZGF0ZU1vZGVsLCBtb2RlbC5yZWFzb24pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHNldHRpbmdWYWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nVmFsdWUgPSBzZXR0aW5nVmFsdWU7XG5cbiAgICAgICAgICBjb25zdCBzZXR0aW5nVmFsdWVzID0ge1xuICAgICAgICAgICAgc2V0dGluZ1ZhbHVlczogW3NldHRpbmdWYWx1ZV0sXG4gICAgICAgICAgICByZWFkT25seTogc2V0dGluZ1ZhbHVlLnJlYWRPbmx5LFxuICAgICAgICAgICAgY29uZmlnOiBzZXR0aW5nVmFsdWUuY29uZmlnLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHNldHRpbmdWYWx1ZS5lbnZpcm9ubWVudFxuICAgICAgICAgIH0gYXMgU2V0dGluZ1ZhbHVlc01vZGVsO1xuXG4gICAgICAgICAgdGhpcy5zYXZlU3VjY2VlZGVkLmVtaXQoc2V0dGluZ1ZhbHVlcyk7XG4gICAgICAgICAgcmV0dXJuIHNldHRpbmdWYWx1ZXM7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLnNhdmVGYWlsZWQuZW1pdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIG9uRWRpdFNldHRpbmdSZXF1ZXN0ZWQoc2V0dGluZzogYW55KSB7XG4gICAgdGhpcy5lZGl0U2V0dGluZ1JlcXVlc3RlZC5lbWl0KHtcbiAgICAgIHNldHRpbmc6IHNldHRpbmcuc2V0dGluZyxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLnNldHRpbmdWYWx1ZS5lbnZpcm9ubWVudCxcbiAgICAgIGNvbmZpZzogdGhpcy5zZXR0aW5nVmFsdWUuY29uZmlnXG4gICAgfSk7XG4gIH1cblxuICBvbkRlbGV0ZVNldHRpbmdSZXF1ZXN0ZWQoc2V0dGluZzogYW55KSB7XG4gICAgdGhpcy5kZWxldGVTZXR0aW5nUmVxdWVzdGVkLmVtaXQoe1xuICAgICAgc2V0dGluZzogc2V0dGluZy5zZXR0aW5nLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuc2V0dGluZ1ZhbHVlLmVudmlyb25tZW50LFxuICAgICAgY29uZmlnOiB0aGlzLnNldHRpbmdWYWx1ZS5jb25maWdcbiAgICB9KTtcbiAgfVxuXG4gIG9uRm9ybVZhbHVlc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5mb3JtVmFsdWVzQ2hhbmdlZC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxjb25maWdjYXQtc2V0dGluZy1saXN0IFtjYW5FZGl0U2V0dGluZ109XCJjYW5FZGl0U2V0dGluZ1wiIFtjYW5EZWxldGVTZXR0aW5nXT1cImNhbkRlbGV0ZVNldHRpbmdcIlxuICAgIFtvblNhdmVdPVwiaGFuZGxlU2F2ZVwiIFtsb2FkU2V0dGluZ1ZhbHVlc109XCJsb2FkU2V0dGluZ1ZhbHVlc1wiXG4gICAgKGVkaXRTZXR0aW5nUmVxdWVzdGVkKT1cIm9uRWRpdFNldHRpbmdSZXF1ZXN0ZWQoJGV2ZW50KVwiIChkZWxldGVTZXR0aW5nUmVxdWVzdGVkKT1cIm9uRGVsZXRlU2V0dGluZ1JlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICBbZGVsZXRlU2V0dGluZ1RleHRdPVwiZGVsZXRlU2V0dGluZ1RleHRcIlxuICAgIFtzaG93RW52aXJvbm1lbnROYW1lXT1cInNob3dFbnZpcm9ubWVudE5hbWVcIiAoZm9ybVZhbHVlc0NoYW5nZWQpPVwib25Gb3JtVmFsdWVzQ2hhbmdlZCgpXCI+XG48L2NvbmZpZ2NhdC1zZXR0aW5nLWxpc3Q+Il19
|