ng-configcat-publicapi-ui 4.2.2 → 5.0.0
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 +2 -2
- package/fesm2022/ng-configcat-publicapi-ui.mjs +4240 -3534
- package/fesm2022/ng-configcat-publicapi-ui.mjs.map +1 -1
- package/index.d.ts +476 -3
- package/package.json +11 -10
- package/src/css/button.scss +83 -0
- package/src/css/controls.scss +390 -0
- package/src/css/dialog.scss +63 -0
- package/src/css/icon.scss +7 -0
- package/src/css/slider.scss +82 -0
- package/src/css/snackbar.scss +16 -0
- package/src/css/table.scss +142 -0
- package/src/css/theme.scss +47 -0
- package/src/css/tooltip.scss +12 -0
- package/src/css/variables.scss +324 -0
- package/src/css/vars/auth.scss +24 -0
- package/src/css/vars/banner.scss +116 -0
- package/src/css/vars/box.scss +48 -0
- package/src/css/vars/config-overview.scss +27 -0
- package/src/css/vars/flag.scss +146 -0
- package/src/css/vars/header.scss +24 -0
- package/src/css/vars/icon.scss +33 -0
- package/src/css/vars/logo.scss +19 -0
- package/src/css/vars/notification.scss +38 -0
- package/src/css/vars/overview.scss +51 -0
- package/src/css/vars/prism.scss +44 -0
- package/src/css/vars/sidenav.scss +42 -0
- package/src/css/vars/theme.scss +78 -0
- package/src/public-api.scss +208 -0
- package/esm2022/lib/_directives/index.mjs +0 -2
- package/esm2022/lib/_directives/input-display-normalizer.directive.mjs +0 -38
- package/esm2022/lib/_models/deleteSettingModel.mjs +0 -2
- package/esm2022/lib/_models/flag-state.mjs +0 -2
- package/esm2022/lib/_models/index.mjs +0 -4
- package/esm2022/lib/_models/setting-value-formgroup.mjs +0 -2
- package/esm2022/lib/_models/settingValuesModel.mjs +0 -2
- package/esm2022/lib/_models/updateSettingValuesModel.mjs +0 -2
- package/esm2022/lib/_models/user-comparator.mjs +0 -100
- package/esm2022/lib/_services/app-data-adapter.mjs +0 -18
- package/esm2022/lib/_services/comparison-value-list-helper.mjs +0 -72
- package/esm2022/lib/_services/date-helper.mjs +0 -56
- package/esm2022/lib/_services/form-generator.mjs +0 -359
- package/esm2022/lib/_services/form-helper.mjs +0 -163
- package/esm2022/lib/_services/index.mjs +0 -3
- package/esm2022/lib/_services/messaging.service.mjs +0 -26
- package/esm2022/lib/_services/platform-helper.mjs +0 -7
- package/esm2022/lib/_services/public-api.service.mjs +0 -77
- package/esm2022/lib/_services/setting-list-form-helper.mjs +0 -171
- package/esm2022/lib/_services/tracking.directive.mjs +0 -16
- package/esm2022/lib/ace-editor/ace-editor.component.mjs +0 -137
- package/esm2022/lib/authorization/authorization.component.mjs +0 -62
- package/esm2022/lib/base/base-select.component.mjs +0 -27
- package/esm2022/lib/base/base.component.mjs +0 -48
- package/esm2022/lib/bootstrap.mjs +0 -11
- package/esm2022/lib/configuration.mjs +0 -14
- package/esm2022/lib/dialogs/confirmation-dialog/confirmation-dialog.mjs +0 -28
- package/esm2022/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.mjs +0 -27
- package/esm2022/lib/dialogs/expand-dialog/expand-dialog.component.mjs +0 -80
- package/esm2022/lib/dialogs/info-dialog/info-dialog.mjs +0 -29
- package/esm2022/lib/dialogs/reason-dialog/reason-dialog.component.mjs +0 -36
- package/esm2022/lib/dialogs/reroute-dialog/reroute-dialog.mjs +0 -28
- package/esm2022/lib/dialogs/save-snackbar/save-snackbar.component.mjs +0 -14
- package/esm2022/lib/ng-configcat-publicapi-ui.module.mjs +0 -288
- package/esm2022/lib/selects/config-select/config-select.component.mjs +0 -60
- package/esm2022/lib/selects/environment-select/environment-select.component.mjs +0 -47
- package/esm2022/lib/selects/product-select/product-select.component.mjs +0 -40
- package/esm2022/lib/selects/setting-select/setting-select.component.mjs +0 -47
- package/esm2022/lib/setting-item/setting-item.component.mjs +0 -118
- package/esm2022/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +0 -81
- package/esm2022/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +0 -293
- package/esm2022/lib/setting-list/setting/setting.component.mjs +0 -136
- package/esm2022/lib/setting-list/setting/value/value.component.mjs +0 -37
- package/esm2022/lib/setting-list/setting-list.component.mjs +0 -194
- package/esm2022/lib/v2/feature-flag/date-time-picker/date-time-picker.component.mjs +0 -123
- package/esm2022/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.mjs +0 -30
- package/esm2022/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.mjs +0 -220
- package/esm2022/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.mjs +0 -61
- package/esm2022/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.mjs +0 -72
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.mjs +0 -25
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.mjs +0 -105
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.mjs +0 -75
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.mjs +0 -48
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.mjs +0 -113
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.mjs +0 -251
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.mjs +0 -444
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.mjs +0 -84
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.mjs +0 -129
- package/esm2022/lib/v2/feature-flag/feature-flag.component.mjs +0 -190
- package/esm2022/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.mjs +0 -65
- package/esm2022/lib/v2/feature-flag-item.component.mjs +0 -330
- package/esm2022/ng-configcat-publicapi-ui.mjs +0 -5
- package/esm2022/public-api.mjs +0 -15
- package/lib/_directives/index.d.ts +0 -1
- package/lib/_directives/input-display-normalizer.directive.d.ts +0 -13
- package/lib/_models/deleteSettingModel.d.ts +0 -6
- package/lib/_models/flag-state.d.ts +0 -20
- package/lib/_models/index.d.ts +0 -3
- package/lib/_models/setting-value-formgroup.d.ts +0 -69
- package/lib/_models/settingValuesModel.d.ts +0 -11
- package/lib/_models/updateSettingValuesModel.d.ts +0 -7
- package/lib/_models/user-comparator.d.ts +0 -84
- package/lib/_services/app-data-adapter.d.ts +0 -7
- package/lib/_services/comparison-value-list-helper.d.ts +0 -17
- package/lib/_services/date-helper.d.ts +0 -6
- package/lib/_services/form-generator.d.ts +0 -59
- package/lib/_services/form-helper.d.ts +0 -21
- package/lib/_services/index.d.ts +0 -2
- package/lib/_services/messaging.service.d.ts +0 -12
- package/lib/_services/platform-helper.d.ts +0 -3
- package/lib/_services/public-api.service.d.ts +0 -21
- package/lib/_services/setting-list-form-helper.d.ts +0 -19
- package/lib/_services/tracking.directive.d.ts +0 -6
- package/lib/ace-editor/ace-editor.component.d.ts +0 -32
- package/lib/authorization/authorization.component.d.ts +0 -21
- package/lib/base/base-select.component.d.ts +0 -10
- package/lib/base/base.component.d.ts +0 -18
- package/lib/bootstrap.d.ts +0 -13
- package/lib/configuration.d.ts +0 -9
- package/lib/dialogs/confirmation-dialog/confirmation-dialog.d.ts +0 -19
- package/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.d.ts +0 -17
- package/lib/dialogs/expand-dialog/expand-dialog.component.d.ts +0 -25
- package/lib/dialogs/info-dialog/info-dialog.d.ts +0 -17
- package/lib/dialogs/reason-dialog/reason-dialog.component.d.ts +0 -15
- package/lib/dialogs/reroute-dialog/reroute-dialog.d.ts +0 -20
- package/lib/dialogs/save-snackbar/save-snackbar.component.d.ts +0 -8
- package/lib/ng-configcat-publicapi-ui.module.d.ts +0 -75
- package/lib/selects/config-select/config-select.component.d.ts +0 -17
- package/lib/selects/environment-select/environment-select.component.d.ts +0 -17
- package/lib/selects/product-select/product-select.component.d.ts +0 -14
- package/lib/selects/setting-select/setting-select.component.d.ts +0 -17
- package/lib/setting-item/setting-item.component.d.ts +0 -37
- package/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.d.ts +0 -27
- package/lib/setting-list/setting/rollout-rules/rollout-rules.component.d.ts +0 -61
- package/lib/setting-list/setting/setting.component.d.ts +0 -43
- package/lib/setting-list/setting/value/value.component.d.ts +0 -20
- package/lib/setting-list/setting-list.component.d.ts +0 -53
- package/lib/v2/feature-flag/date-time-picker/date-time-picker.component.d.ts +0 -25
- package/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.d.ts +0 -27
- package/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.d.ts +0 -41
- package/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.d.ts +0 -18
- package/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.d.ts +0 -30
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.d.ts +0 -10
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.d.ts +0 -27
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.d.ts +0 -36
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.d.ts +0 -21
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.d.ts +0 -79
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.d.ts +0 -63
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.d.ts +0 -94
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.d.ts +0 -31
- package/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.d.ts +0 -33
- package/lib/v2/feature-flag/feature-flag.component.d.ts +0 -49
- package/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.d.ts +0 -28
- package/lib/v2/feature-flag-item.component.d.ts +0 -66
- package/public-api.d.ts +0 -11
- package/public-api.scss +0 -350
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { SettingType } from '../../bootstrap';
|
|
3
|
-
import { PercentageEvaluationAttributeDialogComponent } from './percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component';
|
|
4
|
-
import { DependeesDialogComponent } from './dependees-dialog/dependees-dialog.component';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/material/dialog";
|
|
7
|
-
import * as i2 from "../../bootstrap";
|
|
8
|
-
import * as i3 from "@angular/router";
|
|
9
|
-
import * as i4 from "../../_services";
|
|
10
|
-
import * as i5 from "@angular/cdk/clipboard";
|
|
11
|
-
import * as i6 from "@angular/common";
|
|
12
|
-
import * as i7 from "@angular/forms";
|
|
13
|
-
import * as i8 from "@angular/material/button";
|
|
14
|
-
import * as i9 from "@angular/material/icon";
|
|
15
|
-
import * as i10 from "@angular/material/tooltip";
|
|
16
|
-
import * as i11 from "@angular/material/menu";
|
|
17
|
-
import * as i12 from "@angular/material/divider";
|
|
18
|
-
import * as i13 from "./evaluation-formula/evaluation-formula.component";
|
|
19
|
-
import * as i14 from "./evaluation-formula/feature-flag-value/feature-flag-value.component";
|
|
20
|
-
import * as i15 from "../../_services/tracking.directive";
|
|
21
|
-
export class FeatureFlagComponent {
|
|
22
|
-
constructor(dialog, messagingService, formGenerator, router, publicApiService, clipboard) {
|
|
23
|
-
this.dialog = dialog;
|
|
24
|
-
this.messagingService = messagingService;
|
|
25
|
-
this.formGenerator = formGenerator;
|
|
26
|
-
this.router = router;
|
|
27
|
-
this.publicApiService = publicApiService;
|
|
28
|
-
this.clipboard = clipboard;
|
|
29
|
-
this.environmentName = "";
|
|
30
|
-
this.showEnvironmentName = false;
|
|
31
|
-
this.deleteSettingText = 'Delete setting';
|
|
32
|
-
this.canDeleteSetting = false;
|
|
33
|
-
this.addSegmentConditionRequestedWithoutSegments = new EventEmitter();
|
|
34
|
-
this.expandedChanged = new EventEmitter();
|
|
35
|
-
this.deleteSettingRequested = new EventEmitter();
|
|
36
|
-
this.subscriptionLimitReached = new EventEmitter();
|
|
37
|
-
this.prerequisiteConditionChanged = new EventEmitter();
|
|
38
|
-
this.recalcAddButtons = new EventEmitter();
|
|
39
|
-
}
|
|
40
|
-
setExpanded(expanded) {
|
|
41
|
-
this.expandedChanged.emit(expanded);
|
|
42
|
-
}
|
|
43
|
-
deleteSetting() {
|
|
44
|
-
this.deleteSettingRequested.emit({ setting: this.flagState.settingValue.setting });
|
|
45
|
-
}
|
|
46
|
-
keyCopied() {
|
|
47
|
-
this.messagingService.showSuccessSnack('Copied.');
|
|
48
|
-
}
|
|
49
|
-
subscriptionLimitReachedCalled() {
|
|
50
|
-
this.subscriptionLimitReached.emit();
|
|
51
|
-
}
|
|
52
|
-
changePercentageEvaluationAttribute() {
|
|
53
|
-
if (this.flagState.readOnly) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
const dialogRef = this.dialog.open(PercentageEvaluationAttributeDialogComponent, {
|
|
57
|
-
width: '500px',
|
|
58
|
-
data: {
|
|
59
|
-
percentageEvaluationAttribute: this.formGroup.controls.percentageEvaluationAttribute.value,
|
|
60
|
-
readOnly: this.flagState.readOnly
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
dialogRef.afterClosed().subscribe(result => {
|
|
64
|
-
if (result && result.percentageEvaluationAttribute !== this.formGroup.controls.percentageEvaluationAttribute.value) {
|
|
65
|
-
this.formGroup.controls.percentageEvaluationAttribute.setValue(result.percentageEvaluationAttribute);
|
|
66
|
-
this.formGroup.controls.percentageEvaluationAttribute.updateValueAndValidity();
|
|
67
|
-
this.formGroup.controls.percentageEvaluationAttribute.markAsDirty();
|
|
68
|
-
this.formGroup.controls.percentageEvaluationAttribute.markAsTouched();
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
getGlance() {
|
|
73
|
-
if (this.formGroup.controls.targetingRules.length === 0 || this.flagState.panelExpanded) {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
const glance = { ruleText: this.getRuleText(), percentageText: '', class: 'default' };
|
|
77
|
-
const hasTrueRule = this.formGroup.controls.targetingRules.controls.some(r => r.controls.value?.controls?.boolValue?.value === true);
|
|
78
|
-
const lastFormulaTerm = this.formGroup.controls.targetingRules.controls[this.formGroup.controls.targetingRules.controls.length - 1];
|
|
79
|
-
if (this.formGenerator.isPercentageOnlyTargetingRule(lastFormulaTerm)) {
|
|
80
|
-
if (this.flagState.settingValue.setting.settingType === SettingType.Boolean) {
|
|
81
|
-
const boolRule = lastFormulaTerm.controls.percentageOptions.controls.filter(p => p.controls.value.controls?.boolValue?.value)[0];
|
|
82
|
-
if (boolRule.controls.percentage.value > 0) {
|
|
83
|
-
glance.percentageText = 'ON for ' + boolRule.controls.percentage.value + '%';
|
|
84
|
-
glance.class = 'on';
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
glance.percentageText = 'OFF (%)';
|
|
88
|
-
glance.class = hasTrueRule ? 'on' : 'off';
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
glance.percentageText = lastFormulaTerm.controls.percentageOptions.controls.map(p => p.controls.percentage.value + '%').join(' / ');
|
|
93
|
-
glance.class = 'other';
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
switch (this.flagState.settingValue.setting.settingType) {
|
|
98
|
-
case SettingType.Double:
|
|
99
|
-
glance.percentageText = this.formGroup.controls.defaultValue.value.doubleValue?.toString() ?? '';
|
|
100
|
-
break;
|
|
101
|
-
case SettingType.Int:
|
|
102
|
-
glance.percentageText = this.formGroup.controls.defaultValue.value.intValue?.toString() ?? '';
|
|
103
|
-
break;
|
|
104
|
-
case SettingType.String:
|
|
105
|
-
glance.percentageText = this.formGroup.controls.defaultValue.value.stringValue;
|
|
106
|
-
break;
|
|
107
|
-
case SettingType.Boolean:
|
|
108
|
-
glance.percentageText = this.formGroup.controls.defaultValue.value.boolValue === true ? 'ON' : 'OFF';
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
if (this.flagState.settingValue.setting.settingType === SettingType.Boolean) {
|
|
112
|
-
glance.class = this.formGroup.controls.defaultValue.value.boolValue === true || hasTrueRule ? 'on' : 'off';
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
glance.class = 'other';
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return glance;
|
|
119
|
-
}
|
|
120
|
-
getRuleText() {
|
|
121
|
-
const count = this.formGroup.controls.targetingRules.controls.filter(tr => !this.formGenerator.isPercentageOnlyTargetingRule(tr)).length;
|
|
122
|
-
if (count === 0) {
|
|
123
|
-
return '';
|
|
124
|
-
}
|
|
125
|
-
return '+ ' + count + ' rule' + (count > 1 ? 's' : '');
|
|
126
|
-
}
|
|
127
|
-
copyDirectLink() {
|
|
128
|
-
try {
|
|
129
|
-
this.clipboard.copy(this.getDashboardUrl());
|
|
130
|
-
this.messagingService.showSuccessSnack("Copied direct link to clipboard.");
|
|
131
|
-
}
|
|
132
|
-
catch {
|
|
133
|
-
this.messagingService.showSuccessSnack("Clipboard unavailable.");
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
getDashboardUrl() {
|
|
137
|
-
const urlTree = this.router.createUrlTree(['v2', this.flagState.settingValue.config.product.organization.organizationId,
|
|
138
|
-
this.flagState.settingValue.config.product.productId, this.flagState.settingValue.config.configId, this.flagState.settingValue.environment.environmentId, this.flagState.settingValue.setting.settingId]);
|
|
139
|
-
return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);
|
|
140
|
-
}
|
|
141
|
-
openDependeesDialog() {
|
|
142
|
-
this.dialog.open(DependeesDialogComponent, {
|
|
143
|
-
data: {
|
|
144
|
-
dependees: this.flagState.dependeeSettings,
|
|
145
|
-
name: this.flagState.settingValue.setting.name,
|
|
146
|
-
organizationId: this.flagState.settingValue.config.product.organization.organizationId,
|
|
147
|
-
productId: this.flagState.settingValue.config.product.productId,
|
|
148
|
-
configId: this.flagState.settingValue.config.configId,
|
|
149
|
-
environmentId: this.flagState.settingValue.environment.environmentId
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureFlagComponent, deps: [{ token: i1.MatDialog }, { token: i2.MessagingService }, { token: i2.FormGenerator }, { token: i3.Router }, { token: i4.PublicApiService }, { token: i5.Clipboard }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
154
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeatureFlagComponent, selector: "app-feature-flag", inputs: { formGroup: "formGroup", flagState: "flagState", segments: "segments", featureFlagLimitations: "featureFlagLimitations", hasOtherEnvironment: "hasOtherEnvironment", environmentName: "environmentName", showEnvironmentName: "showEnvironmentName", deleteSettingText: "deleteSettingText", canDeleteSetting: "canDeleteSetting" }, outputs: { addSegmentConditionRequestedWithoutSegments: "addSegmentConditionRequestedWithoutSegments", expandedChanged: "expandedChanged", deleteSettingRequested: "deleteSettingRequested", subscriptionLimitReached: "subscriptionLimitReached", prerequisiteConditionChanged: "prerequisiteConditionChanged", recalcAddButtons: "recalcAddButtons" }, ngImport: i0, template: "<div class=\"outer\">\n <div class=\"mat-elevation-z0 feature-flag\" [ngClass]=\"{'invalid': formGroup.touched && formGroup.invalid}\">\n <div class=\"expandcollapse\">\n <div *ngIf=\"flagState.panelExpanded\" matTooltip=\"Collapse\" (click)=\"setExpanded(!flagState.panelExpanded)\"\n class=\"btn\">\n <mat-icon>arrow_drop_up</mat-icon>\n </div>\n <div *ngIf=\"!flagState.panelExpanded\" matTooltip=\"Expand\" (click)=\"setExpanded(!flagState.panelExpanded)\"\n class=\"btn\">\n <mat-icon>arrow_drop_down</mat-icon>\n </div>\n </div>\n <div class=\"header\">\n <div class=\"top\">\n <div class=\"left\">\n <div class=\"name-key\">\n <span class=\"name\"\n [matTooltip]=\"flagState.settingValue.setting.name\">{{flagState.settingValue.setting.name}}</span>\n <span *ngIf=\"showEnvironmentName\" class=\"environment-name\" [matTooltip]=\"environmentName\">({{environmentName}})</span>\n <span class=\"key-outer\" matTooltip=\"Copy feature flag key to clipboard\"\n [cdkCopyToClipboard]=\"flagState.settingValue.setting.key\"\n (cdkCopyToClipboardCopied)=\"keyCopied()\">\n <span class=\"key\">\n <code>{{flagState.settingValue.setting.key}}</code>\n </span>\n <mat-icon>content_copy</mat-icon>\n </span>\n </div>\n </div>\n\n <div class=\"right\">\n <div class=\"line\">\n <button type=\"button\" class=\"prereq-button\" mat-icon-button\n *ngIf=\"flagState.dependeeSettings && flagState.dependeeSettings.length\"\n [track]=\"['prerequisite button click', 'Feature flags & settings V2 page']\"\n [matTooltip]=\"'Prerequisite of '+flagState.dependeeSettings.length+' other flag(s).'\"\n (click)=\"openDependeesDialog()\">\n <mat-icon>account_tree</mat-icon>\n </button>\n <button type=\"button\" class=\"more-button\" [matMenuTriggerFor]=\"moreMenu\" mat-icon-button\n [track]=\"['more menu button click', 'Feature flags & settings V2 page']\" matTooltip=\"More\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"hint-container\">\n <div class=\"hint\" *ngIf=\"flagState.settingValue.setting.hint\">\n {{flagState.settingValue.setting.hint}}\n </div>\n\n <app-feature-flag-value class=\"glance\"\n [class.text-glance]=\"flagState.settingValue.setting.settingType !== 'boolean'\"\n *ngIf=\"!flagState.panelExpanded && !formGroup.controls.targetingRules.length\"\n [flagState]=\"flagState\" [formGroup]=\"formGroup.controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations\" tooltip=\"Served value\"></app-feature-flag-value>\n\n <div class=\"quick-glance\" *ngIf=\"getGlance() as glance\" (click)=\"setExpanded(!flagState.panelExpanded)\">\n <div class=\"container\" [class]=\"glance.class\">\n <div class=\"quick-glance-item\" *ngIf=\"glance.percentageText\">{{glance.percentageText}}</div>\n <div class=\"quick-glance-item\" *ngIf=\"glance.ruleText\">{{glance.ruleText}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"flagState.panelExpanded\">\n <div class=\"eval-formula-wrapper\">\n <app-evaluation-formula [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n [featureFlagLimitations]=\"featureFlagLimitations\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\" [canManageSegments]=\"false\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [showPercentageEvaluationAttribute]=\"!!formGroup.controls.percentageEvaluationAttribute.value\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttribute()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit($event)\"\n (recalcAddButtons)=\"recalcAddButtons.emit()\">\n </app-evaluation-formula>\n </div>\n </ng-container>\n </div>\n</div>\n<mat-menu #moreMenu=\"matMenu\">\n <div mat-menu-item data-robot=\"history\" (click)=\"changePercentageEvaluationAttribute()\"\n [track]=\"['change percentage attribute click', 'Feature flags & settings V2 page']\"\n [disabled]=\"this.flagState.readOnly\">\n <mat-icon>percent</mat-icon>\n <span>Change percentage attribute</span>\n </div>\n <a href=\"{{getDashboardUrl()}}\" target=\"_blank\" rel=\"noopener noreferrer\">\n <div mat-menu-item data-robot=\"history\">\n <mat-icon>open_in_new</mat-icon>\n <span>Open in ConfigCat</span>\n </div>\n </a>\n <div mat-menu-item data-robot=\"renameSetting\"\n [track]=\"['copy direct link click', 'Feature flags & settings V2 page']\" (click)=\"copyDirectLink()\">\n <mat-icon>content_copy</mat-icon>\n <span>Copy direct link</span>\n </div>\n <div *ngIf=\"canDeleteSetting\">\n <mat-divider></mat-divider>\n <div mat-menu-item data-robot=\"deleteSetting\"\n [track]=\"['delete feature flag click', 'Feature flags & settings V2 page']\" (click)=\"deleteSetting()\">\n <mat-icon>delete_outline</mat-icon>\n <span>{{deleteSettingText}}</span>\n </div>\n </div>\n</mat-menu>", styles: [".outer{padding:10px 0;display:flex;flex-direction:row;flex-grow:1}.outer .eval-formula-wrapper{margin-top:6px}.outer .feature-flag{flex-grow:1;min-width:0;background-color:#dee5f0;border:1px solid #c9c9c9;border-radius:0!important;padding:5px 0 5px 5px}.outer .feature-flag.invalid{border-color:#ff5252}.outer .feature-flag .expandcollapse .btn{text-align:center;width:60px;height:14px;background-color:#f2f4f8;border:1px solid #c9c9c9;position:absolute;color:#878787;left:50%;transform:translate(-50%,-34%);border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top-width:0px;cursor:pointer}.outer .feature-flag .expandcollapse .btn mat-icon{margin-top:-5px}.outer .feature-flag .expandcollapse .btn:hover{background-color:#ebebeb}.outer .feature-flag .header{display:flex;flex-direction:column;flex-grow:1;min-width:0}.outer .feature-flag .header .top{display:flex;align-items:flex-start}.outer .feature-flag .header .top .left{display:flex;flex-direction:column;min-width:0;max-width:45%;padding:0 36px 0 16px}.outer .feature-flag .header .top .left .name-key{display:flex;align-items:center;flex-wrap:wrap;min-width:0;padding-top:6px}.outer .feature-flag .header .top .left .name-key .name,.outer .feature-flag .header .top .left .name-key .environment-name{padding-top:4px;margin-right:4px;font-weight:700;overflow:hidden;text-overflow:ellipsis}.outer .feature-flag .header .top .left .name-key .key-outer{padding-top:6px;display:flex;align-items:center;min-width:0;cursor:pointer}.outer .feature-flag .header .top .left .name-key .key-outer .key{background-color:#cfcfcf;padding:1.5px 6px 3px;font-size:12px;border-radius:3px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.outer .feature-flag .header .top .left .name-key .key-outer .mat-icon{margin-left:4px;font-size:14px;width:14px;height:14px;opacity:.5;overflow:visible}.outer .feature-flag .header .top .right{display:flex;flex-direction:column;align-items:flex-end;margin-left:auto;margin-right:4px}.outer .feature-flag .header .top .right .line{--mat-icon-button-touch-target-display: none;display:flex}.outer .feature-flag .header .top .right .line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.outer .feature-flag .header .top .right .line .prereq-button .mat-icon{padding-top:4px;font-size:16px;width:16px;color:#6b6b6b}.outer .feature-flag .header .top .right .line .more-button .mat-icon{padding-top:2px;font-size:20px;width:20px;color:#6b6b6b}.outer .feature-flag .header .hint-container{display:flex;margin-top:12px;min-width:0}.outer .feature-flag .header .hint-container .hint{color:#505050;font-size:.85em;white-space:pre-line;word-wrap:break-word;padding:4px 16px 8px;overflow:hidden;text-overflow:ellipsis}.outer .feature-flag .header .hint-container .glance{flex-wrap:nowrap;padding:6px 18px 0 16px;margin-left:auto}.outer .feature-flag .header .hint-container .text-glance{min-width:40%;max-width:40%;height:min-content}.outer .feature-flag .header .quick-glance{cursor:pointer;min-width:80px;max-width:200px;font-size:10px;text-align:center;margin-right:15px;margin-left:auto;font-weight:700}.outer .feature-flag .header .quick-glance .quick-glance-item{margin:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.outer .feature-flag .header .quick-glance .container{width:auto;padding:5px;background-color:#f2f4f8;border:1px solid #c9c9c9;border-radius:5px}.outer .feature-flag .header .quick-glance .on{color:#0f8f11}.outer .feature-flag .header .quick-glance .off{color:#be0b0b}.outer .feature-flag .header .quick-glance .other{color:#4881b9}.outer .feature-flag .header .quick-glance .default{color:unset}.tag-menu-action,.tag-menu-item{display:flex;align-items:center}.tag-select-container{line-height:22px;overflow:hidden}.tag-select-item{height:22px;padding:0 .3rem;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 1000px){.outer .feature-flag .header .top .left .name-key{flex-wrap:wrap}.outer .feature-flag .header .top .left .name-key .name{max-width:100%}}@media (max-width: 700px){.outer .feature-flag .header .top .left{max-width:100%!important;padding-right:4px!important}.outer .feature-flag .header .top .left .name-key{flex-wrap:wrap}.outer .feature-flag .header .top .left .name-key .name{max-width:100%}.outer .feature-flag .header .top .right{flex-wrap:wrap}.outer .feature-flag .header .top .right .line .watch-wrapper .status{display:none}.outer .feature-flag .header .hint-container{flex-wrap:wrap}.outer .feature-flag .header .hint-container .text-glance{max-width:unset}}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i5.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { kind: "component", type: i13.EvaluationFormulaComponent, selector: "app-evaluation-formula", inputs: ["formGroup", "segments", "flagState", "showVariationId", "featureFlagLimitations", "canManageSegments", "showPercentageEvaluationAttribute"], outputs: ["createSegmentRequested", "manageSegmentsRequested", "addSegmentConditionRequestedWithoutSegments", "changePercentageEvaluationAttributeRequested", "subscriptionLimitReached", "prerequisiteConditionChanged", "recalcAddButtons"] }, { kind: "component", type: i14.FeatureFlagValueComponent, selector: "app-feature-flag-value", inputs: ["formGroup", "flagState", "featureFlagLimitations", "isPrerequisite", "tooltip"] }, { kind: "directive", type: i15.TrackingDirective, selector: "[track]", inputs: ["track"] }] }); }
|
|
155
|
-
}
|
|
156
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureFlagComponent, decorators: [{
|
|
157
|
-
type: Component,
|
|
158
|
-
args: [{ selector: 'app-feature-flag', template: "<div class=\"outer\">\n <div class=\"mat-elevation-z0 feature-flag\" [ngClass]=\"{'invalid': formGroup.touched && formGroup.invalid}\">\n <div class=\"expandcollapse\">\n <div *ngIf=\"flagState.panelExpanded\" matTooltip=\"Collapse\" (click)=\"setExpanded(!flagState.panelExpanded)\"\n class=\"btn\">\n <mat-icon>arrow_drop_up</mat-icon>\n </div>\n <div *ngIf=\"!flagState.panelExpanded\" matTooltip=\"Expand\" (click)=\"setExpanded(!flagState.panelExpanded)\"\n class=\"btn\">\n <mat-icon>arrow_drop_down</mat-icon>\n </div>\n </div>\n <div class=\"header\">\n <div class=\"top\">\n <div class=\"left\">\n <div class=\"name-key\">\n <span class=\"name\"\n [matTooltip]=\"flagState.settingValue.setting.name\">{{flagState.settingValue.setting.name}}</span>\n <span *ngIf=\"showEnvironmentName\" class=\"environment-name\" [matTooltip]=\"environmentName\">({{environmentName}})</span>\n <span class=\"key-outer\" matTooltip=\"Copy feature flag key to clipboard\"\n [cdkCopyToClipboard]=\"flagState.settingValue.setting.key\"\n (cdkCopyToClipboardCopied)=\"keyCopied()\">\n <span class=\"key\">\n <code>{{flagState.settingValue.setting.key}}</code>\n </span>\n <mat-icon>content_copy</mat-icon>\n </span>\n </div>\n </div>\n\n <div class=\"right\">\n <div class=\"line\">\n <button type=\"button\" class=\"prereq-button\" mat-icon-button\n *ngIf=\"flagState.dependeeSettings && flagState.dependeeSettings.length\"\n [track]=\"['prerequisite button click', 'Feature flags & settings V2 page']\"\n [matTooltip]=\"'Prerequisite of '+flagState.dependeeSettings.length+' other flag(s).'\"\n (click)=\"openDependeesDialog()\">\n <mat-icon>account_tree</mat-icon>\n </button>\n <button type=\"button\" class=\"more-button\" [matMenuTriggerFor]=\"moreMenu\" mat-icon-button\n [track]=\"['more menu button click', 'Feature flags & settings V2 page']\" matTooltip=\"More\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"hint-container\">\n <div class=\"hint\" *ngIf=\"flagState.settingValue.setting.hint\">\n {{flagState.settingValue.setting.hint}}\n </div>\n\n <app-feature-flag-value class=\"glance\"\n [class.text-glance]=\"flagState.settingValue.setting.settingType !== 'boolean'\"\n *ngIf=\"!flagState.panelExpanded && !formGroup.controls.targetingRules.length\"\n [flagState]=\"flagState\" [formGroup]=\"formGroup.controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations\" tooltip=\"Served value\"></app-feature-flag-value>\n\n <div class=\"quick-glance\" *ngIf=\"getGlance() as glance\" (click)=\"setExpanded(!flagState.panelExpanded)\">\n <div class=\"container\" [class]=\"glance.class\">\n <div class=\"quick-glance-item\" *ngIf=\"glance.percentageText\">{{glance.percentageText}}</div>\n <div class=\"quick-glance-item\" *ngIf=\"glance.ruleText\">{{glance.ruleText}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"flagState.panelExpanded\">\n <div class=\"eval-formula-wrapper\">\n <app-evaluation-formula [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n [featureFlagLimitations]=\"featureFlagLimitations\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\" [canManageSegments]=\"false\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [showPercentageEvaluationAttribute]=\"!!formGroup.controls.percentageEvaluationAttribute.value\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttribute()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit($event)\"\n (recalcAddButtons)=\"recalcAddButtons.emit()\">\n </app-evaluation-formula>\n </div>\n </ng-container>\n </div>\n</div>\n<mat-menu #moreMenu=\"matMenu\">\n <div mat-menu-item data-robot=\"history\" (click)=\"changePercentageEvaluationAttribute()\"\n [track]=\"['change percentage attribute click', 'Feature flags & settings V2 page']\"\n [disabled]=\"this.flagState.readOnly\">\n <mat-icon>percent</mat-icon>\n <span>Change percentage attribute</span>\n </div>\n <a href=\"{{getDashboardUrl()}}\" target=\"_blank\" rel=\"noopener noreferrer\">\n <div mat-menu-item data-robot=\"history\">\n <mat-icon>open_in_new</mat-icon>\n <span>Open in ConfigCat</span>\n </div>\n </a>\n <div mat-menu-item data-robot=\"renameSetting\"\n [track]=\"['copy direct link click', 'Feature flags & settings V2 page']\" (click)=\"copyDirectLink()\">\n <mat-icon>content_copy</mat-icon>\n <span>Copy direct link</span>\n </div>\n <div *ngIf=\"canDeleteSetting\">\n <mat-divider></mat-divider>\n <div mat-menu-item data-robot=\"deleteSetting\"\n [track]=\"['delete feature flag click', 'Feature flags & settings V2 page']\" (click)=\"deleteSetting()\">\n <mat-icon>delete_outline</mat-icon>\n <span>{{deleteSettingText}}</span>\n </div>\n </div>\n</mat-menu>", styles: [".outer{padding:10px 0;display:flex;flex-direction:row;flex-grow:1}.outer .eval-formula-wrapper{margin-top:6px}.outer .feature-flag{flex-grow:1;min-width:0;background-color:#dee5f0;border:1px solid #c9c9c9;border-radius:0!important;padding:5px 0 5px 5px}.outer .feature-flag.invalid{border-color:#ff5252}.outer .feature-flag .expandcollapse .btn{text-align:center;width:60px;height:14px;background-color:#f2f4f8;border:1px solid #c9c9c9;position:absolute;color:#878787;left:50%;transform:translate(-50%,-34%);border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top-width:0px;cursor:pointer}.outer .feature-flag .expandcollapse .btn mat-icon{margin-top:-5px}.outer .feature-flag .expandcollapse .btn:hover{background-color:#ebebeb}.outer .feature-flag .header{display:flex;flex-direction:column;flex-grow:1;min-width:0}.outer .feature-flag .header .top{display:flex;align-items:flex-start}.outer .feature-flag .header .top .left{display:flex;flex-direction:column;min-width:0;max-width:45%;padding:0 36px 0 16px}.outer .feature-flag .header .top .left .name-key{display:flex;align-items:center;flex-wrap:wrap;min-width:0;padding-top:6px}.outer .feature-flag .header .top .left .name-key .name,.outer .feature-flag .header .top .left .name-key .environment-name{padding-top:4px;margin-right:4px;font-weight:700;overflow:hidden;text-overflow:ellipsis}.outer .feature-flag .header .top .left .name-key .key-outer{padding-top:6px;display:flex;align-items:center;min-width:0;cursor:pointer}.outer .feature-flag .header .top .left .name-key .key-outer .key{background-color:#cfcfcf;padding:1.5px 6px 3px;font-size:12px;border-radius:3px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.outer .feature-flag .header .top .left .name-key .key-outer .mat-icon{margin-left:4px;font-size:14px;width:14px;height:14px;opacity:.5;overflow:visible}.outer .feature-flag .header .top .right{display:flex;flex-direction:column;align-items:flex-end;margin-left:auto;margin-right:4px}.outer .feature-flag .header .top .right .line{--mat-icon-button-touch-target-display: none;display:flex}.outer .feature-flag .header .top .right .line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.outer .feature-flag .header .top .right .line .prereq-button .mat-icon{padding-top:4px;font-size:16px;width:16px;color:#6b6b6b}.outer .feature-flag .header .top .right .line .more-button .mat-icon{padding-top:2px;font-size:20px;width:20px;color:#6b6b6b}.outer .feature-flag .header .hint-container{display:flex;margin-top:12px;min-width:0}.outer .feature-flag .header .hint-container .hint{color:#505050;font-size:.85em;white-space:pre-line;word-wrap:break-word;padding:4px 16px 8px;overflow:hidden;text-overflow:ellipsis}.outer .feature-flag .header .hint-container .glance{flex-wrap:nowrap;padding:6px 18px 0 16px;margin-left:auto}.outer .feature-flag .header .hint-container .text-glance{min-width:40%;max-width:40%;height:min-content}.outer .feature-flag .header .quick-glance{cursor:pointer;min-width:80px;max-width:200px;font-size:10px;text-align:center;margin-right:15px;margin-left:auto;font-weight:700}.outer .feature-flag .header .quick-glance .quick-glance-item{margin:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.outer .feature-flag .header .quick-glance .container{width:auto;padding:5px;background-color:#f2f4f8;border:1px solid #c9c9c9;border-radius:5px}.outer .feature-flag .header .quick-glance .on{color:#0f8f11}.outer .feature-flag .header .quick-glance .off{color:#be0b0b}.outer .feature-flag .header .quick-glance .other{color:#4881b9}.outer .feature-flag .header .quick-glance .default{color:unset}.tag-menu-action,.tag-menu-item{display:flex;align-items:center}.tag-select-container{line-height:22px;overflow:hidden}.tag-select-item{height:22px;padding:0 .3rem;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 1000px){.outer .feature-flag .header .top .left .name-key{flex-wrap:wrap}.outer .feature-flag .header .top .left .name-key .name{max-width:100%}}@media (max-width: 700px){.outer .feature-flag .header .top .left{max-width:100%!important;padding-right:4px!important}.outer .feature-flag .header .top .left .name-key{flex-wrap:wrap}.outer .feature-flag .header .top .left .name-key .name{max-width:100%}.outer .feature-flag .header .top .right{flex-wrap:wrap}.outer .feature-flag .header .top .right .line .watch-wrapper .status{display:none}.outer .feature-flag .header .hint-container{flex-wrap:wrap}.outer .feature-flag .header .hint-container .text-glance{max-width:unset}}\n"] }]
|
|
159
|
-
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.MessagingService }, { type: i2.FormGenerator }, { type: i3.Router }, { type: i4.PublicApiService }, { type: i5.Clipboard }], propDecorators: { formGroup: [{
|
|
160
|
-
type: Input
|
|
161
|
-
}], flagState: [{
|
|
162
|
-
type: Input
|
|
163
|
-
}], segments: [{
|
|
164
|
-
type: Input
|
|
165
|
-
}], featureFlagLimitations: [{
|
|
166
|
-
type: Input
|
|
167
|
-
}], hasOtherEnvironment: [{
|
|
168
|
-
type: Input
|
|
169
|
-
}], environmentName: [{
|
|
170
|
-
type: Input
|
|
171
|
-
}], showEnvironmentName: [{
|
|
172
|
-
type: Input
|
|
173
|
-
}], deleteSettingText: [{
|
|
174
|
-
type: Input
|
|
175
|
-
}], canDeleteSetting: [{
|
|
176
|
-
type: Input
|
|
177
|
-
}], addSegmentConditionRequestedWithoutSegments: [{
|
|
178
|
-
type: Output
|
|
179
|
-
}], expandedChanged: [{
|
|
180
|
-
type: Output
|
|
181
|
-
}], deleteSettingRequested: [{
|
|
182
|
-
type: Output
|
|
183
|
-
}], subscriptionLimitReached: [{
|
|
184
|
-
type: Output
|
|
185
|
-
}], prerequisiteConditionChanged: [{
|
|
186
|
-
type: Output
|
|
187
|
-
}], recalcAddButtons: [{
|
|
188
|
-
type: Output
|
|
189
|
-
}] } });
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi92Mi9mZWF0dXJlLWZsYWcvZmVhdHVyZS1mbGFnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi92Mi9mZWF0dXJlLWZsYWcvZmVhdHVyZS1mbGFnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUdVLFdBQVcsRUFDM0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsNENBQTRDLEVBQUUsTUFBTSwyRkFBMkYsQ0FBQztBQUl6SixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlekYsTUFBTSxPQUFPLG9CQUFvQjtJQW1CL0IsWUFDVSxNQUFpQixFQUNqQixnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsTUFBYyxFQUNkLGdCQUFrQyxFQUNsQyxTQUFvQjtRQUxwQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQW5CckIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLHNCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBQ3JDLHFCQUFnQixH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RSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsYUFBYTthQUNyRTtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBeEpVLG9CQUFvQjttR0FBcEIsb0JBQW9CLCt0QkMzQmpDLHNyTUE0R1c7OzRGRGpGRSxvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0Usa0JBQWtCO3FOQU9uQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksMkNBQTJDO3NCQUFwRCxNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFDRyw0QkFBNEI7c0JBQXJDLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge1xuICBNZXNzYWdpbmdTZXJ2aWNlLCBJU2VnbWVudCxcbiAgSVByZXJlcXVpc2l0ZUNoYW5nZWQsIElGZWF0dXJlRmxhZ0xpbWl0YXRpb25zLCBVcGRhdGVTZXR0aW5nVmFsdWVGb3JtLFxuICBGb3JtR2VuZXJhdG9yLCBTZXR0aW5nVHlwZSwgSUZsYWdTdGF0ZVxufSBmcm9tICcuLi8uLi9ib290c3RyYXAnO1xuaW1wb3J0IHsgUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUHVibGljQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcbmltcG9ydCB7IERlcGVuZGVlc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZGVwZW5kZWVzLWRpYWxvZy9kZXBlbmRlZXMtZGlhbG9nLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdsYW5jZSB7XG4gIHJ1bGVUZXh0OiBzdHJpbmdcbiAgcGVyY2VudGFnZVRleHQ6IHN0cmluZ1xuICBjbGFzczogc3RyaW5nXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1mZWF0dXJlLWZsYWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmVhdHVyZS1mbGFnLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXG4gICAgJy4vZmVhdHVyZS1mbGFnLmNvbXBvbmVudC5zY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZlYXR1cmVGbGFnQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZm9ybUdyb3VwOiBGb3JtR3JvdXA8VXBkYXRlU2V0dGluZ1ZhbHVlRm9ybT47XG4gIEBJbnB1dCgpIGZsYWdTdGF0ZTogSUZsYWdTdGF0ZTtcbiAgQElucHV0KCkgc2VnbWVudHM6IElTZWdtZW50W107XG4gIEBJbnB1dCgpIGZlYXR1cmVGbGFnTGltaXRhdGlvbnM6IElGZWF0dXJlRmxhZ0xpbWl0YXRpb25zO1xuICBASW5wdXQoKSBoYXNPdGhlckVudmlyb25tZW50OiBib29sZWFuO1xuICBASW5wdXQoKSBlbnZpcm9ubWVudE5hbWUgPSBcIlwiO1xuICBASW5wdXQoKSBzaG93RW52aXJvbm1lbnROYW1lID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRlbGV0ZVNldHRpbmdUZXh0ID0gJ0RlbGV0ZSBzZXR0aW5nJztcbiAgQElucHV0KCkgY2FuRGVsZXRlU2V0dGluZyA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBhZGRTZWdtZW50Q29uZGl0aW9uUmVxdWVzdGVkV2l0aG91dFNlZ21lbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBleHBhbmRlZENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVTZXR0aW5nUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc3Vic2NyaXB0aW9uTGltaXRSZWFjaGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHJlcmVxdWlzaXRlQ29uZGl0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVByZXJlcXVpc2l0ZUNoYW5nZWQ+KCk7XG4gIEBPdXRwdXQoKSByZWNhbGNBZGRCdXR0b25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBtZXNzYWdpbmdTZXJ2aWNlOiBNZXNzYWdpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcHVibGljQXBpU2VydmljZTogUHVibGljQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGNsaXBib2FyZDogQ2xpcGJvYXJkKSB7XG4gIH1cblxuICBzZXRFeHBhbmRlZChleHBhbmRlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2VkLmVtaXQoZXhwYW5kZWQpO1xuICB9XG5cbiAgZGVsZXRlU2V0dGluZygpIHtcbiAgICB0aGlzLmRlbGV0ZVNldHRpbmdSZXF1ZXN0ZWQuZW1pdCh7IHNldHRpbmc6IHRoaXMuZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nIH0pO1xuICB9XG5cbiAga2V5Q29waWVkKCkge1xuICAgIHRoaXMubWVzc2FnaW5nU2VydmljZS5zaG93U3VjY2Vzc1NuYWNrKCdDb3BpZWQuJyk7XG4gIH1cblxuICBzdWJzY3JpcHRpb25MaW1pdFJlYWNoZWRDYWxsZWQoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25MaW1pdFJlYWNoZWQuZW1pdCgpO1xuICB9XG5cbiAgY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKSB7XG4gICAgaWYgKHRoaXMuZmxhZ1N0YXRlLnJlYWRPbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5wZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZS52YWx1ZSxcbiAgICAgICAgcmVhZE9ubHk6IHRoaXMuZmxhZ1N0YXRlLnJlYWRPbmx5XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlICE9PSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5wZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZS52YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5wZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZS5zZXRWYWx1ZShyZXN1bHQucGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5wZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLnBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLnBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEdsYW5jZSgpOiBJR2xhbmNlIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuY29udHJvbHMudGFyZ2V0aW5nUnVsZXMubGVuZ3RoID09PSAwIHx8IHRoaXMuZmxhZ1N0YXRlLnBhbmVsRXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGdsYW5jZTogSUdsYW5jZSA9IHsgcnVsZVRleHQ6IHRoaXMuZ2V0UnVsZVRleHQoKSwgcGVyY2VudGFnZVRleHQ6ICcnLCBjbGFzczogJ2RlZmF1bHQnIH1cblxuICAgIGNvbnN0IGhhc1RydWVSdWxlID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMudGFyZ2V0aW5nUnVsZXMuY29udHJvbHMuc29tZShyID0+IHIuY29udHJvbHMudmFsdWU/LmNvbnRyb2xzPy5ib29sVmFsdWU/LnZhbHVlID09PSB0cnVlKTtcbiAgICBjb25zdCBsYXN0Rm9ybXVsYVRlcm0gPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9sc1t0aGlzLmZvcm1Hcm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9scy5sZW5ndGggLSAxXTtcbiAgICBpZiAodGhpcy5mb3JtR2VuZXJhdG9yLmlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlKGxhc3RGb3JtdWxhVGVybSkpIHtcbiAgICAgIGlmICh0aGlzLmZsYWdTdGF0ZS5zZXR0aW5nVmFsdWUuc2V0dGluZy5zZXR0aW5nVHlwZSA9PT0gU2V0dGluZ1R5cGUuQm9vbGVhbikge1xuICAgICAgICBjb25zdCBib29sUnVsZSA9IGxhc3RGb3JtdWxhVGVybS5jb250cm9scy5wZXJjZW50YWdlT3B0aW9ucy5jb250cm9scy5maWx0ZXIocCA9PiBwLmNvbnRyb2xzLnZhbHVlLmNvbnRyb2xzPy5ib29sVmFsdWU/LnZhbHVlKVswXTtcbiAgICAgICAgaWYgKGJvb2xSdWxlLmNvbnRyb2xzLnBlcmNlbnRhZ2UudmFsdWUgPiAwKSB7XG4gICAgICAgICAgZ2xhbmNlLnBlcmNlbnRhZ2VUZXh0ID0gJ09OIGZvciAnICsgYm9vbFJ1bGUuY29udHJvbHMucGVyY2VudGFnZS52YWx1ZSArICclJztcbiAgICAgICAgICBnbGFuY2UuY2xhc3MgPSAnb24nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGdsYW5jZS5wZXJjZW50YWdlVGV4dCA9ICdPRkYgKCUpJztcbiAgICAgICAgICBnbGFuY2UuY2xhc3MgPSBoYXNUcnVlUnVsZSA/ICdvbicgOiAnb2ZmJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbGFuY2UucGVyY2VudGFnZVRleHQgPSBsYXN0Rm9ybXVsYVRlcm0uY29udHJvbHMucGVyY2VudGFnZU9wdGlvbnMuY29udHJvbHMubWFwKHAgPT4gcC5jb250cm9scy5wZXJjZW50YWdlLnZhbHVlICsgJyUnKS5qb2luKCcgLyAnKTtcbiAgICAgICAgZ2xhbmNlLmNsYXNzID0gJ290aGVyJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0aGlzLmZsYWdTdGF0ZS5zZXR0aW5nVmFsdWUuc2V0dGluZy5zZXR0aW5nVHlwZSkge1xuICAgICAgICBjYXNlIFNldHRpbmdUeXBlLkRvdWJsZTpcbiAgICAgICAgICBnbGFuY2UucGVyY2VudGFnZVRleHQgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kZWZhdWx0VmFsdWUudmFsdWUuZG91YmxlVmFsdWU/LnRvU3RyaW5nKCkgPz8gJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2V0dGluZ1R5cGUuSW50OlxuICAgICAgICAgIGdsYW5jZS5wZXJjZW50YWdlVGV4dCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRlZmF1bHRWYWx1ZS52YWx1ZS5pbnRWYWx1ZT8udG9TdHJpbmcoKSA/PyAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTZXR0aW5nVHlwZS5TdHJpbmc6XG4gICAgICAgICAgZ2xhbmNlLnBlcmNlbnRhZ2VUZXh0ID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGVmYXVsdFZhbHVlLnZhbHVlLnN0cmluZ1ZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNldHRpbmdUeXBlLkJvb2xlYW46XG4gICAgICAgICAgZ2xhbmNlLnBlcmNlbnRhZ2VUZXh0ID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGVmYXVsdFZhbHVlLnZhbHVlLmJvb2xWYWx1ZSA9PT0gdHJ1ZSA/ICdPTicgOiAnT0ZGJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLnNldHRpbmdUeXBlID09PSBTZXR0aW5nVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgIGdsYW5jZS5jbGFzcyA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRlZmF1bHRWYWx1ZS52YWx1ZS5ib29sVmFsdWUgPT09IHRydWUgfHwgaGFzVHJ1ZVJ1bGUgPyAnb24nIDogJ29mZic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbGFuY2UuY2xhc3MgPSAnb3RoZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBnbGFuY2U7XG4gIH1cblxuICBnZXRSdWxlVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMudGFyZ2V0aW5nUnVsZXMuY29udHJvbHMuZmlsdGVyKHRyID0+ICF0aGlzLmZvcm1HZW5lcmF0b3IuaXNQZXJjZW50YWdlT25seVRhcmdldGluZ1J1bGUodHIpKS5sZW5ndGg7XG4gICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcrICcgKyBjb3VudCArICcgcnVsZScgKyAoY291bnQgPiAxID8gJ3MnIDogJycpO1xuICB9XG5cbiAgY29weURpcmVjdExpbmsoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkodGhpcy5nZXREYXNoYm9hcmRVcmwoKSk7XG4gICAgICB0aGlzLm1lc3NhZ2luZ1NlcnZpY2Uuc2hvd1N1Y2Nlc3NTbmFjayhcIkNvcGllZCBkaXJlY3QgbGluayB0byBjbGlwYm9hcmQuXCIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLnNob3dTdWNjZXNzU25hY2soXCJDbGlwYm9hcmQgdW5hdmFpbGFibGUuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldERhc2hib2FyZFVybCgpIHtcbiAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbJ3YyJywgdGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLmNvbmZpZy5wcm9kdWN0Lm9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCxcbiAgICAgIHRoaXMuZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5jb25maWcucHJvZHVjdC5wcm9kdWN0SWQsIHRoaXMuZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5jb25maWcuY29uZmlnSWQsIHRoaXMuZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5lbnZpcm9ubWVudC5lbnZpcm9ubWVudElkLCB0aGlzLmZsYWdTdGF0ZS5zZXR0aW5nVmFsdWUuc2V0dGluZy5zZXR0aW5nSWRdKTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNBcGlTZXJ2aWNlLmdldERhc2hib2FyZEJhc2VQYXRoKCkgKyB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodXJsVHJlZSk7XG4gIH1cblxuICBvcGVuRGVwZW5kZWVzRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nLm9wZW4oRGVwZW5kZWVzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGRlcGVuZGVlczogdGhpcy5mbGFnU3RhdGUuZGVwZW5kZWVTZXR0aW5ncyxcbiAgICAgICAgbmFtZTogdGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcubmFtZSxcbiAgICAgICAgb3JnYW5pemF0aW9uSWQ6IHRoaXMuZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5jb25maWcucHJvZHVjdC5vcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQsXG4gICAgICAgIHByb2R1Y3RJZDogdGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLmNvbmZpZy5wcm9kdWN0LnByb2R1Y3RJZCxcbiAgICAgICAgY29uZmlnSWQ6IHRoaXMuZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5jb25maWcuY29uZmlnSWQsXG4gICAgICAgIGVudmlyb25tZW50SWQ6IHRoaXMuZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5lbnZpcm9ubWVudC5lbnZpcm9ubWVudElkXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvdXRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXowIGZlYXR1cmUtZmxhZ1wiIFtuZ0NsYXNzXT1cInsnaW52YWxpZCc6IGZvcm1Hcm91cC50b3VjaGVkICYmIGZvcm1Hcm91cC5pbnZhbGlkfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhwYW5kY29sbGFwc2VcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmbGFnU3RhdGUucGFuZWxFeHBhbmRlZFwiIG1hdFRvb2x0aXA9XCJDb2xsYXBzZVwiIChjbGljayk9XCJzZXRFeHBhbmRlZCghZmxhZ1N0YXRlLnBhbmVsRXhwYW5kZWQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19kcm9wX3VwPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFmbGFnU3RhdGUucGFuZWxFeHBhbmRlZFwiIG1hdFRvb2x0aXA9XCJFeHBhbmRcIiAoY2xpY2spPVwic2V0RXhwYW5kZWQoIWZsYWdTdGF0ZS5wYW5lbEV4cGFuZGVkKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG5cIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLWtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJmbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcubmFtZVwiPnt7ZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0Vudmlyb25tZW50TmFtZVwiIGNsYXNzPVwiZW52aXJvbm1lbnQtbmFtZVwiIFttYXRUb29sdGlwXT1cImVudmlyb25tZW50TmFtZVwiPih7e2Vudmlyb25tZW50TmFtZX19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwia2V5LW91dGVyXCIgbWF0VG9vbHRpcD1cIkNvcHkgZmVhdHVyZSBmbGFnIGtleSB0byBjbGlwYm9hcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtDb3B5VG9DbGlwYm9hcmRdPVwiZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNka0NvcHlUb0NsaXBib2FyZENvcGllZCk9XCJrZXlDb3BpZWQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwia2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7ZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLmtleX19PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlcmVxLWJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmxhZ1N0YXRlLmRlcGVuZGVlU2V0dGluZ3MgJiYgZmxhZ1N0YXRlLmRlcGVuZGVlU2V0dGluZ3MubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHJhY2tdPVwiWydwcmVyZXF1aXNpdGUgYnV0dG9uIGNsaWNrJywgJ0ZlYXR1cmUgZmxhZ3MgJiBzZXR0aW5ncyBWMiBwYWdlJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidQcmVyZXF1aXNpdGUgb2YgJytmbGFnU3RhdGUuZGVwZW5kZWVTZXR0aW5ncy5sZW5ndGgrJyBvdGhlciBmbGFnKHMpLidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRGVwZW5kZWVzRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+YWNjb3VudF90cmVlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtb3JlLWJ1dHRvblwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtb3JlTWVudVwiIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmFja109XCJbJ21vcmUgbWVudSBidXR0b24gY2xpY2snLCAnRmVhdHVyZSBmbGFncyAmIHNldHRpbmdzIFYyIHBhZ2UnXVwiIG1hdFRvb2x0aXA9XCJNb3JlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhpbnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhpbnRcIiAqbmdJZj1cImZsYWdTdGF0ZS5zZXR0aW5nVmFsdWUuc2V0dGluZy5oaW50XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLmhpbnR9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGFwcC1mZWF0dXJlLWZsYWctdmFsdWUgY2xhc3M9XCJnbGFuY2VcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1nbGFuY2VdPVwiZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLnNldHRpbmdUeXBlICE9PSAnYm9vbGVhbidcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmbGFnU3RhdGUucGFuZWxFeHBhbmRlZCAmJiAhZm9ybUdyb3VwLmNvbnRyb2xzLnRhcmdldGluZ1J1bGVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtmbGFnU3RhdGVdPVwiZmxhZ1N0YXRlXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXAuY29udHJvbHMuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZlYXR1cmVGbGFnTGltaXRhdGlvbnNdPVwiZmVhdHVyZUZsYWdMaW1pdGF0aW9uc1wiIHRvb2x0aXA9XCJTZXJ2ZWQgdmFsdWVcIj48L2FwcC1mZWF0dXJlLWZsYWctdmFsdWU+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVpY2stZ2xhbmNlXCIgKm5nSWY9XCJnZXRHbGFuY2UoKSBhcyBnbGFuY2VcIiAoY2xpY2spPVwic2V0RXhwYW5kZWQoIWZsYWdTdGF0ZS5wYW5lbEV4cGFuZGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgW2NsYXNzXT1cImdsYW5jZS5jbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1aWNrLWdsYW5jZS1pdGVtXCIgKm5nSWY9XCJnbGFuY2UucGVyY2VudGFnZVRleHRcIj57e2dsYW5jZS5wZXJjZW50YWdlVGV4dH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVpY2stZ2xhbmNlLWl0ZW1cIiAqbmdJZj1cImdsYW5jZS5ydWxlVGV4dFwiPnt7Z2xhbmNlLnJ1bGVUZXh0fX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZsYWdTdGF0ZS5wYW5lbEV4cGFuZGVkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZhbC1mb3JtdWxhLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWV2YWx1YXRpb24tZm9ybXVsYSBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIFtmbGFnU3RhdGVdPVwiZmxhZ1N0YXRlXCIgW3NlZ21lbnRzXT1cInNlZ21lbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZlYXR1cmVGbGFnTGltaXRhdGlvbnNdPVwiZmVhdHVyZUZsYWdMaW1pdGF0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIChzdWJzY3JpcHRpb25MaW1pdFJlYWNoZWQpPVwic3Vic2NyaXB0aW9uTGltaXRSZWFjaGVkQ2FsbGVkKClcIiBbY2FuTWFuYWdlU2VnbWVudHNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAoYWRkU2VnbWVudENvbmRpdGlvblJlcXVlc3RlZFdpdGhvdXRTZWdtZW50cyk9XCJhZGRTZWdtZW50Q29uZGl0aW9uUmVxdWVzdGVkV2l0aG91dFNlZ21lbnRzLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVdPVwiISFmb3JtR3JvdXAuY29udHJvbHMucGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVSZXF1ZXN0ZWQpPVwiY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIChwcmVyZXF1aXNpdGVDb25kaXRpb25DaGFuZ2VkKT1cInByZXJlcXVpc2l0ZUNvbmRpdGlvbkNoYW5nZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHJlY2FsY0FkZEJ1dHRvbnMpPVwicmVjYWxjQWRkQnV0dG9ucy5lbWl0KClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1ldmFsdWF0aW9uLWZvcm11bGE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxtYXQtbWVudSAjbW9yZU1lbnU9XCJtYXRNZW51XCI+XG4gICAgPGRpdiBtYXQtbWVudS1pdGVtIGRhdGEtcm9ib3Q9XCJoaXN0b3J5XCIgKGNsaWNrKT1cImNoYW5nZVBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlKClcIlxuICAgICAgICBbdHJhY2tdPVwiWydjaGFuZ2UgcGVyY2VudGFnZSBhdHRyaWJ1dGUgY2xpY2snLCAnRmVhdHVyZSBmbGFncyAmIHNldHRpbmdzIFYyIHBhZ2UnXVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLmZsYWdTdGF0ZS5yZWFkT25seVwiPlxuICAgICAgICA8bWF0LWljb24+cGVyY2VudDwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuPkNoYW5nZSBwZXJjZW50YWdlIGF0dHJpYnV0ZTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8YSBocmVmPVwie3tnZXREYXNoYm9hcmRVcmwoKX19XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICA8ZGl2IG1hdC1tZW51LWl0ZW0gZGF0YS1yb2JvdD1cImhpc3RvcnlcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5vcGVuX2luX25ldzwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5PcGVuIGluIENvbmZpZ0NhdDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICAgIDxkaXYgbWF0LW1lbnUtaXRlbSBkYXRhLXJvYm90PVwicmVuYW1lU2V0dGluZ1wiXG4gICAgICAgIFt0cmFja109XCJbJ2NvcHkgZGlyZWN0IGxpbmsgY2xpY2snLCAnRmVhdHVyZSBmbGFncyAmIHNldHRpbmdzIFYyIHBhZ2UnXVwiIChjbGljayk9XCJjb3B5RGlyZWN0TGluaygpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj5Db3B5IGRpcmVjdCBsaW5rPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJjYW5EZWxldGVTZXR0aW5nXCI+XG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2IG1hdC1tZW51LWl0ZW0gZGF0YS1yb2JvdD1cImRlbGV0ZVNldHRpbmdcIlxuICAgICAgICAgICAgW3RyYWNrXT1cIlsnZGVsZXRlIGZlYXR1cmUgZmxhZyBjbGljaycsICdGZWF0dXJlIGZsYWdzICYgc2V0dGluZ3MgVjIgcGFnZSddXCIgKGNsaWNrKT1cImRlbGV0ZVNldHRpbmcoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZV9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7ZGVsZXRlU2V0dGluZ1RleHR9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L21hdC1tZW51PiJdfQ==
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
-
import { FormHelper } from '../../../bootstrap';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/material/dialog";
|
|
6
|
-
import * as i2 from "../../../bootstrap";
|
|
7
|
-
import * as i3 from "@angular/common";
|
|
8
|
-
import * as i4 from "@angular/forms";
|
|
9
|
-
import * as i5 from "@angular/material/form-field";
|
|
10
|
-
import * as i6 from "@angular/material/button";
|
|
11
|
-
import * as i7 from "@angular/material/input";
|
|
12
|
-
export class PercentageEvaluationAttributeDialogComponent {
|
|
13
|
-
constructor(dialogRef, formGenerator, data) {
|
|
14
|
-
this.dialogRef = dialogRef;
|
|
15
|
-
this.formGenerator = formGenerator;
|
|
16
|
-
this.data = data;
|
|
17
|
-
this.FormHelper = FormHelper;
|
|
18
|
-
this.defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];
|
|
19
|
-
}
|
|
20
|
-
ngOnInit() {
|
|
21
|
-
this.formControl = this.formGenerator.generatePercentageEvaluationAttributeFormControl(this.data.percentageEvaluationAttribute, this.data.readOnly);
|
|
22
|
-
}
|
|
23
|
-
close() {
|
|
24
|
-
this.dialogRef.close();
|
|
25
|
-
}
|
|
26
|
-
attributeChanged(event) {
|
|
27
|
-
const value = event.target.value;
|
|
28
|
-
if (this.defaultComparisonAttributes.indexOf(value) === 0) {
|
|
29
|
-
if (this.formControl.value !== null) {
|
|
30
|
-
this.formControl.setValue(null);
|
|
31
|
-
this.formControl.markAsDirty();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
else if (this.isDefault(value)) {
|
|
35
|
-
if (this.formControl.value !== value) {
|
|
36
|
-
this.formControl.setValue(value);
|
|
37
|
-
this.formControl.markAsDirty();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
else if (this.formControl.value !== '') {
|
|
41
|
-
this.formControl.setValue('');
|
|
42
|
-
this.formControl.markAsDirty();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
isDefault(attribute) {
|
|
46
|
-
return attribute === null || this.defaultComparisonAttributes.indexOf(attribute) !== -1;
|
|
47
|
-
}
|
|
48
|
-
set() {
|
|
49
|
-
if (this.formControl.invalid) {
|
|
50
|
-
this.formControl.markAsTouched();
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
this.dialogRef.close({ percentageEvaluationAttribute: this.formControl.value });
|
|
54
|
-
}
|
|
55
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PercentageEvaluationAttributeDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.FormGenerator }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PercentageEvaluationAttributeDialogComponent, selector: "app-percentage-evaluation-attribute-dialog", ngImport: i0, template: "<h1 mat-dialog-title>Change percentage evaluation attribute</h1>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n When evaluating percentage-based user targeting, ConfigCat should use a specific user attribute as the basis for\n determining whether a user falls within the targeted percentage group.</p>\n\n <div class=\"components\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Evaluation attribute</mat-label>\n <mat-hint>This attribute will be used in all percentage based targeting within this feature flag.</mat-hint>\n <select matNativeControl (change)=\"attributeChanged($event)\" [disabled]=\"formControl.disabled\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes; let i = index\"\n [selected]=\"comparisonAttribute === formControl.value || (formControl.value === null && i === 0)\">\n {{comparisonAttribute}}</option>\n <option [selected]=\"!isDefault(formControl.value)\">\n Custom\n </option>\n </select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"isDefault(formControl.value)\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\">\n <mat-error *ngIf=\"formControl.invalid\">\n {{FormHelper.getErrorMessage(formControl)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\"> <a\n href=\"https://configcat.com/docs/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\" rel=\"noopener noreferrer\">\n Read more </a> about percentage-based targeting in the docs.</p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n</div>", styles: [".container{width:100%;display:flex;flex-direction:column}.container .description{padding:5px 0 10px}.container .components{display:flex}.container .components .custom{margin-left:16px}.container .read-more{padding-top:5px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
|
|
57
|
-
}
|
|
58
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PercentageEvaluationAttributeDialogComponent, decorators: [{
|
|
59
|
-
type: Component,
|
|
60
|
-
args: [{ selector: 'app-percentage-evaluation-attribute-dialog', template: "<h1 mat-dialog-title>Change percentage evaluation attribute</h1>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n When evaluating percentage-based user targeting, ConfigCat should use a specific user attribute as the basis for\n determining whether a user falls within the targeted percentage group.</p>\n\n <div class=\"components\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Evaluation attribute</mat-label>\n <mat-hint>This attribute will be used in all percentage based targeting within this feature flag.</mat-hint>\n <select matNativeControl (change)=\"attributeChanged($event)\" [disabled]=\"formControl.disabled\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes; let i = index\"\n [selected]=\"comparisonAttribute === formControl.value || (formControl.value === null && i === 0)\">\n {{comparisonAttribute}}</option>\n <option [selected]=\"!isDefault(formControl.value)\">\n Custom\n </option>\n </select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"isDefault(formControl.value)\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\">\n <mat-error *ngIf=\"formControl.invalid\">\n {{FormHelper.getErrorMessage(formControl)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\"> <a\n href=\"https://configcat.com/docs/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\" rel=\"noopener noreferrer\">\n Read more </a> about percentage-based targeting in the docs.</p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n</div>", styles: [".container{width:100%;display:flex;flex-direction:column}.container .description{padding:5px 0 10px}.container .components{display:flex}.container .components .custom{margin-left:16px}.container .read-more{padding-top:5px}\n"] }]
|
|
61
|
-
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: i2.FormGenerator }, { type: undefined, decorators: [{
|
|
62
|
-
type: Inject,
|
|
63
|
-
args: [MAT_DIALOG_DATA]
|
|
64
|
-
}] }] });
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyY2VudGFnZS1ldmFsdWF0aW9uLWF0dHJpYnV0ZS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9wZXJjZW50YWdlLWV2YWx1YXRpb24tYXR0cmlidXRlLWRpYWxvZy9wZXJjZW50YWdlLWV2YWx1YXRpb24tYXR0cmlidXRlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7O0FBTy9ELE1BQU0sT0FBTyw0Q0FBNEM7SUFPdkQsWUFDUyxTQUFxRSxFQUNwRSxhQUE0QixFQUNKLElBQWtFO1FBRjNGLGNBQVMsR0FBVCxTQUFTLENBQTREO1FBQ3BFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ0osU0FBSSxHQUFKLElBQUksQ0FBOEQ7UUFScEcsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUV4QixnQ0FBMkIsR0FBRyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFRakUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0RBQWdELENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3JKLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBWTtRQUMzQixNQUFNLEtBQUssR0FBSSxLQUFLLENBQUMsTUFBNEIsQ0FBQyxLQUFLLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsU0FBaUI7UUFDekIsT0FBTyxTQUFTLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELEdBQUc7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7K0dBbkRVLDRDQUE0QywyRUFVN0MsZUFBZTttR0FWZCw0Q0FBNEMsa0ZDVnpELHdyRUFxQ007OzRGRDNCTyw0Q0FBNEM7a0JBTHhELFNBQVM7K0JBQ0UsNENBQTRDOzswQkFjbkQsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBGb3JtSGVscGVyLCBGb3JtR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGVyY2VudGFnZS1ldmFsdWF0aW9uLWF0dHJpYnV0ZS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgRm9ybUhlbHBlciA9IEZvcm1IZWxwZXI7XG4gIHJlYWRPbmx5OiBib29sZWFuO1xuICBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMgPSBbJ0lkZW50aWZpZXInLCAnRW1haWwnLCAnQ291bnRyeSddO1xuICBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVEaWFsb2dDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHsgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHN0cmluZywgcmVhZE9ubHk6IGJvb2xlYW4gfVxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZUZvcm1Db250cm9sKHRoaXMuZGF0YS5wZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZSwgdGhpcy5kYXRhLnJlYWRPbmx5KVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZUNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZTtcbiAgICBpZiAodGhpcy5kZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMuaW5kZXhPZih2YWx1ZSkgPT09IDApIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNEZWZhdWx0KHZhbHVlKSkge1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSAnJykge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICB9XG5cbiAgaXNEZWZhdWx0KGF0dHJpYnV0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZSA9PT0gbnVsbCB8fCB0aGlzLmRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkgIT09IC0xO1xuICB9XG5cbiAgc2V0KCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfSk7XG4gIH1cbn1cblxuIiwiPGgxIG1hdC1kaWFsb2ctdGl0bGU+Q2hhbmdlIHBlcmNlbnRhZ2UgZXZhbHVhdGlvbiBhdHRyaWJ1dGU8L2gxPlxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgIFdoZW4gZXZhbHVhdGluZyBwZXJjZW50YWdlLWJhc2VkIHVzZXIgdGFyZ2V0aW5nLCBDb25maWdDYXQgc2hvdWxkIHVzZSBhIHNwZWNpZmljIHVzZXIgYXR0cmlidXRlIGFzIHRoZSBiYXNpcyBmb3JcbiAgICAgICAgZGV0ZXJtaW5pbmcgd2hldGhlciBhIHVzZXIgZmFsbHMgd2l0aGluIHRoZSB0YXJnZXRlZCBwZXJjZW50YWdlIGdyb3VwLjwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJjb21wb25lbnRzXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+RXZhbHVhdGlvbiBhdHRyaWJ1dGU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtaGludD5UaGlzIGF0dHJpYnV0ZSB3aWxsIGJlIHVzZWQgaW4gYWxsIHBlcmNlbnRhZ2UgYmFzZWQgdGFyZ2V0aW5nIHdpdGhpbiB0aGlzIGZlYXR1cmUgZmxhZy48L21hdC1oaW50PlxuICAgICAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIChjaGFuZ2UpPVwiYXR0cmlidXRlQ2hhbmdlZCgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyaXNvbkF0dHJpYnV0ZSBvZiBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZSA9PT0gZm9ybUNvbnRyb2wudmFsdWUgfHwgKGZvcm1Db250cm9sLnZhbHVlID09PSBudWxsICYmIGkgPT09IDApXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29tcGFyaXNvbkF0dHJpYnV0ZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbc2VsZWN0ZWRdPVwiIWlzRGVmYXVsdChmb3JtQ29udHJvbC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tXG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbVwiIFtoaWRkZW5dPVwiaXNEZWZhdWx0KGZvcm1Db250cm9sLnZhbHVlKVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q3VzdG9tIGF0dHJpYnV0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5pbnZhbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUNvbnRyb2wpfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwicmVhZC1tb3JlXCI+IDxhXG4gICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9jb25maWdjYXQuY29tL2RvY3MvdGFyZ2V0aW5nL3BlcmNlbnRhZ2Utb3B0aW9ucy8jcGVyY2VudGFnZS1vcHRpb25zLWJhc2VkLW9uLW90aGVyLXVzZXItYXR0cmlidXRlc1wiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgICAgICBSZWFkIG1vcmUgPC9hPiBhYm91dCBwZXJjZW50YWdlLWJhc2VkIHRhcmdldGluZyBpbiB0aGUgZG9jcy48L3A+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2V0KClcIj5TZXQ8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj5cbjwvZGl2PiJdfQ==
|