ng-configcat-publicapi-ui 2.3.1 → 2.5.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 +15 -15
- package/{esm2015/lib/_models/index.js → esm2020/lib/_models/index.mjs} +3 -3
- package/esm2020/lib/_models/settingValuesModel.mjs +2 -0
- package/{esm2015/lib/_models/updateSettingValuesModel.js → esm2020/lib/_models/updateSettingValuesModel.mjs} +2 -2
- package/esm2020/lib/_services/form-helper.mjs +21 -0
- package/{esm2015/lib/_services/index.js → esm2020/lib/_services/index.mjs} +2 -2
- package/esm2020/lib/_services/public-api.service.mjs +68 -0
- package/esm2020/lib/_services/setting-list-form-helper.mjs +152 -0
- package/esm2020/lib/authorization/authorization.component.mjs +50 -0
- package/esm2020/lib/base/base.component.mjs +45 -0
- package/esm2020/lib/configuration.mjs +13 -0
- package/esm2020/lib/dialogs/concurrent-dialog/concurrent-dialog.component.mjs +25 -0
- package/esm2020/lib/dialogs/expand-dialog/expand-dialog.component.mjs +77 -0
- package/esm2020/lib/dialogs/reason-dialog/reason-dialog.component.mjs +36 -0
- package/esm2020/lib/dialogs/save-snackbar/save-snackbar.component.mjs +14 -0
- package/esm2020/lib/ng-configcat-publicapi-ui.module.mjs +160 -0
- package/esm2020/lib/selects/config-select/config-select.component.mjs +56 -0
- package/esm2020/lib/selects/environment-select/environment-select.component.mjs +43 -0
- package/esm2020/lib/selects/product-select/product-select.component.mjs +36 -0
- package/esm2020/lib/selects/setting-select/setting-select.component.mjs +43 -0
- package/esm2020/lib/setting-item/setting-item.component.mjs +129 -0
- package/esm2020/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +81 -0
- package/esm2020/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +295 -0
- package/esm2020/lib/setting-list/setting/setting.component.mjs +137 -0
- package/esm2020/lib/setting-list/setting/value/value.component.mjs +32 -0
- package/esm2020/lib/setting-list/setting-list.component.mjs +200 -0
- package/esm2020/ng-configcat-publicapi-ui.mjs +5 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +12 -12
- package/fesm2015/ng-configcat-publicapi-ui.mjs +1588 -0
- package/fesm2015/ng-configcat-publicapi-ui.mjs.map +1 -0
- package/fesm2020/ng-configcat-publicapi-ui.mjs +1569 -0
- package/fesm2020/ng-configcat-publicapi-ui.mjs.map +1 -0
- 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 +19 -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 +17 -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 +37 -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 +60 -46
- package/lib/setting-list/setting/setting.component.d.ts +43 -37
- package/lib/setting-list/setting/value/value.component.d.ts +19 -16
- package/lib/setting-list/setting-list.component.d.ts +50 -42
- package/ng-configcat-publicapi-ui.d.ts +5 -18
- package/package.json +26 -21
- package/public-api.d.ts +8 -8
- package/bundles/ng-configcat-publicapi-ui.umd.js +0 -1826
- package/bundles/ng-configcat-publicapi-ui.umd.js.map +0 -1
- package/esm2015/lib/_models/settingValuesModel.js +0 -2
- package/esm2015/lib/_services/form-helper.js +0 -21
- package/esm2015/lib/_services/public-api.service.js +0 -71
- package/esm2015/lib/_services/setting-list-form-helper.js +0 -128
- package/esm2015/lib/authorization/authorization.component.js +0 -49
- package/esm2015/lib/base/base.component.js +0 -40
- package/esm2015/lib/configuration.js +0 -10
- package/esm2015/lib/dialogs/concurrent-dialog/concurrent-dialog.component.js +0 -26
- package/esm2015/lib/dialogs/expand-dialog/expand-dialog.component.js +0 -70
- package/esm2015/lib/dialogs/reason-dialog/reason-dialog.component.js +0 -35
- package/esm2015/lib/dialogs/save-snackbar/save-snackbar.component.js +0 -15
- package/esm2015/lib/ng-configcat-publicapi-ui.module.js +0 -100
- package/esm2015/lib/selects/config-select/config-select.component.js +0 -48
- package/esm2015/lib/selects/environment-select/environment-select.component.js +0 -40
- package/esm2015/lib/selects/product-select/product-select.component.js +0 -34
- package/esm2015/lib/selects/setting-select/setting-select.component.js +0 -40
- package/esm2015/lib/setting-item/setting-item.component.js +0 -106
- package/esm2015/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.js +0 -69
- package/esm2015/lib/setting-list/setting/rollout-rules/rollout-rules.component.js +0 -260
- package/esm2015/lib/setting-list/setting/setting.component.js +0 -112
- package/esm2015/lib/setting-list/setting/value/value.component.js +0 -31
- package/esm2015/lib/setting-list/setting-list.component.js +0 -179
- package/esm2015/ng-configcat-publicapi-ui.js +0 -19
- package/fesm2015/ng-configcat-publicapi-ui.js +0 -1415
- package/fesm2015/ng-configcat-publicapi-ui.js.map +0 -1
- package/ng-configcat-publicapi-ui.metadata.json +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ng-configcat-publicapi-ui.js","sources":["../../../projects/ng-configcat-publicapi-ui/src/lib/configuration.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/public-api.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/base/base.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-item/setting-item.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/setting-select/setting-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/product-select/product-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/config-select/config-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/environment-select/environment-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/authorization/authorization.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/concurrent-dialog/concurrent-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/expand-dialog/expand-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reason-dialog/reason-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/save-snackbar/save-snackbar.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/rollout-rules/rollout-rules.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/value/value.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/setting-list-form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting-list.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/setting.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/ng-configcat-publicapi-ui.module.ts","../../../projects/ng-configcat-publicapi-ui/src/public-api.ts","../../../projects/ng-configcat-publicapi-ui/src/ng-configcat-publicapi-ui.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class Configuration {\r\n basicAuthUsername?: string;\r\n basicAuthPassword?: string;\r\n basePath = 'https://api.configcat.com';\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n Configuration as PublicApiConfiguration,\r\n ProductsService, EnvironmentsService, ConfigsService,\r\n FeatureFlagsSettingsService, FeatureFlagSettingValuesService, MeService,\r\n IntegrationLinksService\r\n} from 'ng-configcat-publicapi';\r\nimport { Configuration } from '../configuration';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PublicApiService {\r\n\r\n constructor(\r\n private httpClient: HttpClient,\r\n @Optional() private configuration: Configuration) {\r\n }\r\n\r\n createMeService(basicAuthUsername: string = null, basicAuthPassword: string = null, basePath: string = null) {\r\n return new MeService(this.httpClient, basePath ?? this.configuration?.basePath,\r\n new PublicApiConfiguration({\r\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\r\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\r\n }));\r\n }\r\n\r\n createProductsService(basicAuthUsername: string = null, basicAuthPassword: string = null, basePath: string = null) {\r\n return new ProductsService(this.httpClient, basePath ?? this.configuration?.basePath,\r\n new PublicApiConfiguration({\r\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\r\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\r\n }));\r\n }\r\n\r\n createConfigsService(basicAuthUsername: string = null, basicAuthPassword: string = null, basePath: string = null) {\r\n return new ConfigsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\r\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\r\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\r\n }));\r\n }\r\n\r\n createEnvironmentsService(basicAuthUsername: string = null, basicAuthPassword: string = null, basePath: string = null) {\r\n return new EnvironmentsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\r\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\r\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\r\n }));\r\n }\r\n\r\n createSettingsService(basicAuthUsername: string = null, basicAuthPassword: string = null, basePath: string = null) {\r\n return new FeatureFlagsSettingsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\r\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\r\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\r\n }));\r\n }\r\n\r\n createSettingValuesService(basicAuthUsername: string = null, basicAuthPassword: string = null, basePath: string = null) {\r\n return new FeatureFlagSettingValuesService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\r\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\r\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\r\n }));\r\n }\r\n\r\n createIntegrationLinksService(basicAuthUsername: string = null, basicAuthPassword: string = null, basePath: string = null) {\r\n return new IntegrationLinksService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\r\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\r\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\r\n }));\r\n }\r\n}\r\n","import { Component, Input, Optional } from '@angular/core';\r\nimport { Configuration } from '../configuration';\r\nimport { PublicApiService } from '../_services/public-api.service';\r\n\r\n@Component({\r\n selector: 'base',\r\n template: '<div></div>'\r\n})\r\nexport class BaseComponent {\r\n\r\n @Input() basePath = null;\r\n @Input() basicAuthUsername = null;\r\n @Input() basicAuthPassword = null;\r\n\r\n constructor(private publicApiService: PublicApiService) {\r\n }\r\n\r\n protected createProductsService() {\r\n return this.publicApiService.createProductsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\r\n }\r\n\r\n protected createConfigsService() {\r\n return this.publicApiService.createConfigsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\r\n }\r\n\r\n protected createEnvironmentsService() {\r\n return this.publicApiService.createEnvironmentsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\r\n }\r\n\r\n protected createSettingsService() {\r\n return this.publicApiService.createSettingsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\r\n }\r\n\r\n protected createSettingValuesService() {\r\n return this.publicApiService.createSettingValuesService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\r\n }\r\n}\r\n","import { Component, OnInit, Optional, Input, Output, EventEmitter } from '@angular/core';\r\nimport { BaseComponent } from '../base/base.component';\r\nimport { SettingValueModel, UpdateSettingValueModel } from 'ng-configcat-publicapi';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { PublicApiService } from '../_services';\r\nimport { SettingValuesModel, UpdateSettingValuesModel } from '../_models';\r\n\r\n@Component({\r\n selector: 'configcat-setting-item',\r\n templateUrl: './setting-item.component.html',\r\n styleUrls: ['./setting-item.component.scss']\r\n})\r\nexport class SettingItemComponent extends BaseComponent implements OnInit {\r\n\r\n @Input() productId: string;\r\n @Input() environmentId: string;\r\n @Input() configId: string;\r\n @Input() settingId: number;\r\n\r\n @Input() canEditSetting = true;\r\n @Input() canDeleteSetting = true;\r\n @Input() deleteSettingText = 'Delete setting';\r\n @Input() showEnvironmentName = true;\r\n\r\n @Output() editSettingRequested = new EventEmitter();\r\n @Output() deleteSettingRequested = new EventEmitter();\r\n\r\n @Output() loadSucceeded = new EventEmitter();\r\n @Output() loadFailed = new EventEmitter();\r\n @Output() saveSucceeded = new EventEmitter();\r\n @Output() saveFailed = new EventEmitter();\r\n\r\n @Output() formValuesChanged = new EventEmitter();\r\n\r\n settingValue: SettingValueModel;\r\n\r\n constructor(\r\n publicApiService: PublicApiService) {\r\n super(publicApiService);\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n loadSettingValues = (): Observable<SettingValuesModel> => {\r\n return this.createSettingValuesService().getSettingValue(this.environmentId, this.settingId)\r\n .pipe(\r\n map(settingValue => {\r\n this.settingValue = settingValue;\r\n\r\n const settingValues = {\r\n settingValues: [settingValue],\r\n readOnly: settingValue.readOnly,\r\n config: settingValue.config,\r\n environment: settingValue.environment\r\n } as SettingValuesModel;\r\n\r\n this.loadSucceeded.emit(settingValues);\r\n return settingValues;\r\n }),\r\n catchError(error => {\r\n this.loadFailed.emit(error);\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n handleSave = (model: UpdateSettingValuesModel): Observable<SettingValuesModel> => {\r\n if (model.settingValues.length === 0) {\r\n return;\r\n }\r\n const updateModel = model.settingValues[0] as UpdateSettingValueModel;\r\n\r\n return this.createSettingValuesService().replaceSettingValue(\r\n this.environmentId, this.settingId, updateModel, model.reason)\r\n .pipe(\r\n map(settingValue => {\r\n this.settingValue = settingValue;\r\n\r\n const settingValues = {\r\n settingValues: [settingValue],\r\n readOnly: settingValue.readOnly,\r\n config: settingValue.config,\r\n environment: settingValue.environment\r\n } as SettingValuesModel;\r\n\r\n this.saveSucceeded.emit(settingValues);\r\n return settingValues;\r\n }),\r\n catchError(error => {\r\n this.saveFailed.emit(error);\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n onEditSettingRequested(setting) {\r\n this.editSettingRequested.emit({\r\n setting: setting.setting,\r\n environment: this.settingValue.environment,\r\n config: this.settingValue.config\r\n });\r\n }\r\n\r\n onDeleteSettingRequested(setting) {\r\n this.deleteSettingRequested.emit({\r\n setting: setting.setting,\r\n environment: this.settingValue.environment,\r\n config: this.settingValue.config\r\n });\r\n }\r\n\r\n onFormValuesChanged() {\r\n this.formValuesChanged.emit();\r\n }\r\n}\r\n","import { Component, OnInit, Optional, Input, Output, EventEmitter, OnChanges } from '@angular/core';\r\nimport { BaseComponent } from '../../base/base.component';\r\nimport { SettingModel } from 'ng-configcat-publicapi';\r\nimport { FormControl } from '@angular/forms';\r\nimport { PublicApiService } from '../../_services';\r\n\r\n@Component({\r\n selector: 'configcat-setting-select',\r\n templateUrl: './setting-select.component.html',\r\n styleUrls: ['./setting-select.component.css']\r\n})\r\nexport class SettingSelectComponent extends BaseComponent implements OnInit, OnChanges {\r\n\r\n @Input() valueFormControl: FormControl;\r\n @Input() configId: string;\r\n settings: SettingModel[];\r\n\r\n constructor(\r\n publicApiService: PublicApiService) {\r\n super(publicApiService);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.settings = [];\r\n this.reloadSettings();\r\n }\r\n\r\n ngOnChanges() {\r\n this.reloadSettings();\r\n }\r\n\r\n reloadSettings() {\r\n if (this.configId) {\r\n this.createSettingsService().getSettings(this.configId).subscribe(settings => {\r\n this.settings = settings;\r\n if (this.settings.length > 0) {\r\n this.valueFormControl.setValue(this.settings[0].settingId);\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, Optional, Input, Output, EventEmitter, OnChanges } from '@angular/core';\r\nimport { BaseComponent } from '../../base/base.component';\r\nimport { ProductModel } from 'ng-configcat-publicapi';\r\nimport { FormControl } from '@angular/forms';\r\nimport { PublicApiService } from '../../_services';\r\n\r\n@Component({\r\n selector: 'configcat-product-select',\r\n templateUrl: './product-select.component.html',\r\n styleUrls: ['./product-select.component.css']\r\n})\r\nexport class ProductSelectComponent extends BaseComponent implements OnInit {\r\n\r\n @Input() valueFormControl: FormControl;\r\n products: ProductModel[];\r\n\r\n constructor(\r\n publicApiService: PublicApiService) {\r\n super(publicApiService);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.products = [];\r\n this.createProductsService().getProducts().subscribe(products => {\r\n this.products = products;\r\n if (this.products.length > 0) {\r\n this.valueFormControl.setValue(this.products[0].productId, {\r\n emitEvent: true,\r\n emitModelToViewChange: true, emitViewToModelChange: true\r\n });\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Inject, Input, Optional, Output, EventEmitter, OnChanges, forwardRef } from '@angular/core';\r\nimport { BaseComponent } from '../../base/base.component';\r\nimport { ConfigModel } from 'ng-configcat-publicapi';\r\nimport { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms';\r\nimport { PublicApiService } from '../../_services';\r\n\r\n@Component({\r\n selector: 'configcat-config-select',\r\n templateUrl: './config-select.component.html',\r\n styleUrls: ['./config-select.component.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ConfigSelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class ConfigSelectComponent extends BaseComponent implements OnInit, OnChanges {\r\n\r\n @Input() valueFormControl: FormControl;\r\n @Input() productId: string;\r\n configs: ConfigModel[];\r\n\r\n constructor(\r\n publicApiService: PublicApiService) {\r\n super(publicApiService);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.configs = [];\r\n this.reloadConfigs();\r\n }\r\n\r\n ngOnChanges() {\r\n this.reloadConfigs();\r\n }\r\n\r\n reloadConfigs() {\r\n if (this.productId) {\r\n this.createConfigsService().getConfigs(this.productId).subscribe(configs => {\r\n this.configs = configs;\r\n if (this.configs.length > 0) {\r\n this.valueFormControl.setValue(this.configs[0].configId);\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, Optional, Input, Output, EventEmitter, OnChanges } from '@angular/core';\r\nimport { BaseComponent } from '../../base/base.component';\r\nimport { EnvironmentModel } from 'ng-configcat-publicapi';\r\nimport { FormControl } from '@angular/forms';\r\nimport { PublicApiService } from '../../_services';\r\n\r\n@Component({\r\n selector: 'configcat-environment-select',\r\n templateUrl: './environment-select.component.html',\r\n styleUrls: ['./environment-select.component.css']\r\n})\r\nexport class EnvironmentSelectComponent extends BaseComponent implements OnInit, OnChanges {\r\n\r\n @Input() valueFormControl: FormControl;\r\n @Input() productId: string;\r\n environments: EnvironmentModel[];\r\n\r\n constructor(\r\n publicApiService: PublicApiService) {\r\n super(publicApiService);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.environments = [];\r\n this.reloadEnvironments();\r\n }\r\n\r\n ngOnChanges() {\r\n this.reloadEnvironments();\r\n }\r\n\r\n reloadEnvironments() {\r\n if (this.productId) {\r\n this.createEnvironmentsService().getEnvironments(this.productId).subscribe(environments => {\r\n this.environments = environments;\r\n if (this.environments.length > 0) {\r\n this.valueFormControl.setValue(this.environments[0].environmentId);\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\n\r\nexport class FormHelper {\r\n\r\n public static getErrorMessage(control: AbstractControl, hint: string = '') {\r\n if (!control || control.valid) {\r\n return;\r\n }\r\n\r\n if (control.hasError('required')) {\r\n return `${hint} The field is required.`;\r\n }\r\n\r\n if (control.hasError('pattern')) {\r\n return 'Not a valid e-mail address.';\r\n }\r\n\r\n if (control.hasError('minlength')) {\r\n return 'The field must be at least ' + control.errors.minlength.requiredLength + ' characters long';\r\n }\r\n\r\n if (control.hasError('maxlength')) {\r\n return 'The field must be at max ' + control.errors.maxlength.requiredLength + ' characters long';\r\n }\r\n\r\n return;\r\n }\r\n}\r\n","import { Component, OnInit, Optional, Input, Output, EventEmitter } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\r\nimport { PublicApiService } from '../_services';\r\nimport { FormHelper } from '../_services/form-helper';\r\n\r\n@Component({\r\n selector: 'configcat-authorization',\r\n templateUrl: './authorization.component.html',\r\n styleUrls: ['./authorization.component.scss']\r\n})\r\nexport class AuthorizationComponent implements OnInit {\r\n\r\n formGroup: FormGroup;\r\n @Input() basePath = null;\r\n @Output() authorized = new EventEmitter();\r\n FormHelper = FormHelper;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private publicApiService: PublicApiService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.formGroup = this.formBuilder.group({\r\n basicAuthUsername: ['', Validators.required],\r\n basicAuthPassword: ['', Validators.required],\r\n });\r\n }\r\n\r\n onSubmit() {\r\n if (!this.formGroup.valid) {\r\n return;\r\n }\r\n\r\n const meService = this.publicApiService.createMeService(\r\n this.formGroup.controls.basicAuthUsername.value,\r\n this.formGroup.controls.basicAuthPassword.value,\r\n this.basePath);\r\n\r\n meService.getMe().subscribe(me => {\r\n this.authorized.emit({\r\n basicAuthUsername: this.formGroup.controls.basicAuthUsername.value,\r\n basicAuthPassword: this.formGroup.controls.basicAuthPassword.value\r\n });\r\n },\r\n error => {\r\n this.formGroup.setErrors({ invalidAuthorization: 'Invalid Basic auth user name or password' });\r\n }\r\n );\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'configcat-concurrent-dialog',\r\n templateUrl: './concurrent-dialog.component.html',\r\n styleUrls: ['./concurrent-dialog.component.scss']\r\n})\r\nexport class ConcurrentDialogComponent implements OnInit {\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ConcurrentDialogComponent>\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n save() {\r\n this.dialogRef.close({ button: 'save' });\r\n }\r\n\r\n discard() {\r\n this.dialogRef.close({ button: 'discard' });\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\nimport { FormBuilder, FormGroup, FormArray } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'configcat-expand-dialog',\r\n templateUrl: './expand-dialog.component.html',\r\n styleUrls: ['./expand-dialog.component.scss']\r\n})\r\nexport class ExpandDialogComponent implements OnInit, OnDestroy {\r\n\r\n formControlSubscription: Subscription;\r\n formGroupSubscription: Subscription;\r\n\r\n formGroup: FormGroup;\r\n\r\n constructor(public dialogRef: MatDialogRef<ExpandDialogComponent>,\r\n private formBuilder: FormBuilder,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.data.multiline) {\r\n this.buildFormGroup();\r\n } else {\r\n this.formControlSubscription = this.data.control.valueChanges.subscribe(value => {\r\n this.data.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\r\n this.data.control.markAsDirty();\r\n }, error => { }, () => { });\r\n }\r\n }\r\n\r\n values() {\r\n return this.formGroup.get('values') as FormArray;\r\n }\r\n\r\n buildFormGroup() {\r\n const value = this.data.control.value ? this.data.control.value : '';\r\n const list = value.split(',').map(v => v.trim()).filter(v => !!v);\r\n this.formGroup = this.formBuilder.group({\r\n values: this.formBuilder.array(list.map(v => this.formBuilder.control(v)))\r\n });\r\n this.formGroupSubscription = this.formGroup.valueChanges.subscribe((formGroupValue) => {\r\n this.data.control.setValue(formGroupValue.values\r\n .filter(v => !!v)\r\n .join(','), { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\r\n this.data.control.updateValueAndValidity();\r\n this.data.control.markAsDirty();\r\n });\r\n }\r\n\r\n add() {\r\n (this.formGroup.controls.values as FormArray).push(this.formBuilder.control(''));\r\n }\r\n\r\n remove(index) {\r\n (this.formGroup.controls.values as FormArray).removeAt(index);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.formControlSubscription) {\r\n this.formControlSubscription.unsubscribe();\r\n this.formControlSubscription = null;\r\n }\r\n\r\n if (this.formGroupSubscription) {\r\n this.formGroupSubscription.unsubscribe();\r\n this.formGroupSubscription = null;\r\n }\r\n }\r\n\r\n close() {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'configcat-reason-dialog',\r\n templateUrl: './reason-dialog.component.html',\r\n styleUrls: ['./reason-dialog.component.scss']\r\n})\r\nexport class ReasonDialogComponent implements OnInit {\r\n\r\n formGroup: FormGroup;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ReasonDialogComponent>,\r\n private formBuilder: FormBuilder\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.formGroup = this.formBuilder.group({\r\n reason: ['', [Validators.required, Validators.maxLength(1000)]]\r\n });\r\n }\r\n\r\n handleSaveButton() {\r\n if (!this.formGroup.valid) {\r\n return;\r\n }\r\n\r\n this.dialogRef.close({ button: 'save', reason: this.formGroup.controls.reason.value });\r\n }\r\n\r\n cancel() {\r\n this.dialogRef.close({ button: 'cancel' });\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'configcat-save-snackbar',\r\n templateUrl: './save-snackbar.component.html',\r\n styleUrls: ['./save-snackbar.component.scss']\r\n})\r\nexport class SaveSnackbarComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { FormGroup, FormArray, FormControl } from '@angular/forms';\r\nimport { SettingType } from 'ng-configcat-publicapi';\r\n\r\n@Component({\r\n selector: 'configcat-rollout-percentage-items',\r\n templateUrl: './rollout-percentage-items.component.html',\r\n styleUrls: ['./rollout-percentage-items.component.scss']\r\n})\r\nexport class RolloutPercentageItemsComponent {\r\n\r\n @Input() formGroup: FormGroup;\r\n @Input() readOnly: boolean;\r\n SettingType = SettingType;\r\n\r\n\r\n setting() {\r\n return this.formGroup.get('setting').value;\r\n }\r\n\r\n rolloutRules() {\r\n return this.formGroup.get('rolloutRules') as FormArray;\r\n }\r\n\r\n rolloutPercentageItems() {\r\n return this.formGroup.get('rolloutPercentageItems') as FormArray;\r\n }\r\n\r\n rolloutPercentageItemsSum() {\r\n return this.formGroup.get('rolloutPercentageItemsSum') as FormControl;\r\n }\r\n\r\n value(rolloutPercentageItem: FormGroup) {\r\n return this.setting().settingType === SettingType.Boolean ?\r\n rolloutPercentageItem.get('valueDisabled') as FormControl :\r\n rolloutPercentageItem.get('value') as FormControl;\r\n }\r\n\r\n constructor() { }\r\n\r\n percentageChanged(index) {\r\n if (this.rolloutPercentageItems().controls[index].value.percentage < 0) {\r\n (this.rolloutPercentageItems().controls[index] as FormGroup).controls.percentage.setValue(0);\r\n }\r\n if (this.rolloutPercentageItems().controls[index].value.percentage > 100) {\r\n (this.rolloutPercentageItems().controls[index] as FormGroup).controls.percentage.setValue(100);\r\n }\r\n\r\n if (this.rolloutPercentageItems().controls.length === 2) {\r\n (this.rolloutPercentageItems().controls[1 - index] as FormGroup).controls.percentage\r\n .setValue(100 - this.rolloutPercentageItems().controls[index].value.percentage);\r\n }\r\n\r\n this.updateSum();\r\n }\r\n\r\n updateSum() {\r\n if (this.rolloutPercentageItems().controls.length === 0) {\r\n this.rolloutPercentageItemsSum().setValue(100);\r\n } else {\r\n this.rolloutPercentageItemsSum().setValue(\r\n this.rolloutPercentageItems().controls.map(v => v.value.percentage)\r\n .reduce((a, b) => a + b)\r\n );\r\n }\r\n }\r\n\r\n removeRolloutPercentageItem(index) {\r\n this.rolloutPercentageItems().removeAt(index);\r\n this.rolloutPercentageItems().markAsDirty();\r\n this.updateSum();\r\n }\r\n\r\n removeAll() {\r\n this.rolloutPercentageItems().clear();\r\n this.rolloutPercentageItems().markAsDirty();\r\n this.updateSum();\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { FormGroup, FormControl, FormArray, Validators } from '@angular/forms';\r\nimport { moveItemInArray, CdkDragDrop } from '@angular/cdk/drag-drop';\r\nimport * as semver from 'semver';\r\nimport { ExpandDialogComponent } from '../../../dialogs/expand-dialog/expand-dialog.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { SettingType, RolloutRuleComparator } from 'ng-configcat-publicapi';\r\n\r\n@Component({\r\n selector: 'configcat-rollout-rules',\r\n templateUrl: './rollout-rules.component.html',\r\n styleUrls: ['./rollout-rules.component.scss']\r\n})\r\nexport class RolloutRulesComponent {\r\n\r\n @Input() formGroup: FormGroup;\r\n @Input() readOnly: boolean;\r\n\r\n SettingType = SettingType;\r\n\r\n defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\r\n\r\n rolloutRuleComparators = [\r\n { value: RolloutRuleComparator.IsOneOf, label: 'IS ONE OF' },\r\n { value: RolloutRuleComparator.IsNotOneOf, label: 'IS NOT ONE OF' },\r\n { value: RolloutRuleComparator.Contains, label: 'CONTAINS' },\r\n { value: RolloutRuleComparator.DoesNotContain, label: 'DOES NOT CONTAIN' },\r\n\r\n { value: RolloutRuleComparator.SemVerIsOneOf, label: 'IS ONE OF (SemVer)' },\r\n { value: RolloutRuleComparator.SemVerIsNotOneOf, label: 'IS NOT ONE OF (SemVer)' },\r\n { value: RolloutRuleComparator.SemVerLess, label: '< (SemVer)' },\r\n { value: RolloutRuleComparator.SemVerLessOrEquals, label: '<= (SemVer)' },\r\n { value: RolloutRuleComparator.SemVerGreater, label: '> (SemVer)' },\r\n { value: RolloutRuleComparator.SemVerGreaterOrEquals, label: '>= (SemVer)' },\r\n\r\n { value: RolloutRuleComparator.NumberEquals, label: '= (Number)' },\r\n { value: RolloutRuleComparator.NumberDoesNotEqual, label: '!= (Number)' },\r\n { value: RolloutRuleComparator.NumberLess, label: '< (Number)' },\r\n { value: RolloutRuleComparator.NumberLessOrEquals, label: '<= (Number)' },\r\n { value: RolloutRuleComparator.NumberGreater, label: '> (Number)' },\r\n { value: RolloutRuleComparator.NumberGreaterOrEquals, label: '>= (Number)' },\r\n\r\n { value: RolloutRuleComparator.SensitiveIsOneOf, label: 'IS ONE OF (Sensitive)' },\r\n { value: RolloutRuleComparator.SensitiveIsNotOneOf, label: 'IS NOT ONE OF (Sensitive)' },\r\n ];\r\n\r\n constructor(private dialog: MatDialog) { }\r\n\r\n onlyFirstTooltip() {\r\n return this.formGroup.root.get('allRolloutRulesCount').value > 20 || this.rolloutRules().controls.length > 10;\r\n }\r\n\r\n setting() {\r\n return this.formGroup.get('setting').value;\r\n }\r\n\r\n rolloutRules() {\r\n return this.formGroup.get('rolloutRules') as FormArray;\r\n }\r\n\r\n comparisonAttributes() {\r\n return this.formGroup.root.get('comparisonAttributes').value;\r\n }\r\n\r\n removeRule(index) {\r\n this.rolloutRules().removeAt(index);\r\n this.rolloutRules().markAsDirty();\r\n }\r\n\r\n onDrop(event: CdkDragDrop<string[]>) {\r\n const rolloutRules = this.rolloutRules().controls;\r\n moveItemInArray(rolloutRules, event.previousIndex, event.currentIndex);\r\n this.formGroup.markAsDirty();\r\n }\r\n\r\n attributeChanged(event: any, comparisonAttribute: FormControl) {\r\n if (this.defaultComparisonAttributes.indexOf(event) !== -1) {\r\n if (comparisonAttribute.value !== event) {\r\n comparisonAttribute.setValue(event);\r\n this.formGroup.markAsDirty();\r\n }\r\n } else {\r\n if (comparisonAttribute.value !== '') {\r\n comparisonAttribute.setValue('');\r\n this.formGroup.markAsDirty();\r\n }\r\n }\r\n }\r\n\r\n getPlaceHolder(rolloutRule) {\r\n if (!rolloutRule.controls.comparisonAttribute.value) {\r\n return '';\r\n }\r\n\r\n switch (rolloutRule.controls.comparator.value) {\r\n case RolloutRuleComparator.IsOneOf:\r\n case RolloutRuleComparator.IsNotOneOf:\r\n case RolloutRuleComparator.SensitiveIsOneOf:\r\n case RolloutRuleComparator.SensitiveIsNotOneOf:\r\n switch (rolloutRule.controls.comparisonAttribute.value.toLowerCase()) {\r\n case 'identifier':\r\n return 'e.g: user_id1, user_id2, user_id3';\r\n case 'email':\r\n return 'e.g: jane@example.com, john@example.com';\r\n case 'country':\r\n return 'e.g: France, Brazil';\r\n default:\r\n return 'e.g: value1, value2, value3';\r\n }\r\n case RolloutRuleComparator.Contains:\r\n case RolloutRuleComparator.DoesNotContain:\r\n switch (rolloutRule.controls.comparisonAttribute.value.toLowerCase()) {\r\n case 'identifier':\r\n return 'part-of-id';\r\n case 'email':\r\n return 'e.g: @example.com';\r\n case 'country':\r\n return 'e.g: United';\r\n default:\r\n return 'e.g: any-part-of-your-value-string';\r\n }\r\n case RolloutRuleComparator.SemVerIsOneOf:\r\n case RolloutRuleComparator.SemVerIsNotOneOf:\r\n return 'e.g: 1.0.0, 2.0.1';\r\n case RolloutRuleComparator.SemVerLessOrEquals:\r\n case RolloutRuleComparator.SemVerLess:\r\n case RolloutRuleComparator.SemVerGreater:\r\n case RolloutRuleComparator.SemVerGreaterOrEquals:\r\n return 'e.g: 1.0.0';\r\n case RolloutRuleComparator.NumberEquals:\r\n case RolloutRuleComparator.NumberDoesNotEqual:\r\n case RolloutRuleComparator.NumberLess:\r\n case RolloutRuleComparator.NumberLessOrEquals:\r\n case RolloutRuleComparator.NumberGreater:\r\n case RolloutRuleComparator.NumberGreaterOrEquals:\r\n return 'e.g: 42';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n getComparisonValueType(rolloutRule) {\r\n switch (rolloutRule.controls.comparator.value) {\r\n case RolloutRuleComparator.NumberEquals:\r\n case RolloutRuleComparator.NumberDoesNotEqual:\r\n case RolloutRuleComparator.NumberLess:\r\n case RolloutRuleComparator.NumberLessOrEquals:\r\n case RolloutRuleComparator.NumberGreater:\r\n case RolloutRuleComparator.NumberGreaterOrEquals:\r\n return 'number';\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n getInfoClass(rolloutRule) {\r\n if (!rolloutRule.controls.comparisonAttribute.value) {\r\n return 'info';\r\n }\r\n\r\n switch (rolloutRule.controls.comparator.value) {\r\n case RolloutRuleComparator.IsOneOf:\r\n case RolloutRuleComparator.IsNotOneOf:\r\n case RolloutRuleComparator.Contains:\r\n case RolloutRuleComparator.DoesNotContain:\r\n return 'warn';\r\n default:\r\n return 'info';\r\n }\r\n }\r\n\r\n getInfoTooltip(rolloutRule) {\r\n if (!rolloutRule.controls.comparisonAttribute.value) {\r\n return 'Learn more about comparators';\r\n }\r\n\r\n switch (rolloutRule.controls.comparator.value) {\r\n case RolloutRuleComparator.IsOneOf:\r\n case RolloutRuleComparator.IsNotOneOf:\r\n case RolloutRuleComparator.Contains:\r\n case RolloutRuleComparator.DoesNotContain:\r\n return 'Consider using sensitive text comparators. Click to learn more.';\r\n default:\r\n return 'Click to learn more about comparators';\r\n }\r\n }\r\n\r\n comparatorChanged(rolloutRule) {\r\n let validators = [];\r\n\r\n switch (rolloutRule.controls.comparator.value) {\r\n case RolloutRuleComparator.IsOneOf:\r\n case RolloutRuleComparator.IsNotOneOf:\r\n case RolloutRuleComparator.SensitiveIsOneOf:\r\n case RolloutRuleComparator.SensitiveIsNotOneOf:\r\n case RolloutRuleComparator.Contains:\r\n case RolloutRuleComparator.DoesNotContain:\r\n validators = [Validators.required, Validators.maxLength(65535)];\r\n break;\r\n case RolloutRuleComparator.SemVerIsOneOf:\r\n case RolloutRuleComparator.SemVerIsNotOneOf:\r\n validators = [Validators.required, this.validateSemVerList];\r\n break;\r\n case RolloutRuleComparator.SemVerLessOrEquals:\r\n case RolloutRuleComparator.SemVerLess:\r\n case RolloutRuleComparator.SemVerGreater:\r\n case RolloutRuleComparator.SemVerGreaterOrEquals:\r\n validators = [Validators.required, this.validateSemVer];\r\n break;\r\n case RolloutRuleComparator.NumberEquals:\r\n case RolloutRuleComparator.NumberDoesNotEqual:\r\n case RolloutRuleComparator.NumberLess:\r\n case RolloutRuleComparator.NumberLessOrEquals:\r\n case RolloutRuleComparator.NumberGreater:\r\n case RolloutRuleComparator.NumberGreaterOrEquals:\r\n validators = [Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\r\n break;\r\n }\r\n\r\n rolloutRule.controls.comparisonValue.setValidators(validators);\r\n rolloutRule.controls.comparisonValue.updateValueAndValidity();\r\n }\r\n\r\n isListType(rolloutRule) {\r\n switch (rolloutRule.controls.comparator.value) {\r\n case RolloutRuleComparator.IsOneOf:\r\n case RolloutRuleComparator.IsNotOneOf:\r\n case RolloutRuleComparator.SensitiveIsOneOf:\r\n case RolloutRuleComparator.SensitiveIsNotOneOf:\r\n case RolloutRuleComparator.SemVerIsOneOf:\r\n case RolloutRuleComparator.SemVerIsNotOneOf:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n validateSemVer(c: FormControl) {\r\n\r\n if (semver.valid(c.value) === null) {\r\n return {\r\n validateSemVer: {\r\n valid: false\r\n }\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n validateSemVerList(c: FormControl) {\r\n if (!c.value) {\r\n return {\r\n validateSemVerList: {\r\n valid: false\r\n }\r\n };\r\n }\r\n\r\n const semvers = c.value.split(',').map(s => s.trim());\r\n if (semvers.find(s => s && s !== '' && semver.valid(s) === null)) {\r\n return {\r\n validateSemVerList: {\r\n valid: false\r\n }\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n popOut(rolloutRule: any) {\r\n this.dialog.open(ExpandDialogComponent, {\r\n width: '640px',\r\n data: {\r\n control: rolloutRule.controls.comparisonValue,\r\n multiline: this.isListType(rolloutRule)\r\n }\r\n });\r\n }\r\n\r\n\r\n trackByIndex(index: number): any {\r\n return index;\r\n }\r\n}\r\n","import { Component, Input, forwardRef } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ExpandDialogComponent } from '../../../dialogs/expand-dialog/expand-dialog.component';\r\nimport { SettingModel, SettingType } from 'ng-configcat-publicapi';\r\n\r\n@Component({\r\n selector: 'configcat-value',\r\n templateUrl: './value.component.html',\r\n styleUrls: [\r\n './slider.scss',\r\n './value.component.scss'\r\n ]\r\n})\r\nexport class ValueComponent {\r\n\r\n @Input() valueFormControl: FormControl;\r\n\r\n @Input() setting: SettingModel;\r\n\r\n SettingType = SettingType;\r\n\r\n constructor(private dialog: MatDialog) {\r\n }\r\n\r\n popOut() {\r\n this.dialog.open(ExpandDialogComponent, {\r\n width: '640px',\r\n data: { control: this.valueFormControl }\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SettingValuesModel } from '../_models/settingValuesModel';\r\nimport { FormBuilder, Validators, FormGroup, FormArray } from '@angular/forms';\r\nimport { RolloutPercentageItemModel, RolloutRuleModel, SettingType, SettingValueModel } from 'ng-configcat-publicapi';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SettingListFormHelper {\r\n\r\n constructor(private formBuilder: FormBuilder) { }\r\n\r\n createSettingValuesFormGroup(settingValuesModel: SettingValuesModel) {\r\n const formGroup = this.formBuilder.group({\r\n settingValues: this.formBuilder.array(\r\n settingValuesModel.settingValues.map(sv => {\r\n return this.createSettingValueFormGroup(sv, settingValuesModel.readOnly);\r\n })),\r\n\r\n // Decorator\r\n environment: this.formBuilder.group({\r\n environmentId: [{ value: settingValuesModel.environment.environmentId, disabled: true }],\r\n name: [{ value: settingValuesModel.environment.name, disabled: true }],\r\n }),\r\n\r\n comparisonAttributes: [[]],\r\n allRolloutRulesCount: [0]\r\n });\r\n\r\n const rolloutRules = this.getAllRolloutRules(formGroup);\r\n const comparisonAttributes = this.getComparisonAttributes(rolloutRules);\r\n formGroup.patchValue({ allRolloutRulesCount: rolloutRules.length });\r\n formGroup.patchValue({ comparisonAttributes: comparisonAttributes });\r\n return formGroup;\r\n }\r\n\r\n createSettingValueFormGroup(settingValueModel: SettingValueModel, readOnly: boolean) {\r\n return this.formBuilder.group({\r\n settingId: [settingValueModel.setting.settingId],\r\n value: [\r\n { value: settingValueModel.value, disabled: readOnly },\r\n this.getValidatorsForSettingType(settingValueModel.setting.settingType)\r\n ],\r\n rolloutPercentageItems: this.formBuilder.array(settingValueModel.rolloutPercentageItems.map(p => {\r\n return this.createRolloutPercentageItemFormGroup(p, readOnly, settingValueModel.setting.settingType);\r\n })),\r\n rolloutRules: this.formBuilder.array(settingValueModel.rolloutRules.map(r => {\r\n return this.createRolloutRuleFormGroup(r, readOnly, settingValueModel.setting.settingType);\r\n })),\r\n\r\n updatedAt: [{ value: settingValueModel.updatedAt, disabled: true}],\r\n lastUpdaterUserEmail: [{ value: settingValueModel.lastUpdaterUserEmail, disabled: true }],\r\n lastUpdaterUserFullName: [{ value: settingValueModel.lastUpdaterUserFullName, disabled: true }],\r\n\r\n rolloutPercentageItemsSum: [{ value: 100, disabled: false }, [Validators.min(100), Validators.max(100)]],\r\n // Decoration\r\n setting: this.formBuilder.group({\r\n settingId: [{ value: settingValueModel.setting.settingId, disabled: true }],\r\n key: [{ value: settingValueModel.setting.key, disabled: true }],\r\n name: [{ value: settingValueModel.setting.name, disabled: true }],\r\n hint: [{ value: settingValueModel.setting.hint, disabled: true }],\r\n settingType: [{ value: settingValueModel.setting.settingType, disabled: true }],\r\n creatorEmail: [{ value: settingValueModel.setting.creatorEmail, disabled: true }],\r\n creatorFullName: [{ value: settingValueModel.setting.creatorFullName, disabled: true }],\r\n createdAt: [{ value: settingValueModel.setting.createdAt, disabled: true }]\r\n }),\r\n\r\n integrationLinks: this.formBuilder.array(settingValueModel.integrationLinks.map(il => {\r\n return this.formBuilder.group({\r\n key: [{ value: il.key, disabled: true }],\r\n description: [{ value: il.description, disabled: true }],\r\n integrationLinkType: [{ value: il.integrationLinkType, disabled: true }],\r\n url: [{ value: il.url, disabled: true }],\r\n });\r\n }))\r\n });\r\n }\r\n\r\n createRolloutPercentageItemFormGroup(p: RolloutPercentageItemModel, readOnly: boolean, settingType: SettingType) {\r\n return this.formBuilder.group({\r\n percentage: [{ value: p.percentage, disabled: readOnly }, [Validators.required, Validators.min(0), Validators.max(100)]],\r\n value: [\r\n { value: p.value, disabled: readOnly },\r\n\r\n [].concat(...[Validators.required, this.getValidatorsForSettingType(settingType)])\r\n ],\r\n valueDisabled: [\r\n { value: p.value, disabled: true }, // For percentage item value\r\n ]\r\n });\r\n }\r\n\r\n createRolloutRuleFormGroup(r: RolloutRuleModel, readOnly: boolean, settingType: SettingType) {\r\n return this.formBuilder.group({\r\n comparisonAttribute: [{ value: r.comparisonAttribute, disabled: readOnly }, [Validators.required]],\r\n comparator: [{ value: r.comparator, disabled: readOnly }, [Validators.required]],\r\n comparisonValue: [{ value: r.comparisonValue, disabled: readOnly }, [Validators.required]],\r\n value: [\r\n { value: r.value, disabled: readOnly },\r\n this.getValidatorsForSettingType(settingType)\r\n ],\r\n });\r\n }\r\n\r\n private getValidatorsForSettingType(settingType: SettingType) {\r\n switch (settingType) {\r\n case SettingType.Int:\r\n return [Validators.required,\r\n Validators.min(-2147483648), Validators.max(2147483647), Validators.pattern('^[-+]?[0-9]\\\\d*$')];\r\n case SettingType.Double:\r\n return [Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\r\n case SettingType.String:\r\n case SettingType.Boolean:\r\n return [Validators.required];\r\n default:\r\n return [];\r\n }\r\n }\r\n\r\n private getAllRolloutRules(formGroup: FormGroup) {\r\n const settingValues = formGroup.get('settingValues') as FormArray;\r\n const rolloutRules = settingValues.controls.map(cv => (cv.get('rolloutRules') as FormArray).value);\r\n return rolloutRules.length === 0 ? rolloutRules : rolloutRules.reduce((a, b) => a.concat(b));\r\n }\r\n\r\n private getComparisonAttributes(rolloutRules: any[]) {\r\n if (rolloutRules.length > 0) {\r\n const currentComparisonAttributes = rolloutRules.map(r => r.comparisonAttribute);\r\n\r\n const defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\r\n const comparisonAttributes = currentComparisonAttributes.filter(c => defaultComparisonAttributes.indexOf(c) === -1);\r\n return Array.from(new Set(comparisonAttributes));\r\n } else {\r\n return [];\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy, OnChanges } from '@angular/core';\r\nimport { SettingValuesModel, UpdateSettingValuesModel } from '../_models';\r\nimport { FormArray, FormGroup } from '@angular/forms';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ReasonDialogComponent } from '../dialogs/reason-dialog/reason-dialog.component';\r\nimport { SaveSnackbarComponent } from '../dialogs/save-snackbar/save-snackbar.component';\r\nimport { ConcurrentDialogComponent } from '../dialogs/concurrent-dialog/concurrent-dialog.component';\r\nimport { SettingListFormHelper } from '../_services/setting-list-form-helper';\r\n\r\n@Component({\r\n selector: 'configcat-setting-list',\r\n templateUrl: './setting-list.component.html',\r\n styleUrls: ['./setting-list.component.scss']\r\n})\r\nexport class SettingListComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() canEditSetting: boolean;\r\n @Input() canDeleteSetting: boolean;\r\n\r\n @Input() onSave: (value: UpdateSettingValuesModel) => Observable<SettingValuesModel>;\r\n @Input() loadSettingValues: () => Observable<SettingValuesModel>;\r\n @Input() deleteSettingText = 'Delete setting';\r\n @Input() showEnvironmentName = false;\r\n\r\n @Output() editSettingRequested = new EventEmitter();\r\n @Output() deleteSettingRequested = new EventEmitter();\r\n @Output() formValuesChanged = new EventEmitter();\r\n\r\n formValuesChangedSubscription: Subscription;\r\n\r\n loading = true;\r\n\r\n settingValues: SettingValuesModel;\r\n formGroup: FormGroup;\r\n\r\n submitting = false;\r\n showRevertQuestion = false;\r\n showFeedBackMessage = false;\r\n readOnly = false;\r\n\r\n constructor(private formHelper: SettingListFormHelper,\r\n private snackBar: MatSnackBar,\r\n private dialog: MatDialog) { }\r\n\r\n ngOnInit(): void {\r\n this.reloadSettingValues();\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.reloadSettingValues();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.formValuesChangedSubscription) {\r\n this.formValuesChangedSubscription.unsubscribe();\r\n this.formValuesChangedSubscription = null;\r\n }\r\n }\r\n\r\n reloadSettingValues() {\r\n this.showFeedBackMessage = false;\r\n this.loading = true;\r\n this.loadSettingValues()\r\n .subscribe(settingValues => {\r\n this.readOnly = settingValues.readOnly;\r\n this.settingValues = settingValues;\r\n this.createFormGroup();\r\n this.loading = false;\r\n },\r\n error => {\r\n this.snackBar.open('Ooops. We could not load your Feature Flags and Settings. Please try again or contact us.',\r\n 'Dismiss', { duration: 60000, panelClass: 'red-snackbar' });\r\n });\r\n }\r\n\r\n createFormGroup() {\r\n this.formGroup = this.formHelper.createSettingValuesFormGroup(this.settingValues);\r\n this.formValuesChangedSubscription = this.formGroup.valueChanges.subscribe(() => {\r\n this.formValuesChanged.emit();\r\n });\r\n }\r\n\r\n settingValuesFormArray() {\r\n return this.formGroup.get('settingValues') as FormArray;\r\n }\r\n\r\n submit() {\r\n if (!this.formGroup || !this.formGroup.valid) {\r\n this.showFeedBackMessage = true;\r\n this.formGroup.markAsTouched();\r\n return;\r\n }\r\n\r\n this.showFeedBackMessage = false;\r\n this.submitting = true;\r\n\r\n const updateSettingValuesModel = <UpdateSettingValuesModel>{\r\n settingValues: this.formGroup.controls.settingValues.value,\r\n knownLastUpdatedAt: this.settingValues.lastUpdatedAt,\r\n forced: false\r\n };\r\n\r\n if (this.settingValues.reasonRequired) {\r\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\r\n width: '450px'\r\n });\r\n dialogRef.afterClosed()\r\n .subscribe(result => {\r\n if (result && result.button === 'save' && result.reason) {\r\n\r\n updateSettingValuesModel.reason = result.reason;\r\n this.updateSettingValues(updateSettingValuesModel);\r\n } else {\r\n this.submitting = false;\r\n }\r\n });\r\n return;\r\n }\r\n\r\n this.updateSettingValues(updateSettingValuesModel);\r\n }\r\n\r\n updateSettingValues(updateSettingValuesModel) {\r\n this.onSave(updateSettingValuesModel).subscribe(settingValues => {\r\n this.settingValues = settingValues;\r\n this.createFormGroup();\r\n this.submitting = false;\r\n this.snackBar.openFromComponent(SaveSnackbarComponent, { duration: 5000, panelClass: 'green-snackbar' });\r\n }, (error) => {\r\n if (error.status === 400 && error.error\r\n && error.error.KnownLastUpdatedAt && error.error.KnownLastUpdatedAt[0] === 'Concurrent update') {\r\n const dialogRef = this.dialog.open(ConcurrentDialogComponent, {\r\n width: '560px'\r\n });\r\n dialogRef.afterClosed()\r\n .subscribe(result => {\r\n if (result && result.button === 'save') {\r\n updateSettingValuesModel.forced = true;\r\n this.updateSettingValues(updateSettingValuesModel);\r\n } else {\r\n this.reloadSettingValues();\r\n this.submitting = false;\r\n }\r\n });\r\n return;\r\n }\r\n\r\n if (error.status === 400 && error.error && error.error.Reason && error.error.Reason[0] === 'Reason required') {\r\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\r\n width: '450px'\r\n });\r\n dialogRef.afterClosed()\r\n .subscribe(result => {\r\n if (result && result.button === 'save' && result.reason) {\r\n updateSettingValuesModel.reason = result.reason;\r\n this.updateSettingValues(updateSettingValuesModel);\r\n } else {\r\n this.submitting = false;\r\n }\r\n });\r\n return;\r\n }\r\n\r\n this.formGroup.setErrors({ internalServerError: 'Internal server error' });\r\n this.showFeedBackMessage = true;\r\n });\r\n }\r\n\r\n handleRevertYes() {\r\n this.showRevertQuestion = false;\r\n this.reloadSettingValues();\r\n }\r\n\r\n handleRevertCancel() {\r\n this.showRevertQuestion = false;\r\n }\r\n\r\n onEditSettingRequested(setting) {\r\n this.editSettingRequested.emit({\r\n setting: setting.setting,\r\n environment: this.settingValues.environment,\r\n config: this.settingValues.config\r\n });\r\n }\r\n\r\n onDeleteSettingRequested(setting) {\r\n this.deleteSettingRequested.emit({\r\n setting: setting.setting,\r\n environment: this.settingValues.environment,\r\n config: this.settingValues.config\r\n });\r\n }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\r\nimport { FormGroup, FormArray, FormControl } from '@angular/forms';\r\nimport { RolloutPercentageItemModel, RolloutRuleComparator, RolloutRuleModel, SettingType } from 'ng-configcat-publicapi';\r\nimport { SettingListFormHelper } from '../../_services/setting-list-form-helper';\r\n\r\n@Component({\r\n selector: 'setting',\r\n templateUrl: './setting.component.html',\r\n styleUrls: ['./setting.component.scss']\r\n})\r\nexport class SettingComponent implements OnInit {\r\n\r\n @Input() formGroup: FormGroup;\r\n @Input() readOnly: boolean;\r\n @Input() canEditSetting: boolean;\r\n @Input() canDeleteSetting: boolean;\r\n @Input() deleteSettingText = 'Delete setting';\r\n @Input() showEnvironmentName = false;\r\n\r\n @Output() editSettingRequested = new EventEmitter();\r\n @Output() deleteSettingRequested = new EventEmitter();\r\n\r\n rulesBeingRendered = false;\r\n \r\n SettingType = SettingType;\r\n\r\n constructor(private formHelper: SettingListFormHelper,\r\n private cdRef: ChangeDetectorRef) { }\r\n\r\n ngOnInit() {}\r\n\r\n environment() {\r\n return this.formGroup.root.get('environment').value;\r\n }\r\n\r\n setting() {\r\n return this.formGroup.get('setting').value;\r\n }\r\n\r\n integrationLinks() {\r\n return this.formGroup.get('integrationLinks') as FormArray;\r\n }\r\n\r\n rolloutRules() {\r\n return this.formGroup.get('rolloutRules') as FormArray;\r\n }\r\n\r\n rolloutPercentageItems() {\r\n return this.formGroup.get('rolloutPercentageItems') as FormArray;\r\n }\r\n\r\n value() {\r\n return this.formGroup.get('value') as FormControl;\r\n }\r\n\r\n addRolloutRule() {\r\n this.rolloutRules().push(this.formHelper.createRolloutRuleFormGroup(\r\n <RolloutRuleModel>{\r\n comparisonAttribute: 'Identifier',\r\n comparator: RolloutRuleComparator.SensitiveIsOneOf,\r\n comparisonValue: '',\r\n value: this.setting().settingType === SettingType.Boolean ? false as unknown : null\r\n },\r\n this.readOnly, this.setting().settingType));\r\n this.rolloutRules().markAsDirty();\r\n }\r\n\r\n removeRolloutRules() {\r\n this.rolloutRules().clear();\r\n this.rolloutRules().markAsDirty();\r\n }\r\n\r\n addRolloutPercentageItem() {\r\n\r\n if (this.rolloutPercentageItems().length === 0) {\r\n switch (this.setting().settingType) {\r\n case SettingType.Boolean:\r\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\r\n <RolloutPercentageItemModel>{\r\n percentage: 0,\r\n value: true as unknown \r\n },\r\n this.readOnly, this.setting().settingType));\r\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\r\n <RolloutPercentageItemModel>{\r\n percentage: 100,\r\n value: false as unknown \r\n },\r\n this.readOnly, this.setting().settingType));\r\n break;\r\n\r\n case SettingType.String:\r\n case SettingType.Int:\r\n case SettingType.Double:\r\n for (let i = 0; i < 4; i++) {\r\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\r\n <RolloutPercentageItemModel>{\r\n percentage: 25,\r\n value: null\r\n },\r\n this.readOnly, this.setting().settingType));\r\n }\r\n\r\n break;\r\n }\r\n } else if (this.setting().settingType !== SettingType.Boolean) {\r\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\r\n <RolloutPercentageItemModel>{\r\n percentage: 0,\r\n value: null\r\n },\r\n this.readOnly, this.setting().settingType));\r\n }\r\n\r\n this.rolloutPercentageItems().markAsDirty();\r\n }\r\n\r\n removeRolloutPercentageItems() {\r\n this.rolloutPercentageItems().clear();\r\n this.rolloutPercentageItems().markAsDirty();\r\n }\r\n\r\n editSetting() {\r\n this.editSettingRequested.emit({ setting: this.setting() });\r\n }\r\n\r\n deleteSetting() {\r\n this.deleteSettingRequested.emit({ setting: this.setting() });\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { SettingItemComponent } from './setting-item/setting-item.component';\r\nimport { SettingSelectComponent } from './selects/setting-select/setting-select.component';\r\nimport { ProductSelectComponent } from './selects/product-select/product-select.component';\r\nimport { ConfigSelectComponent } from './selects/config-select/config-select.component';\r\nimport { EnvironmentSelectComponent } from './selects/environment-select/environment-select.component';\r\nimport { Configuration } from './configuration';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { ApiModule } from 'ng-configcat-publicapi';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { AuthorizationComponent } from './authorization/authorization.component';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { ConcurrentDialogComponent } from './dialogs/concurrent-dialog/concurrent-dialog.component';\r\nimport { ExpandDialogComponent } from './dialogs/expand-dialog/expand-dialog.component';\r\nimport { ReasonDialogComponent } from './dialogs/reason-dialog/reason-dialog.component';\r\nimport { SaveSnackbarComponent } from './dialogs/save-snackbar/save-snackbar.component';\r\nimport { RolloutPercentageItemsComponent } from './setting-list/setting/rollout-percentage-items/rollout-percentage-items.component';\r\nimport { RolloutRulesComponent } from './setting-list/setting/rollout-rules/rollout-rules.component';\r\nimport { ValueComponent } from './setting-list/setting/value/value.component';\r\nimport { SettingListComponent } from './setting-list/setting-list.component';\r\nimport { SettingComponent } from './setting-list/setting/setting.component';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { BaseComponent } from './base/base.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n BaseComponent,\r\n ProductSelectComponent,\r\n ConfigSelectComponent,\r\n EnvironmentSelectComponent,\r\n SettingSelectComponent,\r\n SettingItemComponent,\r\n AuthorizationComponent,\r\n SettingListComponent,\r\n SettingComponent,\r\n RolloutPercentageItemsComponent,\r\n RolloutRulesComponent,\r\n ValueComponent,\r\n ReasonDialogComponent,\r\n ConcurrentDialogComponent,\r\n SaveSnackbarComponent,\r\n ExpandDialogComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n BrowserAnimationsModule,\r\n HttpClientModule,\r\n ApiModule,\r\n MatFormFieldModule,\r\n MatOptionModule,\r\n MatSelectModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatChipsModule,\r\n MatAutocompleteModule,\r\n DragDropModule,\r\n RouterModule,\r\n MatSnackBarModule,\r\n MatDialogModule,\r\n MatMenuModule\r\n ],\r\n exports: [\r\n AuthorizationComponent,\r\n\r\n ProductSelectComponent,\r\n ConfigSelectComponent,\r\n EnvironmentSelectComponent,\r\n SettingSelectComponent,\r\n\r\n SettingItemComponent\r\n ]\r\n})\r\nexport class NgConfigCatPublicApiUIModule {\r\n public static forRoot(configurationFactory: () => Configuration): ModuleWithProviders<NgConfigCatPublicApiUIModule> {\r\n return {\r\n ngModule: NgConfigCatPublicApiUIModule,\r\n providers: [{ provide: Configuration, useFactory: configurationFactory }]\r\n };\r\n }\r\n\r\n constructor() { }\r\n}\r\n","/*\r\n * Public API Surface of ng-configcat-publicapi-ui\r\n */\r\n\r\nexport * from './lib/ng-configcat-publicapi-ui.module';\r\nexport * from './lib/_services';\r\nexport * from './lib/setting-item/setting-item.component';\r\nexport * from './lib/authorization/authorization.component';\r\nexport * from './lib/selects/product-select/product-select.component';\r\nexport * from './lib/selects/config-select/config-select.component';\r\nexport * from './lib/selects/environment-select/environment-select.component';\r\nexport * from './lib/selects/setting-select/setting-select.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {PublicApiService as ɵd} from './lib/_services';\nexport {PublicApiService as ɵb} from './lib/_services/public-api.service';\nexport {SettingListFormHelper as ɵf} from './lib/_services/setting-list-form-helper';\nexport {BaseComponent as ɵa} from './lib/base/base.component';\nexport {Configuration as ɵc} from './lib/configuration';\nexport {ConcurrentDialogComponent as ɵl} from './lib/dialogs/concurrent-dialog/concurrent-dialog.component';\nexport {ExpandDialogComponent as ɵn} from './lib/dialogs/expand-dialog/expand-dialog.component';\nexport {ReasonDialogComponent as ɵk} from './lib/dialogs/reason-dialog/reason-dialog.component';\nexport {SaveSnackbarComponent as ɵm} from './lib/dialogs/save-snackbar/save-snackbar.component';\nexport {SettingListComponent as ɵe} from './lib/setting-list/setting-list.component';\nexport {RolloutPercentageItemsComponent as ɵh} from './lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component';\nexport {RolloutRulesComponent as ɵi} from './lib/setting-list/setting/rollout-rules/rollout-rules.component';\nexport {SettingComponent as ɵg} from './lib/setting-list/setting/setting.component';\nexport {ValueComponent as ɵj} from './lib/setting-list/setting/value/value.component';"],"names":["PublicApiConfiguration"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"exports":[{"from":"./lib/public-api.service"}],"metadata":{"NgConfigCatPublicApiUIModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":38,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ProductSelectComponent"},{"__symbolic":"reference","name":"ConfigSelectComponent"},{"__symbolic":"reference","name":"EnvironmentSelectComponent"},{"__symbolic":"reference","name":"SettingSelectComponent"},{"__symbolic":"reference","name":"SettingItemComponent"},{"__symbolic":"reference","name":"AuthorizationComponent"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵg"},{"__symbolic":"reference","name":"ɵh"},{"__symbolic":"reference","name":"ɵi"},{"__symbolic":"reference","name":"ɵj"},{"__symbolic":"reference","name":"ɵk"},{"__symbolic":"reference","name":"ɵl"},{"__symbolic":"reference","name":"ɵm"},{"__symbolic":"reference","name":"ɵn"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":58,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":59,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":60,"character":4},{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"BrowserAnimationsModule","line":61,"character":4},{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClientModule","line":62,"character":4},{"__symbolic":"reference","module":"ng-configcat-publicapi","name":"ApiModule","line":63,"character":4},{"__symbolic":"reference","module":"@angular/material/form-field","name":"MatFormFieldModule","line":64,"character":4},{"__symbolic":"reference","module":"@angular/material/core","name":"MatOptionModule","line":65,"character":4},{"__symbolic":"reference","module":"@angular/material/select","name":"MatSelectModule","line":66,"character":4},{"__symbolic":"reference","module":"@angular/material/button","name":"MatButtonModule","line":67,"character":4},{"__symbolic":"reference","module":"@angular/material/input","name":"MatInputModule","line":68,"character":4},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":69,"character":4},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":70,"character":4},{"__symbolic":"reference","module":"@angular/material/chips","name":"MatChipsModule","line":71,"character":4},{"__symbolic":"reference","module":"@angular/material/autocomplete","name":"MatAutocompleteModule","line":72,"character":4},{"__symbolic":"reference","module":"@angular/cdk/drag-drop","name":"DragDropModule","line":73,"character":4},{"__symbolic":"reference","module":"@angular/router","name":"RouterModule","line":74,"character":4},{"__symbolic":"reference","module":"@angular/material/snack-bar","name":"MatSnackBarModule","line":75,"character":4},{"__symbolic":"reference","module":"@angular/material/dialog","name":"MatDialogModule","line":76,"character":4},{"__symbolic":"reference","module":"@angular/material/menu","name":"MatMenuModule","line":77,"character":4}],"exports":[{"__symbolic":"reference","name":"AuthorizationComponent"},{"__symbolic":"reference","name":"ProductSelectComponent"},{"__symbolic":"reference","name":"ConfigSelectComponent"},{"__symbolic":"reference","name":"EnvironmentSelectComponent"},{"__symbolic":"reference","name":"SettingSelectComponent"},{"__symbolic":"reference","name":"SettingItemComponent"}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}]},"statics":{"forRoot":{"__symbolic":"function","parameters":["configurationFactory"],"value":{"ngModule":{"__symbolic":"reference","name":"NgConfigCatPublicApiUIModule"},"providers":[{"provide":{"__symbolic":"reference","name":"ɵc"},"useFactory":{"__symbolic":"reference","name":"configurationFactory"}}]}}}},"SettingItemComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"configcat-setting-item","template":"<configcat-setting-list [canEditSetting]=\"canEditSetting\" [canDeleteSetting]=\"canDeleteSetting\"\r\n [onSave]=\"handleSave\" [loadSettingValues]=\"loadSettingValues\"\r\n (editSettingRequested)=\"onEditSettingRequested($event)\" (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\r\n [deleteSettingText]=\"deleteSettingText\"\r\n [showEnvironmentName]=\"showEnvironmentName\" (formValuesChanged)=\"onFormValuesChanged()\">\r\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"]}]}],"members":{"productId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":15,"character":3}}]}],"environmentId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"configId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":3}}]}],"settingId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":18,"character":3}}]}],"canEditSetting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}}]}],"canDeleteSetting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":21,"character":3}}]}],"deleteSettingText":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3}}]}],"showEnvironmentName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":23,"character":3}}]}],"editSettingRequested":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":25,"character":3}}]}],"deleteSettingRequested":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":26,"character":3}}]}],"loadSucceeded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":28,"character":3}}]}],"loadFailed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":29,"character":3}}]}],"saveSucceeded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":30,"character":3}}]}],"saveFailed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":31,"character":3}}]}],"formValuesChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":33,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵd"}]}],"ngOnInit":[{"__symbolic":"method"}],"onEditSettingRequested":[{"__symbolic":"method"}],"onDeleteSettingRequested":[{"__symbolic":"method"}],"onFormValuesChanged":[{"__symbolic":"method"}]}},"AuthorizationComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"selector":"configcat-authorization","template":"<form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"container\">\r\n <div class=\"form\">\r\n <p>\r\n <a href=\"https://app.configcat.com/my-account/public-api-credentials\" target=\"_blank\">\r\n Get your Basic Auth user name and password</a> to access ConfigCat Public API.\r\n <br /><br />\r\n <b>Note!</b> Your ConfigCat account's email address and password will not work here.\r\n </p>\r\n\r\n <mat-form-field class=\"form-field\">\r\n <mat-label>Basic auth user name</mat-label>\r\n <input matInput placeholder=\"Basic auth user name\" formControlName=\"basicAuthUsername\">\r\n <mat-error *ngIf=\"formGroup.controls.basicAuthUsername.invalid\">\r\n {{FormHelper.getErrorMessage(formGroup.controls.basicAuthUsername)}}\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field class=\"form-field\">\r\n <mat-label>Basic auth password</mat-label>\r\n <input matInput placeholder=\"Basic auth password\" formControlName=\"basicAuthPassword\" type=\"password\"\r\n autocomplete=\"current-password\">\r\n <mat-error *ngIf=\"formGroup.controls.basicAuthPassword.invalid\">\r\n {{FormHelper.getErrorMessage(formGroup.controls.basicAuthPassword)}}\r\n </mat-error>\r\n </mat-form-field>\r\n <div>\r\n <button mat-raised-button color=\"primary\" type=\"submit\" class=\"submit\">Authorize</button>\r\n <mat-error *ngIf=\"formGroup.invalid && formGroup.errors && formGroup.errors.invalidAuthorization\">\r\n {{formGroup.errors.invalidAuthorization}}</mat-error>\r\n </div>\r\n </div>\r\n </div>\r\n</form>","styles":[".container{display:flex;margin:8px}.form{width:100%}.form-field{width:100%;margin-bottom:8px}.submit{margin-top:8px;margin-bottom:8px}\n"]}]}],"members":{"basePath":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"authorized":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":14,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/forms","name":"FormBuilder","line":18,"character":25},{"__symbolic":"reference","name":"ɵd"}]}],"ngOnInit":[{"__symbolic":"method"}],"onSubmit":[{"__symbolic":"method"}]}},"ProductSelectComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"configcat-product-select","template":"<mat-form-field class=\"form-field\">\r\n <mat-select placeholder=\"Product\" [formControl]=\"valueFormControl\" name=\"productValue\">\r\n <mat-option *ngFor=\"let product of products\" [value]=\"product.productId\">{{product.name}}\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>","styles":[".form-field{width:100%}\n"]}]}],"members":{"valueFormControl":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵd"}]}],"ngOnInit":[{"__symbolic":"method"}]}},"ConfigSelectComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"configcat-config-select","providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":12,"character":15},"useExisting":{"__symbolic":"reference","name":"ConfigSelectComponent"},"multi":true}],"template":"<mat-form-field class=\"form-field\">\r\n <mat-select placeholder=\"Config\" [formControl]=\"valueFormControl\" *ngIf=\"configs\" name=\"value\">\r\n <mat-option *ngFor=\"let config of configs\" [value]=\"config.configId\">{{config.name}}</mat-option>\r\n </mat-select>\r\n</mat-form-field>","styles":[".form-field{width:100%}\n"]}]}],"members":{"valueFormControl":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}}]}],"productId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":21,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵd"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"reloadConfigs":[{"__symbolic":"method"}]}},"EnvironmentSelectComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"configcat-environment-select","template":"<mat-form-field class=\"form-field\">\r\n <mat-select placeholder=\"Environment\" [formControl]=\"valueFormControl\" *ngIf=\"environments\" name=\"value\">\r\n <mat-option *ngFor=\"let environment of environments\" [value]=\"environment.environmentId\">{{environment.name}}\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>","styles":[".form-field{width:100%}\n"]}]}],"members":{"valueFormControl":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"productId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵd"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"reloadEnvironments":[{"__symbolic":"method"}]}},"SettingSelectComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"configcat-setting-select","template":"<mat-form-field class=\"form-field\">\r\n <mat-select placeholder=\"Feature flag or setting\" [formControl]=\"valueFormControl\" *ngIf=\"settings\" name=\"value\">\r\n <mat-option *ngFor=\"let setting of settings\" [value]=\"setting.settingId\">{{setting.name}}\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>","styles":[".form-field{width:100%}\n"]}]}],"members":{"valueFormControl":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"configId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵd"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"reloadSettings":[{"__symbolic":"method"}]}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"base","template":"<div></div>"}]}],"members":{"basePath":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":3}}]}],"basicAuthUsername":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":3}}]}],"basicAuthPassword":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":12,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵb"}]}],"createProductsService":[{"__symbolic":"method"}],"createConfigsService":[{"__symbolic":"method"}],"createEnvironmentsService":[{"__symbolic":"method"}],"createSettingsService":[{"__symbolic":"method"}],"createSettingValuesService":[{"__symbolic":"method"}]}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":10,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":15,"character":9}}]],"parameters":[{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":14,"character":28},{"__symbolic":"reference","name":"ɵc"}]}],"createMeService":[{"__symbolic":"method"}],"createProductsService":[{"__symbolic":"method"}],"createConfigsService":[{"__symbolic":"method"}],"createEnvironmentsService":[{"__symbolic":"method"}],"createSettingsService":[{"__symbolic":"method"}],"createSettingValuesService":[{"__symbolic":"method"}],"createIntegrationLinksService":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":2,"character":1}}],"members":{}},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":11,"character":1},"arguments":[{"selector":"configcat-setting-list","template":"<form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" *ngIf=\"!loading\">\r\n <div class=\"wrapper\" *ngFor=\"let settingValueFromGroup of settingValuesFormArray().controls; let i = index\">\r\n <setting [formGroup]=\"settingValueFromGroup\" [readOnly]=\"readOnly\"\r\n [canEditSetting]=\"canEditSetting\" [canDeleteSetting]=\"canDeleteSetting\"\r\n (editSettingRequested)=\"onEditSettingRequested($event)\"\r\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\r\n [showEnvironmentName]=\"showEnvironmentName\">\r\n </setting>\r\n </div>\r\n\r\n <div class=\"save\" *ngIf=\"!readOnly && !submitting && formGroup.dirty\">\r\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\r\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\r\n <span>Something went wrong and we could not save your settings. You can try again or <a\r\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact us.</a></span>\r\n </div>\r\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\r\n <span>Oh no! A feature flag has invalid or missing data.</span>\r\n </div>\r\n </div>\r\n <button type=\"button\" mat-stroked-button *ngIf=\"!showRevertQuestion\" (click)=\"showRevertQuestion = true\">\r\n <mat-icon>history</mat-icon><span>Revert changes</span>\r\n </button>\r\n <div *ngIf=\"showRevertQuestion\">\r\n <span class=\"revert\">Revert to last saved state?</span>\r\n <button type=\"button\" class=\"yes\" mat-stroked-button (click)=\"handleRevertYes()\">Yes</button>\r\n <button type=\"button\" mat-stroked-button (click)=\"handleRevertCancel()\">No</button>\r\n </div>\r\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [disabled]=\"submitting\">\r\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\r\n </button>\r\n </div>\r\n</form>\r\n","styles":[".wrapper{background-color:#f3f3f3;border:1px solid rgba(0,0,0,.12);border-radius:4px;margin:1em 0}.show-hide a{cursor:pointer;font-size:.8rem}.save{position:-webkit-sticky;position:sticky;bottom:0;min-height:38px;padding:.5rem .5rem .5rem 0;background-color:#fff;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:flex-end;z-index:1000}.save .save-button{-webkit-animation:shadow-pulse 1s 3;animation:shadow-pulse 1s 3;margin-left:1rem}.save>*{margin:.3em}.save .revert{margin:0 16px;font-size:14px}.save .yes{margin:0 5px}.error{background-color:#a32b2d;color:#fff;padding:5px;font-size:.9em}.error a{color:#fff;text-decoration:underline}@media (max-width: 700px){.save{padding:.5rem 0}}\n"]}]}],"members":{"canEditSetting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":18,"character":3}}]}],"canDeleteSetting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":3}}]}],"onSave":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":21,"character":3}}]}],"loadSettingValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3}}]}],"deleteSettingText":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":23,"character":3}}]}],"showEnvironmentName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":24,"character":3}}]}],"editSettingRequested":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":26,"character":3}}]}],"deleteSettingRequested":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":27,"character":3}}]}],"formValuesChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":28,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","module":"@angular/material/snack-bar","name":"MatSnackBar","line":43,"character":22},{"__symbolic":"reference","module":"@angular/material/dialog","name":"MatDialog","line":44,"character":20}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"reloadSettingValues":[{"__symbolic":"method"}],"createFormGroup":[{"__symbolic":"method"}],"settingValuesFormArray":[{"__symbolic":"method"}],"submit":[{"__symbolic":"method"}],"updateSettingValues":[{"__symbolic":"method"}],"handleRevertYes":[{"__symbolic":"method"}],"handleRevertCancel":[{"__symbolic":"method"}],"onEditSettingRequested":[{"__symbolic":"method"}],"onDeleteSettingRequested":[{"__symbolic":"method"}]}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/forms","name":"FormBuilder","line":8,"character":37}]}],"createSettingValuesFormGroup":[{"__symbolic":"method"}],"createSettingValueFormGroup":[{"__symbolic":"method"}],"createRolloutPercentageItemFormGroup":[{"__symbolic":"method"}],"createRolloutRuleFormGroup":[{"__symbolic":"method"}],"getValidatorsForSettingType":[{"__symbolic":"method"}],"getAllRolloutRules":[{"__symbolic":"method"}],"getComparisonAttributes":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ɵg":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"selector":"setting","template":"<div class=\"setting-full\"\r\n [formGroup]=\"formGroup\">\r\n <div class=\"delete\" (click)=\"deleteSetting()\" *ngIf=\"canDeleteSetting\" [matTooltip]=\"deleteSettingText\"\r\n data-robot=\"deleteSetting\">\r\n <mat-icon>cancel</mat-icon>\r\n </div>\r\n <div class=\"setting-header flex\">\r\n <div class=\"setting-name flex\">\r\n <div class=\"name\" data-robot=\"settingName\">\r\n {{setting().name}}\r\n <span *ngIf=\"showEnvironmentName\"> ({{environment().name}})</span>\r\n </div>\r\n <div class=\"edit\" matTooltip=\"Edit name and description\" (click)=\"editSetting()\" *ngIf=\"canEditSetting\"\r\n data-robot=\"renameSetting\">\r\n <mat-icon>edit</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-content\">\r\n <div class=\"setting-details\">\r\n <div class=\"setting-key\"><code data-robot=\"settingKey\">{{setting().key}}</code></div>\r\n <span *ngIf=\"setting().hint\" class=\"description\">{{setting().hint}}</span>\r\n </div>\r\n\r\n <div class=\"rules-list\">\r\n <div>\r\n <configcat-rollout-rules *ngIf=\"rolloutRules().controls.length !== 0\" [formGroup]=\"formGroup\">\r\n </configcat-rollout-rules>\r\n </div>\r\n\r\n <configcat-rollout-percentage-items *ngIf=\"rolloutPercentageItems().controls.length !== 0\"\r\n [formGroup]=\"formGroup\">\r\n </configcat-rollout-percentage-items>\r\n\r\n <div class=\"all-other flex\">\r\n <div *ngIf=\"rolloutPercentageItems().length === 0 && rolloutRules().length !== 0\"\r\n data-tooltip=\"This value will be served to all users who the above rules don't apply.\">\r\n <mat-chip-list>\r\n <mat-chip class=\"chip\">To all other users, serve:</mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n <div *ngIf=\"rolloutPercentageItems().length !== 0\"\r\n data-tooltip=\"This fallback value will be served in case the user can't be identified.\">\r\n <mat-chip-list>\r\n <mat-chip class=\"chip\">To unidentified users, serve:</mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n <div *ngIf=\"rolloutPercentageItems().length === 0 && rolloutRules().length === 0\">\r\n <mat-chip-list>\r\n <mat-chip class=\"chip\">To all users, serve:</mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n <configcat-value class=\"served-value\" [valueFormControl]=\"value()\" [setting]=\"setting()\">\r\n </configcat-value>\r\n </div>\r\n <div class=\"buttons\">\r\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addRolloutRule()\" *ngIf=\"!readOnly\">\r\n {{rolloutRules().length === 0 ? 'Target specific users' : 'Add new targeting rule'}}\r\n </button>\r\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addRolloutPercentageItem()\"\r\n *ngIf=\"!readOnly\"\r\n [disabled]=\"setting().settingType === SettingType.Boolean && rolloutPercentageItems().length !== 0\">\r\n {{rolloutPercentageItems().length === 0 ? 'Target % of users' : 'Add new % option'}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","styles":[".setting-full{position:relative;display:flex;flex-wrap:nowrap;flex-direction:column;border-radius:3px}.setting-full .delete{position:absolute;right:-15px;top:-10px;color:#d6a9a9;cursor:pointer}.setting-full .delete:hover{color:#ed5251}.setting-full .delete mat-icon{font-size:20px}.setting-full .setting-header{padding:1.5em 1.5em 0}.setting-full .setting-header .setting-name{flex-direction:row}.setting-full .setting-header .setting-name:hover>.edit{visibility:visible}.setting-full .setting-header .setting-name .name{font-weight:bold;word-wrap:break-word;max-width:100%}.setting-full .setting-header .setting-name .edit{margin:5px 0 0 5px;cursor:pointer;visibility:hidden;color:gray}.setting-full .setting-header .setting-name .edit:hover{visibility:visible}.setting-full .setting-header .setting-name .edit mat-icon{font-size:18px}.setting-full .setting-header .setting-meta{margin-left:auto;margin-right:14px;font-size:.7em;color:gray}.setting-full .setting-content{display:flex}.setting-full .setting-content .setting-details{display:flex;flex-direction:column;width:400px;padding:0 0 1em 1em}.setting-full .setting-content .setting-details>*{margin:.5em}.setting-full .setting-content .setting-details .integrations{font-size:.8rem}.setting-full .setting-content .setting-details .integrations>div{margin:3px}.setting-full .setting-content .setting-details .integrations>div>a:hover{text-decoration:underline}.setting-full .setting-content .setting-details .setting-key{word-wrap:break-word}.setting-full .setting-content .setting-details .description{font-size:.8em;white-space:pre-wrap;word-wrap:break-word;max-width:300px}.setting-full .setting-content .setting-details code{background-color:#d3d3d3;padding:3px 6px}.setting-full .setting-content .rules-list{width:100%;padding:0 1em 1em}.setting-full .setting-content .targeting-button{margin-left:.5rem;margin-right:.5rem;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}.buttons{display:flex;margin-left:.5rem;margin-right:.5rem}.buttons .updated-date{font-size:.7em;margin-left:auto;margin-right:22px;color:gray}.flex{display:flex;flex-wrap:wrap;align-items:center}.show-hide-toggle{margin-left:1em;cursor:pointer}.show-hide-toggle a{font-size:.8rem}.sige-button{background-color:#d9eadc;color:#363636;cursor:pointer;justify-content:center;padding:.375em .75em;text-align:center;white-space:nowrap;border-radius:2px;font-size:.75rem;border:1px solid #dbdbdb;box-shadow:none;display:inline-flex;font-family:Montserrat,Roboto,\"Helvetica Neue\",sans-serif}.sige-button:hover{background-color:#bad0be}.sige-button:disabled{background-color:#fff;color:#b3b3b3}@media (max-width: 1200px){.setting-details{width:300px}}@media (max-width: 700px){.setting-full .setting-content{flex-wrap:wrap}.setting-full .setting-content .rules-list{padding:0}.buttons{flex-direction:column}.updated-date{display:none}.setting-details{padding:.2em 0 .2em .2em}.all-other{margin:.5em .3em}}\n"]}]}],"members":{"formGroup":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":12,"character":3}}]}],"readOnly":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"canEditSetting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"canDeleteSetting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":15,"character":3}}]}],"deleteSettingText":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"showEnvironmentName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":3}}]}],"editSettingRequested":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":19,"character":3}}]}],"deleteSettingRequested":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":20,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":27,"character":19}]}],"ngOnInit":[{"__symbolic":"method"}],"environment":[{"__symbolic":"method"}],"setting":[{"__symbolic":"method"}],"integrationLinks":[{"__symbolic":"method"}],"rolloutRules":[{"__symbolic":"method"}],"rolloutPercentageItems":[{"__symbolic":"method"}],"value":[{"__symbolic":"method"}],"addRolloutRule":[{"__symbolic":"method"}],"removeRolloutRules":[{"__symbolic":"method"}],"addRolloutPercentageItem":[{"__symbolic":"method"}],"removeRolloutPercentageItems":[{"__symbolic":"method"}],"editSetting":[{"__symbolic":"method"}],"deleteSetting":[{"__symbolic":"method"}]}},"ɵh":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"configcat-rollout-percentage-items","template":"<div class=\"percentage-wrapper\" [formGroup]=\"formGroup\">\r\n\r\n <div class=\"if\" *ngIf=\"rolloutRules().controls.length > 0\">\r\n <mat-chip-list>\r\n <mat-chip class=\"chip\">ELSE IF</mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n <div class=\"grow\">\r\n <div class=\"percentage-row flex\"\r\n *ngFor=\"let rolloutPercentageItem of rolloutPercentageItems().controls; let i = index\">\r\n <div class=\"flex\">\r\n <input type=\"number\" [formControl]=\"rolloutPercentageItem.controls.percentage\"\r\n (input)=\"percentageChanged(i)\">%\r\n <span class=\"users\">of <a href=\"https://configcat.com/docs/advanced/user-object\"\r\n target=\"_blank\" rel=\"noopener noreferrer\">users</a>\r\n </span>\r\n </div>\r\n\r\n <div class=\"delete-option\" matTooltip=\"Remove this % option\"\r\n *ngIf=\"!readOnly && rolloutPercentageItems().controls.length > 2\"\r\n (click)=\"removeRolloutPercentageItem(i)\">\r\n <mat-icon>cancel</mat-icon>\r\n </div>\r\n\r\n <span data-tooltip=\"The sum of percentages must be equal to 100.\"\r\n *ngIf=\"(i === rolloutPercentageItems().controls.length -1) && (rolloutPercentageItemsSum().invalid)\">\r\n <mat-icon color=\"warn\">\r\n error_outline\r\n </mat-icon>\r\n </span>\r\n\r\n <div class=\"value flex\">\r\n <span class=\"value-name\" *ngIf=\"setting().settingType !== SettingType.Boolean\">Served value:</span>\r\n <configcat-value class=\"served-value\" [valueFormControl]=\"value(rolloutPercentageItem)\" [setting]=\"setting()\">\r\n </configcat-value>\r\n </div>\r\n <div class=\"delete\" matTooltip=\"Remove % options\" (click)=\"removeAll()\" *ngIf=\"!readOnly\">\r\n <mat-icon>cancel</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","styles":[".percentage-wrapper{border:1px solid #d5d5d5;background-color:#fff;border-radius:4px;margin:.5em 1em;position:relative;padding:.5em 0;display:flex}.percentage-wrapper .delete{position:absolute;color:#d6a9a9;cursor:pointer;top:-8px;right:-12px}.percentage-wrapper .delete:hover{color:#ed5251}.percentage-wrapper .delete mat-icon{font-size:20px}.percentage-wrapper .delete-option{color:#d6a9a9;cursor:pointer;margin-left:1rem;margin-top:4px}.percentage-wrapper .delete-option:hover{color:#ed5251}.percentage-wrapper .delete-option mat-icon{font-size:20px}.if{display:flex;align-items:center}.if>*{margin:0 .5em}.if .spacing{margin-right:44px}.if .chip{background-color:#67b1fc3d}.grow{flex-grow:1}.percentage-row{min-height:40px;margin-left:.5em}.flex{display:flex;flex-wrap:wrap;align-items:center}.value{margin-left:auto;min-width:100px}.value .value-name{display:none}input{background-color:#fff;border:1px solid #e5e5e5;min-height:28px;width:40px;margin-right:5px;font-size:15px;padding:0 5px;font-family:Montserrat,Roboto,\"Helvetica Neue\",sans-serif;font-weight:300}.users{margin-left:20px}@media (max-width: 700px){.percentage-wrapper{margin:.5em .3em}}\n"]}]}],"members":{"formGroup":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":3}}]}],"readOnly":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":12,"character":3}}]}],"setting":[{"__symbolic":"method"}],"rolloutRules":[{"__symbolic":"method"}],"rolloutPercentageItems":[{"__symbolic":"method"}],"rolloutPercentageItemsSum":[{"__symbolic":"method"}],"value":[{"__symbolic":"method"}],"__ctor__":[{"__symbolic":"constructor"}],"percentageChanged":[{"__symbolic":"method"}],"updateSum":[{"__symbolic":"method"}],"removeRolloutPercentageItem":[{"__symbolic":"method"}],"removeAll":[{"__symbolic":"method"}]}},"ɵi":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"configcat-rollout-rules","template":"<div [formGroup]=\"formGroup\">\r\n <div cdkDropList (cdkDropListDropped)=\"onDrop($event)\" [cdkDropListDisabled]=\"readOnly\"\r\n [cdkDropListData]=\"rolloutRules().controls\">\r\n <div *ngFor=\"let rolloutRule of rolloutRules().controls; trackBy: trackByIndex; let i = index\" cdkDrag>\r\n <div class=\"targeting-row\">\r\n <div class=\"fields flex\">\r\n <div class=\"drag-handle\" cdkDragHandle data-tooltip=\"Drag here to reorder\" *ngIf=\"!readOnly\">\r\n <mat-icon>drag_indicator</mat-icon>\r\n </div>\r\n <div class=\"if\">\r\n <mat-chip-list [class.spacing]=\"i === 0\">\r\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\r\n </mat-chip-list>\r\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">user's</a>\r\n </div>\r\n\r\n <select class=\"custom-select attribute-select\" matTooltip=\"Comparison attribute\"\r\n matTooltipPosition=\"above\" [matTooltipDisabled]=\"onlyFirstTooltip() && i !== 0\"\r\n (change)=\"attributeChanged($event.target.value, rolloutRule.controls.comparisonAttribute)\">\r\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\r\n [selected]=\"comparisonAttribute === rolloutRule.controls.comparisonAttribute.value\">\r\n {{comparisonAttribute}}</option>\r\n <option\r\n [selected]=\"defaultComparisonAttributes.indexOf(rolloutRule.controls.comparisonAttribute.value) === -1\">\r\n Custom\r\n </option>\r\n </select>\r\n\r\n\r\n <span class=\"attribute-span\" data-tooltip=\"Custom user attribute\"\r\n [hidden]=\"defaultComparisonAttributes.indexOf(rolloutRule.controls.comparisonAttribute.value) !== -1\">\r\n <span class=\"attribute-error\" *ngIf=\"rolloutRule.controls.comparisonAttribute.invalid\">*</span>\r\n <input [ngClass]=\"{'invalid': rolloutRule.controls.comparisonAttribute.invalid}\" type=\"text\"\r\n matInput [matAutocomplete]=\"auto\" [formControl]=\"rolloutRule.controls.comparisonAttribute\"\r\n class=\"attribute\" placeholder=\"e.g. Eye color\">\r\n </span>\r\n\r\n <mat-autocomplete #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of comparisonAttributes()\" [value]=\"option\">\r\n {{option}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <div class=\"select-wrapper\">\r\n <select class=\"custom-select\" [formControl]=\"rolloutRule.controls.comparator\"\r\n matTooltip=\"Comparator\" matTooltipPosition=\"above\"\r\n [matTooltipDisabled]=\"onlyFirstTooltip() && i !== 0\"\r\n (change)=\"comparatorChanged(rolloutRule)\">\r\n <optgroup label=\"SENSITIVE TEXT\">\r\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(16, 18)\"\r\n [ngValue]=\"comparator.value\">\r\n {{comparator.label}}\r\n </option>\r\n </optgroup>\r\n <optgroup label=\"TEXT\">\r\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(0, 4)\"\r\n [ngValue]=\"comparator.value\">\r\n {{comparator.label}}\r\n </option>\r\n </optgroup>\r\n <optgroup label=\"SEMANTIC VERSION\">\r\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(4, 10)\"\r\n [ngValue]=\"comparator.value\">\r\n {{comparator.label}}\r\n </option>\r\n </optgroup>\r\n <optgroup label=\"NUMBER\">\r\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(10, 16)\"\r\n [ngValue]=\"comparator.value\">\r\n {{comparator.label}}\r\n </option>\r\n </optgroup>\r\n </select>\r\n <div [class]=\"getInfoClass(rolloutRule)\" [matTooltip]=\"getInfoTooltip(rolloutRule)\"\r\n [matTooltipDisabled]=\"onlyFirstTooltip() && i !== 0\">\r\n <a href=\"https://configcat.com/docs/advanced/targeting/#comparator\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n <mat-icon>info</mat-icon>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div class=\"comparison-value\" data-tooltip=\"Comparison value\">\r\n <span class=\"error\" *ngIf=\"rolloutRule.controls.comparisonValue.invalid\">*</span>\r\n\r\n <input [ngClass]=\"{'invalid': rolloutRule.controls.comparisonValue.invalid}\"\r\n [formControl]=\"rolloutRule.controls.comparisonValue\"\r\n [type]=\"getComparisonValueType(rolloutRule)\" [placeholder]=\"getPlaceHolder(rolloutRule)\">\r\n <div class=\"expand\" matTooltip=\"Pop-out Editor\" (click)=\"popOut(rolloutRule)\" *ngIf=\"getComparisonValueType(rolloutRule)==='text'\">\r\n <mat-icon>height</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"delete\" matTooltip=\"Remove targeting rule\"\r\n [matTooltipDisabled]=\"onlyFirstTooltip() && i !== 0\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\r\n <mat-icon>cancel</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"value flex\">\r\n <div class=\"serve\" *ngIf=\"setting().settingType !== SettingType.Boolean\">\r\n <mat-chip-list>\r\n <mat-chip class=\"chip\">Serve:</mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n\r\n <configcat-value class=\"served-value\" [valueFormControl]=\"rolloutRule.controls.value\"\r\n [setting]=\"setting()\">\r\n </configcat-value>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","styles":[".cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}.targeting-row{border:1px solid #d5d5d5;border-radius:4px;background-color:#fff;margin:.5em 1em;display:flex;position:relative;padding:.5em 0}.targeting-row .select-wrapper{position:relative}.targeting-row .info{position:absolute;cursor:pointer;top:-8px;left:166px}.targeting-row .info a{color:#7fb3fd}.targeting-row .info a:hover{color:#0068f0}.targeting-row .info mat-icon{font-size:18px}.targeting-row .warn{position:absolute;cursor:pointer;top:-8px;left:128px}.targeting-row .warn a{color:#fdc67f}.targeting-row .warn a:hover{color:#ff9200}.targeting-row .warn mat-icon{font-size:18px}.chip{background-color:#67b1fc3d}.fields{justify-content:left;max-width:1060px;flex-grow:100}.fields .if{display:flex;align-items:center}.fields .if>*{margin:0 .5em}.fields .if .spacing{margin-right:46px}.fields .attribute-span{margin-left:.5em}.fields .attribute{width:170px;background-color:#fff;border:1px solid #e5e5e5;min-height:28px;min-width:170px;font-size:15px;padding:0 10px;font-family:Montserrat,Roboto,\"Helvetica Neue\",sans-serif;font-weight:300}.fields .invalid{border:1px solid #ff5252}.fields .attribute-error{color:#ff5252;margin-right:5px}.fields .delete{position:absolute;color:#d6a9a9;cursor:pointer;top:-8px;right:-12px;z-index:999}.fields .delete:hover{color:#ed5251}.fields .delete mat-icon{font-size:20px}.fields .drag-handle{position:absolute;cursor:-webkit-grab;cursor:-moz-grab;left:-20px;top:14px}.fields .drag-handle mat-icon{font-size:20px}.fields .custom-select{margin-left:.5em;width:170px;background-color:#fff;border:1px solid #e5e5e5;min-height:30px;min-width:170px;font-size:.8em;padding:0 5px;font-family:Montserrat,Roboto,\"Helvetica Neue\",sans-serif;font-weight:300}.fields .attribute-select{min-width:100px;width:100px;margin-left:0}.fields .comparison-value{flex-grow:100;min-width:200px;display:flex;align-items:center;margin-left:.5em}.fields .comparison-value .error{color:#ff5252;margin:0 5px}.fields .comparison-value input{background-color:#fff;border:1px solid #e5e5e5;min-height:28px;min-width:170px;flex-grow:100;font-size:15px;padding:0 30px 0 10px;font-family:Montserrat,Roboto,\"Helvetica Neue\",sans-serif;font-weight:300}.fields .comparison-value .invalid{border:1px solid #ff5252}.value{margin-left:auto;flex-wrap:nowrap}.value .serve{margin:0 5px}.warn{padding-left:3em;font-size:.8em}.flex{display:flex;flex-wrap:wrap;align-items:center}.expand{position:absolute;right:2px;font-size:8px;cursor:pointer;margin-left:-28px;z-index:1;color:#b3b3b3;background-color:#fff}.expand mat-icon{transform:rotate(45deg)}@media (max-width: 1200px){.targeting-row{flex-wrap:wrap}.targeting-row .fields{max-width:500px}}@media (max-width: 700px){.targeting-row{flex-direction:column;margin:.5em .3em}.targeting-row .help{left:161px}.targeting-row .fields{flex-direction:column;align-items:stretch}.targeting-row .fields .custom-select{margin:0}.targeting-row .fields .comparison-value{margin:0}}\n"]}]}],"members":{"formGroup":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":15,"character":3}}]}],"readOnly":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/material/dialog","name":"MatDialog","line":46,"character":30}]}],"onlyFirstTooltip":[{"__symbolic":"method"}],"setting":[{"__symbolic":"method"}],"rolloutRules":[{"__symbolic":"method"}],"comparisonAttributes":[{"__symbolic":"method"}],"removeRule":[{"__symbolic":"method"}],"onDrop":[{"__symbolic":"method"}],"attributeChanged":[{"__symbolic":"method"}],"getPlaceHolder":[{"__symbolic":"method"}],"getComparisonValueType":[{"__symbolic":"method"}],"getInfoClass":[{"__symbolic":"method"}],"getInfoTooltip":[{"__symbolic":"method"}],"comparatorChanged":[{"__symbolic":"method"}],"isListType":[{"__symbolic":"method"}],"validateSemVer":[{"__symbolic":"method"}],"validateSemVerList":[{"__symbolic":"method"}],"popOut":[{"__symbolic":"method"}],"trackByIndex":[{"__symbolic":"method"}]}},"ɵj":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"configcat-value","template":"<div class=\"flex\">\r\n <div class=\"container\" [ngSwitch]=\"setting.settingType\">\r\n <div *ngSwitchCase=\"SettingType.String\" class=\"with-validation\">\r\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\r\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"text\"\r\n [formControl]=\"valueFormControl\" placeholder=\"my value\" name=\"value\">\r\n <div class=\"expand\" (click)=\"popOut()\" matTooltip=\"Pop-out Editor\">\r\n <mat-icon>height</mat-icon>\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"SettingType.Int\" class=\"with-validation\">\r\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\r\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"number\" [formControl]=\"valueFormControl\"\r\n placeholder=\"42\" name=\"value\" />\r\n </div>\r\n <div *ngSwitchCase=\"SettingType.Double\" class=\"with-validation\">\r\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\r\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"number\" [formControl]=\"valueFormControl\"\r\n placeholder=\"3.14\" name=\"value\">\r\n </div>\r\n <div *ngSwitchCase=\"SettingType.Boolean\" class=\"toggle\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" [formControl]=\"valueFormControl\" name=\"value\" />\r\n <span class=\"slider round\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n <div *ngIf=\"setting.settingType === SettingType.Boolean\" class=\"spacer\"></div>\r\n\r\n</div>\r\n","styles":[".switch{position:relative;width:66px;height:30px;margin-left:4px;margin-top:0;margin-bottom:0}.switch input{display:none}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ff5252;transition:.4s;width:66px;height:30px}.slider:before{position:absolute;content:\"\";height:22px;width:22px;left:4px;bottom:4px;background-color:#fff;transition:.4s}input:checked+.slider{background-color:#9acd32}input:focus+.slider{box-shadow:0 0 1px #9acd32}input:checked+.slider:before{transform:translate(36px)}.slider.round{border-radius:34px}.slider.round:before{border-radius:50%}.slider:after{content:\"Off\";color:#fff;display:block;position:absolute;transform:translate(-14%,-50%);top:50%;left:50%;font-size:10px;font-family:Verdana,sans-serif}input:checked+.slider:after{content:\"On\";transform:translate(-91%,-50%)}\n",".flex{display:flex;margin-right:20px;align-items:center}.flex .spacer{width:15px}.flex .container .with-validation{display:flex;flex-wrap:nowrap}.flex .container .toggle{width:66px;height:30px}.flex .container input{background-color:#fff;border:1px solid #e5e5e5;min-height:28px;font-size:15px;padding:0 30px 0 10px;font-family:Montserrat,Roboto,\"Helvetica Neue\",sans-serif;font-weight:300;min-width:170px}.flex .container .invalid{border:1px solid #ff5252}.flex .container .error{color:#ff5252;margin-right:5px}@media (max-width: 1200px){.flex .container input{min-width:auto}}.flex .variationId{margin-left:5px;cursor:pointer;color:#888;display:flex;align-items:center}.flex .expand{position:relative;top:2px;height:24px;cursor:pointer;margin-left:-28px;z-index:1;color:#b3b3b3;background-color:#fff}.flex .expand mat-icon{transform:rotate(45deg)}\n"]}]}],"members":{"valueFormControl":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"setting":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":18,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/material/dialog","name":"MatDialog","line":22,"character":30}]}],"popOut":[{"__symbolic":"method"}]}},"ɵk":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"configcat-reason-dialog","template":"<h3 mat-dialog-title>Add notes</h3>\r\n<p>This will appear in the Why column of the Audit Log.</p>\r\n<form [formGroup]=\"formGroup\" (ngSubmit)=\"handleSaveButton()\">\r\n <div mat-dialog-content class=\"container\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label></mat-label>\r\n <textarea matInput formControlName=\"reason\" name=\"reason\" placeholder=\"I'm changing settings because...\"\r\n rows=\"3\"></textarea>\r\n <mat-error *ngIf=\"formGroup.controls.reason.invalid\">The field is required.</mat-error>\r\n </mat-form-field>\r\n </div>\r\n <br>\r\n <div mat-dialog-actions>\r\n <button type=\"submit\" style=\"margin-right: 10px;\" mat-raised-button color=\"primary\">Add notes & Save</button>\r\n <button type=\"button\" mat-raised-button (click)=\"cancel()\">Cancel</button>\r\n </div>\r\n</form>","styles":[".container>*{width:100%}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"MatDialogRef","module":"@angular/material/dialog","arguments":[{"__symbolic":"reference","name":"ɵk"}]},{"__symbolic":"reference","module":"@angular/forms","name":"FormBuilder","line":15,"character":25}]}],"ngOnInit":[{"__symbolic":"method"}],"handleSaveButton":[{"__symbolic":"method"}],"cancel":[{"__symbolic":"method"}]}},"ɵl":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"configcat-concurrent-dialog","template":"<h3 mat-dialog-title>Concurrent update detected</h3>\r\n<p>\r\n Somebody updated the feature flags & settings while you were editing them.\r\n</p>\r\n<ul>\r\n <li>\r\n To discard your local changes and reload the updated values, click <strong>Discard my changes & reload</strong>\r\n </li>\r\n <li>\r\n To save you local values and overwrite the remote changes, click <strong>Save anyway</strong>\r\n </li>\r\n</ul>\r\n<p>For more info about the changes check the <a [routerLink]=\"['/auditlog']\" target=\"_blank\" rel=\"noopener noreferrer\" >audit logs</a> in a new tab.</p>\r\n<div mat-dialog-actions>\r\n <button type=\"button\" style=\"margin-right: 10px;\" mat-raised-button color=\"primary\" (click)=\"discard()\">Discard\r\n local changes & reload</button>\r\n <button type=\"button\" mat-raised-button (click)=\"save()\">Save anyway</button>\r\n</div>","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"MatDialogRef","module":"@angular/material/dialog","arguments":[{"__symbolic":"reference","name":"ɵl"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}],"discard":[{"__symbolic":"method"}]}},"ɵm":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"configcat-save-snackbar","template":"<p class=\"header\">Settings saved successfully.</p>","styles":["p{text-align:center;font-weight:bold}.header{font-size:1.2em}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}]}},"ɵn":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"selector":"configcat-expand-dialog","template":"<div mat-dialog-content class=\"container\">\r\n\r\n <mat-form-field appearance=\"outline\" *ngIf=\"!data.multiline\">\r\n <mat-label></mat-label>\r\n <textarea matInput [formControl]=\"data.control\" rows=\"15\"></textarea>\r\n </mat-form-field>\r\n <div [formGroup]=\"formGroup\" *ngIf=\"data.multiline\">\r\n <div *ngFor=\"let valueControl of values().controls; let i = index;\" class=\"value-field\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput [formControl]=\"valueControl\" rows=\"15\" />\r\n </mat-form-field>\r\n <button (click)=\"remove(i)\" mat-icon-button type=\"button\">\r\n <mat-icon>delete_outline</mat-icon>\r\n </button>\r\n </div>\r\n <button (click)=\"add()\" mat-icon-button type=\"button\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions>\r\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"close()\">Done</button>\r\n</div>","styles":[".container>*{width:100%}.container>* .value-field{display:flex;font-size:12px;flex-wrap:nowrap}.container>* .value-field mat-form-field{flex-grow:1}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":19,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/material/dialog","name":"MAT_DIALOG_DATA","line":19,"character":12}]}]],"parameters":[{"__symbolic":"reference","name":"MatDialogRef","module":"@angular/material/dialog","arguments":[{"__symbolic":"reference","name":"ɵn"}]},{"__symbolic":"reference","module":"@angular/forms","name":"FormBuilder","line":18,"character":25},{"__symbolic":"reference","name":"any"}]}],"ngOnInit":[{"__symbolic":"method"}],"values":[{"__symbolic":"method"}],"buildFormGroup":[{"__symbolic":"method"}],"add":[{"__symbolic":"method"}],"remove":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}]}}},"origins":{"NgConfigCatPublicApiUIModule":"./lib/ng-configcat-publicapi-ui.module","SettingItemComponent":"./lib/setting-item/setting-item.component","AuthorizationComponent":"./lib/authorization/authorization.component","ProductSelectComponent":"./lib/selects/product-select/product-select.component","ConfigSelectComponent":"./lib/selects/config-select/config-select.component","EnvironmentSelectComponent":"./lib/selects/environment-select/environment-select.component","SettingSelectComponent":"./lib/selects/setting-select/setting-select.component","ɵa":"./lib/base/base.component","ɵb":"./lib/_services/public-api.service","ɵc":"./lib/configuration","ɵd":"./lib/_services","ɵe":"./lib/setting-list/setting-list.component","ɵf":"./lib/_services/setting-list-form-helper","ɵg":"./lib/setting-list/setting/setting.component","ɵh":"./lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component","ɵi":"./lib/setting-list/setting/rollout-rules/rollout-rules.component","ɵj":"./lib/setting-list/setting/value/value.component","ɵk":"./lib/dialogs/reason-dialog/reason-dialog.component","ɵl":"./lib/dialogs/concurrent-dialog/concurrent-dialog.component","ɵm":"./lib/dialogs/save-snackbar/save-snackbar.component","ɵn":"./lib/dialogs/expand-dialog/expand-dialog.component"},"importAs":"ng-configcat-publicapi-ui"}
|