ng-configcat-publicapi-ui 4.2.0 → 4.2.2

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.
Files changed (51) hide show
  1. package/esm2022/lib/_directives/input-display-normalizer.directive.mjs +4 -4
  2. package/esm2022/lib/_services/app-data-adapter.mjs +4 -4
  3. package/esm2022/lib/_services/comparison-value-list-helper.mjs +4 -4
  4. package/esm2022/lib/_services/form-generator.mjs +4 -4
  5. package/esm2022/lib/_services/messaging.service.mjs +4 -4
  6. package/esm2022/lib/_services/public-api.service.mjs +4 -4
  7. package/esm2022/lib/_services/setting-list-form-helper.mjs +4 -4
  8. package/esm2022/lib/_services/tracking.directive.mjs +4 -4
  9. package/esm2022/lib/ace-editor/ace-editor.component.mjs +4 -4
  10. package/esm2022/lib/authorization/authorization.component.mjs +4 -4
  11. package/esm2022/lib/base/base-select.component.mjs +4 -4
  12. package/esm2022/lib/base/base.component.mjs +4 -4
  13. package/esm2022/lib/configuration.mjs +4 -4
  14. package/esm2022/lib/dialogs/confirmation-dialog/confirmation-dialog.mjs +4 -4
  15. package/esm2022/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.mjs +4 -4
  16. package/esm2022/lib/dialogs/expand-dialog/expand-dialog.component.mjs +4 -4
  17. package/esm2022/lib/dialogs/info-dialog/info-dialog.mjs +4 -4
  18. package/esm2022/lib/dialogs/reason-dialog/reason-dialog.component.mjs +4 -4
  19. package/esm2022/lib/dialogs/reroute-dialog/reroute-dialog.mjs +4 -4
  20. package/esm2022/lib/dialogs/save-snackbar/save-snackbar.component.mjs +4 -4
  21. package/esm2022/lib/ng-configcat-publicapi-ui.module.mjs +5 -5
  22. package/esm2022/lib/selects/config-select/config-select.component.mjs +4 -4
  23. package/esm2022/lib/selects/environment-select/environment-select.component.mjs +4 -4
  24. package/esm2022/lib/selects/product-select/product-select.component.mjs +4 -4
  25. package/esm2022/lib/selects/setting-select/setting-select.component.mjs +4 -4
  26. package/esm2022/lib/setting-item/setting-item.component.mjs +4 -4
  27. package/esm2022/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +4 -4
  28. package/esm2022/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +4 -4
  29. package/esm2022/lib/setting-list/setting/setting.component.mjs +4 -4
  30. package/esm2022/lib/setting-list/setting/value/value.component.mjs +4 -4
  31. package/esm2022/lib/setting-list/setting-list.component.mjs +4 -4
  32. package/esm2022/lib/v2/feature-flag/date-time-picker/date-time-picker.component.mjs +4 -4
  33. package/esm2022/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.mjs +4 -4
  34. package/esm2022/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.mjs +4 -4
  35. package/esm2022/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.mjs +4 -4
  36. package/esm2022/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.mjs +4 -4
  37. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.mjs +4 -4
  38. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.mjs +4 -4
  39. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.mjs +4 -4
  40. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.mjs +4 -4
  41. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.mjs +4 -4
  42. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.mjs +4 -4
  43. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.mjs +4 -4
  44. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.mjs +4 -4
  45. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.mjs +4 -4
  46. package/esm2022/lib/v2/feature-flag/feature-flag.component.mjs +4 -4
  47. package/esm2022/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.mjs +4 -4
  48. package/esm2022/lib/v2/feature-flag-item.component.mjs +4 -4
  49. package/fesm2022/ng-configcat-publicapi-ui.mjs +145 -145
  50. package/fesm2022/ng-configcat-publicapi-ui.mjs.map +1 -1
  51. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"ng-configcat-publicapi-ui.mjs","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/_services/platform-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reason-dialog/reason-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reason-dialog/reason-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/save-snackbar/save-snackbar.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/save-snackbar/save-snackbar.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/setting-list-form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/expand-dialog/expand-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/expand-dialog/expand-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_directives/input-display-normalizer.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/value/value.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/value/value.component.html","../../../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-percentage-items/rollout-percentage-items.component.html","../../../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/rollout-rules/rollout-rules.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/setting.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/setting.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting-list.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting-list.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-item/setting-item.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-item/setting-item.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/base/base-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/setting-select/setting-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/setting-select/setting-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/product-select/product-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/product-select/product-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/config-select/config-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/config-select/config-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/environment-select/environment-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/environment-select/environment-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/authorization/authorization.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/authorization/authorization.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_models/user-comparator.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-generator.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/date-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/app-data-adapter.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/confirmation-dialog/confirmation-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/confirmation-dialog/confirmation-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reroute-dialog/reroute-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reroute-dialog/reroute-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/info-dialog/info-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/info-dialog/info-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/comparison-value-list-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/messaging.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/ace-editor/ace-editor.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/ace-editor/ace-editor.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/date-time-picker/date-time-picker.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/date-time-picker/date-time-picker.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/tracking.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/feature-flag.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/feature-flag.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag-item.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag-item.component.html","../../../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';\n\n@Injectable()\nexport class Configuration {\n basicAuthUsername?: string;\n basicAuthPassword?: string;\n basePath = 'https://api.configcat.com';\n dashboardBasePath = 'https://app.configcat.com';\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n Configuration as PublicApiConfiguration,\n ProductsService, EnvironmentsService, ConfigsService,\n FeatureFlagsSettingsService, FeatureFlagSettingValuesService, MeService,\n IntegrationLinksService,\n SegmentsService,\n FeatureFlagSettingValuesV2Service\n} from 'ng-configcat-publicapi';\nimport { Configuration } from '../configuration';\n\n@Injectable({ providedIn: 'root' })\nexport class PublicApiService {\n\n constructor(\n private httpClient: HttpClient,\n @Optional() private configuration: Configuration) {\n }\n\n createMeService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new MeService(this.httpClient, basePath ?? this.configuration?.basePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createProductsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new ProductsService(this.httpClient, basePath ?? this.configuration?.basePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createConfigsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new ConfigsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createEnvironmentsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new EnvironmentsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSettingsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new FeatureFlagsSettingsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSettingValuesV2Service(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new FeatureFlagSettingValuesV2Service(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSettingValuesService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new FeatureFlagSettingValuesService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createIntegrationLinksService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new IntegrationLinksService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSegmentsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new SegmentsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n getDashboardBasePath() {\n return this.configuration?.dashboardBasePath ?? 'https://app.configcat.com';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { PublicApiService } from '../_services/public-api.service';\n\n@Component({\n selector: 'base',\n template: '<div></div>'\n})\nexport class BaseComponent {\n\n @Input() basePath: string | null = null;\n @Input() basicAuthUsername: string | null = null;\n @Input() basicAuthPassword: string | null = null;\n\n constructor(private publicApiService: PublicApiService) {\n }\n\n protected createProductsService() {\n return this.publicApiService.createProductsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createConfigsService() {\n return this.publicApiService.createConfigsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createEnvironmentsService() {\n return this.publicApiService.createEnvironmentsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSettingsService() {\n return this.publicApiService.createSettingsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSettingValuesService() {\n return this.publicApiService.createSettingValuesService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSettingValuesV2Service() {\n return this.publicApiService.createSettingValuesV2Service(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSegmentsService() {\n return this.publicApiService.createSegmentsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n}\n","export class PlatformHelper {\n public static isChromium() {\n // https://stackoverflow.com/a/62797156/8656352\n return !!(window as any).chrome;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { UntypedFormControl, UntypedFormGroup, UntypedFormArray, FormGroup, AbstractControl } from '@angular/forms';\nimport { PlatformHelper } from './platform-helper';\n\nexport const percentageRegex = '^[0-9]*$';\nexport const wholeNumberRegex = '^[-+]?[0-9]\\\\d*$';\nexport const timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;\nexport const featureFlagKeyRegex = '^[a-zA-Z]+[a-zA-Z0-9_-]*$';\n\nexport class FormHelper {\n\n public static getErrorMessage(control: UntypedFormControl | UntypedFormGroup | UntypedFormArray | AbstractControl, hint = '') {\n if (!control || control.valid) {\n return null;\n }\n if (control.hasError('validateNumberNan')) {\n return `Invalid value.`\n }\n \n if (control.hasError('matDatepickerParse')) {\n return `Invalid date value.`\n }\n \n if (control.hasError('required')) {\n if (control instanceof UntypedFormArray) {\n return 'The list must contain min 1 items.';\n } else {\n return hint ? `${hint} The field is required.` : `The field is required.`;\n }\n }\n \n if (control.hasError('emails')) {\n return control.errors.emails;\n }\n \n if (control.hasError('minlength')) {\n if (control instanceof UntypedFormArray) {\n return 'The list must contain min ' + control.errors.minlength.requiredLength + ' items.';\n } else {\n return 'The field must be at least ' + control.errors.minlength.requiredLength + ' characters long.';\n }\n }\n \n if (control.hasError('maxlength')) {\n if (control instanceof UntypedFormArray) {\n return 'The list must contain max ' + control.errors.maxlength.requiredLength + ' items.';\n } else {\n return 'The field must be at max ' + control.errors.maxlength.requiredLength + ' characters long.';\n }\n }\n \n if (control.hasError('serverSide')) {\n return control.errors.serverSide;\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === percentageRegex) {\n return 'The percentage value must be a whole number.';\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === wholeNumberRegex) {\n return 'Please enter a whole number e.g. 42.';\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === timeRegex) {\n return 'Invalid time value.';\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === featureFlagKeyRegex) {\n return 'Invalid key. Keys must start with a letter, followed by a combination of numbers, letters, underscores and hyphens.';\n }\n\n if (control.hasError('pattern')) {\n return 'Not a valid e-mail address.';\n } \n \n if (control.hasError('alreadyExists')) {\n return control.errors.alreadyExists;\n }\n \n if (control.hasError('validateSemVer')) {\n return 'Invalid semantic version.';\n }\n \n if (control.hasError('validatePercentageSum')) {\n return 'The sum of percentages must be equal to 100.';\n }\n \n if (control.hasError('min')) {\n return 'The value must be greater than ' + (control.errors.min.min - 1) + '.';\n }\n \n if (control.hasError('max')) {\n return 'The value must be less than ' + (control.errors.max.max + 1) + '.';\n }\n \n return '';\n }\n\n\n public static handleErrors(formGroup: FormGroup, error: any) {\n if (error instanceof HttpErrorResponse) {\n const response = error as HttpErrorResponse;\n switch (response.status) {\n case 400:\n let unknownFieldName = false;\n for (const fieldName in error.error) {\n if (error.error.hasOwnProperty(fieldName) && error.error[fieldName] &&\n (error.error[fieldName]?.length > 0 || error.error[fieldName]?.Errors?.length > 0)) {\n let jsonFieldName = fieldName;\n if (jsonFieldName.length > 0) {\n jsonFieldName = jsonFieldName[0].toLowerCase() + jsonFieldName.slice(1);\n }\n\n const errorMessage = error.error[fieldName]?.Errors?.length > 0 ?\n (error.error[fieldName]?.Errors.map((e: any) => e.ErrorMessage)).join(', ')\n : error.error[fieldName];\n\n if (formGroup.controls.hasOwnProperty(jsonFieldName)) {\n formGroup.controls[jsonFieldName].setErrors({ serverSide: errorMessage });\n } else {\n unknownFieldName = true;\n }\n }\n }\n if (unknownFieldName) {\n formGroup.setErrors({ serverSide: 'Something went wrong.' });\n }\n break;\n // in these cases we do not show errors on the form, they're handled by the http\n // interceptor in src\\app\\_interceptors\\httpstatuscode.interceptor.ts\n case 402:\n case 429:\n return;\n }\n } else {\n formGroup.setErrors({ serverSide: 'Something went wrong on our side. This is not your fault. Please try again.' });\n }\n }\n\n /**\n * Converts a value representing a number to a `number` value.\n * Returns `NaN` in the case of non-numerical values.\n */\n public static normalizeNumber(value: any): number {\n switch (typeof value) {\n case \"number\":\n return value;\n case \"string\":\n // NOTE: `Number()` converts whitespace strings to 0.\n return value.trim() === '' ? NaN : Number(value);\n case \"bigint\":\n return Number(value);\n default:\n return NaN;\n }\n }\n\n /**\n * Converts a value representing a number to the normalized `string`\n * representation of the number. (e.g. `.1` --> `'0.1'`, `3.14e2` --> `'314'`).\n * Returns `''` in the case of non-numerical values or non-finite numerical values.\n */\n public static normalizeNumberStoredAsString(value: any): string {\n value = FormHelper.normalizeNumber(value);\n // NOTE: `NaN` is not considered finite.\n return isFinite(value) ? value + '' : '';\n }\n\n \n public static formatNumberForDisplay(value: number) {\n if (!isFinite(value)) {\n return '';\n }\n\n // Chromium-based browsers don't respect the `lang` attribute,\n // they use a display format corresponding to the browser's language setting.\n if (PlatformHelper.isChromium()) {\n return value.toLocaleString();\n }\n\n // Firefox (and probably other browsers) respect the `lang` attribute,\n // which is currently set to the fixed value of \"en\" (see index.html),\n // so in these cases dot should be used as the decimal separator.\n // (In case localization is implemented in the application, this logic should be revised!)\n return value + '';\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { UntypedFormGroup, UntypedFormBuilder, Validators } from '@angular/forms';\n\n@Component({\n selector: 'configcat-reason-dialog',\n templateUrl: './reason-dialog.component.html',\n styleUrls: ['./reason-dialog.component.scss']\n})\nexport class ReasonDialogComponent implements OnInit {\n\n formGroup!: UntypedFormGroup;\n\n constructor(\n public dialogRef: MatDialogRef<ReasonDialogComponent>,\n private formBuilder: UntypedFormBuilder\n ) { }\n\n ngOnInit() {\n this.formGroup = this.formBuilder.group({\n reason: ['', [Validators.required, Validators.maxLength(1000)]]\n });\n }\n\n handleSaveButton() {\n if (!this.formGroup.valid) {\n return;\n }\n\n this.dialogRef.close({ button: 'save', reason: this.formGroup.controls.reason.value });\n }\n\n cancel() {\n this.dialogRef.close({ button: 'cancel' });\n }\n}\n","<h1 mat-dialog-title>Add notes</h1>\n<form [formGroup]=\"formGroup\" (ngSubmit)=\"handleSaveButton()\">\n <div mat-dialog-content class=\"container\">\n <p>This will appear in the Audit Log (in the Notes section when you expand the corresponding entry).</p>\n <mat-form-field appearance=\"outline\">\n <mat-label>Note</mat-label>\n <textarea matInput formControlName=\"reason\" name=\"reason\" placeholder=\"I'm changing settings because...\"\n rows=\"3\"></textarea>\n <mat-error *ngIf=\"formGroup.controls.reason.invalid\">The field is required.</mat-error>\n </mat-form-field>\n </div>\n <div mat-dialog-actions>\n <button type=\"submit\" style=\"margin-right: 10px;\" mat-flat-button color=\"primary\">Add notes & Save</button>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\">Cancel</button>\n </div>\n</form>","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'configcat-save-snackbar',\n templateUrl: './save-snackbar.component.html',\n styleUrls: ['./save-snackbar.component.scss']\n})\nexport class SaveSnackbarComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<p class=\"header\">Settings saved successfully.</p>","import { Injectable } from '@angular/core';\nimport { SettingValuesModel } from '../_models/settingValuesModel';\nimport { UntypedFormBuilder, Validators, UntypedFormGroup, UntypedFormArray } from '@angular/forms';\nimport { RolloutPercentageItemModel, RolloutRuleComparator, RolloutRuleModel, SettingType, SettingValueModel } from 'ng-configcat-publicapi';\nimport { FormHelper } from './form-helper';\n\n@Injectable({ providedIn: 'root' })\nexport class SettingListFormHelper {\n\n constructor(private formBuilder: UntypedFormBuilder) { }\n\n createSettingValuesFormGroup(settingValuesModel: SettingValuesModel) {\n const formGroup = this.formBuilder.group({\n settingValues: this.formBuilder.array(\n settingValuesModel.settingValues.map(sv => {\n return this.createSettingValueFormGroup(sv, settingValuesModel.readOnly);\n })),\n\n // Decorator\n environment: this.formBuilder.group({\n environmentId: [{ value: settingValuesModel.environment.environmentId, disabled: true }],\n name: [{ value: settingValuesModel.environment.name, disabled: true }],\n }),\n\n comparisonAttributes: [[]]\n });\n\n const rolloutRules = this.getAllRolloutRules(formGroup);\n const comparisonAttributes = this.getComparisonAttributes(rolloutRules);\n formGroup.patchValue({ comparisonAttributes: comparisonAttributes });\n return formGroup;\n }\n\n\n createSettingValueFormGroup(settingValueModel: SettingValueModel, readOnly: boolean) {\n if (!settingValueModel.setting) {\n return this.formBuilder.group({});\n }\n return this.formBuilder.group({\n settingId: [settingValueModel.setting.settingId],\n value: [\n { value: settingValueModel.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingValueModel.setting.settingType)\n ],\n rolloutPercentageItems: settingValueModel.rolloutPercentageItems\n ? this.formBuilder.array(settingValueModel.rolloutPercentageItems.map(p => {\n // @ts-ignore()\n return this.createRolloutPercentageItemFormGroup(p, readOnly, settingValueModel.setting.settingType);\n }))\n : this.formBuilder.array([]), rolloutRules: settingValueModel.rolloutRules\n ? this.formBuilder.array(settingValueModel.rolloutRules.map(r => {\n // @ts-ignore()\n return this.createRolloutRuleFormGroup(r, readOnly, settingValueModel.setting.settingType);\n }))\n : this.formBuilder.array([]),\n\n updatedAt: [{ value: settingValueModel.updatedAt, disabled: true }],\n lastUpdaterUserEmail: [{ value: settingValueModel.lastUpdaterUserEmail, disabled: true }],\n lastUpdaterUserFullName: [{ value: settingValueModel.lastUpdaterUserFullName, disabled: true }],\n\n rolloutPercentageItemsSum: [{ value: 100, disabled: false }, [Validators.min(100), Validators.max(100)]],\n // Decoration\n setting: this.formBuilder.group({\n settingId: [{ value: settingValueModel.setting.settingId, disabled: true }],\n key: [{ value: settingValueModel.setting.key, disabled: true }],\n name: [{ value: settingValueModel.setting.name, disabled: true }],\n hint: [{ value: settingValueModel.setting.hint, disabled: true }],\n settingType: [{ value: settingValueModel.setting.settingType, disabled: true }],\n creatorEmail: [{ value: settingValueModel.setting.creatorEmail, disabled: true }],\n creatorFullName: [{ value: settingValueModel.setting.creatorFullName, disabled: true }],\n createdAt: [{ value: settingValueModel.setting.createdAt, disabled: true }]\n }),\n\n integrationLinks: settingValueModel.integrationLinks ? this.formBuilder.array(settingValueModel.integrationLinks.map(il => {\n return this.formBuilder.group({\n key: [{ value: il.key, disabled: true }],\n description: [{ value: il.description, disabled: true }],\n integrationLinkType: [{ value: il.integrationLinkType, disabled: true }],\n url: [{ value: il.url, disabled: true }],\n });\n })) : this.formBuilder.array([])\n });\n }\n\n createRolloutPercentageItemFormGroup(p: RolloutPercentageItemModel, readOnly: boolean, settingType: SettingType | undefined) {\n return this.formBuilder.group({\n percentage: [{ value: p.percentage, disabled: readOnly }, [Validators.required, Validators.min(0), Validators.max(100)]],\n value: [\n { value: p.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingType)\n ],\n valueDisabled: [\n { value: p.value, disabled: true }, // For percentage item value\n ]\n });\n }\n\n createRolloutRuleFormGroup(r: RolloutRuleModel, readOnly: boolean, settingType: SettingType | undefined) {\n if (r.comparator) {\n return this.formBuilder.group({\n type: [{ value: 0, disabled: true }],\n comparisonAttribute: [{ value: r.comparisonAttribute, disabled: readOnly }, [Validators.required]],\n comparator: [{ value: r.comparator, disabled: readOnly }, [Validators.required]],\n comparisonValue: [{ value: r.comparisonValue, disabled: readOnly }, [Validators.required]],\n value: [\n { value: r.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingType)\n ],\n });\n } else if (r.segmentComparator) {\n return this.formBuilder.group({\n type: [{ value: 1, disabled: true }],\n segmentComparator: [{ value: r.segmentComparator, disabled: readOnly }, [Validators.required]],\n segmentId: [{ value: r.segmentId, disabled: readOnly }, [Validators.required]],\n value: [\n { value: r.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingType)\n ],\n });\n } else {\n throw new Error('Invalid rollout rule');\n }\n }\n\n private getValidatorsForSettingType(settingType: SettingType | undefined) {\n switch (settingType) {\n case SettingType.Int:\n return [Validators.required,\n Validators.min(-2147483648), Validators.max(2147483647), Validators.pattern('^[-+]?[0-9]\\\\d*$')];\n case SettingType.Double:\n return [Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\n case SettingType.String:\n case SettingType.Boolean:\n return [Validators.required];\n default:\n return [];\n }\n }\n\n private getAllRolloutRules(formGroup: UntypedFormGroup) {\n const settingValues = formGroup.get('settingValues') as UntypedFormArray;\n const rolloutRules = settingValues.controls.map(cv => (cv.get('rolloutRules') as UntypedFormArray).value);\n return rolloutRules.length === 0 ? rolloutRules : rolloutRules.reduce((a, b) => a.concat(b));\n }\n\n private getComparisonAttributes(rolloutRules: any[]) {\n if (rolloutRules.length > 0) {\n const currentComparisonAttributes = rolloutRules.map(r => r.comparisonAttribute);\n\n const defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n const comparisonAttributes = currentComparisonAttributes.filter(c => defaultComparisonAttributes.indexOf(c) === -1);\n return Array.from(new Set(comparisonAttributes));\n } else {\n return [];\n }\n }\n\n getComparisonValueType(comparator: RolloutRuleComparator) {\n switch (comparator) {\n case RolloutRuleComparator.NumberEquals:\n case RolloutRuleComparator.NumberDoesNotEqual:\n case RolloutRuleComparator.NumberLess:\n case RolloutRuleComparator.NumberLessOrEquals:\n case RolloutRuleComparator.NumberGreater:\n case RolloutRuleComparator.NumberGreaterOrEquals:\n return 'number';\n default:\n return 'text';\n }\n }\n\n normalizeComparisonValue(comparator: RolloutRuleComparator | undefined, comparisonValue: any) {\n // In the case of number inputs value is a number but API expects\n // a string, so we need to make sure that it's converted to string.\n return comparator && this.getComparisonValueType(comparator) === \"number\"\n ? FormHelper.normalizeNumberStoredAsString(comparisonValue)\n : comparisonValue;\n }\n}\n","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\nimport { UntypedFormBuilder, UntypedFormGroup, UntypedFormArray, UntypedFormControl } from '@angular/forms';\n\n@Component({\n selector: 'configcat-expand-dialog',\n templateUrl: './expand-dialog.component.html',\n styleUrls: ['./expand-dialog.component.scss']\n})\nexport class ExpandDialogComponent implements OnInit, OnDestroy {\n\n formControlSubscription!: Subscription | null;\n formGroupSubscription!: Subscription | null;\n\n formGroup!: UntypedFormGroup;\n readOnly = false;\n\n constructor(public dialogRef: MatDialogRef<ExpandDialogComponent>,\n private formBuilder: UntypedFormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n }\n\n\n ngOnInit(): void {\n this.readOnly = this.data.control.disabled;\n if (this.data.multiline) {\n this.buildFormGroup();\n } else {\n this.formControlSubscription = this.data.control.valueChanges.subscribe((value: any) => {\n this.data.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.data.control.markAsDirty();\n }, () => { }, () => { });\n }\n }\n\n values() {\n return this.formGroup.get('values') as UntypedFormArray;\n }\n\n getValueControls() {\n return this.values().controls.map(c => c as UntypedFormControl);\n }\n\n buildFormGroup() {\n const value = this.data.control.value ? this.data.control.value : '';\n const list = value.split(',').map((v: any) => v.trim()).filter((v: any) => !!v);\n this.formGroup = this.formBuilder.group({\n values: this.formBuilder.array(list.map((v: any) => this.formBuilder.control({ value: v, disabled: this.data.control.disabled })))\n });\n this.formGroupSubscription = this.formGroup.valueChanges.subscribe((formGroupValue) => {\n this.data.control.setValue(formGroupValue.values\n .filter((v: any) => !!v)\n .join(','), { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.data.control.updateValueAndValidity();\n this.data.control.markAsDirty();\n });\n }\n\n add() {\n (this.formGroup.controls.values as UntypedFormArray).push(this.formBuilder.control(''));\n }\n\n remove(index: any) {\n (this.formGroup.controls.values as UntypedFormArray).removeAt(index);\n }\n\n ngOnDestroy() {\n if (this.formControlSubscription) {\n this.formControlSubscription.unsubscribe();\n this.formControlSubscription = null;\n }\n\n if (this.formGroupSubscription) {\n this.formGroupSubscription.unsubscribe();\n this.formGroupSubscription = null;\n }\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","<div mat-dialog-content class=\"container\">\n <mat-form-field appearance=\"outline\" *ngIf=\"!data.multiline\" subscriptSizing=\"dynamic\">\n <mat-label></mat-label>\n <textarea matInput [formControl]=\"data.control\" rows=\"10\"></textarea>\n </mat-form-field>\n <div [formGroup]=\"formGroup\" *ngIf=\"data.multiline\">\n <div *ngFor=\"let valueControl of getValueControls(); let i = index;\" class=\"value-field\">\n <mat-form-field appearance=\"outline\">\n <input matInput [formControl]=\"valueControl\" />\n </mat-form-field>\n <button (click)=\"remove(i)\" mat-icon-button type=\"button\" class=\"no-density-mat-icon-button\"\n matTooltip=\"Remove item\" *ngIf=\"!readOnly\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n </div>\n <button (click)=\"add()\" mat-stroked-button type=\"button\" *ngIf=\"!readOnly\">\n <mat-icon>add</mat-icon>Add item\n </button>\n </div>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"close()\">Done</button>\n</div>","import { Directive, HostListener } from '@angular/core';\n\n/**\n * Makes sure that values entered into HTML input fields are displayed in the correct format,\n * where correct means normalized (e.g. `'.10'` --> `'0.1'`) and corresponding to the locale setting.\n * \n * The format is adjusted on the blur event. Only the format of number inputs is adjusted currently.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'input[inputDisplayNormalizer]'\n})\nexport class InputDisplayNormalizerDirective {\n constructor() { }\n\n @HostListener('blur', ['$event'])\n onChange($event: any) {\n const target = $event.target;\n if (target.type === 'number') {\n let value = target.value;\n value = value.trim() !== '' ? Number(value) : NaN;\n if (isFinite(value)) {\n // The string returned by the `value` property and the string displayed in the input field are not necessarily equal.\n // HACK: When the returned and the displayed value differs only in the decimal separator,\n // Chrome won't update the displayed value unless the value is changed first...\n target.value = '';\n target.value = value;\n }\n }\n }\n}","import { Component, Input } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ExpandDialogComponent } from '../../../dialogs/expand-dialog/expand-dialog.component';\nimport { SettingModel, SettingType } from 'ng-configcat-publicapi';\nimport { FormHelper } from '../../../_services/form-helper';\n\n@Component({\n selector: 'configcat-value',\n templateUrl: './value.component.html',\n styleUrls: [\n './slider.scss',\n './value.component.scss'\n ]\n})\nexport class ValueComponent {\n\n @Input() valueFormControl!: UntypedFormControl;\n\n @Input() setting!: SettingModel;\n\n SettingType = SettingType;\n\n constructor(private dialog: MatDialog) {\n }\n\n popOut() {\n this.dialog.open(ExpandDialogComponent, {\n width: '640px',\n data: { control: this.valueFormControl }\n });\n }\n\n formatDecimalNumber(value: number) {\n return FormHelper.formatNumberForDisplay(value);\n }\n}\n","<div class=\"flex\">\n <div class=\"container\" [ngSwitch]=\"setting.settingType\">\n <div *ngSwitchCase=\"SettingType.String\" class=\"with-validation\">\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"text\"\n [formControl]=\"valueFormControl\" placeholder=\"my value\" name=\"value\">\n <div class=\"expand\" (click)=\"popOut()\" matTooltip=\"Pop-out Editor\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n <div *ngSwitchCase=\"SettingType.Int\" class=\"with-validation\">\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"number\" [formControl]=\"valueFormControl\"\n placeholder=\"42\" name=\"value\" digitOnly digitOnlyAllowNegatives=\"true\"/>\n </div>\n <div *ngSwitchCase=\"SettingType.Double\" class=\"with-validation\">\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"number\" [formControl]=\"valueFormControl\"\n placeholder=\"{{ formatDecimalNumber(3.14) }}\" name=\"value\" inputDisplayNormalizer>\n </div>\n <div *ngSwitchCase=\"SettingType.Boolean\" class=\"toggle\">\n <label class=\"switch\">\n <input type=\"checkbox\" [formControl]=\"valueFormControl\" name=\"value\" />\n <span class=\"slider round\"></span>\n </label>\n </div>\n </div>\n <div *ngIf=\"setting.settingType === SettingType.Boolean\" class=\"spacer\"></div>\n\n</div>\n","import { Component, Input } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormArray, UntypedFormControl } from '@angular/forms';\nimport { SettingType } from 'ng-configcat-publicapi';\n\n@Component({\n selector: 'configcat-rollout-percentage-items',\n templateUrl: './rollout-percentage-items.component.html',\n styleUrls: ['./rollout-percentage-items.component.scss']\n})\nexport class RolloutPercentageItemsComponent {\n\n @Input() formGroup!: UntypedFormGroup;\n @Input() readOnly = false;\n SettingType = SettingType;\n\n\n setting() {\n return this.formGroup.get('setting')?.value;\n }\n\n rolloutRules() {\n return this.formGroup.get('rolloutRules') as UntypedFormArray;\n }\n\n rolloutPercentageItems() {\n return this.formGroup.get('rolloutPercentageItems') as UntypedFormArray;\n }\n\n rolloutPercentageItemsSum() {\n return this.formGroup.get('rolloutPercentageItemsSum') as UntypedFormControl;\n }\n\n value(rolloutPercentageItem: UntypedFormGroup): UntypedFormControl {\n return this.setting().settingType === SettingType.Boolean ?\n rolloutPercentageItem.get('valueDisabled') as UntypedFormControl :\n rolloutPercentageItem.get('value') as UntypedFormControl;\n }\n\n constructor() { }\n\n percentageChanged(index: number) {\n if (this.rolloutPercentageItems().controls[index].value.percentage < 0) {\n (this.rolloutPercentageItems().controls[index] as UntypedFormGroup).controls.percentage.setValue(0);\n }\n if (this.rolloutPercentageItems().controls[index].value.percentage > 100) {\n (this.rolloutPercentageItems().controls[index] as UntypedFormGroup).controls.percentage.setValue(100);\n }\n\n if (this.rolloutPercentageItems().controls.length === 2) {\n (this.rolloutPercentageItems().controls[1 - index] as UntypedFormGroup).controls.percentage\n .setValue(100 - this.rolloutPercentageItems().controls[index].value.percentage);\n }\n\n this.updateSum();\n }\n\n updateSum() {\n if (this.rolloutPercentageItems().controls.length === 0) {\n this.rolloutPercentageItemsSum().setValue(100);\n } else {\n this.rolloutPercentageItemsSum().setValue(\n this.rolloutPercentageItems().controls.map(v => v.value.percentage)\n .reduce((a, b) => a + b)\n );\n }\n }\n\n removeRolloutPercentageItem(index: number) {\n this.rolloutPercentageItems().removeAt(index);\n this.rolloutPercentageItems().markAsDirty();\n this.updateSum();\n }\n\n removeAll() {\n this.rolloutPercentageItems().clear();\n this.rolloutPercentageItems().markAsDirty();\n this.updateSum();\n }\n\n getRolloutPercentageItemFormGroups() {\n return this.rolloutPercentageItems()?.controls?.map(c => c as UntypedFormGroup);\n }\n\n getPercentageFormControl(rolloutPercentageItem: any) {\n return rolloutPercentageItem.controls.percentage as UntypedFormControl;\n }\n}\n","<div class=\"percentage-wrapper\" [formGroup]=\"formGroup\">\n\n <div class=\"if\" *ngIf=\"rolloutRules().controls.length > 0\">\n <mat-chip-set>\n <mat-chip class=\"chip\">ELSE IF</mat-chip>\n </mat-chip-set>\n </div>\n <div class=\"grow\">\n <div class=\"percentage-row flex\"\n *ngFor=\"let rolloutPercentageItem of getRolloutPercentageItemFormGroups(); let i = index\">\n <div class=\"flex\">\n <input type=\"number\" [formControl]=\"getPercentageFormControl(rolloutPercentageItem)\"\n (input)=\"percentageChanged(i)\" digitOnly>%\n <span class=\"users\">of <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </span>\n </div>\n\n <div class=\"delete-option\" matTooltip=\"Remove this % option\"\n *ngIf=\"!readOnly && rolloutPercentageItems().controls.length > 2\"\n (click)=\"removeRolloutPercentageItem(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n\n <span matTooltip=\"The sum of percentages must be equal to 100.\" matTooltipPosition=\"above\"\n *ngIf=\"(i === rolloutPercentageItems().controls.length -1) && (rolloutPercentageItemsSum().invalid)\">\n <mat-icon color=\"warn\">\n error_outline\n </mat-icon>\n </span>\n\n <div class=\"value flex\">\n <span class=\"value-name\" *ngIf=\"setting().settingType !== SettingType.Boolean\">Served value:</span>\n <configcat-value class=\"served-value\" [valueFormControl]=\"value(rolloutPercentageItem)\"\n [setting]=\"setting()\">\n </configcat-value>\n </div>\n <div class=\"delete\" matTooltip=\"Remove % options\" (click)=\"removeAll()\" *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormControl, UntypedFormArray, Validators } from '@angular/forms';\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\nimport { valid } from 'semver';\nimport { ExpandDialogComponent } from '../../../dialogs/expand-dialog/expand-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SettingType, RolloutRuleComparator, SegmentListModel, SegmentComparator } from 'ng-configcat-publicapi';\nimport { SettingListFormHelper } from '../../../_services/setting-list-form-helper';\nimport { FormHelper } from '../../../_services/form-helper';\n\n@Component({\n selector: 'configcat-rollout-rules',\n templateUrl: './rollout-rules.component.html',\n styleUrls: ['./rollout-rules.component.scss']\n})\nexport class RolloutRulesComponent {\n\n @Input() formGroup!: UntypedFormGroup;\n @Input() readOnly = false;\n @Input() segments!: SegmentListModel[];\n\n SettingType = SettingType;\n\n defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n\n rolloutRuleComparators = [\n { value: RolloutRuleComparator.IsOneOf, label: 'IS ONE OF (cleartext)' },\n { value: RolloutRuleComparator.IsNotOneOf, label: 'IS NOT ONE OF (cleartext)' },\n { value: RolloutRuleComparator.Contains, label: 'CONTAINS (cleartext)' },\n { value: RolloutRuleComparator.DoesNotContain, label: 'DOES NOT CONTAIN (cleartext)' },\n\n { value: RolloutRuleComparator.SemVerIsOneOf, label: 'IS ONE OF (SemVer)' },\n { value: RolloutRuleComparator.SemVerIsNotOneOf, label: 'IS NOT ONE OF (SemVer)' },\n { value: RolloutRuleComparator.SemVerLess, label: '< (SemVer)' },\n { value: RolloutRuleComparator.SemVerLessOrEquals, label: '<= (SemVer)' },\n { value: RolloutRuleComparator.SemVerGreater, label: '> (SemVer)' },\n { value: RolloutRuleComparator.SemVerGreaterOrEquals, label: '>= (SemVer)' },\n\n { value: RolloutRuleComparator.NumberEquals, label: '= (Number)' },\n { value: RolloutRuleComparator.NumberDoesNotEqual, label: '!= (Number)' },\n { value: RolloutRuleComparator.NumberLess, label: '< (Number)' },\n { value: RolloutRuleComparator.NumberLessOrEquals, label: '<= (Number)' },\n { value: RolloutRuleComparator.NumberGreater, label: '> (Number)' },\n { value: RolloutRuleComparator.NumberGreaterOrEquals, label: '>= (Number)' },\n\n { value: RolloutRuleComparator.SensitiveIsOneOf, label: 'IS ONE OF (hashed)' },\n { value: RolloutRuleComparator.SensitiveIsNotOneOf, label: 'IS NOT ONE OF (hashed)' },\n ];\n\n segmentComparators = [\n { value: SegmentComparator.IsIn, label: 'IS IN SEGMENT' },\n { value: SegmentComparator.IsNotIn, label: 'IS NOT IN SEGMENT' },\n ];\n\n constructor(\n private dialog: MatDialog,\n private settingListFormHelper: SettingListFormHelper) { }\n\n setting() {\n return this.formGroup.get('setting')?.value;\n }\n\n rolloutRules() {\n return this.formGroup.get('rolloutRules') as UntypedFormArray;\n }\n\n comparisonAttributes() {\n return this.formGroup.root.get('comparisonAttributes')?.value;\n }\n\n removeRule(index: any) {\n this.rolloutRules().removeAt(index);\n this.rolloutRules().markAsDirty();\n }\n\n onDrop(event: any) {\n const rolloutRules = this.rolloutRules().controls;\n moveItemInArray(rolloutRules, event.previousIndex, event.currentIndex);\n this.formGroup.markAsDirty();\n }\n\n attributeChanged(event: any, comparisonAttribute: UntypedFormControl) {\n if (this.defaultComparisonAttributes.indexOf(event.value) !== -1) {\n if (comparisonAttribute.value !== event.value) {\n comparisonAttribute.setValue(event.value);\n this.formGroup.markAsDirty();\n }\n } else {\n if (comparisonAttribute.value !== '') {\n comparisonAttribute.setValue('');\n this.formGroup.markAsDirty();\n }\n }\n }\n\n getPlaceHolder(rolloutRule: any) {\n if (!rolloutRule.controls.comparisonAttribute.value) {\n return '';\n }\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.SensitiveIsOneOf:\n case RolloutRuleComparator.SensitiveIsNotOneOf:\n switch (rolloutRule.controls.comparisonAttribute.value.toLowerCase()) {\n case 'identifier':\n return 'e.g: user_id1, user_id2, user_id3';\n case 'email':\n return 'e.g: jane@example.com, john@example.com';\n case 'country':\n return 'e.g: France, Brazil';\n default:\n return 'e.g: value1, value2, value3';\n }\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n switch (rolloutRule.controls.comparisonAttribute.value.toLowerCase()) {\n case 'identifier':\n return 'part-of-id';\n case 'email':\n return 'e.g: @example.com';\n case 'country':\n return 'e.g: United';\n default:\n return 'e.g: any-part-of-your-value-string';\n }\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n return 'e.g: 1.0.0, 2.0.1';\n case RolloutRuleComparator.SemVerLessOrEquals:\n case RolloutRuleComparator.SemVerLess:\n case RolloutRuleComparator.SemVerGreater:\n case RolloutRuleComparator.SemVerGreaterOrEquals:\n return 'e.g: 1.0.0';\n case RolloutRuleComparator.NumberEquals:\n case RolloutRuleComparator.NumberDoesNotEqual:\n case RolloutRuleComparator.NumberLess:\n case RolloutRuleComparator.NumberLessOrEquals:\n case RolloutRuleComparator.NumberGreater:\n case RolloutRuleComparator.NumberGreaterOrEquals:\n return 'e.g: 42';\n }\n\n return '';\n }\n\n getComparisonValueType(rolloutRule: any) {\n return this.settingListFormHelper.getComparisonValueType(rolloutRule.controls.comparator.value);\n }\n\n getInfoClass(rolloutRule: any) {\n if (!rolloutRule.controls.comparisonAttribute.value) {\n return 'info';\n }\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n return 'warn';\n default:\n return 'info';\n }\n }\n\n getInfoTooltip(rolloutRule: any) {\n if (!rolloutRule.controls.comparisonAttribute.value) {\n return 'Learn more about comparators';\n }\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n return 'Consider using sensitive text comparators. Click to learn more.';\n default:\n return 'Click to learn more about comparators';\n }\n }\n\n comparatorChanged(rolloutRule: any) {\n let validators: any[] = [];\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.SensitiveIsOneOf:\n case RolloutRuleComparator.SensitiveIsNotOneOf:\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n validators = [Validators.required, Validators.maxLength(65535)];\n break;\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n validators = [Validators.required, this.validateSemVerList];\n break;\n case RolloutRuleComparator.SemVerLessOrEquals:\n case RolloutRuleComparator.SemVerLess:\n case RolloutRuleComparator.SemVerGreater:\n case RolloutRuleComparator.SemVerGreaterOrEquals:\n validators = [Validators.required, this.validateSemVer];\n break;\n case RolloutRuleComparator.NumberEquals:\n case RolloutRuleComparator.NumberDoesNotEqual:\n case RolloutRuleComparator.NumberLess:\n case RolloutRuleComparator.NumberLessOrEquals:\n case RolloutRuleComparator.NumberGreater:\n case RolloutRuleComparator.NumberGreaterOrEquals:\n validators = [Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\n break;\n }\n\n rolloutRule.controls.comparisonValue.setValidators(validators);\n if (this.getComparisonValueType(rolloutRule) === \"number\") {\n const oldValue = rolloutRule.controls.comparisonValue.value;\n rolloutRule.controls.comparisonValue.setValue(FormHelper.normalizeNumberStoredAsString(rolloutRule.controls.comparisonValue.value));\n if (oldValue !== rolloutRule.controls.comparisonValue.value) {\n rolloutRule.controls.comparisonValue.markAsTouched();\n }\n }\n rolloutRule.controls.comparisonValue.updateValueAndValidity();\n }\n\n isListType(rolloutRule: any) {\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.SensitiveIsOneOf:\n case RolloutRuleComparator.SensitiveIsNotOneOf:\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n return true;\n default:\n return false;\n }\n }\n\n validateSemVer(c: UntypedFormControl) {\n\n if (valid(c.value) === null) {\n return {\n validateSemVer: {\n valid: false\n }\n };\n }\n\n return null;\n }\n\n validateSemVerList(c: UntypedFormControl) {\n if (!c.value) {\n return {\n validateSemVerList: {\n valid: false\n }\n };\n }\n\n const semvers = c.value.split(',').map((s: any) => s.trim());\n if (semvers.find((s: any) => s && s !== '' && valid(s) === null)) {\n return {\n validateSemVerList: {\n valid: false\n }\n };\n }\n\n return null;\n }\n\n popOut(rolloutRule: any) {\n this.dialog.open(ExpandDialogComponent, {\n width: '640px',\n data: {\n control: rolloutRule.controls.comparisonValue,\n multiline: this.isListType(rolloutRule)\n }\n });\n }\n\n\n trackByIndex(index: number): any {\n return index;\n }\n\n getRolloutRuleValueFormControl(rolloutRule: any) {\n return rolloutRule.controls.value as UntypedFormControl;\n }\n\n getRolloutRuleComparisonValueFormControl(rolloutRule: any) {\n return rolloutRule.controls.comparisonValue as UntypedFormControl;\n }\n\n getRolloutRuleComparisonAttributeFormControl(rolloutRule: any) {\n return rolloutRule.controls.comparisonAttribute as UntypedFormControl;\n }\n\n getRolloutRuleTypeFormControl(rolloutRule: any) {\n return rolloutRule.controls.type as UntypedFormControl;\n }\n\n getRolloutRuleComparatorFormControl(rolloutRule: any) {\n return rolloutRule.controls.comparator as UntypedFormControl;\n }\n\n getRolloutRuleSegmentComparatorFormControl(rolloutRule: any) {\n return rolloutRule.controls.segmentComparator as UntypedFormControl;\n }\n\n getRolloutRuleSegmentIdFormControl(rolloutRule: any) {\n return rolloutRule.controls.segmentId as UntypedFormControl;\n }\n}\n","<div [formGroup]=\"formGroup\">\n <div cdkDropList (cdkDropListDropped)=\"onDrop($event)\" [cdkDropListDisabled]=\"readOnly\"\n [cdkDropListData]=\"rolloutRules().controls\">\n <div *ngFor=\"let rolloutRule of rolloutRules().controls; trackBy: trackByIndex; let i = index\" cdkDrag>\n <div class=\"targeting-row\">\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 0\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user's</a>\n </div>\n\n <select class=\"custom-select attribute-select\" matTooltip=\"Comparison attribute\"\n matTooltipPosition=\"above\"\n (change)=\"attributeChanged($event.target, getRolloutRuleComparisonAttributeFormControl(rolloutRule))\"\n [disabled]=\"readOnly\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\n [selected]=\"comparisonAttribute === getRolloutRuleComparisonAttributeFormControl(rolloutRule).value\">\n {{comparisonAttribute}}</option>\n <option\n [selected]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) === -1\">\n Custom\n </option>\n </select>\n\n\n <span class=\"attribute-span\" matTooltip=\"Custom user attribute\" matTooltipPosition=\"above\"\n [hidden]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) !== -1\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid\">*</span>\n <input\n [ngClass]=\"{'invalid': getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid}\"\n type=\"text\" matInput [matAutocomplete]=\"auto\"\n [formControl]=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule)\" class=\"attribute\"\n placeholder=\"e.g. Eye color\">\n </span>\n\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of comparisonAttributes()\" [value]=\"option\">\n {{option}}\n </mat-option>\n </mat-autocomplete>\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select\" [formControl]=\"getRolloutRuleComparatorFormControl(rolloutRule)\"\n matTooltip=\"Comparator\" matTooltipPosition=\"above\"\n (change)=\"comparatorChanged(rolloutRule)\">\n <optgroup label=\"CONFIDENTIAL TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(16, 18)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(0, 4)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"SEMANTIC VERSION\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(4, 10)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"NUMBER\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(10, 16)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n </select>\n <div [class]=\"getInfoClass(rolloutRule)\" [matTooltip]=\"getInfoTooltip(rolloutRule)\">\n <a href=\"https://configcat.com/docs/advanced/targeting/#comparator\" target=\"_blank\"\n rel=\"noopener noreferrer\">\n <mat-icon>info</mat-icon>\n </a>\n </div>\n </div>\n\n <div class=\"comparison-value\">\n <span class=\"error\"\n *ngIf=\"getRolloutRuleComparisonValueFormControl(rolloutRule).invalid\">*</span>\n\n <input [ngClass]=\"{'invalid': getRolloutRuleComparisonValueFormControl(rolloutRule).invalid}\"\n [formControl]=\"getRolloutRuleComparisonValueFormControl(rolloutRule)\"\n [type]=\"getComparisonValueType(rolloutRule)\" [placeholder]=\"getPlaceHolder(rolloutRule)\"\n matTooltip=\"Comparison value\" matTooltipPosition=\"above\" inputDisplayNormalizer>\n <div class=\"expand\" matTooltip=\"Pop-out Editor\" matTooltipPosition=\"above\"\n (click)=\"popOut(rolloutRule)\" *ngIf=\"getComparisonValueType(rolloutRule)==='text'\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 1\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user</a>\n </div>\n\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select segment-comparator\"\n [formControl]=\"getRolloutRuleSegmentComparatorFormControl(rolloutRule)\"\n matTooltip=\"Segment comparator\" matTooltipPosition=\"above\">\n <option *ngFor=\"let comparator of segmentComparators\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </select>\n </div>\n\n <div class=\"select-wrapper\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleSegmentIdFormControl(rolloutRule).invalid\">*</span>\n <select class=\"custom-select segment-select\"\n [formControl]=\"getRolloutRuleSegmentIdFormControl(rolloutRule)\" matTooltip=\"Segment\"\n matTooltipPosition=\"above\"\n [ngClass]=\"{'invalid': getRolloutRuleSegmentIdFormControl(rolloutRule).invalid}\">\n <option *ngFor=\"let segment of segments\" [ngValue]=\"segment.segmentId\">\n {{segment.name}}\n </option>\n </select>\n </div>\n\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n\n <div class=\"value flex\">\n <div class=\"serve\" *ngIf=\"setting().settingType !== SettingType.Boolean\">\n <mat-chip-set>\n <mat-chip class=\"chip\">Serve:</mat-chip>\n </mat-chip-set>\n </div>\n\n <configcat-value class=\"served-value\"\n [valueFormControl]=\"getRolloutRuleValueFormControl(rolloutRule)\" [setting]=\"setting()\">\n </configcat-value>\n </div>\n </div>\n </div>\n </div>\n</div>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormArray, UntypedFormControl } from '@angular/forms';\nimport { RolloutPercentageItemModel, RolloutRuleComparator, RolloutRuleModel, SegmentComparator, SegmentListModel, SettingModel, SettingType } from 'ng-configcat-publicapi';\nimport { SettingListFormHelper } from '../../_services/setting-list-form-helper';\n\n@Component({\n selector: 'setting',\n templateUrl: './setting.component.html',\n styleUrls: ['./setting.component.scss']\n})\nexport class SettingComponent implements OnInit {\n\n @Input() dashboardBasePath = 'https://app.configcat.com';\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n\n @Input() formGroup!: UntypedFormGroup;\n @Input() readOnly = false;\n @Input() canDeleteSetting = false;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = false;\n @Input() segments!: SegmentListModel[];\n\n @Output() deleteSettingRequested = new EventEmitter();\n\n rulesBeingRendered = false;\n\n SettingType = SettingType;\n\n constructor(private formHelper: SettingListFormHelper) { }\n\n ngOnInit() { }\n\n environment() {\n return this.formGroup.root.get('environment')?.value;\n }\n\n setting() {\n return <SettingModel>this.formGroup.get('setting')?.value;\n }\n\n integrationLinks() {\n return this.formGroup.get('integrationLinks') as UntypedFormArray;\n }\n\n rolloutRules() {\n return this.formGroup.get('rolloutRules') as UntypedFormArray;\n }\n\n rolloutPercentageItems() {\n return this.formGroup.get('rolloutPercentageItems') as UntypedFormArray;\n }\n\n value() {\n return this.formGroup.get('value') as UntypedFormControl;\n }\n\n addRolloutRule() {\n this.rolloutRules().push(this.formHelper.createRolloutRuleFormGroup(\n <RolloutRuleModel>{\n comparisonAttribute: 'Identifier',\n comparator: RolloutRuleComparator.SensitiveIsOneOf,\n comparisonValue: '',\n value: this.setting().settingType === SettingType.Boolean ? false as unknown : null\n },\n this.readOnly, this.setting().settingType));\n this.rolloutRules().markAsDirty();\n }\n\n addSegmentRolloutRule() {\n this.rolloutRules().push(this.formHelper.createRolloutRuleFormGroup(\n <RolloutRuleModel>{\n segmentComparator: SegmentComparator.IsIn,\n value: this.setting().settingType === SettingType.Boolean ? false as unknown : null\n },\n this.readOnly, this.setting().settingType));\n this.rolloutRules().markAsDirty();\n }\n\n removeRolloutRules() {\n this.rolloutRules().clear();\n this.rolloutRules().markAsDirty();\n }\n\n addRolloutPercentageItem() {\n\n if (this.rolloutPercentageItems().length === 0) {\n switch (this.setting().settingType) {\n case SettingType.Boolean:\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 0,\n value: true as unknown\n },\n this.readOnly, this.setting().settingType));\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 100,\n value: false as unknown\n },\n this.readOnly, this.setting().settingType));\n break;\n\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n for (let i = 0; i < 4; i++) {\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 25,\n value: null\n },\n this.readOnly, this.setting().settingType));\n }\n\n break;\n }\n } else if (this.setting().settingType !== SettingType.Boolean) {\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 0,\n value: null\n },\n this.readOnly, this.setting().settingType));\n }\n\n this.rolloutPercentageItems().markAsDirty();\n }\n\n removeRolloutPercentageItems() {\n this.rolloutPercentageItems().clear();\n this.rolloutPercentageItems().markAsDirty();\n }\n\n deleteSetting() {\n this.deleteSettingRequested.emit({ setting: this.setting() });\n }\n\n getDashboardUrl() {\n return this.dashboardBasePath + '/' + this.productId + '/' + this.configId + '/' + this.environmentId + '?settingId=' + this.setting().settingId;\n }\n}\n","<div class=\"setting-full\" [formGroup]=\"formGroup\">\n <div class=\"delete\" (click)=\"deleteSetting()\" *ngIf=\"canDeleteSetting\" [matTooltip]=\"deleteSettingText\"\n data-robot=\"deleteSetting\">\n <mat-icon>cancel</mat-icon>\n </div>\n <div class=\"setting-header\">\n <div class=\"setting-name\">\n <div class=\"name\" data-robot=\"settingName\">\n {{setting().name}}\n <span *ngIf=\"showEnvironmentName\"> ({{environment().name}})</span>\n </div>\n </div>\n </div>\n <div class=\"setting-content\">\n <div class=\"setting-details\">\n <div class=\"setting-key\"><code data-robot=\"settingKey\">{{setting().key}}</code></div>\n <span *ngIf=\"setting().hint\" class=\"description\">{{setting().hint}}</span>\n <div class=\"open\"><a [href]=\"getDashboardUrl()\" target=\"_blank\" rel=\"noopener noreferrer\">Open in ConfigCat</a>\n </div>\n </div>\n\n <div class=\"rules-list\">\n <div>\n <configcat-rollout-rules *ngIf=\"rolloutRules().controls.length !== 0\" [formGroup]=\"formGroup\"\n [segments]=\"segments\" [readOnly]=\"readOnly\">\n </configcat-rollout-rules>\n </div>\n\n <configcat-rollout-percentage-items *ngIf=\"rolloutPercentageItems().controls.length !== 0\" [formGroup]=\"formGroup\"\n [readOnly]=\"readOnly\">\n </configcat-rollout-percentage-items>\n\n <div class=\"all-other flex\">\n <div *ngIf=\"rolloutPercentageItems().length === 0 && rolloutRules().length !== 0\"\n matTooltip=\"This value will be served to all users who the above rules don't apply.\"\n matTooltipPosition=\"above\">\n <mat-chip-set>\n <mat-chip class=\"chip\">To all other users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n <div *ngIf=\"rolloutPercentageItems().length !== 0\"\n matTooltip=\"This fallback value will be served in case the user can't be identified.\"\n matTooltipPosition=\"above\">\n <mat-chip-set>\n <mat-chip class=\"chip\">To unidentified users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n <div *ngIf=\"rolloutPercentageItems().length === 0 && rolloutRules().length === 0\">\n <mat-chip-set>\n <mat-chip class=\"chip\">To all users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n <configcat-value class=\"served-value\" [valueFormControl]=\"value()\" [setting]=\"setting()\">\n </configcat-value>\n </div>\n <div class=\"buttons\">\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addRolloutRule()\" *ngIf=\"!readOnly\">\n {{rolloutRules().length === 0 ? 'Target specific users' : 'Add new targeting rule'}}\n </button>\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addSegmentRolloutRule()\" *ngIf=\"!readOnly\">\n {{rolloutRules().length === 0 ? 'Target segment' : 'Target new segment'}}\n </button>\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addRolloutPercentageItem()\"\n *ngIf=\"!readOnly\"\n [disabled]=\"setting().settingType === SettingType.Boolean && rolloutPercentageItems().length !== 0\">\n {{rolloutPercentageItems().length === 0 ? 'Target % of users' : 'Add new % option'}}\n </button>\n </div>\n </div>\n </div>\n</div>","import { Component, Input, Output, EventEmitter, OnDestroy, OnChanges } from '@angular/core';\nimport { SettingValuesModel, UpdateSettingValuesModel } from '../_models';\nimport { UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { forkJoin, Observable, Subscription } from 'rxjs';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ReasonDialogComponent } from '../dialogs/reason-dialog/reason-dialog.component';\nimport { SaveSnackbarComponent } from '../dialogs/save-snackbar/save-snackbar.component';\nimport { SettingListFormHelper } from '../_services/setting-list-form-helper';\nimport { RolloutPercentageItemModel, RolloutRuleModel, SegmentListModel, SettingModel, UpdateSettingValueModel } from 'ng-configcat-publicapi';\n\n@Component({\n selector: 'configcat-setting-list',\n templateUrl: './setting-list.component.html',\n styleUrls: ['./setting-list.component.scss']\n})\nexport class SettingListComponent implements OnChanges, OnDestroy {\n\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n @Input() dashboardBasePath = 'https://app.configcat.com';\n\n @Input() canDeleteSetting = false;\n\n @Input() onSave!: (value: UpdateSettingValuesModel) => Observable<SettingValuesModel>;\n @Input() loadSettingValues!: () => Observable<SettingValuesModel>;\n @Input() loadSegments!: () => Observable<SegmentListModel[]>;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = false;\n\n @Output() loadSucceeded = new EventEmitter();\n @Output() deleteSettingRequested = new EventEmitter();\n @Output() formValuesChanged = new EventEmitter();\n\n formValuesChangedSubscription!: Subscription | null;\n\n loading = true;\n\n settingValues!: SettingValuesModel;\n segments!: SegmentListModel[];\n formGroup!: UntypedFormGroup;\n\n submitting = false;\n showRevertQuestion = false;\n showFeedBackMessage = false;\n readOnly = false;\n\n constructor(private formHelper: SettingListFormHelper,\n private snackBar: MatSnackBar,\n private dialog: MatDialog) { }\n\n ngOnChanges(): void {\n this.reloadSettingValues();\n }\n\n ngOnDestroy() {\n if (this.formValuesChangedSubscription) {\n this.formValuesChangedSubscription.unsubscribe();\n this.formValuesChangedSubscription = null;\n }\n }\n\n reloadSettingValues() {\n this.showFeedBackMessage = false;\n this.loading = true;\n forkJoin({\n segments: this.loadSegments(),\n settingValues: this.loadSettingValues()\n }).subscribe(result => {\n this.readOnly = result.settingValues.readOnly;\n this.settingValues = result.settingValues;\n this.segments = result.segments;\n this.createFormGroup();\n this.loading = false;\n this.loadSucceeded.emit(true);\n },\n () => {\n this.snackBar.open('Ooops. We could not load your Feature Flags and Settings. Please try again or contact us.',\n 'Dismiss', { duration: 60000, panelClass: 'red-snackbar' });\n });\n }\n\n createFormGroup() {\n this.formGroup = this.formHelper.createSettingValuesFormGroup(this.settingValues);\n this.formValuesChangedSubscription = this.formGroup.valueChanges.subscribe(() => {\n this.formValuesChanged.emit();\n });\n }\n\n settingValuesFormArray() {\n return this.formGroup.get('settingValues') as UntypedFormArray;\n }\n\n getSettingValueFormGroups() {\n return this.settingValuesFormArray().controls.map(c => c as UntypedFormGroup);\n }\n\n private buildUpdateSettingValuesModel(settingValuesVM: UpdateSettingValueModel[]) {\n return settingValuesVM.map(settingValueVM => {\n return <UpdateSettingValueModel>\n {\n rolloutRules: settingValueVM.rolloutRules?.map(rolloutRuleVM =>\n <RolloutRuleModel>{\n comparisonAttribute: rolloutRuleVM.comparisonAttribute,\n comparator: rolloutRuleVM.comparator,\n comparisonValue: this.formHelper.normalizeComparisonValue(rolloutRuleVM.comparator, rolloutRuleVM.comparisonValue),\n segmentComparator: rolloutRuleVM.segmentComparator,\n segmentId: rolloutRuleVM.segmentId,\n value: rolloutRuleVM.value\n }),\n rolloutPercentageItems: settingValueVM.rolloutPercentageItems?.map(rolloutPercentageItemVM =>\n <RolloutPercentageItemModel>{\n percentage: rolloutPercentageItemVM.percentage,\n value: rolloutPercentageItemVM.value\n }),\n value: settingValueVM.value\n };\n });\n }\n\n submit() {\n if (!this.formGroup || !this.formGroup.valid) {\n this.showFeedBackMessage = true;\n this.formGroup.markAsTouched();\n return;\n }\n\n this.showFeedBackMessage = false;\n this.submitting = true;\n\n const updateSettingValuesModel = <UpdateSettingValuesModel>{\n settingValues: this.buildUpdateSettingValuesModel(this.formGroup.controls.settingValues.value),\n knownLastUpdatedAt: this.settingValues.lastUpdatedAt,\n forced: false\n };\n\n if (this.settingValues.reasonRequired) {\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\n width: '450px'\n });\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result && result.button === 'save' && result.reason) {\n\n updateSettingValuesModel.reason = result.reason;\n this.updateSettingValues(updateSettingValuesModel);\n } else {\n this.submitting = false;\n }\n });\n return;\n }\n\n this.updateSettingValues(updateSettingValuesModel);\n }\n\n updateSettingValues(updateSettingValuesModel: any) {\n this.onSave(updateSettingValuesModel).subscribe(settingValues => {\n this.settingValues = settingValues;\n this.createFormGroup();\n this.submitting = false;\n this.snackBar.openFromComponent(SaveSnackbarComponent, { duration: 5000, panelClass: 'green-snackbar' });\n }, (error) => {\n if (error.status === 400 && error.error && error.error.Reason && error.error.Reason[0] === 'Reason required') {\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\n width: '450px'\n });\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result && result.button === 'save' && result.reason) {\n updateSettingValuesModel.reason = result.reason;\n this.updateSettingValues(updateSettingValuesModel);\n } else {\n this.submitting = false;\n }\n });\n return;\n }\n\n this.formGroup.setErrors({ internalServerError: 'Internal server error' });\n this.showFeedBackMessage = true;\n });\n }\n\n handleRevertYes() {\n this.showRevertQuestion = false;\n this.reloadSettingValues();\n }\n\n handleRevertCancel() {\n this.showRevertQuestion = false;\n }\n\n onDeleteSettingRequested(setting: { setting: SettingModel }) {\n this.deleteSettingRequested.emit({\n setting: setting.setting,\n environment: this.settingValues.environment,\n config: this.settingValues.config\n });\n }\n}\n","<form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" *ngIf=\"!loading\">\n <div class=\"wrapper\" *ngFor=\"let settingValueFromGroup of getSettingValueFormGroups(); let i = index\">\n <setting [formGroup]=\"settingValueFromGroup\" [readOnly]=\"readOnly\" [canDeleteSetting]=\"canDeleteSetting\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\n [showEnvironmentName]=\"showEnvironmentName\" [segments]=\"segments\" [productId]=\"productId\" [configId]=\"configId\"\n [environmentId]=\"environmentId\" [dashboardBasePath]=\"dashboardBasePath\">\n </setting>\n </div>\n\n <div class=\"save\" *ngIf=\"!readOnly && !submitting && formGroup.dirty\">\n\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [disabled]=\"submitting\">\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\n </button>\n <button type=\"button\" mat-stroked-button *ngIf=\"!showRevertQuestion\" (click)=\"showRevertQuestion = true\">\n <mat-icon>history</mat-icon><span>Revert changes</span>\n </button>\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\n <span>Something went wrong and we could not save your settings. You can try again or <a\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact us.</a></span>\n </div>\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\n <span>Oh no! A feature flag has invalid or missing data.</span>\n </div>\n </div>\n <div *ngIf=\"showRevertQuestion\">\n <span class=\"revert\">Revert to last saved state?</span>\n <button type=\"button\" class=\"yes\" mat-stroked-button (click)=\"handleRevertYes()\">Yes</button>\n <button type=\"button\" mat-stroked-button (click)=\"handleRevertCancel()\">No</button>\n </div>\n </div>\n</form>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { BaseComponent } from '../base/base.component';\nimport { EvaluationVersion, SegmentListModel, SettingFormulaModel, SettingValueModel, UpdateSettingValueModel } from 'ng-configcat-publicapi';\nimport { Observable, throwError, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { PublicApiService } from '../_services';\nimport { SettingValuesModel, UpdateSettingValuesModel } from '../_models';\n\n@Component({\n selector: 'configcat-setting-item',\n templateUrl: './setting-item.component.html',\n styleUrls: ['./setting-item.component.scss']\n})\nexport class SettingItemComponent extends BaseComponent implements OnInit {\n\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n @Input() evaluationVersion!: EvaluationVersion;\n @Input() settingId!: number;\n\n @Input() canDeleteSetting = true;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = true;\n\n @Output() deleteSettingRequested = new EventEmitter();\n\n @Output() loadSucceeded = new EventEmitter();\n @Output() loadFailed = new EventEmitter();\n @Output() saveSucceeded = new EventEmitter();\n @Output() saveFailed = new EventEmitter();\n\n @Output() formValuesChanged = new EventEmitter();\n\n settingValue!: SettingValueModel;\n segments!: SegmentListModel[];\n dashboardBasePath: string;\n\n settingFormulaModel!: SettingFormulaModel;\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n this.dashboardBasePath = publicApiService.getDashboardBasePath();\n }\n\n ngOnInit(): void {\n }\n\n loadSettingValues = (): Observable<SettingValuesModel> => {\n return this.createSettingValuesService().getSettingValue(this.environmentId, this.settingId)\n .pipe(\n map(settingValue => {\n this.settingValue = settingValue;\n\n const settingValues = {\n settingValues: [settingValue],\n readOnly: settingValue.readOnly,\n config: settingValue.config,\n environment: settingValue.environment\n } as SettingValuesModel;\n\n return settingValues;\n }),\n catchError(error => {\n this.loadFailed.emit(error);\n return throwError(error);\n })\n );\n }\n\n itemLoadSucceeded() {\n this.loadSucceeded.emit(true);\n }\n\n loadSegments = (): Observable<SegmentListModel[]> => {\n return this.createSegmentsService().getSegments(this.productId)\n .pipe(\n map(segments => {\n this.segments = segments;\n return segments;\n }),\n catchError(error => {\n return throwError(error);\n })\n );\n }\n\n handleSave = (model: UpdateSettingValuesModel): Observable<SettingValuesModel> => {\n if (model.settingValues.length === 0) {\n return of();\n }\n const updateModel = model.settingValues[0] as UpdateSettingValueModel;\n\n return this.createSettingValuesService().replaceSettingValue(\n this.environmentId, this.settingId, updateModel, model.reason)\n .pipe(\n map(settingValue => {\n this.settingValue = settingValue;\n\n const settingValues = {\n settingValues: [settingValue],\n readOnly: settingValue.readOnly,\n config: settingValue.config,\n environment: settingValue.environment\n } as SettingValuesModel;\n\n this.saveSucceeded.emit(settingValues);\n return settingValues;\n }),\n catchError(error => {\n this.saveFailed.emit(error);\n return throwError(error);\n })\n );\n }\n\n onDeleteSettingRequested(setting: any) {\n this.deleteSettingRequested.emit({\n setting: setting.setting,\n environment: this.settingValue.environment,\n config: this.settingValue.config\n });\n }\n\n onFormValuesChanged() {\n this.formValuesChanged.emit();\n }\n}\n","<configcat-setting-list [canDeleteSetting]=\"canDeleteSetting\" [onSave]=\"handleSave\"\n [loadSettingValues]=\"loadSettingValues\" [loadSegments]=\"loadSegments\" (loadSucceeded)=\"itemLoadSucceeded()\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\n [showEnvironmentName]=\"showEnvironmentName\" (formValuesChanged)=\"onFormValuesChanged()\" [productId]=\"productId\"\n [configId]=\"configId\" [environmentId]=\"environmentId\" [dashboardBasePath]=\"dashboardBasePath\">\n</configcat-setting-list>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { BaseComponent } from './base.component';\n\n@Component({\n selector: 'base-select',\n template: '<div></div>'\n})\nexport class BaseSelectComponent extends BaseComponent {\n\n @Input() customDropdown: boolean = false;\n\n @Output() dropdownOpened = new EventEmitter<boolean>();\n\n protected openChanged(event: any) {\n this.dropdownOpened.emit(event);\n }\n}\n\n\n","import { Component, OnInit, Input, OnChanges } from '@angular/core';\nimport { SettingModel } from 'ng-configcat-publicapi';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-setting-select',\n templateUrl: './setting-select.component.html',\n styleUrls: ['./setting-select.component.css']\n})\nexport class SettingSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n\n @Input() valueFormControl!: UntypedFormControl;\n @Input() configId!: string;\n settings: SettingModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.settings = [];\n this.reloadSettings();\n }\n\n ngOnChanges() {\n this.reloadSettings();\n }\n\n reloadSettings() {\n if (this.configId) {\n this.createSettingsService().getSettings(this.configId).subscribe(settings => {\n this.settings = settings;\n if (this.settings.length > 0) {\n this.valueFormControl.setValue(this.settings[0].settingId);\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n }\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\" *ngIf=\"settings\">\n <mat-label>Feature flag or setting</mat-label>\n <mat-select placeholder=\"Feature flag or setting\" [formControl]=\"valueFormControl\" name=\"value\"\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let setting of settings\" [value]=\"setting.settingId\" matTooltip=\"{{setting.name}}\"\n [matTooltipShowDelay]=\"1000\">{{setting.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input } from '@angular/core';\nimport { ProductModel } from 'ng-configcat-publicapi';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-product-select',\n templateUrl: './product-select.component.html',\n styleUrls: ['./product-select.component.css']\n})\nexport class ProductSelectComponent extends BaseSelectComponent implements OnInit {\n\n @Input() valueFormControl!: UntypedFormControl;\n products: ProductModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.products = [];\n this.createProductsService().getProducts().subscribe(products => {\n this.products = products;\n if (this.products.length > 0) {\n this.valueFormControl.setValue(this.products[0].productId, {\n emitEvent: true,\n emitModelToViewChange: true, emitViewToModelChange: true\n });\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Product</mat-label>\n <mat-select placeholder=\"Product\" [formControl]=\"valueFormControl\" name=\"productValue\"\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let product of products\" [value]=\"product.productId\" matTooltip=\"{{product.name}}\"\n [matTooltipShowDelay]=\"1000\">{{product.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input, OnChanges, forwardRef } from '@angular/core';\nimport { ConfigModel } from 'ng-configcat-publicapi';\nimport { NG_VALUE_ACCESSOR, UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-config-select',\n templateUrl: './config-select.component.html',\n styleUrls: ['./config-select.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ConfigSelectComponent),\n multi: true\n }\n ]\n})\nexport class ConfigSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n\n @Input() valueFormControl!: UntypedFormControl;\n @Input() productId!: string;\n configs: ConfigModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.configs = [];\n this.reloadConfigs();\n }\n\n ngOnChanges() {\n this.reloadConfigs();\n }\n\n reloadConfigs() {\n if (this.productId) {\n this.createConfigsService().getConfigs(this.productId).subscribe(configs => {\n this.configs = configs;\n if (this.configs.length > 0) {\n this.valueFormControl.setValue(this.configs[0].configId);\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n }\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\" *ngIf=\"configs\">\n <mat-label>Config</mat-label>\n <mat-select placeholder=\"Config\" [formControl]=\"valueFormControl\" name=\"value\" disableOptionCentering\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let config of configs\" [value]=\"config.configId\" matTooltip=\"{{config.name}}\"\n [matTooltipShowDelay]=\"1000\">{{config.name}}</mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input, OnChanges } from '@angular/core';\nimport { EnvironmentModel } from 'ng-configcat-publicapi';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-environment-select',\n templateUrl: './environment-select.component.html',\n styleUrls: ['./environment-select.component.css']\n})\nexport class EnvironmentSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n\n @Input() valueFormControl!: UntypedFormControl;\n @Input() productId!: string;\n environments: EnvironmentModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.environments = [];\n this.reloadEnvironments();\n }\n\n ngOnChanges() {\n this.reloadEnvironments();\n }\n\n reloadEnvironments() {\n if (this.productId) {\n this.createEnvironmentsService().getEnvironments(this.productId).subscribe(environments => {\n this.environments = environments;\n if (this.environments.length > 0) {\n this.valueFormControl.setValue(this.environments[0].environmentId);\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n }\n\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\" *ngIf=\"environments\">\n <mat-label>Environment</mat-label>\n <mat-select placeholder=\"Environment\" [formControl]=\"valueFormControl\" name=\"value\"\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let environment of environments\" [value]=\"environment.environmentId\"\n matTooltip=\"{{environment.name}}\" [matTooltipShowDelay]=\"1000\">{{environment.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormBuilder, Validators } from '@angular/forms';\nimport { PublicApiService } from '../_services';\nimport { FormHelper } from '../_services/form-helper';\n\n@Component({\n selector: 'configcat-authorization',\n templateUrl: './authorization.component.html',\n styleUrls: ['./authorization.component.scss']\n})\nexport class AuthorizationComponent implements OnInit {\n\n formGroup!: UntypedFormGroup;\n @Input() basePath = null;\n @Input() integrationName = 'ConfigCat Feature Flags';\n @Output() authorized = new EventEmitter();\n @Output() error = new EventEmitter();\n FormHelper = FormHelper;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private publicApiService: PublicApiService\n ) { }\n\n ngOnInit(): void {\n this.formGroup = this.formBuilder.group({\n basicAuthUsername: ['', Validators.required],\n basicAuthPassword: ['', Validators.required],\n });\n }\n\n onSubmit() {\n if (!this.formGroup.valid) {\n return;\n }\n\n const meService = this.publicApiService.createMeService(\n this.formGroup.controls.basicAuthUsername.value,\n this.formGroup.controls.basicAuthPassword.value,\n this.basePath);\n\n meService.getMe().subscribe(me => {\n this.authorized.emit({\n basicAuthUsername: this.formGroup.controls.basicAuthUsername.value,\n basicAuthPassword: this.formGroup.controls.basicAuthPassword.value,\n email: me.email,\n fullName: me.fullName\n });\n },\n () => {\n this.formGroup.setErrors({ invalidAuthorization: 'Invalid Basic auth user name or password' });\n this.error.emit();\n }\n );\n }\n\n getPublicApiUrl() {\n return this.publicApiService.getDashboardBasePath() + '/my-account/public-api-credentials';\n }\n}\n","<form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n <div class=\"container\">\n <div class=\"form\">\n <p>\n In order to use {{integrationName}} you have to authorize first with your ConfigCat Public API\n credentials.\n </p>\n <ul>\n <li>\n <a [href]=\"getPublicApiUrl()\" target=\"_blank\" rel=\"noopener noreferrer\">\n Get your Basic Auth user name and password</a> to access ConfigCat Public API.\n <br />\n <b>Note!</b> Your ConfigCat account's email address and password will not work here.\n </li>\n <li>\n Type your credentials here and click the Authorize button.\n </li>\n </ul>\n\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Basic auth user name</mat-label>\n <input matInput placeholder=\"Basic auth user name\" formControlName=\"basicAuthUsername\">\n <mat-error *ngIf=\"formGroup.controls.basicAuthUsername.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.basicAuthUsername)}}\n </mat-error>\n </mat-form-field>\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Basic auth password</mat-label>\n <input matInput placeholder=\"Basic auth password\" formControlName=\"basicAuthPassword\" type=\"password\"\n autocomplete=\"current-password\">\n <mat-error *ngIf=\"formGroup.controls.basicAuthPassword.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.basicAuthPassword)}}\n </mat-error>\n </mat-form-field>\n <div>\n <button mat-flat-button color=\"primary\" type=\"submit\" class=\"submit\">Authorize</button>\n <mat-error *ngIf=\"formGroup.invalid && formGroup.errors && formGroup.errors.invalidAuthorization\">\n {{formGroup.errors.invalidAuthorization}}</mat-error>\n </div>\n </div>\n </div>\n</form>","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-delete-setting-dialog',\n templateUrl: './delete-setting-dialog.component.html',\n styleUrls: ['./delete-setting-dialog.component.scss']\n})\nexport class DeleteSettingDialogComponent {\n\n constructor(public dialogRef: MatDialogRef<DeleteSettingDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: { system: string, ticketType: string }) { }\n\n remove() {\n this.dialogRef.close({ button: 'remove' });\n }\n\n cancel() {\n this.dialogRef.close({ button: 'cancel' });\n }\n\n}\n","<h1 mat-dialog-title>Remove Feature Flag or Setting from {{data.system}}</h1>\n<div mat-dialog-actions class=\"container\">\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"remove()\">Remove from {{data.ticketType}}</button>\n <button type=\"button\" mat-raised-button (click)=\"cancel()\">Cancel</button>\n</div>","\nexport enum UserComparator {\n // RolloutRuleComparatorV2Type.StringList\n SensitiveIsOneOf = 'sensitiveIsOneOf',\n SensitiveIsNotOneOf = 'sensitiveIsNotOneOf',\n SensitiveTextStartsWithAnyOf = 'sensitiveTextStartsWithAnyOf',\n SensitiveTextEndsWithAnyOf = 'sensitiveTextEndsWithAnyOf',\n SensitiveTextNotStartsWithAnyOf = 'sensitiveTextNotStartsWithAnyOf',\n SensitiveTextNotEndsWithAnyOf = 'sensitiveTextNotEndsWithAnyOf',\n SensitiveArrayContainsAnyOf = 'sensitiveArrayContainsAnyOf',\n SensitiveArrayDoesNotContainAnyOf = 'sensitiveArrayDoesNotContainAnyOf',\n\n IsOneOf = 'isOneOf',\n IsNotOneOf = 'isNotOneOf',\n TextStartsWithAnyOf = 'textStartsWithAnyOf',\n TextEndsWithAnyOf = 'textEndsWithAnyOf',\n TextNotStartsWithAnyOf = 'textNotStartsWithAnyOf',\n TextNotEndsWithAnyOf = 'textNotEndsWithAnyOf',\n ArrayContainsAnyOf = 'arrayContainsAnyOf',\n ArrayDoesNotContainAnyOf = 'arrayDoesNotContainAnyOf',\n ContainsAnyOf = 'containsAnyOf',\n DoesNotContainAnyOf = 'doesNotContainAnyOf',\n\n // RolloutRuleComparatorV2Type.String\n SensitiveTextEquals = 'sensitiveTextEquals',\n SensitiveTextDoesNotEqual = 'sensitiveTextDoesNotEqual',\n TextEquals = 'textEquals',\n TextDoesNotEqual = 'textDoesNotEqual',\n\n // RolloutRuleComparatorV2Type.Number\n NumberEquals = 'numberEquals',\n NumberDoesNotEqual = 'numberDoesNotEqual',\n NumberLess = 'numberLess',\n NumberLessOrEquals = 'numberLessOrEquals',\n NumberGreater = 'numberGreater',\n NumberGreaterOrEquals = 'numberGreaterOrEquals',\n\n // RolloutRuleComparatorV2Type.SemverList\n SemVerIsOneOf = 'semVerIsOneOf',\n SemVerIsNotOneOf = 'semVerIsNotOneOf',\n\n // RolloutRuleComparatorV2Type.Semver\n SemVerLess = 'semVerLess',\n SemVerLessOrEquals = 'semVerLessOrEquals',\n SemVerGreater = 'semVerGreater',\n SemVerGreaterOrEquals = 'semVerGreaterOrEquals',\n\n // RolloutRuleComparatorV2Type.DateTime\n DateTimeBefore = 'dateTimeBefore',\n DateTimeAfter = 'dateTimeAfter',\n}\n\nexport enum UserComparatorText {\n // RolloutRuleComparatorV2Type.StringList\n SensitiveIsOneOf = 'IS ONE OF (hashed)',\n SensitiveIsNotOneOf = 'IS NOT ONE OF (hashed)',\n SensitiveTextStartsWithAnyOf = 'STARTS WITH ANY OF (hashed)',\n SensitiveTextEndsWithAnyOf = 'ENDS WITH ANY OF (hashed)',\n SensitiveTextNotStartsWithAnyOf = 'NOT STARTS WITH ANY OF (hashed)',\n SensitiveTextNotEndsWithAnyOf = 'NOT ENDS WITH ANY OF (hashed)',\n SensitiveArrayContainsAnyOf = 'ARRAY CONTAINS ANY OF (hashed)',\n SensitiveArrayDoesNotContainAnyOf = 'ARRAY NOT CONTAINS ANY OF (hashed)',\n\n IsOneOf = 'IS ONE OF (cleartext)',\n IsNotOneOf = 'IS NOT ONE OF (cleartext)',\n TextStartsWithAnyOf = 'STARTS WITH ANY OF (cleartext)',\n TextEndsWithAnyOf = 'ENDS WITH ANY OF (cleartext)',\n TextNotStartsWithAnyOf = 'NOT STARTS WITH ANY OF (cleartext)',\n TextNotEndsWithAnyOf = 'NOT ENDS WITH ANY OF (cleartext)',\n ArrayContainsAnyOf = 'ARRAY CONTAINS ANY OF (cleartext)',\n ArrayDoesNotContainAnyOf = 'ARRAY NOT CONTAINS ANY OF (cleartext)',\n ContainsAnyOf = 'CONTAINS ANY OF (cleartext)',\n DoesNotContainAnyOf = 'NOT CONTAINS ANY OF (cleartext)',\n\n // RolloutRuleComparatorV2Type.String\n SensitiveTextEquals = 'EQUALS (hashed)',\n SensitiveTextDoesNotEqual = 'NOT EQUALS (hashed)',\n TextEquals = 'EQUALS (cleartext)',\n TextDoesNotEqual = 'NOT EQUALS (cleartext)',\n\n // RolloutRuleComparatorV2Type.Number\n NumberEquals = '= (number)',\n NumberDoesNotEqual = '!= (number)',\n NumberLess = '< (number)',\n NumberLessOrEquals = '<= (number)',\n NumberGreater = '> (number)',\n NumberGreaterOrEquals = '>= (number)',\n\n // RolloutRuleComparatorV2Type.SemverList\n SemVerIsOneOf = 'IS ONE OF (semver)',\n SemVerIsNotOneOf = 'IS NOT ONE OF (semver)',\n\n // RolloutRuleComparatorV2Type.Semver\n SemVerLess = '< (semver)',\n SemVerLessOrEquals = '<= (semver)',\n SemVerGreater = '> (semver)',\n SemVerGreaterOrEquals = '>= (semver)',\n\n // RolloutRuleComparatorV2Type.DateTime\n DateTimeBefore = 'BEFORE (UTC datetime)',\n DateTimeAfter = 'AFTER (UTC datetime)',\n}\n\nexport enum UserComparatorType {\n StringList = 0,\n String = 1,\n Number = 2,\n SemverList = 3,\n Semver = 4,\n DateTime = 5\n}\n","import { Injectable } from \"@angular/core\";\nimport { FormArray, FormControl, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\nimport {\n UserComparator, UserComparatorType, SettingType,\n IComparisonValueModel, IComparisonValueListModel,\n IFeatureFlagLimitations,\n ComparisonValueForm, ComparisonValueListForm,\n ConditionForm,\n PrerequisiteFlagConditionForm,\n IPrerequisiteSetting,\n PercentageOptionForm,\n SegmentConditionForm,\n TargetingRuleForm,\n UpdateSettingValueForm, UserConditionForm, ValueForm,\n PrerequisiteComparator, IConditionModel, IPrerequisiteFlagConditionModel, ISegmentConditionModel, IUserConditionModel,\n IValueModel, ITargetingRuleModel, IPercentageOptionModel, ISettingValueModel\n} from \"../bootstrap\";\nimport { valid } from 'semver';\nimport { percentageRegex, wholeNumberRegex } from \"../_services/form-helper\";\n\n@Injectable()\nexport class FormGenerator {\n public generateSettingValuesFormGroup(model: ISettingValueModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<UpdateSettingValueForm> {\n return new FormGroup<UpdateSettingValueForm>({\n defaultValue: this.generateValueFormGroup(model.defaultValue, model.setting.settingType, readOnly, featureFlagLimitations),\n percentageEvaluationAttribute: this.generatePercentageEvaluationAttributeFormControl(model.percentageEvaluationAttribute, readOnly),\n targetingRules: new FormArray<FormGroup<TargetingRuleForm>>(\n model.targetingRules.map(ft => this.generateTargetingRuleFormGroup(ft, model.setting.settingType, readOnly, settings, featureFlagLimitations))\n )\n });\n }\n\n public generatePercentageEvaluationAttributeFormControl(percentageEvaluationAttribute: string, readOnly: boolean) {\n return new FormControl({ value: percentageEvaluationAttribute, disabled: readOnly }, { validators: [this.validateEmptyString, Validators.maxLength(1000)] })\n }\n\n public generateTargetingRuleFormGroup(model: ITargetingRuleModel, settingType: SettingType, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<TargetingRuleForm> {\n const conditions = new FormArray<FormGroup<ConditionForm>>(\n model.conditions.map(tr => this.generateConditionFormGroup(tr, readOnly, settings, featureFlagLimitations))\n )\n\n if (model.percentageOptions?.length > 0) {\n return new FormGroup<TargetingRuleForm>({\n conditions,\n percentageOptions: new FormArray<FormGroup<PercentageOptionForm>>(\n model.percentageOptions.map(pr => this.generatePercentageOptionFormGroup(pr, settingType, readOnly, featureFlagLimitations)),\n [this.validatePercentageSum]\n )\n });\n } else if (model.value) {\n return new FormGroup<TargetingRuleForm>({\n conditions,\n value: this.generateValueFormGroup(model.value, settingType, readOnly, featureFlagLimitations)\n });\n }\n\n throw Error(\"Invalid model\");\n }\n\n public generateTargetingRuleWithEmptyPercentageOptions(settingType: SettingType, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<TargetingRuleForm> {\n return this.generateTargetingRuleFormGroup({\n conditions: [],\n percentageOptions: this.getEmptyPercentageOptions(settingType)\n }, settingType, readOnly, settings, featureFlagLimitations);\n }\n\n public getEmptyPercentageOptions(settingType: SettingType): IPercentageOptionModel[] {\n switch (settingType) {\n case SettingType.Boolean:\n return [\n { percentage: 50, value: { boolValue: true } },\n { percentage: 50, value: { boolValue: false } }\n ];\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return [\n { percentage: 50, value: {} },\n { percentage: 50, value: {} },\n ];\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n public generatePercentageOptionFormGroup(model: IPercentageOptionModel, settingType: SettingType, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<PercentageOptionForm> {\n return new FormGroup<PercentageOptionForm>({\n percentage: new FormControl({ value: model.percentage, disabled: readOnly }, { nonNullable: true, validators: [this.validateNumberNan, Validators.required, Validators.min(0), Validators.max(100), Validators.pattern(percentageRegex)] }),\n value: this.generateValueFormGroup(model.value, settingType, readOnly || settingType === SettingType.Boolean, featureFlagLimitations),\n })\n }\n\n public generateConditionFormGroup(model: IConditionModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ConditionForm> {\n if (model.userCondition) {\n return new FormGroup<ConditionForm>({\n userCondition: this.generateUserConditionFormGroup(model.userCondition, readOnly, featureFlagLimitations)\n });\n } else if (model.segmentCondition) {\n return new FormGroup<ConditionForm>({\n segmentCondition: this.generateSegmentConditionFormGroup(model.segmentCondition, readOnly)\n });\n } else if (model.prerequisiteFlagCondition) {\n return new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: this.generatePrerequisiteFlagConditionFormGroup(model.prerequisiteFlagCondition, readOnly, settings, featureFlagLimitations)\n });\n } else {\n throw new Error('')\n }\n }\n\n public generateUserConditionFormGroup(value: IUserConditionModel, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<UserConditionForm> {\n return new FormGroup<UserConditionForm>({\n comparisonAttribute: new FormControl({ value: value.comparisonAttribute, disabled: readOnly }, { nonNullable: true, validators: [Validators.required, Validators.maxLength(1000)] }),\n comparator: new FormControl({ value: value.comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparisonValue: this.generateComparisonValueFormGroup(value.comparisonValue, value.comparator, readOnly, featureFlagLimitations)\n });\n }\n\n public generateSegmentConditionFormGroup(value: ISegmentConditionModel, readOnly: boolean): FormGroup<SegmentConditionForm> {\n return new FormGroup<SegmentConditionForm>({\n segmentId: new FormControl({ value: value.segmentId, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl({ value: value.comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n });\n }\n\n public generatePrerequisiteFlagConditionFormGroup(value: IPrerequisiteFlagConditionModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<PrerequisiteFlagConditionForm> {\n const setting = settings.filter(s => s.settingId == value.prerequisiteSettingId)[0];\n if (!setting) {\n throw new Error('Could not find prerequisite setting');\n }\n if (setting.settingType === SettingType.Boolean) {\n // In case of a boolean prerequisite setting, we are enforcing a 'True' prerequisiteComparisonValue \n // so we can simplify the UI with a simple 'Is true' or 'Is false' select.\n // 'Is true' = PrerequisiteComparator.Equals TRUE\n // 'Is false' = PrerequisiteComparator.DoesNotEqual TRUE\n let comparator = value.comparator;\n if (!value.prerequisiteComparisonValue) {\n // If the prerequisiteComparisonValue is false somehow (e.g. Public Management API), we should negate the comparator.\n comparator = comparator === PrerequisiteComparator.Equals ? PrerequisiteComparator.DoesNotEqual : PrerequisiteComparator.Equals;\n }\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl({ value: value.prerequisiteSettingId, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl({ value: comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n prerequisiteComparisonValue: this.generateValueFormGroup({ boolValue: true }, setting.settingType, readOnly, featureFlagLimitations)\n });\n } else {\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl({ value: value.prerequisiteSettingId, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl({ value: value.comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n prerequisiteComparisonValue: this.generateValueFormGroup(value.prerequisiteComparisonValue, setting.settingType, readOnly, featureFlagLimitations)\n });\n }\n }\n\n public generateEmptyPrerequisiteFlagConditionFormGroup(featureFlagLimitations: IFeatureFlagLimitations): FormGroup<PrerequisiteFlagConditionForm> {\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl(null, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl(PrerequisiteComparator.Equals, { nonNullable: true, validators: [Validators.required] }),\n prerequisiteComparisonValue: this.generateValueFormGroup({ boolValue: true }, SettingType.Boolean, false, featureFlagLimitations)\n });\n }\n\n public getNextIndex(formArray: FormArray<FormGroup<ComparisonValueListForm>>) {\n if (formArray.controls.length === 0) {\n return 0;\n }\n return Math.max(...formArray.controls.map(c => c.controls.index.value)) + 1;\n }\n\n public generateComparisonValueListFormGroup(listValue: IComparisonValueListModel, readOnly: boolean, validators: ValidatorFn[], index: number) {\n return new FormGroup<ComparisonValueListForm>({\n value: new FormControl({ value: listValue.value, disabled: readOnly }, { nonNullable: true, validators }),\n hint: new FormControl({ value: listValue.hint, disabled: readOnly }, [Validators.maxLength(1500)]),\n // The index column is generated on the first generation by default or by the getNextIndex() if a value is added to the listvalue. It is required so we can delete the rows on the poput editor.\n index: new FormControl({ value: index, disabled: true })\n });\n }\n\n public generateComparisonValueFormGroup(value: IComparisonValueModel, comparator: UserComparator, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ComparisonValueForm> {\n switch (this.getComparisonValueType(comparator)) {\n case UserComparatorType.String:\n return new FormGroup<ComparisonValueForm>({\n stringValue: new FormControl({ value: value.stringValue, disabled: readOnly }, { nonNullable: true, validators: this.getComparisonValueStringValidators(featureFlagLimitations) })\n });\n case UserComparatorType.StringList:\n return new FormGroup<ComparisonValueForm>({\n listValue: this.generateComparisonValueListValueArray(value.listValue, readOnly, featureFlagLimitations, this.getComparisonValueStringListItemValidators(featureFlagLimitations))\n });\n\n case UserComparatorType.Number:\n return new FormGroup<ComparisonValueForm>({\n doubleValue: new FormControl({ value: value.doubleValue, disabled: readOnly },\n // eslint-disable-next-line @typescript-eslint/no-loss-of-precision\n { nonNullable: true, validators: [this.validateNumberNan, Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)] })\n });\n\n case UserComparatorType.Semver:\n return new FormGroup<ComparisonValueForm>({\n stringValue: new FormControl({ value: value.stringValue, disabled: readOnly }, { nonNullable: true, validators: this.getComparisonValueSemverValidators(featureFlagLimitations) })\n });\n case UserComparatorType.SemverList:\n return new FormGroup<ComparisonValueForm>({\n listValue: this.generateComparisonValueListValueArray(value.listValue, readOnly, featureFlagLimitations, this.getComparisonValueSemverListItemValidators(featureFlagLimitations))\n });\n\n case UserComparatorType.DateTime:\n return new FormGroup<ComparisonValueForm>({\n doubleValue: new FormControl({ value: value.doubleValue, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] })\n });\n\n default: throw new Error('Invalid comparator');\n }\n }\n\n public generateComparisonValueListValueArray(listValue: IComparisonValueListModel[], readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations, itemValidators: ValidatorFn[]) {\n return new FormArray<FormGroup<ComparisonValueListForm>>(\n (listValue ?? []).map((lv, index) => { return this.generateComparisonValueListFormGroup(lv, readOnly, itemValidators, index); }),\n [Validators.required, Validators.minLength(1), Validators.maxLength(featureFlagLimitations.maxComparisonValueListLength)]\n )\n }\n\n public getComparisonValueStringValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength)];\n }\n\n public getComparisonValueStringListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength)];\n }\n\n public getComparisonValueSemverValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength), this.validateSemVer]\n }\n\n public getComparisonValueSemverListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength), this.validateSemVer]\n }\n\n public generateDefaultValue(settingType: SettingType): IValueModel {\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: false };\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return {};\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n public generateDefaultValueFormGroup(settingType: SettingType, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ValueForm> {\n return this.generateValueFormGroup(this.generateDefaultValue(settingType), settingType, readOnly, featureFlagLimitations);\n }\n\n public generateValueFormGroup(value: IValueModel, settingType: SettingType, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ValueForm> {\n switch (settingType) {\n case SettingType.Boolean:\n return new FormGroup<ValueForm>({\n boolValue: new FormControl({ value: value.boolValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n case SettingType.String:\n return new FormGroup<ValueForm>({\n stringValue: new FormControl({ value: value.stringValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n case SettingType.Int:\n return new FormGroup<ValueForm>({\n intValue: new FormControl({ value: value.intValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n case SettingType.Double:\n return new FormGroup<ValueForm>({\n doubleValue: new FormControl({ value: value.doubleValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n public getComparisonValueType(comparator: UserComparator): UserComparatorType {\n switch (comparator) {\n\n case UserComparator.SensitiveTextEquals:\n case UserComparator.SensitiveTextDoesNotEqual:\n case UserComparator.TextEquals:\n case UserComparator.TextDoesNotEqual:\n return UserComparatorType.String;\n\n case UserComparator.SensitiveIsOneOf:\n case UserComparator.SensitiveIsNotOneOf:\n case UserComparator.SensitiveTextStartsWithAnyOf:\n case UserComparator.SensitiveTextEndsWithAnyOf:\n case UserComparator.SensitiveTextNotStartsWithAnyOf:\n case UserComparator.SensitiveTextNotEndsWithAnyOf:\n case UserComparator.SensitiveArrayContainsAnyOf:\n case UserComparator.SensitiveArrayDoesNotContainAnyOf:\n case UserComparator.IsOneOf:\n case UserComparator.IsNotOneOf:\n case UserComparator.TextStartsWithAnyOf:\n case UserComparator.TextEndsWithAnyOf:\n case UserComparator.TextNotStartsWithAnyOf:\n case UserComparator.TextNotEndsWithAnyOf:\n case UserComparator.ArrayContainsAnyOf:\n case UserComparator.ArrayDoesNotContainAnyOf:\n case UserComparator.ContainsAnyOf:\n case UserComparator.DoesNotContainAnyOf:\n return UserComparatorType.StringList;\n\n case UserComparator.NumberEquals:\n case UserComparator.NumberDoesNotEqual:\n case UserComparator.NumberLess:\n case UserComparator.NumberLessOrEquals:\n case UserComparator.NumberGreater:\n case UserComparator.NumberGreaterOrEquals:\n return UserComparatorType.Number;\n\n case UserComparator.SemVerIsOneOf:\n case UserComparator.SemVerIsNotOneOf:\n return UserComparatorType.SemverList;\n\n case UserComparator.SemVerGreater:\n case UserComparator.SemVerGreaterOrEquals:\n case UserComparator.SemVerLess:\n case UserComparator.SemVerLessOrEquals:\n return UserComparatorType.Semver;\n\n case UserComparator.DateTimeBefore:\n case UserComparator.DateTimeAfter:\n return UserComparatorType.DateTime;\n\n default:\n throw new Error('Invalid comparator');\n }\n }\n\n\n getValidatorsForSettingType(settingType: SettingType, featureFlagLimitations: IFeatureFlagLimitations): ValidatorFn[] {\n switch (settingType) {\n case SettingType.Int:\n return [this.validateNumberNan, Validators.required,\n Validators.min(-2147483648), Validators.max(2147483647), Validators.pattern(wholeNumberRegex)];\n case SettingType.Double:\n // eslint-disable-next-line @typescript-eslint/no-loss-of-precision\n return [this.validateNumberNan, Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\n case SettingType.String:\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxStringFlagValueLength ?? 100000)];\n case SettingType.Boolean:\n return [Validators.required];\n default:\n return [];\n }\n }\n\n validateNumberNan(c: FormControl<number>) {\n if (c.value === null || isNaN(c.value)) {\n return {\n validateNumberNan: {\n valid: false\n }\n };\n }\n return null;\n }\n\n validateSemVer(c: FormControl<string>) {\n if (valid(c.value) === null) {\n return {\n validateSemVer: {\n valid: false\n }\n };\n }\n return null;\n }\n\n validateEmptyString(c: FormControl<string>) {\n if (c.value === '') {\n return {\n required: true\n };\n }\n return null;\n }\n\n validatePercentageSum(c: FormArray<FormGroup<PercentageOptionForm>>) {\n if (c?.controls.map(i => i.controls.percentage.value).reduce((a, b) => { return a + b }, 0) !== 100) {\n return {\n validatePercentageSum: {\n valid: false\n }\n };\n }\n return null;\n }\n\n isPercentageOnlyTargetingRule(formGroup: FormGroup<TargetingRuleForm>): boolean {\n return !formGroup.controls.value\n && !formGroup.controls.conditions.length\n && !!formGroup.controls.percentageOptions?.length;\n }\n\n addComparisonValueListValueItems(\n userComparator: UserComparator,\n listValueFormArray: FormArray<FormGroup<ComparisonValueListForm>>,\n comparisonValueList: IComparisonValueListModel[],\n featureFlagLimitations: IFeatureFlagLimitations) {\n const validators =\n this.getComparisonValueType(userComparator) === UserComparatorType.SemverList\n ? this.getComparisonValueSemverListItemValidators(featureFlagLimitations)\n : this.getComparisonValueStringListItemValidators(featureFlagLimitations);\n\n const maxIndex = this.getNextIndex(listValueFormArray);\n\n comparisonValueList.forEach(\n (comparisonValueListItem, index) => {\n const formGroup = this.generateComparisonValueListFormGroup(comparisonValueListItem, false, validators, maxIndex + index);\n formGroup.updateValueAndValidity();\n formGroup.markAsDirty();\n formGroup.markAllAsTouched();\n listValueFormArray.push(formGroup, { emitEvent: false });\n });\n\n listValueFormArray.updateValueAndValidity();\n listValueFormArray.markAsTouched();\n listValueFormArray.markAsDirty();\n }\n}\n","export class DateHelper {\n public static addDays(date: Date, value: number): void {\n // https://stackoverflow.com/a/3674550/8656352\n date.setDate(date.getDate() + value);\n }\n\n public static daysBetweenDates = function(from: Date, to: Date): number {\n if (!from || !to) {\n return 0;\n }\n return (new Date(to).getTime() - new Date(from).getTime()) / (1000 * 60 * 60 * 24);\n }\n\n public static formatDate(date: Date, formatString: string): string {\n if (!date) {\n return '';\n }\n const dateObj = new Date(date);\n \n return Object.entries({\n YYYY: dateObj.getFullYear(),\n YY: dateObj.getFullYear().toString().substring(2),\n yyyy: dateObj.getFullYear(),\n yy: dateObj.getFullYear().toString().substring(2),\n MMMM: dateObj.toLocaleString('default', { month: 'long' }),\n MMM: dateObj.toLocaleString('default', { month: 'short' }),\n MM: (dateObj.getMonth() + 1).toString().padStart(2, '0'),\n M: dateObj.getMonth() + 1,\n DDDD: dateObj.toLocaleDateString('default', { weekday: 'long' }),\n DDD: dateObj.toLocaleDateString('default', { weekday: 'short' }),\n DD: dateObj.getDate().toString().padStart(2, '0'),\n D: dateObj.getDate(),\n dddd: dateObj.toLocaleDateString('default', { weekday: 'long' }),\n ddd: dateObj.toLocaleDateString('default', { weekday: 'short' }),\n dd: dateObj.getDate().toString().padStart(2, '0'),\n d: dateObj.getDate(),\n HH: dateObj.getHours().toString().padStart(2, '0'), // military\n H: dateObj.getHours().toString(), // military\n hh: (dateObj.getHours() % 12).toString().padStart(2, '0'),\n h: (dateObj.getHours() % 12).toString(),\n mm: dateObj.getMinutes().toString().padStart(2, '0'),\n m: dateObj.getMinutes(),\n SS: dateObj.getSeconds().toString().padStart(2, '0'),\n S: dateObj.getSeconds(),\n ss: dateObj.getSeconds().toString().padStart(2, '0'),\n s: dateObj.getSeconds(),\n TTT: dateObj.getMilliseconds().toString().padStart(3, '0'),\n ttt: dateObj.getMilliseconds().toString().padStart(3, '0'),\n AMPM: dateObj.getHours() < 13 ? 'AM' : 'PM',\n ampm: dateObj.getHours() < 13 ? 'am' : 'pm',\n }).reduce((acc, entry) => {\n return acc.replace(entry[0], entry[1].toString())\n }, formatString)\n }\n\n public static offsetDate(date: Date, offsetMins: number) : Date {\n return new Date(date.getTime() + offsetMins * 60000);\n }\n}","import { Injectable } from \"@angular/core\";\nimport { NativeDateAdapter } from \"@angular/material/core\";\nimport { DateHelper } from \"./date-helper\";\n\n@Injectable()\nexport class AppDateAdapter extends NativeDateAdapter {\n format(date: Date): string {\n if (!date) {\n return '';\n }\n return DateHelper.formatDate(date, 'yyyy. MM. dd');\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-confirmation-dialog',\n templateUrl: './confirmation-dialog.html'\n})\nexport class ConfirmationDialogComponent {\n\n constructor(\n public dialogRef: MatDialogRef<ConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n yes() {\n this.dialogRef.close('yes');\n }\n\n cancel() {\n this.dialogRef.close('cancel');\n }\n}\n\nexport interface DialogData {\n title: string;\n body: string;\n yesButtonLabel: string;\n noButtonLabel: string;\n buttonColor: string;\n hideNoButton?: boolean;\n}","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<br>\n<div mat-dialog-actions>\n <button type=\"button\" style=\"margin-right: 10px;\" mat-flat-button\n [color]=\"data.buttonColor ? data.buttonColor : 'primary'\" (click)=\"yes()\"\n data-robot=\"dialogYes\">{{data.yesButtonLabel ? data.yesButtonLabel : 'Yes'}}</button>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\" data-robot=\"dialogNo\"\n *ngIf=\"!data.hideNoButton\">{{data.noButtonLabel ?\n data.noButtonLabel : 'Cancel'}}</button>\n</div>","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-reroute-dialog',\n templateUrl: './reroute-dialog.html',\n styleUrls: ['./reroute-dialog.scss']\n})\nexport class RerouteDialogComponent {\n\n constructor(\n public dialogRef: MatDialogRef<RerouteDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n yes() {\n this.dialogRef.close('yes');\n }\n\n cancel() {\n this.dialogRef.close('cancel');\n }\n}\n\nexport interface DialogData {\n title: string;\n body: string;\n yesButtonLabel: string;\n yesButtonLink: string;\n noButtonLabel: string;\n buttonColor: string;\n hideNoButton?: boolean;\n}","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<br>\n<div mat-dialog-actions>\n <a href=\"{{data.yesButtonLink}}\" class=\"hidden-link\" target=\"_blank\" rel=\"noopener noreferrer\">\n <button type=\"button\" style=\"margin-right: 10px;\" mat-flat-button\n [color]=\"data.buttonColor ? data.buttonColor : 'primary'\" (click)=\"yes()\"\n data-robot=\"dialogYes\">{{data.yesButtonLabel ? data.yesButtonLabel : 'Yes'}}</button>\n </a>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\" data-robot=\"dialogNo\"\n *ngIf=\"!data.hideNoButton\">{{data.noButtonLabel ?\n data.noButtonLabel : 'Cancel'}}</button>\n</div>","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nexport interface InfoDialogData {\n title: string;\n body: string;\n secondaryButtonLabel: string;\n secondaryButtonAction: () => void;\n}\n\n@Component({\n selector: 'app-info-dialog',\n templateUrl: './info-dialog.html'\n})\nexport class InfoDialogComponent {\n\n constructor(\n public dialogRef: MatDialogRef<InfoDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: InfoDialogData\n ) {}\n\n ok() {\n this.dialogRef.close();\n }\n\n secondaryButtonAction() {\n this.data.secondaryButtonAction();\n this.dialogRef.close();\n }\n}\n","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<br>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"ok()\">Ok</button>\n <button type=\"button\" mat-stroked-button *ngIf=\"data.secondaryButtonLabel\" (click)=\"secondaryButtonAction()\">{{data.secondaryButtonLabel}}</button>\n</div>","import { Injectable } from \"@angular/core\";\nimport { IComparisonValueListModel } from \"../bootstrap\";\nimport Papa from 'papaparse';\n\nexport interface ComparisonValueListParseResult {\n error?: string;\n comparisonValueList: IComparisonValueListModel[];\n}\n\n@Injectable()\nexport class ComparisonValueListHelper {\n formatValuesAndHintAsJson(comparisonValueList: IComparisonValueListModel[]): string {\n return JSON.stringify(comparisonValueList, null, 2);\n }\n\n formatValuesAndHintAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueListItem => {\n return [\n this.formatCsvStringValue(comparisonValueListItem.value ?? ''),\n this.formatCsvStringValue(comparisonValueListItem.hint ?? '')\n ].join(',');\n });\n return data.join('\\r\\n');\n }\n\n formatValuesAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueList => this.formatCsvStringValue(comparisonValueList.value ?? ''));\n return data.join(',');\n }\n\n formatCsvStringValue(value: string): string {\n if (!value) {\n return \"\";\n }\n const escaped = value.replaceAll(\"\\\"\", \"\\\"\\\"\",);\n return \"\\\"\" + escaped + \"\\\"\";\n }\n\n parseValuesAndHintsFromJson(value: string): ComparisonValueListParseResult {\n if (value === '') {\n return { comparisonValueList: [] };\n }\n try {\n const parsed: IComparisonValueListModel[] = JSON.parse(value);\n return { comparisonValueList: parsed.filter(v => !!v.value) };\n } catch {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n }\n\n parseValuesAndHintsFromCsv(value: string): ComparisonValueListParseResult {\n if (value === '') {\n return { comparisonValueList: [] };\n }\n const parseResult = Papa.parse<string[]>(value, { delimiter: ',', skipEmptyLines: true });\n if (parseResult.errors?.length) {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n if (parseResult?.data?.length === 0) { return { comparisonValueList: [] }; }\n return { comparisonValueList: parseResult.data.map(p => <IComparisonValueListModel>{ value: p[0], hint: p[1] }).filter(v => !!v.value) };\n }\n\n parseValuesFromCsv(value: string): ComparisonValueListParseResult {\n if (value === '') {\n return { comparisonValueList: [] };\n }\n const parseResult = Papa.parse<string[]>(value + \",\", { delimiter: ',', skipEmptyLines: true });\n if (parseResult.errors?.length) {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n if (!parseResult?.data?.length) { return { comparisonValueList: [] }; }\n return { comparisonValueList: parseResult.data.flat().map(p => <IComparisonValueListModel>{ value: p }).filter(v => !!v.value) };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Injectable()\nexport class MessagingService {\n\n constructor(private snackBar: MatSnackBar) { }\n\n showErrorSnack(message = 'Something went wrong.', action = 'Dismiss', durationMs = 60000) {\n this.snackBar.open(\n `Ooops. ${message} Please try again or contact us.`,\n action,\n { duration: durationMs, panelClass: 'red-snackbar' }\n );\n }\n\n showSuccessSnack(message = 'Success.', action = null, durationMs = 2500) {\n this.snackBar.open(\n message, action, { duration: durationMs, panelClass: 'green-snackbar' }\n );\n }\n\n showWarningSnack(message = 'Success.', action = 'Dismiss', durationMs = 5000) {\n this.snackBar.open(\n message, action, { duration: durationMs, panelClass: 'yellow-snackbar' }\n );\n }\n\n dismissCurrentSnack() {\n this.snackBar.dismiss();\n }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Input, OnDestroy, OnInit, Output, ViewChild } from \"@angular/core\";\nimport { Ace, config, edit } from \"ace-builds/src-noconflict/ace\";\nimport \"ace-builds/src-noconflict/mode-json\";\nimport \"ace-builds/src-noconflict/theme-tomorrow\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n@Component({\n selector: 'app-ace-editor',\n templateUrl: './ace-editor.component.html',\n styleUrls: ['./ace-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AceEditorComponent),\n multi: true\n }\n ],\n preserveWhitespaces: false,\n})\nexport class AceEditorComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy {\n\n private aceEditor: Ace.Editor;\n private onChangeDisabled = false;\n private onChangeModel: any;\n private _value: any;\n\n @ViewChild(\"aceEditor\", { static: true }) private editor: ElementRef<HTMLElement>;\n @Input()\n set value(value: string) {\n const checked = this.transformBoundValue(value);\n if (this._value == checked) return;\n this._value = checked ? checked : this.produceDefaultValue();\n if (this.aceEditor) {\n this.writeJsonValue(this._value);\n }\n }\n\n @Input() readOnly: boolean;\n\n @Output() valueChange = new EventEmitter();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onChange = new EventEmitter<string>();\n\n ngOnInit(): void {\n config.setModuleUrl(\"ace/mode/json_worker\", \"assets/scripts/worker-json.js\");\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.init();\n }, 200);\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n private init() {\n this.aceEditor = edit(this.editor.nativeElement, {\n wrap: true,\n tabSize: 2,\n highlightActiveLine: true,\n theme: \"ace/theme/tomorrow\",\n fontSize: 14,\n value: this.formatValue(this._value),\n });\n this.aceEditor.setReadOnly(this.readOnly);\n this.aceEditor.session.setMode(\"ace/mode/json\");\n\n this.aceEditor.on(\"change\", () => {\n if (!this.onChangeDisabled) {\n this._value = this.produceOutput(this.aceEditor.getValue());\n if (this.onChangeModel) {\n this.onChangeModel(this._value);\n }\n this.onChange.emit(this._value);\n this.valueChange.emit(this._value);\n }\n });\n }\n\n private writeJsonValue(value: any) {\n this.onChangeDisabled = true;\n this.aceEditor.setValue(this.formatValue(value), -1);\n this.onChangeDisabled = false;\n }\n\n private formatValue(value: any): string {\n const parsed = this.parseJsonOrNull(value);\n return parsed ? JSON.stringify(parsed, null, 2) : value;\n }\n\n private produceDefaultValue() {\n return \"{}\";\n }\n\n private produceOutput(value: any) {\n const parsed = this.parseJsonOrNull(value);\n return parsed ? JSON.stringify(parsed) : value;\n }\n\n private destroy() {\n if (this.aceEditor) {\n this.aceEditor.destroy();\n }\n }\n\n private parseJsonOrNull(value: string) {\n try {\n const parsed = JSON.parse(value);\n if (parsed === Infinity) {\n return null;\n }\n return parsed;\n } catch (e) {\n return null;\n }\n }\n\n private transformBoundValue(value: any): string {\n if (typeof value === 'object' && value !== null) {\n return JSON.stringify(value);\n }\n return value;\n }\n\n // ControlValueAccessor\n writeValue(value: any) {\n this.value = value;\n }\n\n // ControlValueAccessor\n registerOnChange(fn: any) {\n this.onChangeModel = fn;\n }\n\n // ControlValueAccessor\n registerOnTouched() {\n /* unused */\n }\n}","<div class=\"ace-editor-container\" #aceEditor></div>","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, ValidatorFn } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\nimport { FormHelper } from '../../../../bootstrap';\n\nexport interface PopoutTextEditorDialogData {\n value: string;\n readOnly: boolean;\n validators: ValidatorFn[];\n maxValueLength: number;\n description: string;\n}\n\n@Component({\n selector: 'app-popout-text-editor-dialog',\n templateUrl: './popout-text-editor-dialog.component.html',\n styleUrls: ['./popout-text-editor-dialog.component.scss']\n})\nexport class PopoutTextEditorDialogComponent implements OnInit, OnDestroy {\n\n formControlSubscription: Subscription;\n jsonData: string;\n format = \"text\";\n formHelper = FormHelper;\n control: FormControl<string>;\n\n constructor(public dialogRef: MatDialogRef<PopoutTextEditorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: PopoutTextEditorDialogData) {\n }\n\n ngOnInit(): void {\n this.jsonData = this.data.value;\n this.control = new FormControl<string>(\n { value: this.data.value, disabled: this.data.readOnly },\n { nonNullable: true, validators: [...this.data.validators] });\n\n if (!this.control.valid) {\n this.control.markAsTouched();\n }\n\n this.formControlSubscription = this.control.valueChanges.subscribe(value => {\n this.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.control.markAsDirty();\n this.control.markAsTouched();\n if (this.jsonData !== value) {\n this.jsonData = value;\n }\n });\n }\n\n onJsonChanged(value: string) {\n this.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.control.updateValueAndValidity();\n this.control.markAsTouched();\n this.control.markAsDirty();\n }\n\n ngOnDestroy() {\n if (this.control.dirty) {\n this.control.updateValueAndValidity();\n }\n if (this.formControlSubscription) {\n this.formControlSubscription.unsubscribe();\n this.formControlSubscription = null;\n }\n }\n\n set() {\n if (!this.control.valid) {\n this.control.markAllAsTouched();\n return;\n }\n\n this.dialogRef.close({ value: this.control.value });\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","<h2 mat-dialog-title>Advanced editor</h2>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n {{data.description}}\n </p>\n <mat-button-toggle-group [(ngModel)]=\"format\">\n <mat-button-toggle value=\"text\">Text</mat-button-toggle>\n <mat-button-toggle value=\"json\">JSON</mat-button-toggle>\n </mat-button-toggle-group>\n\n <mat-form-field *ngIf=\"format === 'text'\" appearance=\"outline\" class=\"editor-container editor-clear\"\n subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus [formControl]=\"control\" rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"26\"></textarea>\n <mat-error *ngIf=\"control.invalid\">\n {{formHelper.getErrorMessage(control)}}\n </mat-error>\n <mat-hint *ngIf=\"data.maxValueLength && (data.maxValueLength - control.value?.length > -1)\">\n Remaining characters:\n {{data.maxValueLength - control.value?.length}}</mat-hint>\n </mat-form-field>\n\n <div class=\"editor-container\" *ngIf=\"format === 'json'\">\n <app-ace-editor [(value)]=\"jsonData\" (onChange)=\"onJsonChanged($event)\"\n [readOnly]=\"data.readOnly\"></app-ace-editor>\n <span *ngIf=\"control.invalid\" class=\"error mat-mdc-form-field-error\">\n {{formHelper.getErrorMessage(control)}}</span>\n </div>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\"\n [disabled]=\"!control.touched || !control.valid\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" (click)=\"close()\">Close</button>\n</div>","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n FormHelper, ValueForm, SettingType,\n IFeatureFlagLimitations, FormGenerator, IFlagState\n} from '../../../../bootstrap';\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData } from '../popout-text-editor-dialog/popout-text-editor-dialog.component';\n\n@Component({\n selector: 'app-feature-flag-value',\n templateUrl: './feature-flag-value.component.html',\n styleUrls: [\n '../components.scss',\n '../../slider.scss',\n './feature-flag-value.component.scss'\n ]\n})\nexport class FeatureFlagValueComponent {\n @Input() formGroup: FormGroup<ValueForm>;\n @Input() flagState: IFlagState;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() isPrerequisite = false;\n @Input() tooltip: string;\n\n FormHelper = FormHelper;\n\n constructor(private dialog: MatDialog,\n private formGenerator: FormGenerator) {\n }\n\n expandText() {\n const dialogRef = this.dialog.open(PopoutTextEditorDialogComponent, {\n width: '800px',\n data: <PopoutTextEditorDialogData>{\n value: this.formGroup.controls.stringValue.value,\n readOnly: this.formGroup.controls.stringValue.disabled,\n validators: this.formGenerator.getValidatorsForSettingType(SettingType.String, this.featureFlagLimitations),\n maxValueLength: this.featureFlagLimitations.maxStringFlagValueLength ?? 100000,\n description: this.isPrerequisite\n ? 'Modify the text within the editor to change the prerequisite feature flag comparison value. The editor supports JSON syntax highlighting.'\n : 'Modify the text within the editor to change the feature flag value. The editor supports JSON syntax highlighting.'\n }\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data) {\n this.formGroup.controls.stringValue.setValue(data.value);\n this.formGroup.controls.stringValue.updateValueAndValidity();\n this.formGroup.controls.stringValue.markAsTouched();\n this.formGroup.controls.stringValue.markAsDirty();\n }\n });\n }\n}\n","<div class=\"targeting-rule-component smallest-form-field grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" *ngIf=\"formGroup.controls.stringValue\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.stringValue\" [matTooltip]=\"tooltip\"\n placeholder=\"Add text ...\" />\n <button matSuffix class=\"expand-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandText()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" *ngIf=\"formGroup.controls.intValue\">\n <input matInput type=\"number\" [formControl]=\"formGroup.controls.intValue\"\n digitOnly digitOnlyAllowNegatives=\"true\"\n inputDisplayNormalizer [matTooltip]=\"tooltip\" placeholder=\"Add number ...\" />\n <mat-error *ngIf=\"formGroup.controls.intValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.intValue)}}\n </mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" *ngIf=\"formGroup.controls.doubleValue\">\n <input matInput type=\"number\" [formControl]=\"formGroup.controls.doubleValue\" inputDisplayNormalizer\n [matTooltip]=\"tooltip\" placeholder=\"Add number ...\" />\n <mat-error *ngIf=\"formGroup.controls.doubleValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.doubleValue)}}\n </mat-error>\n </mat-form-field>\n <div *ngIf=\"formGroup.controls.boolValue\" class=\"bool\" [class.readonly]=\"flagState.readOnly\">\n <label class=\"switch\" [matTooltip]=\"tooltip\">\n <input type=\"checkbox\" [formControl]=\"formGroup.controls.boolValue\" />\n <span class=\"slider round\"></span>\n </label>\n </div>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport {\n FormHelper, IFlagState, IFeatureFlagLimitations,\n PercentageOptionForm, FormGenerator, SettingType\n} from '../../../../../bootstrap';\n\n@Component({\n selector: 'app-percentage-options',\n templateUrl: './percentage-options.component.html',\n styleUrls: [\n '../../components.scss',\n './percentage-options.component.scss',\n '../../chips.scss',\n '../../add-btn.scss'\n ]\n})\nexport class PercentageOptionsComponent {\n @Input() formArray: FormArray<FormGroup<PercentageOptionForm>>;\n @Input() flagState: IFlagState;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() showPercentageEvaluationAttribute: boolean;\n @Input() percentageEvaluationAttribute: string;\n @Input() isPercentageOnlyTargetingRule: boolean;\n\n @Output() lastPercentageOptionLeft = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() changePercentageEvaluationAttributeRequested = new EventEmitter();\n\n SettingType = SettingType;\n FormHelper = FormHelper;\n\n constructor(private formGenerator: FormGenerator) { }\n\n addOption() {\n if (this.formArray.length >= this.featureFlagLimitations.maxPercentageOptionCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n this.formArray.push(this.formGenerator.generatePercentageOptionFormGroup({\n percentage: 0,\n value: this.formGenerator.generateDefaultValue(this.flagState.settingValue.setting.settingType)\n }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations))\n this.formArray.markAsDirty();\n }\n\n remove(index: number): void {\n this.formArray.removeAt(index);\n this.formArray.markAsDirty();\n if (this.formArray.length < 2) {\n this.lastPercentageOptionLeft.emit();\n }\n }\n\n percentageChanged(index: number) {\n if (this.formArray.controls[index].value.percentage < 0) {\n this.formArray.controls[index].controls.percentage.setValue(0);\n }\n if (this.formArray.controls[index].value.percentage > 100) {\n this.formArray.controls[index].controls.percentage.setValue(100);\n }\n\n if (this.formArray.controls.length === 2) {\n this.formArray.controls[1 - index].controls.percentage\n .setValue(100 - this.formArray.controls[index].value.percentage);\n }\n }\n\n changePercentageEvaluationAttribute() {\n this.changePercentageEvaluationAttributeRequested.emit();\n }\n\n getPercentageEvaluationAttribute() {\n return !this.percentageEvaluationAttribute ? 'Identifier' : this.percentageEvaluationAttribute;\n }\n}\n","<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>","import { Component, Inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UserComparator } from '../../../../../../../bootstrap';\n\nenum ComparatorGroup {\n Text = 0,\n Number = 1,\n Semver = 2,\n DateTime = 3,\n Array = 4\n}\n\ninterface ComparatorItem {\n value: UserComparator,\n sensitiveValue?: UserComparator,\n label: string,\n description: string,\n group: ComparatorGroup,\n}\n\n@Component({\n selector: 'app-comparator-dialog',\n templateUrl: './comparator-dialog.component.html',\n styleUrls: ['./comparator-dialog.component.scss'],\n})\nexport class ComparatorDialogComponent implements OnInit {\n\n ComparatorGroup = ComparatorGroup;\n selectedGroup = ComparatorGroup.Text;\n selectedComparator = UserComparator.TextEquals;\n isConfidential = true;\n lastConfidentialValue = true;\n confidentialEnabled = true;\n UserComparator = UserComparator;\n\n comparisonAttributeTooltip = \"User Object's value passed to the SDK (Comparison attribute)\";\n comparisonValueTooltip = \"Comparison value set on the ConfigCat Dashboard\";\n\n comparators: ComparatorItem[] = [\n { value: UserComparator.TextEquals, sensitiveValue: UserComparator.SensitiveTextEquals, group: ComparatorGroup.Text, label: 'EQUALS', description: \"Checks whether the User Object's comparison attribute passed to the SDK is equal to the comparison value set on the ConfigCat Dashboard\" },\n { value: UserComparator.TextDoesNotEqual, sensitiveValue: UserComparator.SensitiveTextDoesNotEqual, group: ComparatorGroup.Text, label: 'NOT EQUALS', description: \"Checks whether the User Object's comparison attribute passed to the SDK is not equal to the comparison value\" },\n { value: UserComparator.IsOneOf, sensitiveValue: UserComparator.SensitiveIsOneOf, group: ComparatorGroup.Text, label: 'IS ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK is equal to any of the comparison values\" },\n { value: UserComparator.IsNotOneOf, sensitiveValue: UserComparator.SensitiveIsNotOneOf, group: ComparatorGroup.Text, label: 'IS NOT ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK is not equal to any of the comparison values\" },\n { value: UserComparator.TextStartsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextStartsWithAnyOf, group: ComparatorGroup.Text, label: 'STARTS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK starts with any of the comparison values\" },\n { value: UserComparator.TextNotStartsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextNotStartsWithAnyOf, group: ComparatorGroup.Text, label: 'NOT STARTS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK does not start with any of the comparison values\" },\n { value: UserComparator.TextEndsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextEndsWithAnyOf, group: ComparatorGroup.Text, label: 'ENDS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK ends with any of the comparison values\" },\n { value: UserComparator.TextNotEndsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextNotEndsWithAnyOf, group: ComparatorGroup.Text, label: 'NOT ENDS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK does not end with any of the comparison values\" },\n { value: UserComparator.ContainsAnyOf, group: ComparatorGroup.Text, label: 'CONTAINS ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK contains any comparison values as a substring\" },\n { value: UserComparator.DoesNotContainAnyOf, group: ComparatorGroup.Text, label: 'DOES NOT CONTAIN ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK does not contain any comparison values as a substring\" },\n\n { value: UserComparator.NumberEquals, group: ComparatorGroup.Number, label: '= (EQUALS)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is equal to the comparison value\" },\n { value: UserComparator.NumberDoesNotEqual, group: ComparatorGroup.Number, label: '!= (NOT EQUALS)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is not equal to the comparison value\" },\n { value: UserComparator.NumberLess, group: ComparatorGroup.Number, label: '< (LESS THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is less than the comparison value\" },\n { value: UserComparator.NumberLessOrEquals, group: ComparatorGroup.Number, label: '<= (LESS THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is less than or equal to the comparison value\" },\n { value: UserComparator.NumberGreater, group: ComparatorGroup.Number, label: '> (GREATER THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is greater than the comparison value\" },\n { value: UserComparator.NumberGreaterOrEquals, group: ComparatorGroup.Number, label: '>= (GRATER THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is greater than or equal to the comparison value\" },\n\n { value: UserComparator.SemVerIsOneOf, group: ComparatorGroup.Semver, label: 'IS ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is equal to any of the comparison values\" },\n { value: UserComparator.SemVerIsNotOneOf, group: ComparatorGroup.Semver, label: 'IS NOT ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is not equal to any of the comparison values\" },\n { value: UserComparator.SemVerLess, group: ComparatorGroup.Semver, label: '< (LESS THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is less than the comparison value\" },\n { value: UserComparator.SemVerLessOrEquals, group: ComparatorGroup.Semver, label: '<= (LESS THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is less than or equal to the comparison value\" },\n { value: UserComparator.SemVerGreater, group: ComparatorGroup.Semver, label: '> (GREATER THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is greater than the comparison value\" },\n { value: UserComparator.SemVerGreaterOrEquals, group: ComparatorGroup.Semver, label: '>= (GRATER THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is greater than or equal to the comparison value\" },\n\n { value: UserComparator.DateTimeBefore, group: ComparatorGroup.DateTime, label: 'BEFORE (UTC)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as the seconds elapsed since Unix Epoch) is less than the comparison value\" },\n { value: UserComparator.DateTimeAfter, group: ComparatorGroup.DateTime, label: 'AFTER (UTC)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as the seconds elapsed since Unix Epoch) is greater than the comparison value.value\" },\n\n { value: UserComparator.ArrayContainsAnyOf, group: ComparatorGroup.Array, sensitiveValue: UserComparator.SensitiveArrayContainsAnyOf, label: 'ARRAY CONTAINS ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a string list) contains any of the comparison values\" },\n { value: UserComparator.ArrayDoesNotContainAnyOf, group: ComparatorGroup.Array, sensitiveValue: UserComparator.SensitiveArrayDoesNotContainAnyOf, label: 'ARRAY NOT CONTAINS ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a string list) does not contain any of the comparison values\" },\n ]\n\n constructor(\n public dialogRef: MatDialogRef<ComparatorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit(): void {\n const selected = this.comparators.find(c => c.value === this.data.selectedComparator || c.sensitiveValue === this.data.selectedComparator);\n this.selectedGroup = selected.group;\n this.selectedComparator = selected.value;\n this.isConfidential = this.data.selectedComparator === selected.sensitiveValue;\n this.lastConfidentialValue = !selected.sensitiveValue ? true : this.isConfidential;\n this.confidentialEnabled = !!selected.sensitiveValue;\n }\n\n listComparators(group: ComparatorGroup): ComparatorItem[] {\n return this.comparators.filter(c => c.group === group);\n }\n\n changeGroup(group: ComparatorGroup): void {\n this.selectedGroup = group;\n }\n\n confidentialChange(confidential: boolean): void {\n if (!this.confidentialEnabled || this.data.readOnly) {\n return;\n }\n this.isConfidential = this.lastConfidentialValue = confidential;\n }\n\n comparatorChange(comp: UserComparator): void {\n if (this.data.readOnly) {\n return;\n }\n\n this.selectedComparator = comp;\n const selected = this.comparators.find(c => c.value === comp || c.sensitiveValue === comp);\n this.confidentialEnabled = !!selected.sensitiveValue;\n if (!this.confidentialEnabled) {\n this.isConfidential = false;\n } else {\n this.isConfidential = this.lastConfidentialValue;\n }\n }\n\n set(): void {\n const selected = this.comparators.find(c => c.value === this.selectedComparator || c.sensitiveValue === this.selectedComparator);\n const result = this.isConfidential && selected.sensitiveValue ? selected.sensitiveValue : selected.value;\n this.dialogRef.close(result);\n }\n}\n","<h2 mat-dialog-title cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle class=\"draggable\">Comparator selector</h2>\n<div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"selectedGroup\" (ngModelChange)=\"changeGroup($event)\">\n <mat-button-toggle [value]=\"ComparatorGroup.Text\">Text</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Number\">Number</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Semver\">Semantic version</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.DateTime\">Datetime</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Array\">Array</mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div mat-dialog-content class=\"container\" [ngSwitch]=\"selectedGroup\">\n <div *ngSwitchCase=\"ComparatorGroup.Text\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain string/text.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Text}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Number\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain numbers.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Number}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Semver\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain semantic versions.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Semver}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.DateTime\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain datetimes.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.DateTime}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Array\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain items of a string/text list.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Array}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button mat-dialog-close>Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" mat-dialog-close>Close</button>\n</div>\n\n<ng-template #comparators let-group=\"group\">\n <div>\n <mat-radio-group (change)=\"comparatorChange($event.value)\">\n <div class=\"comparator-container\">\n <div class=\"item\" [ngClass]=\"'col-' + i % 2\" [class.selected]=\"comparator.value === selectedComparator\" \n *ngFor=\"let comparator of listComparators(group); let i = index\" (click)=\"comparatorChange(comparator.value)\"> \n <mat-radio-button color=\"primary\" [value]=\"comparator.value\" [disabled]=\"data.readOnly\"\n [checked]=\"comparator.value === selectedComparator\" [matTooltip]=\"comparator.description\">\n <div class=\"title\">\n {{comparator.label}}\n </div>\n </mat-radio-button>\n <div class=\"description\">\n <div class=\"example\">\n <ng-container [ngSwitch]=\"comparator.value\">\n\n <!-- TEXT -->\n <ng-container *ngSwitchCase=\"UserComparator.TextEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> EQUALS <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT EQUALS <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, <span class=\"match-val\">iOS</span> ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, Windows ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">bob</span>, jane ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ bob, jane ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">&#64;foo.com</span>, &#64;bar.com ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;example.com</span> NOT ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ &#64;foo.com, &#64;bar.com ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://test-app.foo.com</span> CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">test</span>, localhost ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://app.foo.com</span> NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ test, localhost ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n <!-- NUMBER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.NumberEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> = <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> != <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">3.14</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n\n <!-- SEMVER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">1.0.0</span>, 4.3.5 ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2.1.0</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ 1.0.0, 4.3.5 ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.0.0-alpha</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.2.0</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.1.0</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n <!-- DATETIME -->\n\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeBefore\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 10:36:24</span> BEFORE <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeAfter\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 15:41:06</span> AFTER <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n <!-- ARRAY -->\n\n <ng-container *ngSwitchCase=\"UserComparator.ArrayContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Writer, Reader ]</span> ARRAY CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">Writer</span>, Admin ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ArrayDoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Guest, Reader ]</span> ARRAY NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Writer, Admin ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>\n\n<ng-template #confidential>\n <p>Select how the <i>comparison values</i> should be persisted:</p>\n <div matTooltip=\"The currently selected comparator does not support hashed comparison values, they will be presented as cleartext in the config JSON.\"\n [matTooltipDisabled]=\"confidentialEnabled\">\n <mat-radio-group class=\"confidential-container\" (change)=\"confidentialChange($event.value)\">\n <div class=\"confidential item\" (click)=\"confidentialChange(true)\">\n <mat-radio-button color=\"primary\" [value]=\"true\" [checked]=\"isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Hashed</div>\n <div class=\"icon\"><mat-icon>lock</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n We recommend using this option in case of frontend applications targeting users based on sensitive data (like email addresses, names, etc). \n \n </div>\n </div>\n <div class=\"cleartext item\" (click)=\"confidentialChange(false)\">\n <mat-radio-button color=\"primary\" [value]=\"false\" [checked]=\"!isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Cleartext</div>\n <div class=\"icon\"><mat-icon>lock_open_right</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n You can use this option when you target users based on non-sensitive data. Comparison values will be presented as plain text in the <i>config JSON</i>.\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>","import { AfterViewInit, Component, DestroyRef, Inject, OnInit, ViewChild, inject } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Subscription } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n FormHelper, IFeatureFlagLimitations, ComparisonValueForm, ComparisonValueListForm,\n FormGenerator, UserComparator, ComparisonValueListHelper, ComparisonValueListParseResult,\n IComparisonValueListModel\n} from '../../../../../../../bootstrap';\n\nexport type PopoutListEditorDialogData = {\n comparisonValueList: IComparisonValueListModel[],\n comparator: UserComparator,\n featureFlagLimitations: IFeatureFlagLimitations\n readOnly: boolean\n};\n\nenum VisualizationType {\n Table = 0,\n Json = 1,\n Csv = 2,\n Csl = 3\n}\n\n@Component({\n selector: 'app-popout-list-editor-dialog',\n templateUrl: './popout-list-editor-dialog.component.html',\n styleUrls: ['./popout-list-editor-dialog.component.scss']\n})\nexport class PopoutListEditorDialogComponent implements OnInit, AfterViewInit {\n destroyRef = inject(DestroyRef);\n FormHelper = FormHelper;\n VisualizationType = VisualizationType;\n\n dataSource = new MatTableDataSource<FormGroup<ComparisonValueListForm>>([]);\n plainText = \"\";\n formGroup: FormGroup<ComparisonValueForm>;\n filterValue = '';\n valueChanged = false;\n currentlyHasHints = false;\n\n displayedColumns = ['value', 'hint', 'action'];\n visualizationType = VisualizationType.Table;\n comparisonValueListParseResult: ComparisonValueListParseResult;\n valueChangeSubscription: Subscription;\n focusIndex = 0;\n\n paginator: MatPaginator;\n @ViewChild(\"paginator\", { static: false }) set setPaginator(paginator: MatPaginator) {\n this.paginator = paginator;\n if (this.dataSource) {\n this.dataSource.paginator = this.paginator;\n }\n }\n\n constructor(\n private formGenerator: FormGenerator,\n public dialogRef: MatDialogRef<PopoutListEditorDialogComponent>,\n private comparisonValueListHelper: ComparisonValueListHelper,\n @Inject(MAT_DIALOG_DATA) public data: PopoutListEditorDialogData) { }\n\n ngOnInit(): void {\n const comparisonValueList = this.data.comparisonValueList;\n if (!comparisonValueList.length) {\n comparisonValueList.push({ value: '' });\n }\n\n this.setFormGroup(comparisonValueList);\n }\n\n setFormGroup(comparisonValueList: IComparisonValueListModel[]) {\n this.formGroup = this.formGenerator.generateComparisonValueFormGroup(\n { listValue: comparisonValueList },\n this.data.comparator, this.data.readOnly, this.data.featureFlagLimitations);\n\n if (this.formGroup.invalid) {\n this.formGroup.markAllAsTouched();\n }\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n this.checkHasHints();\n this.valueChangeSubscription = this.formGroup.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({ next: () => this.checkHasHints() });\n }\n\n checkHasHints() {\n this.currentlyHasHints = !!this.formGroup.controls.listValue.controls.find(r => !!r.value.hint);\n }\n\n setDataSource() {\n if (this.dataSource) {\n this.dataSource.data = this.formGroup.controls.listValue.controls;\n if (this.dataSource.paginator) {\n this.dataSource.paginator.length = this.dataSource.data.length;\n }\n }\n }\n\n ngAfterViewInit(): void {\n this.dataSource = new MatTableDataSource(this.formGroup.controls.listValue.controls);\n this.dataSource.paginator = this.paginator;\n this.dataSource.filterPredicate = (row, filter) => [\n // \"Filter audit log items by any detail.\" -> This list should be kept in sync with the HTML template!\n row.controls.value.value,\n row.controls.hint.value\n ].some(v => v?.toLowerCase().includes(filter));\n this.focusIndex = 0;\n }\n\n applyFilter() {\n this.dataSource.filter = (this.filterValue ?? \"\").trim().toLowerCase();\n\n if (this.dataSource.paginator) {\n this.focusIndex = 0;\n this.dataSource.paginator.firstPage();\n }\n }\n\n add() {\n if (this.formGroup.controls.listValue.controls.length >= this.data.featureFlagLimitations.maxComparisonValueListLength) {\n return;\n }\n\n this.formGenerator.addComparisonValueListValueItems(\n this.data.comparator,\n this.formGroup.controls.listValue,\n [{ value: '' }],\n this.data.featureFlagLimitations);\n\n this.setDataSource();\n this.filterValue = '';\n this.applyFilter();\n this.focusIndex = this.formGroup.controls.listValue.controls.length - 1;\n this.dataSource.paginator.lastPage();\n }\n\n remove(row: FormGroup<ComparisonValueListForm>) {\n const index = this.formGroup.controls.listValue.controls.findIndex(c => c.controls.index.value === row.controls.index.value);\n if (index === -1) { return; }\n this.formGroup.controls.listValue.controls.splice(index, 1);\n this.formGroup.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.listValue.markAsTouched();\n this.formGroup.controls.listValue.markAsDirty();\n this.setDataSource();\n }\n\n set() {\n if (this.visualizationType !== VisualizationType.Table) {\n if (this.comparisonValueListParseResult?.error) {\n return;\n }\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n this.valueChanged = false;\n }\n\n if (this.formGroup.invalid) {\n this.formGroup.markAllAsTouched();\n return;\n }\n\n this.dialogRef.close({ comparisonValueList: this.getRawValue() });\n }\n\n close() {\n this.dialogRef.close();\n }\n\n removeAll() {\n this.setFormGroup([]);\n this.setDataSource();\n this.focusIndex = 0;\n this.dataSource.paginator.firstPage();\n }\n\n getRawValue(): IComparisonValueListModel[] {\n return this.formGroup.controls.listValue.value.map(v => { return { value: v.value, hint: v.hint ?? '' } });\n }\n\n focusInvalid() {\n if (this.visualizationType !== VisualizationType.Table) {\n this.changeVisualizationType(VisualizationType.Table);\n }\n const invalidIndex = this.formGroup.controls.listValue.controls.findIndex(c => c.invalid);\n if (invalidIndex !== -1) {\n this.formGroup.markAllAsTouched();\n this.filterValue = '';\n this.applyFilter();\n this.dataSource.paginator.length = this.dataSource.data.length;\n const pageNumber = Math.floor(invalidIndex / this.dataSource.paginator.pageSize);\n this.focusIndex = invalidIndex;\n this.dataSource.paginator.pageIndex = pageNumber;\n this.paginator.page.next({\n pageIndex: pageNumber,\n pageSize: this.paginator.pageSize,\n length: this.paginator.length\n });\n }\n }\n\n changeVisualizationType(visualizationType: VisualizationType) {\n if (this.valueChanged && this.visualizationType !== VisualizationType.Table) {\n if (this.comparisonValueListParseResult.error) {\n return;\n }\n\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n }\n\n this.visualizationType = visualizationType;\n this.valueChanged = false;\n\n switch (visualizationType) {\n case VisualizationType.Json:\n this.plainText = this.comparisonValueListHelper.formatValuesAndHintAsJson(this.getRawValue());\n break;\n case VisualizationType.Csv:\n this.plainText = this.comparisonValueListHelper.formatValuesAndHintAsCsv(this.getRawValue());\n break;\n case VisualizationType.Csl:\n this.plainText = this.comparisonValueListHelper.formatValuesAsCsv(this.getRawValue());\n break;\n case VisualizationType.Table:\n if (this.dataSource.paginator) {\n this.focusIndex = 0;\n this.dataSource.paginator.firstPage();\n }\n break;\n }\n this.recalculate();\n }\n\n textValueChanged() {\n this.valueChanged = true;\n this.recalculate();\n if (!this.comparisonValueListParseResult?.error) {\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n }\n }\n\n recalculate() {\n switch (this.visualizationType) {\n case VisualizationType.Json:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesAndHintsFromJson(this.plainText);\n break;\n case VisualizationType.Csv:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesAndHintsFromCsv(this.plainText);\n break;\n case VisualizationType.Csl:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesFromCsv(this.plainText);\n break;\n default:\n this.comparisonValueListParseResult = { comparisonValueList: [] };\n break;\n }\n if (this.visualizationType !== VisualizationType.Table && !this.comparisonValueListParseResult.error) {\n this.currentlyHasHints = !!this.comparisonValueListParseResult.comparisonValueList.find(r => !!r.hint);\n } else if (this.visualizationType !== VisualizationType.Table) {\n this.checkHasHints();\n }\n }\n\n loadFile(event) {\n const file = event.target.files[0];\n const fileReader = new FileReader();\n fileReader.onload = () => {\n this.plainText = fileReader.result.toString();\n this.textValueChanged();\n };\n fileReader.readAsText(file);\n }\n}\n","<h2 mat-dialog-title>Advanced editor</h2>\n<div mat-dialog-content class=\"container\">\n\n <div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"visualizationType\" (ngModelChange)=\"changeVisualizationType($event)\">\n <mat-button-toggle [value]=\"VisualizationType.Table\"\n [disabled]=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Table || !comparisonValueListParseResult?.error\">Table</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Json\"\n [disabled]=\"visualizationType !== VisualizationType.Json && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Json || !comparisonValueListParseResult?.error\">JSON</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csv\"\n [disabled]=\"visualizationType !== VisualizationType.Csv && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Csv || !comparisonValueListParseResult?.error\">CSV\n with hints</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csl\"\n [disabled]=\"(visualizationType !== VisualizationType.Csl && comparisonValueListParseResult?.error) || currentlyHasHints\"\n [matTooltip]=\"currentlyHasHints ? 'There are hints set to your values so the CSV without hints view is not available' : 'Can not switch between views while there are errors in the current view.'\"\n [matTooltipDisabled]=\"(visualizationType === VisualizationType.Csl || !comparisonValueListParseResult?.error) && !currentlyHasHints\">CSV\n without hints</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div [hidden]=\"visualizationType !== VisualizationType.Table\" class=\"table-format\">\n <p class=\"description\">\n Modify the items within the list of comparison values. The hint helps you label the value for easier\n reference.\n </p>\n <div class=\"controls\">\n <div>\n <mat-form-field class=\"filter\" appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <mat-label>Filter</mat-label>\n <input matInput [(ngModel)]=\"filterValue\" (ngModelChange)=\"applyFilter()\"\n placeholder=\"Filter values and hints.\">\n </mat-form-field>\n </div>\n <div class=\"control-button-container\">\n <div class=\"add-btn-container\" matTooltip=\"Add item\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <div [matTooltip]=\"'Maximum ' + data.featureFlagLimitations.maxComparisonValueListLength + ' items can be added.'\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length < data.featureFlagLimitations.maxComparisonValueListLength\">\n <button (click)=\"add()\" mat-icon-button type=\"button\" *ngIf=\"!data.readOnly\" class=\"add-btn\"\n [disabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <mat-icon>add_circle</mat-icon>\n </button>\n </div>\n </div>\n\n <button type=\"button\" mat-icon-button matTooltip=\"Remove all\" class=\"grey-button\" *ngIf=\"!data.readOnly\"\n (click)=\"removeAll()\"><mat-icon>delete_outline</mat-icon></button>\n </div>\n </div>\n <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"value\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Comparison value </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) === focusIndex\" focus />\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) !== focusIndex\" />\n <mat-error *ngIf=\"row.controls.value.invalid\">\n {{FormHelper.getErrorMessage(row.controls.value)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Hint </th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.hint\" />\n <mat-error *ngIf=\"row.controls.hint.invalid\">\n {{FormHelper.getErrorMessage(row.controls.hint)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header></th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top\">\n <button class=\"grey-button\" (click)=\"remove(row)\" mat-icon-button type=\"button\"\n matTooltip=\"Remove item\" *ngIf=\"!data.readOnly\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\">\n </tr>\n </table>\n <div class=\"small-form-field\">\n <mat-paginator #paginator showFirstLastButtons [pageSizeOptions]=\"[5, 10, 50, 100]\"></mat-paginator>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Json\" class=\"json-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a JSON text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.json\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"json-editor\">\n <app-ace-editor [(value)]=\"plainText\" (valueChange)=\"textValueChanged()\"\n [readOnly]=\"data.readOnly\"></app-ace-editor>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csv\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values and hints) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csl\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values only) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult\">\n <p *ngIf=\"!comparisonValueListParseResult.error && comparisonValueListParseResult.comparisonValueList.length\"\n class=\"small-chip-input\">\n Preview ({{comparisonValueListParseResult.comparisonValueList.length}} items)\n <mat-chip-set>\n <span *ngFor=\"let listValueItem of comparisonValueListParseResult.comparisonValueList | slice:0:10\"\n [matTooltip]=\"listValueItem.hint ? listValueItem.hint : 'No hint'\" class=\"chip-container\">\n <mat-chip-row>\n {{listValueItem.value}}\n </mat-chip-row>\n </span>\n <mat-chip-row *ngIf=\"comparisonValueListParseResult.comparisonValueList.length > 10\">\n {{comparisonValueListParseResult.comparisonValueList.length - 10}} remaining items...\n </mat-chip-row>\n </mat-chip-set>\n </p>\n <mat-error *ngIf=\"comparisonValueListParseResult.error\" class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Couldn't parse your values. Please check the format.</span>\n </mat-error>\n </div>\n <mat-error\n *ngIf=\"formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>{{FormHelper.getErrorMessage(formGroup.controls.listValue)}}</span>\n </mat-error>\n <mat-error\n *ngIf=\"!valueChanged && formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && !formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Invalid items.&nbsp;</span>\n <div>\n <button type=\"button\" mat-stroked-button color=\"primary\"\n *ngIf=\"visualizationType !== VisualizationType.Table || paginator?.getNumberOfPages() > 1\"\n (click)=\"focusInvalid()\" class=\"jump\">\n Jump to fix\n </button>\n </div>\n </mat-error>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" (click)=\"close()\">Close</button>\n</div>","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-condition-chip',\n templateUrl: './condition-chip.component.html',\n styleUrl: '../../../chips.scss'\n})\nexport class ConditionChipComponent implements OnInit {\n\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n chipText: string;\n\n ngOnInit(): void {\n this.chipText = this.conditionIndex > 0\n ? 'AND'\n : this.targetingRuleIndex === 0\n ? 'IF'\n : 'ELSE IF';\n }\n}\n","<div class=\"chip-container fixed-width\">\n <div *ngIf=\"conditionIndex > 0\" class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <mat-chip-set>\n <mat-chip disabled>{{chipText}}</mat-chip>\n </mat-chip-set>\n</div>","import { Component, DestroyRef, Input, OnInit, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, Validators } from '@angular/forms';\nimport { FormHelper, timeRegex } from '../../../_services/form-helper';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter } from '@angular/material/core';\nimport { AppDateAdapter } from '../../../_services/app-data-adapter';\nimport { DateHelper } from '../../../_services/date-helper';\n\nexport interface DateTimeForm {\n dateValue: FormControl<Date | undefined>;\n timeValue: FormControl<string>;\n}\n\n@Component({\n selector: 'app-date-time-picker',\n templateUrl: './date-time-picker.component.html',\n styleUrls: ['./date-time-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true,\n },\n { provide: DateAdapter, useClass: AppDateAdapter }\n ]\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor, Validator {\n FormHelper = FormHelper;\n destroyRef = inject(DestroyRef);\n formGroup: FormGroup<DateTimeForm>;\n private onChangeModel: any;\n private onTouchModel: any;\n @Input() dateTooltip: string;\n @Input() timeTooltip: string;\n\n ngOnInit(): void {\n this.formGroup = new FormGroup<DateTimeForm>({\n dateValue: new FormControl<Date>(undefined, { nonNullable: true, validators: [Validators.required] }),\n timeValue: new FormControl<string>(undefined, { nonNullable: true, validators: [Validators.pattern(timeRegex), Validators.required] })\n });\n this.formGroup.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(value => {\n if (!value.dateValue || !value.timeValue) {\n if (this.onChangeModel) {\n this.onChangeModel(undefined);\n }\n if (this.onTouchModel) {\n this.onTouchModel();\n }\n return;\n }\n\n let dateTimeValue = new Date(value.dateValue);\n dateTimeValue = DateHelper.offsetDate(dateTimeValue, -dateTimeValue.getTimezoneOffset())\n const splitted = value.timeValue.split(':');\n if (splitted.length === 2) {\n dateTimeValue.setUTCHours(parseInt(splitted[0]));\n dateTimeValue.setUTCMinutes(parseInt(splitted[1]));\n dateTimeValue.setUTCSeconds(0);\n dateTimeValue.setUTCMilliseconds(0);\n } else {\n dateTimeValue.setUTCHours(0);\n dateTimeValue.setUTCMinutes(0);\n dateTimeValue.setUTCSeconds(0);\n dateTimeValue.setUTCMilliseconds(0);\n }\n if (this.onChangeModel) {\n this.onChangeModel(dateTimeValue.getTime() / 1000.0);\n }\n if (this.onTouchModel) {\n this.onTouchModel();\n }\n })\n }\n\n writeValue(obj: any): void {\n if (!obj) {\n this.formGroup.patchValue({ dateValue: undefined, timeValue: undefined });\n }\n const date = new Date(obj * 1000.0);\n const dateValue = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));\n const utcHours = date.getUTCHours();\n const utcMinutes = date.getUTCMinutes();\n const timeValue = `${(utcHours < 10 ? '0' : '') + utcHours}:${(utcMinutes < 10 ? '0' : '') + utcMinutes}`;\n this.formGroup.patchValue({ dateValue, timeValue }, { onlySelf: true, emitEvent: false });\n }\n\n registerOnChange(fn: any): void {\n this.onChangeModel = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouchModel = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (isDisabled) {\n this.formGroup.disable();\n }\n else {\n this.formGroup.enable();\n }\n }\n\n validate(): ValidationErrors {\n return this.formGroup.errors;\n }\n}\n","<div class=\"outer\">\n <div class=\"component date\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-icon-button\">\n <input matInput [formControl]=\"formGroup.controls.dateValue\" [matDatepicker]=\"datepicker\"\n [matTooltip]=\"dateTooltip\">\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\n <mat-datepicker #datepicker></mat-datepicker>\n <mat-error *ngIf=\"formGroup.controls.dateValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.dateValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"time\" [formControl]=\"formGroup.controls.timeValue\" [matTooltip]=\"timeTooltip\" />\n <mat-error *ngIf=\"formGroup.controls.timeValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.timeValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</div>","import { ENTER, COMMA } from '@angular/cdk/keycodes';\nimport { ChangeDetectorRef, Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatChipInputEvent, MatChipEditedEvent, MatChipGrid, MatChipRow } from '@angular/material/chips';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateAdapter, ErrorStateMatcher } from '@angular/material/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport {\n FormHelper, ComparisonValueListForm, UserConditionForm, FormGenerator,\n UserComparator, UserComparatorText, UserComparatorType,\n IComparisonValueListModel, IComparisonValueModel, AppDateAdapter,\n IFeatureFlagLimitations, ConfirmationDialogComponent, ComparisonValueListHelper, MessagingService, InfoDialogComponent\n} from '../../../../../../bootstrap';\nimport { ComparatorDialogComponent } from './comparator-dialog/comparator-dialog.component';\nimport { PopoutListEditorDialogComponent, PopoutListEditorDialogData } from './popout-list-editor-dialog/popout-list-editor-dialog.component';\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData } from '../../../popout-text-editor-dialog/popout-text-editor-dialog.component';\n\nexport class ListValueErrorStateMatcher implements ErrorStateMatcher {\n constructor(private formGroup: FormGroup<UserConditionForm>) { }\n isErrorState(): boolean {\n return this.formGroup.controls.comparisonValue.controls.listValue?.touched && this.formGroup.controls.comparisonValue.controls.listValue?.invalid;\n }\n}\n\nenum ComparatorGroup {\n ConfidentialText = 'CONFIDENTIAL TEXT',\n Text = 'TEXT',\n SemanticVersion = 'SEMANTIC VERSION',\n Number = 'NUMBER',\n DateTime = 'DATETIME',\n ConfidentialArray = 'CONFIDENTIAL ARRAY',\n Array = 'ARRAY'\n}\n\ninterface IComparatorValue {\n value: UserComparator,\n label: UserComparatorText,\n group: ComparatorGroup,\n index: number,\n}\n\nconst allComparators: IComparatorValue[] = [\n { value: UserComparator.IsOneOf, label: UserComparatorText.IsOneOf, group: ComparatorGroup.Text, index: 0 },\n { value: UserComparator.IsNotOneOf, label: UserComparatorText.IsNotOneOf, group: ComparatorGroup.Text, index: 1 },\n { value: UserComparator.ContainsAnyOf, label: UserComparatorText.ContainsAnyOf, group: ComparatorGroup.Text, index: 2 },\n { value: UserComparator.DoesNotContainAnyOf, label: UserComparatorText.DoesNotContainAnyOf, group: ComparatorGroup.Text, index: 3 },\n { value: UserComparator.SemVerIsOneOf, label: UserComparatorText.SemVerIsOneOf, group: ComparatorGroup.SemanticVersion, index: 4 },\n { value: UserComparator.SemVerIsNotOneOf, label: UserComparatorText.SemVerIsNotOneOf, group: ComparatorGroup.SemanticVersion, index: 5 },\n { value: UserComparator.SemVerLess, label: UserComparatorText.SemVerLess, group: ComparatorGroup.SemanticVersion, index: 6 },\n { value: UserComparator.SemVerLessOrEquals, label: UserComparatorText.SemVerLessOrEquals, group: ComparatorGroup.SemanticVersion, index: 7 },\n { value: UserComparator.SemVerGreater, label: UserComparatorText.SemVerGreater, group: ComparatorGroup.SemanticVersion, index: 8 },\n { value: UserComparator.SemVerGreaterOrEquals, label: UserComparatorText.SemVerGreaterOrEquals, group: ComparatorGroup.SemanticVersion, index: 9 },\n { value: UserComparator.NumberEquals, label: UserComparatorText.NumberEquals, group: ComparatorGroup.Number, index: 10 },\n { value: UserComparator.NumberDoesNotEqual, label: UserComparatorText.NumberDoesNotEqual, group: ComparatorGroup.Number, index: 11 },\n { value: UserComparator.NumberLess, label: UserComparatorText.NumberLess, group: ComparatorGroup.Number, index: 12 },\n { value: UserComparator.NumberLessOrEquals, label: UserComparatorText.NumberLessOrEquals, group: ComparatorGroup.Number, index: 13 },\n { value: UserComparator.NumberGreater, label: UserComparatorText.NumberGreater, group: ComparatorGroup.Number, index: 14 },\n { value: UserComparator.NumberGreaterOrEquals, label: UserComparatorText.NumberGreaterOrEquals, group: ComparatorGroup.Number, index: 15 },\n { value: UserComparator.SensitiveIsOneOf, label: UserComparatorText.SensitiveIsOneOf, group: ComparatorGroup.ConfidentialText, index: 16 },\n { value: UserComparator.SensitiveIsNotOneOf, label: UserComparatorText.SensitiveIsNotOneOf, group: ComparatorGroup.ConfidentialText, index: 17 },\n { value: UserComparator.DateTimeBefore, label: UserComparatorText.DateTimeBefore, group: ComparatorGroup.DateTime, index: 18 },\n { value: UserComparator.DateTimeAfter, label: UserComparatorText.DateTimeAfter, group: ComparatorGroup.DateTime, index: 19 },\n { value: UserComparator.SensitiveTextEquals, label: UserComparatorText.SensitiveTextEquals, group: ComparatorGroup.ConfidentialText, index: 20 },\n { value: UserComparator.SensitiveTextDoesNotEqual, label: UserComparatorText.SensitiveTextDoesNotEqual, group: ComparatorGroup.ConfidentialText, index: 21 },\n { value: UserComparator.SensitiveTextStartsWithAnyOf, label: UserComparatorText.SensitiveTextStartsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 22 },\n { value: UserComparator.SensitiveTextNotStartsWithAnyOf, label: UserComparatorText.SensitiveTextNotStartsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 23 },\n { value: UserComparator.SensitiveTextEndsWithAnyOf, label: UserComparatorText.SensitiveTextEndsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 24 },\n { value: UserComparator.SensitiveTextNotEndsWithAnyOf, label: UserComparatorText.SensitiveTextNotEndsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 25 },\n { value: UserComparator.SensitiveArrayContainsAnyOf, label: UserComparatorText.SensitiveArrayContainsAnyOf, group: ComparatorGroup.ConfidentialArray, index: 26 },\n { value: UserComparator.SensitiveArrayDoesNotContainAnyOf, label: UserComparatorText.SensitiveArrayDoesNotContainAnyOf, group: ComparatorGroup.ConfidentialArray, index: 27 },\n { value: UserComparator.TextEquals, label: UserComparatorText.TextEquals, group: ComparatorGroup.Text, index: 28 },\n { value: UserComparator.TextDoesNotEqual, label: UserComparatorText.TextDoesNotEqual, group: ComparatorGroup.Text, index: 29 },\n { value: UserComparator.TextStartsWithAnyOf, label: UserComparatorText.TextStartsWithAnyOf, group: ComparatorGroup.Text, index: 30 },\n { value: UserComparator.TextNotStartsWithAnyOf, label: UserComparatorText.TextNotStartsWithAnyOf, group: ComparatorGroup.Text, index: 31 },\n { value: UserComparator.TextEndsWithAnyOf, label: UserComparatorText.TextEndsWithAnyOf, group: ComparatorGroup.Text, index: 32 },\n { value: UserComparator.TextNotEndsWithAnyOf, label: UserComparatorText.TextNotEndsWithAnyOf, group: ComparatorGroup.Text, index: 33 },\n { value: UserComparator.ArrayContainsAnyOf, label: UserComparatorText.ArrayContainsAnyOf, group: ComparatorGroup.Array, index: 34 },\n { value: UserComparator.ArrayDoesNotContainAnyOf, label: UserComparatorText.ArrayDoesNotContainAnyOf, group: ComparatorGroup.Array, index: 35 },\n]\n\nconst defaultComparatorIds = [16, 17, 20, 21, 22, 23, 24, 25, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19];\n\n@Component({\n selector: 'app-user-condition',\n templateUrl: './user-condition.component.html',\n styleUrls: [\n '../../../components.scss',\n './user-condition.component.scss'\n ],\n providers: [\n { provide: DateAdapter, useClass: AppDateAdapter }\n ],\n})\nexport class UserConditionComponent implements OnInit {\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n FormHelper = FormHelper;\n\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n @Input() readOnly: boolean;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() formGroup: FormGroup<UserConditionForm>;\n matChipGrid: MatChipGrid;\n\n @ViewChild(\"chipGrid\", { static: false }) set setMatChipGrid(matChipGrid: MatChipGrid) {\n this.matChipGrid = matChipGrid;\n }\n\n defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n\n dateValue: Date;\n timeValue: string;\n\n comparatorSuggestions = new Map<any, any>();\n selectedComparator: UserComparator;\n comparatorSeparator = \"────────────────────\";\n\n keepOrder = (a: any, _: any) => a;\n\n RolloutRuleComparatorV2Type = UserComparatorType;\n rolloutRuleComparatorType: UserComparatorType;\n isClearTextComparatorSelected: boolean;\n\n // The chip grid's [formControl] only accepts a FormControl. We have a FormArray (because of the name+hint).\n // We have to fake a FormControl and match that formControl's errorstate with the original component's errorState.\n fakeFormControl = new FormControl<string>('');\n errorStateMatcher: ListValueErrorStateMatcher;\n\n constructor(private formGenerator: FormGenerator,\n private dialog: MatDialog,\n private comparisonValueListHelper: ComparisonValueListHelper,\n private clipboard: Clipboard,\n private messagingService: MessagingService,\n private changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n this.rolloutRuleComparatorType = this.formGenerator.getComparisonValueType(this.formGroup.controls.comparator.value);\n this.isClearTextComparatorSelected = this.isClearTextComparator(this.formGroup.controls.comparator.value);\n this.errorStateMatcher = new ListValueErrorStateMatcher(this.formGroup);\n this.selectedComparator = this.formGroup.controls.comparator.value;\n this.calcComparators();\n }\n\n attributeChanged(event: Event): void {\n const value = (<HTMLSelectElement>event.target).value;\n if (this.defaultComparisonAttributes.indexOf(value) !== -1) {\n if (this.formGroup.controls.comparisonAttribute.value !== value) {\n this.formGroup.controls.comparisonAttribute.setValue(value);\n this.formGroup.markAsDirty();\n this.calcComparators(true);\n }\n } else if (this.formGroup.controls.comparisonAttribute.value !== '') {\n this.formGroup.controls.comparisonAttribute.setValue('');\n this.formGroup.markAsDirty();\n this.calcComparators(true);\n }\n }\n\n comparatorChanged(value: any): void {\n if (value === \"showall\") {\n this.changeDetectorRef.detectChanges();\n this.selectedComparator = this.formGroup.controls.comparator.value;\n this.changeDetectorRef.detectChanges();\n this.compDialog();\n return;\n }\n\n this.formGroup.controls.comparator.setValue(value);\n this.formGroup.markAsDirty();\n this.selectedComparator = value;\n this.isClearTextComparatorSelected = this.isClearTextComparator(this.formGroup.controls.comparator.value);\n\n const oldRolloutRuleComparatorType = this.rolloutRuleComparatorType;\n this.rolloutRuleComparatorType = this.formGenerator.getComparisonValueType(this.formGroup.controls.comparator.value);\n if (oldRolloutRuleComparatorType !== this.rolloutRuleComparatorType) {\n const defaultValue: IComparisonValueModel = this.rolloutRuleComparatorType === UserComparatorType.DateTime ? {\n doubleValue: new Date().getTime() / 1000.0\n } : {};\n this.formGroup.setControl('comparisonValue', this.formGenerator.generateComparisonValueFormGroup(defaultValue, this.formGroup.controls.comparator.value, false, this.featureFlagLimitations))\n }\n }\n\n compDialog() {\n const dialogRef = this.dialog.open(ComparatorDialogComponent, {\n width: '1130px',\n position: {\n top: window.innerHeight < 750 ? '0px' : window.innerHeight < 950 ? '50px' : '100px',\n },\n data: {\n readOnly: this.readOnly,\n selectedComparator: this.formGroup.controls.comparator.value\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result && result !== this.formGroup.controls.comparator.value) {\n this.comparatorChanged(result);\n this.calcComparators();\n }\n });\n }\n\n add(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n\n event.chipInput?.clear();\n\n if (!value) { return; }\n\n if (value.indexOf(',') === -1) {\n this.formGenerator.addComparisonValueListValueItems(\n this.formGroup.controls.comparator.value,\n this.formGroup.controls.comparisonValue.controls.listValue,\n [{ value }],\n this.featureFlagLimitations);\n return;\n }\n\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'How would you like to add the items?',\n body: `We've noticed a comma in the value you want to add. <br/> Do you want to add it as a single item, or would you prefer to insert multiple items separated by commas?`,\n yesButtonLabel: 'Add multiple items',\n noButtonLabel: 'Add as a single item'\n },\n disableClose: true\n });\n\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result === 'yes') {\n const comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesFromCsv(value);\n if (comparisonValueListParseResult.error) {\n this.messagingService.showWarningSnack('Parse error');\n } else if (comparisonValueListParseResult.comparisonValueList.length > 0) {\n this.formGenerator.addComparisonValueListValueItems(\n this.formGroup.controls.comparator.value,\n this.formGroup.controls.comparisonValue.controls.listValue,\n comparisonValueListParseResult.comparisonValueList,\n this.featureFlagLimitations);\n }\n } else {\n this.formGenerator.addComparisonValueListValueItems(\n this.formGroup.controls.comparator.value,\n this.formGroup.controls.comparisonValue.controls.listValue,\n [{ value }],\n this.featureFlagLimitations);\n }\n });\n }\n\n remove(index: number): void {\n if (index >= 0) {\n this.formGroup.controls.comparisonValue.controls.listValue.controls.splice(index, 1);\n this.formGroup.controls.comparisonValue.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.controls.listValue.markAsDirty();\n }\n }\n\n edit(index: number, event: MatChipEditedEvent) {\n const value = event.value.trim();\n\n // https://github.com/angular/components/issues/26584#issuecomment-1699469605\n // The mat chip control does not work well with long values. The basic setup is overflow: visible.\n // The overflow:hidden, text-overflow: ellipsis is solved in the styles.scss:\n //.mdc-evolution-chip-set .mdc-evolution-chip {\n // .mdc-evolution-chip__cell--primary,\n // .mdc-evolution-chip__action--primary,\n // .mat-mdc-chip-action-label {\n // white-space: nowrap;\n // overflow: hidden;\n // text-overflow: ellipsis;\n // }\n // }\n // \n // This works totally fine until you edit a chip's value that is long (double click on it) \n // and e.g. insert a character to the end of the value.\n // After focusing out from the input, the original chip's value is shifted or even missing if the text is long enough. \n // If we set the input's value to '' here, the shifting is solved and everything works as expected\n (event.chip as MatChipRow).defaultEditInput?.setValue('');\n\n if (!value) {\n this.remove(index);\n } else if (index >= 0) {\n this.formGroup.controls.comparisonValue.controls.listValue.controls[index].patchValue({ value });\n this.formGroup.controls.comparisonValue.controls.listValue.controls[index].updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.controls.listValue.markAsDirty();\n }\n }\n\n expandText() {\n const dialogRef = this.dialog.open(PopoutTextEditorDialogComponent, {\n width: '800px',\n data: <PopoutTextEditorDialogData>{\n value: this.formGroup.controls.comparisonValue.controls.stringValue.value,\n readOnly: this.formGroup.controls.comparisonValue.controls.stringValue.disabled,\n validators: this.rolloutRuleComparatorType === UserComparatorType.Semver\n ? this.formGenerator.getComparisonValueSemverValidators(this.featureFlagLimitations)\n : this.formGenerator.getComparisonValueStringValidators(this.featureFlagLimitations),\n maxValueLength: this.featureFlagLimitations.maxComparisonValueLength,\n description: 'Modify the text within the editor to change the comparison value. The editor supports JSON syntax highlighting.'\n }\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data && data.value !== this.formGroup.controls.comparisonValue.controls.stringValue.value) {\n this.formGroup.controls.comparisonValue.controls.stringValue.setValue(data.value);\n this.formGroup.controls.comparisonValue.controls.stringValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.stringValue.markAsTouched();\n this.formGroup.controls.comparisonValue.controls.stringValue.markAsDirty();\n }\n });\n }\n\n expandList() {\n const dialogRef = this.dialog.open(PopoutListEditorDialogComponent, {\n width: '670px',\n data: <PopoutListEditorDialogData>{\n comparisonValueList: this.getRawValue(),\n comparator: this.formGroup.controls.comparator.value,\n featureFlagLimitations: this.featureFlagLimitations,\n readOnly: this.readOnly\n }\n });\n dialogRef.afterClosed().subscribe((data: { comparisonValueList: IComparisonValueListModel[] }) => {\n if (data?.comparisonValueList) {\n const oldValue =\n this.formGroup.controls.comparisonValue.controls.listValue.value\n .map(l => { return { value: l.value, hint: l.hint }; });\n const newValue = data.comparisonValueList\n .map(l => { return { value: l.value, hint: l.hint }; });\n if (JSON.stringify(oldValue) === JSON.stringify(newValue)) {\n return;\n }\n const validators =\n this.formGenerator.getComparisonValueType(this.formGroup.controls.comparator.value) === UserComparatorType.SemverList\n ? this.formGenerator.getComparisonValueSemverListItemValidators(this.featureFlagLimitations)\n : this.formGenerator.getComparisonValueStringListItemValidators(this.featureFlagLimitations);\n const formArray = this.formGenerator.generateComparisonValueListValueArray(data.comparisonValueList, this.readOnly, this.featureFlagLimitations, validators);\n this.formGroup.controls.comparisonValue.setControl('listValue', formArray);\n this.formGroup.controls.comparisonValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.markAsDirty();\n }\n });\n }\n\n removeAll() {\n this.formGroup.controls.comparisonValue.controls.listValue.controls.splice(0, this.formGroup.controls.comparisonValue.controls.listValue.controls.length);\n this.formGroup.controls.comparisonValue.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.controls.listValue.markAsDirty();\n }\n\n copyValuesAsCsv() {\n this.copyToClipboard(this.comparisonValueListHelper.formatValuesAsCsv(this.getRawValue()));\n }\n\n copyToClipboard(value: string) {\n if (value) {\n try {\n this.clipboard.copy(value);\n this.messagingService.showSuccessSnack(\"Copied to clipboard.\");\n } catch {\n this.messagingService.showSuccessSnack(\"Clipboard unavailable.\");\n }\n\n } else {\n this.messagingService.showWarningSnack(\"Nothing to be copied.\");\n }\n }\n\n getRawValue(): IComparisonValueListModel[] {\n return this.formGroup.controls.comparisonValue.controls.listValue.value.map(v => { return { value: v.value, hint: v.hint } });\n }\n\n isValueInvalid(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n return listValueItemControl.controls.value.touched && listValueItemControl.controls.value.invalid;\n }\n\n isHintInvalid(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n return listValueItemControl.controls.hint.touched && listValueItemControl.controls.hint.invalid;\n }\n\n isListValueItemInvalid(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n return this.isValueInvalid(listValueItemControl) || this.isHintInvalid(listValueItemControl);\n }\n\n getListValueItemTooltipMessage(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n if (this.isValueInvalid(listValueItemControl)) {\n return FormHelper.getErrorMessage(listValueItemControl.controls.value);\n } else if (this.isHintInvalid(listValueItemControl)) {\n return \"Hint:\" + FormHelper.getErrorMessage(listValueItemControl.controls.hint);\n }\n if (listValueItemControl.controls.hint.value) {\n return listValueItemControl.controls.hint.value;\n }\n return \"No hint\";\n }\n\n calcComparators(resetVal = false): void {\n if (!this.formGroup.controls.comparisonAttribute.value) {\n return;\n }\n this.buildComparatorSuggestions(defaultComparatorIds, resetVal);\n }\n\n buildComparatorSuggestions(ids: number[], resetVal: boolean): void {\n let comps = ids.map(id => allComparators[id]);\n const selected = allComparators.find(val => val.value === this.formGroup.controls.comparator.value);\n if (resetVal && !ids.includes(selected.index) && this.isNullCompVal(this.formGroup.controls.comparisonValue.value)) {\n this.comparatorChanged(comps[0].value);\n } else if (!ids.includes(selected.index)) {\n if (selected.value === UserComparator.ContainsAnyOf || selected.value === UserComparator.DoesNotContainAnyOf) {\n comps = [allComparators[2], allComparators[3], ...comps]\n } else {\n const selectedGroup = allComparators.filter(val => val.group === selected.group);\n comps = [...selectedGroup, ...comps]\n }\n }\n comps = this.dedupComps(comps);\n this.comparatorSuggestions = comps.reduce((entryMap, e) => entryMap.set(e.group, [...entryMap.get(e.group) || [], e]), new Map());\n this.comparatorSeparator = this.genSeparator(comps);\n }\n\n dedupComps(comps: IComparatorValue[]): IComparatorValue[] {\n const result: IComparatorValue[] = [];\n comps.forEach(val => {\n if (!result.find(e => e.index === val.index)) {\n result.push(val);\n }\n });\n return result;\n }\n\n genSeparator(comps: IComparatorValue[]): string {\n let max = 0;\n comps.forEach(val => {\n if (val.label.length > max) {\n max = val.label.length;\n }\n });\n return Array(max).join(\"─\");\n }\n\n isNumberArr(val: any): boolean {\n if (!Array.isArray(val)) {\n return false;\n }\n\n return val.length > 0 && val.every(item => typeof item === 'number');\n }\n\n isNullCompVal(compVal: Partial<{ stringValue?: string; doubleValue?: number; listValue?: Partial<{ value: string; hint?: string; index: number; }>[]; }>): boolean {\n return !compVal.doubleValue && !compVal.listValue && !compVal.stringValue;\n }\n\n\n isClearTextComparator(comparator: UserComparator): boolean {\n switch (comparator) {\n case UserComparator.IsOneOf:\n case UserComparator.IsNotOneOf:\n case UserComparator.TextStartsWithAnyOf:\n case UserComparator.TextEndsWithAnyOf:\n case UserComparator.TextNotStartsWithAnyOf:\n case UserComparator.TextNotEndsWithAnyOf:\n case UserComparator.ArrayContainsAnyOf:\n case UserComparator.ArrayDoesNotContainAnyOf:\n case UserComparator.ContainsAnyOf:\n case UserComparator.DoesNotContainAnyOf:\n case UserComparator.TextEquals:\n case UserComparator.TextDoesNotEqual: return true;\n default: return false;\n }\n }\n\n openCleartextInfoDialog() {\n this.dialog.open(InfoDialogComponent, {\n width: '600px',\n data: {\n title: `Consider using confidential comparators`,\n body: `Comparison value will be presented as plain text \n in the <i>config JSON</i>. If you have sensitive data, consider using one of the confidential (hashed) comparators.<br/><br/>\n See the <a href=\"https://configcat.com/docs/targeting/targeting-rule/user-condition/#confidential-text-comparators\" target=\"_blank\">documentation</a> for more information.`,\n secondaryButtonLabel: 'Open comparator selector',\n secondaryButtonAction: () => this.compDialog()\n }\n });\n }\n}\n","<div class=\"targeting-rule-line smallest-form-field\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"conditionIndex\"></app-condition-chip>\n\n <div class=\"explanation\"><a href=\"https://configcat.com/docs/targeting/targeting-rule/user-condition/\"\n target=\"_blank\" rel=\"noopener noreferrer\" class=\"user-link\">user's</a></div>\n </div>\n\n <div class=\"wrapper-group\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component pad-right\"\n [ngClass]=\"{'small': defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) === -1}\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl (change)=\"attributeChanged($event)\"\n [disabled]=\"formGroup.controls.comparisonAttribute.disabled\" matTooltip=\"Comparison attribute\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\n [selected]=\"comparisonAttribute === formGroup.controls.comparisonAttribute.value\">\n {{comparisonAttribute}}</option>\n <option\n [selected]=\"defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) === -1\">\n Custom\n </option>\n </select>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right small\"\n [hidden]=\"defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) !== -1\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" (blur)=\"calcComparators(true)\"\n [formControl]=\"formGroup.controls.comparisonAttribute\" matTooltip=\"Custom comparison attribute\">\n <mat-error *ngIf=\"formGroup.controls.comparisonAttribute.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonAttribute)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"targeting-rule-component pad-right comparator\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl (change)=\"comparatorChanged(selectedComparator)\"\n [(ngModel)]=\"selectedComparator\" [disabled]=\"readOnly\" matTooltip=\"Comparator\">\n <optgroup *ngFor=\"let group of comparatorSuggestions | keyvalue: keepOrder\"\n [label]=\"'&nbsp;' + group.key\">\n <option *ngFor=\"let comparator of group.value\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup [label]=\"comparatorSeparator\"></optgroup>\n <option value=\"showall\">&nbsp;&nbsp;SHOW ALL COMPARATORS&nbsp;&nbsp;</option>\n </select>\n <button matSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"All comparators\"\n (click)=\"compDialog()\"><mat-icon>list_alt</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <ng-container [ngSwitch]=\"rolloutRuleComparatorType\">\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.String\"\n [ngTemplateOutlet]=\"textTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.Semver\"\n [ngTemplateOutlet]=\"semverTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.StringList\"\n [ngTemplateOutlet]=\"listTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.SemverList\"\n [ngTemplateOutlet]=\"listTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.Number\"\n [ngTemplateOutlet]=\"numberTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.DateTime\"\n [ngTemplateOutlet]=\"dateTimeTemplate\"></ng-container>\n </ng-container>\n\n</div>\n\n<ng-template #textTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.comparisonValue.controls.stringValue\"\n matTooltip=\"Comparison value (text)\" placeholder=\"Add text ...\" />\n <button matPrefix class=\"prefix-button\" type=\"button\" mat-icon-button *ngIf=\"isClearTextComparatorSelected\"\n (click)=\"openCleartextInfoDialog()\"\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"><mat-icon>lock_open_right</mat-icon></button>\n <button matSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandText()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n\n<ng-template #semverTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.comparisonValue.controls.stringValue\"\n matTooltip=\"Comparison value (semantic version)\" placeholder=\"Add semantic version ... (1.2.3)\" />\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #listTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.listValue\"\n class=\"targeting-rule-component grow small-chip-input top-icon-suffix\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-chip-grid #chipGrid [formControl]=\"fakeFormControl\" [errorStateMatcher]=\"errorStateMatcher\">\n <span class=\"chip-container\"\n *ngFor=\"let listValueItem of formGroup.controls.comparisonValue.controls.listValue.controls | slice:0:20; let i = index\"\n [matTooltip]=\"getListValueItemTooltipMessage(listValueItem)\">\n <mat-chip-row (removed)=\"remove(i)\" [disabled]=\"readOnly\" [removable]=\"!readOnly\" class=\"chip\"\n [editable]=\"!readOnly\" (edited)=\"edit(i, $event)\"\n [ngClass]=\"{'invalid': isListValueItemInvalid(listValueItem)}\">\n\n {{listValueItem.controls.value.value}}\n\n <button type=\"button\" matChipRemove *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n </span>\n <button mat-stroked-button class=\"show-all\" type=\"button\"\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.controls.length > 20\"\n (click)=\"expandList()\">\n show all {{formGroup.controls.comparisonValue.controls.listValue.controls.length}}\n items</button>\n <input [disabled]=\"readOnly\" [placeholder]=\"!readOnly ? 'Add item to list ...' : ''\"\n [matChipInputFor]=\"chipGrid\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n matChipInputAddOnBlur (matChipInputTokenEnd)=\"add($event)\" matTooltip=\"Comparison values (list)\" />\n </mat-chip-grid>\n <button matIconPrefix class=\"prefix-button\" type=\"button\" mat-icon-button *ngIf=\"isClearTextComparatorSelected\"\n (click)=\"openCleartextInfoDialog()\"\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"><mat-icon>lock_open_right</mat-icon></button>\n <button matIconSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"More...\"\n [matMenuTriggerFor]=\"moreMenu\"><mat-icon>more_vert</mat-icon></button>\n <button matIconSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandList()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.invalid && formGroup.controls.comparisonValue.controls.listValue.errors\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.listValue)}}\n </mat-error>\n <mat-error\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.invalid && !formGroup.controls.comparisonValue.controls.listValue.errors\">\n Invalid items\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #numberTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"number\" [formControl]=\"formGroup.controls.comparisonValue.controls.doubleValue\"\n matTooltip=\"Comparison value (number)\" placeholder=\"Add number ...\" inputDisplayNormalizer />\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.doubleValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #dateTimeTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue\" class=\"targeting-rule-component datetime\">\n <app-date-time-picker [formControl]=\"formGroup.controls.comparisonValue.controls.doubleValue\"\n dateTooltip=\"Comparison value (date)\" timeTooltip=\"Comparison value (time)\" />\n </div>\n</ng-template>\n\n\n<mat-menu #moreMenu>\n <a mat-menu-item (click)=\"expandList()\"><mat-icon>edit_note</mat-icon>Advanced editor</a>\n <a mat-menu-item (click)=\"copyValuesAsCsv()\"><mat-icon>content_copy</mat-icon>Copy as CSV (values only)</a>\n <a mat-menu-item (click)=\"removeAll()\" [disabled]=\"readOnly\"><mat-icon>delete_outline</mat-icon>Remove\n all</a>\n</mat-menu>","import { Directive, Input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[track]'\n})\nexport class TrackingDirective {\n @Input() track: string[];\n // Intentionally empty class, to be easier to copy the source from the Dashboard, we had to create this directive, but we do not want to track in integrations.\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FormHelper, SegmentConditionForm, ISegment, SegmentComparator } from '../../../../../../bootstrap';\n\n@Component({\n selector: 'app-segment-condition',\n templateUrl: './segment-condition.component.html',\n styleUrls: [\n '../../../components.scss',\n './segment-condition.component.scss'\n ]\n})\nexport class SegmentConditionComponent {\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n @Input() formGroup: FormGroup<SegmentConditionForm>;\n @Input() segments: ISegment[];\n @Input() canManageSegments: boolean;\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n\n FormHelper = FormHelper;\n\n segmentComparators = [\n { value: SegmentComparator.IsIn, label: 'IS IN SEGMENT' },\n { value: SegmentComparator.IsNotIn, label: 'IS NOT IN SEGMENT' },\n ];\n\n createSegment() {\n this.createSegmentRequested.emit();\n }\n}\n","<div class=\"targeting-rule-line smallest-form-field\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"conditionIndex\"></app-condition-chip>\n\n <div class=\"explanation\"><a href=\"https://configcat.com/docs/targeting/targeting-rule/segment-condition/\" target=\"_blank\"\n rel=\"noopener noreferrer\" class=\"user-link\">user</a></div>\n </div>\n\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.comparator\" matTooltip=\"Segment comparator\">\n <option *ngFor=\"let comparator of segmentComparators\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.segmentId\" matTooltip=\"Segment\">\n <option [ngValue]=\"null\" disabled selected hidden *ngIf=\"segments.length\">Select segment ...\n </option>\n <option *ngFor=\"let segment of segments\" [ngValue]=\"segment.segmentId\"\n [title]=\"segment.description\">\n {{segment.name}}\n </option>\n <option *ngIf=\"segments.length === 0\" disabled>\n no segments available\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.segmentId.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.segmentId)}}\n </mat-error>\n </mat-form-field>\n </div>\n <button class=\"segment-more\" type=\"button\" mat-icon-button *ngIf=\"canManageSegments\"\n matTooltip=\"Create and manage segments\" [matMenuTriggerFor]=\"segmentMenu\"\n [track]=\"['segment menu click', 'feature flags and settings']\">\n <mat-icon [inline]=\"true\">more_vert</mat-icon>\n </button>\n </div>\n</div>\n\n<mat-menu #segmentMenu=\"matMenu\">\n <ng-template matMenuContent>\n <a mat-menu-item (click)=\"createSegmentRequested.emit()\"\n [track]=\"['create segment click', 'Feature flags & settings V2 page']\">\n <mat-icon>add</mat-icon><span>Create new segment</span>\n </a>\n <a mat-menu-item (click)=\"manageSegmentsRequested.emit()\"\n [track]=\"['manage segment click', 'Feature flags & settings V2 page']\">\n <mat-icon>pie_chart</mat-icon><span>Manage segments</span>\n </a>\n </ng-template>\n</mat-menu>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n FormHelper, PrerequisiteComparator, IFeatureFlagLimitations,\n PrerequisiteFlagConditionForm, IPrerequisiteSetting,\n IValueModel, FormGenerator, SettingType\n} from '../../../../../../bootstrap';\n\n@Component({\n selector: 'app-prerequisite-flag-condition',\n templateUrl: './prerequisite-flag-condition.component.html',\n styleUrls: [\n '../../../components.scss',\n './prerequisite-flag-condition.component.scss'\n ]\n})\nexport class PrerequisiteFlagConditionComponent implements OnInit {\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n @Input() formGroup: FormGroup<PrerequisiteFlagConditionForm>;\n @Input() prerequisiteSettings: IPrerequisiteSetting[];\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Output() prerequisiteConditionChanged = new EventEmitter();\n SettingType = SettingType;\n prerequisiteSettingType: SettingType;\n\n FormHelper = FormHelper;\n\n prerequisiteComparators = [\n { value: PrerequisiteComparator.Equals, label: 'EQUALS' },\n { value: PrerequisiteComparator.DoesNotEqual, label: 'NOT EQUALS' },\n ];\n\n booleanPrerequisiteComparators = [\n { value: PrerequisiteComparator.Equals, label: 'IS ON' },\n { value: PrerequisiteComparator.DoesNotEqual, label: 'IS OFF' },\n ];\n\n constructor(private formGenerator: FormGenerator) { }\n\n ngOnInit() {\n this.prerequisiteSettingType = this.getSettingType();\n }\n\n getSettingType() {\n const prerequisiteSetting = this.prerequisiteSettings.filter(s => s.settingId == this.formGroup.controls.prerequisiteSettingId.value)[0];\n return prerequisiteSetting?.settingType ?? SettingType.Boolean;\n }\n\n prerequisiteSettingChanged() {\n const oldPrerequisiteSettingType = this.prerequisiteSettingType;\n this.prerequisiteSettingType = this.getSettingType();\n if (oldPrerequisiteSettingType !== this.prerequisiteSettingType) {\n this.formGroup.setControl('prerequisiteComparisonValue',\n this.formGenerator.generateValueFormGroup(\n this.getDefaultValueModel(this.prerequisiteSettingType), this.prerequisiteSettingType, false, this.featureFlagLimitations\n )\n );\n }\n this.prerequisiteConditionChanged.emit();\n }\n\n getDefaultValueModel(settingType: SettingType): IValueModel {\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: true };\n case SettingType.String:\n return { stringValue: '' };\n case SettingType.Int:\n return { intValue: 0 };\n case SettingType.Double:\n return { doubleValue: 0 };\n default:\n throw new Error('Invalid SettingType');\n }\n }\n}\n","<div class=\"targeting-rule-line smallest-form-field\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"conditionIndex\"></app-condition-chip>\n <div class=\"explanation\"><a href=\"https://configcat.com/docs/targeting/targeting-rule/flag-condition/\"\n target=\"_blank\" rel=\"noopener noreferrer\" class=\"user-link\">flag</a></div>\n </div>\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.prerequisiteSettingId\"\n (change)=\"prerequisiteSettingChanged()\" matTooltip=\"Prerequisite feature flag or setting key\">\n <option [ngValue]=\"null\" disabled selected hidden *ngIf=\"prerequisiteSettings.length\">Select feature\n flag ...</option>\n <option *ngFor=\"let setting of prerequisiteSettings\" [ngValue]=\"setting.settingId\">\n {{setting.key}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.prerequisiteSettingId.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.prerequisiteSettingId)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right\" *ngIf=\"prerequisiteSettingType === SettingType.Boolean\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.comparator\"\n matTooltip=\"Prerequisite feature flag comparison value\">\n <option *ngFor=\"let prerequisiteComparator of booleanPrerequisiteComparators\"\n [ngValue]=\"prerequisiteComparator.value\">\n {{prerequisiteComparator.label}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right\" *ngIf=\"prerequisiteSettingType !== SettingType.Boolean\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.comparator\" matTooltip=\"Comparator\">\n <option *ngFor=\"let prerequisiteComparator of prerequisiteComparators\"\n [ngValue]=\"prerequisiteComparator.value\">\n {{prerequisiteComparator.label}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <app-feature-flag-value class=\"wrapper-group grow\" *ngIf=\"prerequisiteSettingType !== SettingType.Boolean\"\n tooltip=\"Prerequisite feature flag comparison value\"\n [formGroup]=\"formGroup.controls.prerequisiteComparisonValue\" [isPrerequisite]=\"true\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport {\n IFlagState, IFeatureFlagLimitations,\n ConditionForm, FormGenerator, UserComparator, ISegment, SegmentComparator\n} from '../../../../../bootstrap';\n\n@Component({\n selector: 'app-conditions',\n templateUrl: './conditions.component.html',\n styleUrls: [\n '../../components.scss',\n './conditions.component.scss',\n '../../add-btn.scss'\n ]\n})\nexport class ConditionsComponent {\n @Input() formArray: FormArray<FormGroup<ConditionForm>>;\n @Input() segments: ISegment[];\n @Input() flagState: IFlagState;\n @Input() targetingRuleIndex: number;\n @Input() canManageSegments: boolean;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n @Output() lastConditionDeleted = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter();\n\n constructor(private formGenerator: FormGenerator) {\n }\n\n addUserCondition() {\n if (!this.checkLimitations()) return;\n\n const f = this.formGenerator.generateConditionFormGroup({\n userCondition: { comparisonAttribute: 'Identifier', comparator: UserComparator.SensitiveTextEquals, comparisonValue: { stringValue: '' } }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations);\n this.formArray.push(f);\n f.markAsDirty();\n }\n\n addSegmentCondition() {\n if (!this.checkLimitations()) return;\n\n if (this.segments.length === 0) {\n this.addSegmentConditionRequestedWithoutSegments.emit();\n return;\n }\n const f = this.formGenerator.generateConditionFormGroup({\n segmentCondition: { comparator: SegmentComparator.IsIn, segmentId: null }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations);\n this.formArray.push(f);\n f.markAsDirty();\n }\n\n addPrerequisiteFlagCondition() {\n if (!this.checkLimitations()) return;\n\n const f = new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: this.formGenerator.generateEmptyPrerequisiteFlagConditionFormGroup(this.featureFlagLimitations)\n });\n this.formArray.push(f);\n f.markAsDirty();\n }\n\n remove(index: number): void {\n const shouldEmit = !!this.formArray.controls[index].controls.prerequisiteFlagCondition;\n this.formArray.removeAt(index);\n this.formArray.markAsDirty();\n if (!this.formArray.controls.length) {\n this.lastConditionDeleted.emit();\n }\n if (shouldEmit) {\n this.prerequisiteConditionChanged.emit();\n }\n }\n\n checkLimitations() {\n if (this.formArray.controls.length >= this.featureFlagLimitations.maxConditionPerTargetingRuleCount) {\n this.subscriptionLimitReached.emit();\n return false;\n }\n return true;\n }\n}\n","<div *ngFor=\"let condition of formArray.controls; let i = index\" class=\"condition\">\n <app-user-condition class=\"grow\" *ngIf=\"condition.controls.userCondition\" [readOnly]=\"flagState.readOnly\"\n [formGroup]=\"condition.controls.userCondition\" [featureFlagLimitations]=\"featureFlagLimitations\"\n [targetingRuleIndex]=\"targetingRuleIndex\" [conditionIndex]=\"i\"></app-user-condition>\n <app-segment-condition class=\"grow\" *ngIf=\"condition.controls.segmentCondition\"\n [formGroup]=\"condition.controls.segmentCondition\" [segments]=\"segments\" [canManageSegments]=\"canManageSegments\"\n (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\" [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"i\"></app-segment-condition>\n <app-prerequisite-flag-condition class=\"grow\" *ngIf=\"condition.controls.prerequisiteFlagCondition\"\n [formGroup]=\"condition.controls.prerequisiteFlagCondition\"\n [prerequisiteSettings]=\"flagState.prerequisiteSettings\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"i\"></app-prerequisite-flag-condition>\n <div class=\"delete-button\" *ngIf=\"formArray.controls.length > 1 && !flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove condition\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n</div>\n\n<div class=\"add-cond\" *ngIf=\"formArray.controls.length && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div [matMenuTriggerFor]=\"andmenu\" matTooltip=\"Add AND condition\" class=\"add-btn add-and\">+ AND</div>\n</div>\n\n<mat-menu #andmenu class=\"menu-long-text-and\">\n <a mat-menu-item (click)=\"addUserCondition()\"><mat-icon>track_changes</mat-icon>Add user condition</a>\n <a mat-menu-item (click)=\"addSegmentCondition()\"><mat-icon>pie_chart</mat-icon>Add segment condition</a>\n <div matTooltip=\"There's no other flag in the Config to select as a prerequisite.\"\n [matTooltipDisabled]=\"flagState.prerequisiteSettings.length > 0\">\n <a mat-menu-item (click)=\"addPrerequisiteFlagCondition()\" [disabled]=\"!flagState.prerequisiteSettings.length\">\n <mat-icon>account_tree</mat-icon>Add flag condition (prerequisite)\n </a>\n </div>\n</mat-menu>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormArray } from '@angular/forms';\nimport {\n ISegment, TargetingRuleForm, \n FormGenerator, IFeatureFlagLimitations, IFlagState,\n PercentageOptionForm, IValueModel, SettingType\n} from '../../../../bootstrap'\n\n\n@Component({\n selector: 'app-targeting-rule',\n templateUrl: './targeting-rule.component.html',\n styleUrls: [\n './targeting-rule.component.scss',\n '../chips.scss',\n '../add-btn.scss'\n ]\n})\nexport class TargetingRuleComponent {\n @Input() formGroup: FormGroup<TargetingRuleForm>;\n @Input() segments: ISegment[];\n @Input() flagState: IFlagState;\n @Input() targetingRuleIndex: number;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() canManageSegments: boolean;\n @Input() showPercentageEvaluationAttribute: boolean;\n @Input() percentageEvaluationAttribute: string;\n\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n @Output() removedAllRules = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() changePercentageEvaluationAttributeRequested = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter();\n\n constructor(private formGenerator: FormGenerator) { }\n\n convertToPercentage() {\n if (!this.formGroup.controls.value || this.formGroup.controls.value.disabled) {\n return;\n }\n\n const currentValue: IValueModel = this.formGroup.controls.value.value;\n\n switch (this.flagState.settingValue.setting.settingType) {\n case SettingType.Boolean: {\n this.formGroup.setControl('percentageOptions',\n new FormArray<FormGroup<PercentageOptionForm>>([\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: currentValue.boolValue ? 100 : 0, value: { boolValue: true } }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations),\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: currentValue.boolValue ? 0 : 100, value: { boolValue: false } }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations)\n ], [this.formGenerator.validatePercentageSum]))\n this.formGroup.removeControl('value');\n this.formGroup.markAsDirty();\n break;\n }\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double: {\n this.formGroup.setControl('percentageOptions',\n new FormArray<FormGroup<PercentageOptionForm>>([\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: 100, value: currentValue }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations),\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: 0, value: {} }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations)\n ], [this.formGenerator.validatePercentageSum]))\n this.formGroup.removeControl('value');\n this.formGroup.markAsDirty();\n break;\n }\n\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n isPercentageOnly(): boolean {\n return this.formGenerator.isPercentageOnlyTargetingRule(this.formGroup);\n }\n\n showBadge(): boolean {\n return this.targetingRuleIndex !== 0 || !this.isPercentageOnly();\n }\n\n getChipText(): string {\n return this.targetingRuleIndex !== 0\n && this.isPercentageOnly()\n ? 'OTHERWISE'\n : 'THEN';\n }\n\n getChipTooltip(): string {\n return this.targetingRuleIndex !== 0\n && this.isPercentageOnly()\n ? 'This value will be served to all identified users who do not match the targeting rules above.'\n : '';\n }\n\n lastPercentageOptionLeft() {\n if (this.formGroup.controls.conditions.length === 0) {\n this.removedAllRules.emit();\n return;\n }\n const lastValue = this.formGroup.controls.percentageOptions.controls[0].controls.value.getRawValue();\n this.formGroup.setControl('value', this.formGenerator.generateValueFormGroup(lastValue, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations));\n this.formGroup.removeControl('percentageOptions');\n this.formGroup.markAsDirty();\n }\n\n lastConditionDeleted() {\n if (!this.formGroup.controls.percentageOptions?.controls?.length) {\n this.removedAllRules.emit();\n }\n }\n\n subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n}\n","<div class=\"side-padd conditions\" *ngIf=\"formGroup.controls.conditions?.length\">\n <app-conditions [formArray]=\"formGroup.controls.conditions\" [segments]=\"segments\" [flagState]=\"flagState\"\n [targetingRuleIndex]=\"targetingRuleIndex\" (lastConditionDeleted)=\"lastConditionDeleted()\"\n [canManageSegments]=\"canManageSegments\" (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"></app-conditions>\n</div>\n\n<mat-divider *ngIf=\"formGroup.controls.conditions?.length\"></mat-divider>\n\n<div class=\"served-value\">\n <div class=\"flex side-padd\">\n <div class=\"chip-container fixed-width\" *ngIf=\"showBadge()\" [matTooltip]=\"getChipTooltip()\">\n <mat-chip-set>\n <mat-chip disabled>{{getChipText()}}</mat-chip>\n </mat-chip-set>\n </div>\n\n <app-percentage-options class=\"grow\" *ngIf=\"formGroup.controls.percentageOptions?.length\"\n [formArray]=\"formGroup.controls.percentageOptions\" [flagState]=\"flagState\"\n (lastPercentageOptionLeft)=\"lastPercentageOptionLeft()\"\n (subscriptionLimitReached)=\"subscriptionLimitReached.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" [isPercentageOnlyTargetingRule]=\"isPercentageOnly()\"\n [showPercentageEvaluationAttribute]=\"showPercentageEvaluationAttribute\"\n [percentageEvaluationAttribute]=\"percentageEvaluationAttribute\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\">\n </app-percentage-options>\n <app-feature-flag-value class=\"grow\" *ngIf=\"formGroup.controls.value\" [flagState]=\"flagState\"\n [formGroup]=\"formGroup.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\" tooltip=\"Served value\"></app-feature-flag-value>\n </div>\n\n <div class=\"add-perc flex side-padd bot-padd\" *ngIf=\"formGroup.controls.value && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"convertToPercentage()\" matTooltip=\"Target a percentage of users to whom this rule applies\"\n class=\"add-btn add-perc-btn\">+ % OPTION</div>\n </div>\n</div>","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormArray } from '@angular/forms';\nimport {\n UserComparator, ISegment, SegmentComparator,\n UpdateSettingValueForm, TargetingRuleForm, ConditionForm,\n FormGenerator, IFeatureFlagLimitations, IPrerequisiteChanged, IFlagState\n} from '../../../bootstrap';\n\n@Component({\n selector: 'app-evaluation-formula',\n templateUrl: './evaluation-formula.component.html',\n styleUrls: [\n './evaluation-formula.component.scss',\n './chips.scss',\n './add-btn.scss'\n ]\n})\nexport class EvaluationFormulaComponent {\n @Input() formGroup: FormGroup<UpdateSettingValueForm>;\n @Input() segments: ISegment[];\n @Input() flagState: IFlagState;\n @Input() showVariationId: boolean;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() canManageSegments: boolean;\n @Input() showPercentageEvaluationAttribute: boolean;\n\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n @Output() changePercentageEvaluationAttributeRequested = new EventEmitter();\n\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter<IPrerequisiteChanged>();\n @Output() recalcAddButtons = new EventEmitter();\n\n constructor(private formGenerator: FormGenerator) { }\n\n addUserCondition() {\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = new FormGroup<TargetingRuleForm>({\n conditions: new FormArray<FormGroup<ConditionForm>>([\n this.formGenerator.generateConditionFormGroup({\n userCondition: { comparisonAttribute: 'Identifier', comparator: UserComparator.SensitiveTextEquals, comparisonValue: { stringValue: '' } }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations)\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.featureFlagLimitations)\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addSegmentCondition() {\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n if (this.segments.length === 0) {\n this.addSegmentConditionRequestedWithoutSegments.emit();\n return false;\n }\n\n const formGroup = new FormGroup<TargetingRuleForm>({\n conditions: new FormArray<FormGroup<ConditionForm>>([\n this.formGenerator.generateConditionFormGroup({\n segmentCondition: { comparator: SegmentComparator.IsIn, segmentId: null }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations)\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.featureFlagLimitations)\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addPrerequisiteFlagCondition() {\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = new FormGroup<TargetingRuleForm>({\n conditions: new FormArray<FormGroup<ConditionForm>>([\n new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: this.formGenerator.generateEmptyPrerequisiteFlagConditionFormGroup(this.featureFlagLimitations)\n })\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.featureFlagLimitations)\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addPercentageOptions() {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return false;\n }\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = this.formGenerator.generateTargetingRuleWithEmptyPercentageOptions(\n this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations\n )\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addTargetingRuleFormGroup(formGroup: FormGroup<TargetingRuleForm>) {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n this.formGroup.controls.targetingRules.insert(this.formGroup.controls.targetingRules.controls.length - 1, formGroup);\n } else {\n this.formGroup.controls.targetingRules.push(formGroup);\n }\n this.recalcAddButtons.emit();\n return true;\n }\n\n checkFeatureFlagLimitations() {\n if (this.formGroup.controls.targetingRules.length >= this.featureFlagLimitations.maxTargetingRuleCount) {\n this.subscriptionLimitReached.emit();\n return false;\n }\n return true;\n }\n\n trackByIndex(index: number): any {\n return index;\n }\n\n onDrop(event: CdkDragDrop<any>) {\n const targetingRules = this.formGroup.controls.targetingRules.controls;\n moveItemInArray(targetingRules, event.previousIndex, event.currentIndex);\n this.formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n }\n\n isDragDisabled(targetingRule: FormGroup<TargetingRuleForm>) {\n // If the last targeting rule has only percentage options, we should not allow moving anything before/after it.\n return this.flagState.readOnly || this.formGenerator.isPercentageOnlyTargetingRule(targetingRule);\n }\n\n sortPredicate() {\n return (index: number) => this.sortPredicateFunction(index);\n }\n\n sortPredicateFunction(index: number) {\n // If the last targeting rule has only percentage options, we should not allow moving anything before/after it.\n return index < this.formGroup.controls.targetingRules.controls.length - 1 ||\n !this.formGenerator.isPercentageOnlyTargetingRule(this.formGroup.controls.targetingRules.controls[index])\n }\n\n getChipText(): string {\n if (this.formGroup.controls.targetingRules.controls.length > 0) {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return 'To unidentified:';\n } else {\n return 'To all others:';\n }\n }\n\n return 'To all users:';\n }\n\n getChipTooltip(): string {\n if (this.formGroup.controls.targetingRules.controls.length > 0) {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return 'This fallback value will be served in case the user can\\'t be identified.';\n } else {\n return 'This value will be served to all users who the above rules don\\'t apply.';\n }\n }\n\n return '';\n }\n\n remove(index: number): void {\n const shouldEmitPrerequisiteChanged = this.formGroup.controls\n .targetingRules.controls[index].controls\n .conditions?.controls\n .some(c => c.controls.prerequisiteFlagCondition);\n this.formGroup.controls.targetingRules.removeAt(index);\n this.formGroup.controls.targetingRules.markAsDirty();\n this.recalcAddButtons.emit();\n if (shouldEmitPrerequisiteChanged) {\n this.recalcPrerequisiteReferences();\n }\n }\n\n subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n\n recalcPrerequisiteReferences(): void {\n const prerequisiteIds = []\n for (const rule of this.formGroup.controls.targetingRules.controls) {\n for (const condition of rule.controls.conditions.controls) {\n if (condition.controls.prerequisiteFlagCondition) {\n prerequisiteIds.push(condition.controls.prerequisiteFlagCondition.controls.prerequisiteSettingId.value)\n }\n }\n }\n this.prerequisiteConditionChanged.emit({\n settingId: this.flagState.settingValue.setting.settingId,\n prerequisiteIds: prerequisiteIds\n });\n }\n}\n","<div class=\"targeting-rule-outer\" *ngIf=\"flagState.addButtonRenderState.renderTopAddButtons && !flagState.readOnly\">\n <div class=\"grow vertical-center add-box pad-bottom left-align\">\n <div class=\"add-btn add-if\" [matMenuTriggerFor]=\"ormenu\" \n matTooltip=\"Add targeting rule\">+ IF</div>\n <div class=\"add-btn add-if pad-left\" (click)=\"addPercentageOptions()\" matTooltip=\"Target a percentage of users\" \n *ngIf=\"!flagState.addButtonRenderState.hasPercentageOnlyRule\">+ %</div>\n </div>\n</div>\n\n<div cdkDropList (cdkDropListDropped)=\"onDrop($event)\" [cdkDropListDisabled]=\"flagState.readOnly\" [cdkDropListSortPredicate]=\"sortPredicate()\">\n <div *ngFor=\"let targetingRule of formGroup.controls.targetingRules.controls; trackBy: trackByIndex; let i = index\">\n <div class=\"targeting-rule-outer grow\" cdkDrag [cdkDragDisabled]=\"isDragDisabled(targetingRule)\"\n [cdkDragData]=\"targetingRule\">\n <div class=\"drag-handle\">\n <div *ngIf=\"!isDragDisabled(targetingRule)\" cdkDragHandle matTooltip=\"Drag here to reorder\"\n matTooltipPosition=\"above\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n <div class=\"white-box grow\">\n <app-targeting-rule class=\"grow\" [formGroup]=\"targetingRule\" [segments]=\"segments\"\n [flagState]=\"flagState\" [targetingRuleIndex]=\"i\"\n (removedAllRules)=\"remove(i)\" [featureFlagLimitations]=\"featureFlagLimitations\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n [canManageSegments]=\"canManageSegments\" (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [showPercentageEvaluationAttribute]=\"showPercentageEvaluationAttribute\"\n [percentageEvaluationAttribute]=\"formGroup.controls.percentageEvaluationAttribute.value\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisiteReferences()\"></app-targeting-rule>\n <div class=\"delete\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove targeting rule\" (click)=\"remove(i)\"\n *ngIf=\"!flagState.readOnly\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"targeting-rule-outer\" *ngIf=\"flagState.addButtonRenderState.addRuleButtonTracker[i]?.showAddRuleButtons && !flagState.readOnly\">\n <div class=\"grow vertical-center add-box pad-bottom pad-top center-shift\">\n <div class=\"add-btn add-if\" \n [matMenuTriggerFor]=\"ormenu\" \n matTooltip=\"Add targeting rule\" \n *ngIf=\"!flagState.readOnly\">+ OR</div>\n <div class=\"add-btn add-if pad-left\" (click)=\"addPercentageOptions()\" \n matTooltip=\"Target a percentage of users\" \n *ngIf=\"!flagState.addButtonRenderState.hasPercentageOnlyRule\">+ %</div>\n </div>\n </div>\n <div class=\"or-chip\" *ngIf=\"flagState.addButtonRenderState.addRuleButtonTracker[i]?.showOrChip\">\n <div class=\"chip-container\">\n <mat-chip-set>\n <mat-chip disabled>OR</mat-chip>\n </mat-chip-set>\n </div>\n </div>\n <div class=\"or-chip\" *ngIf=\"flagState.addButtonRenderState.addRuleButtonTracker[i]?.renderSeparationArea\"></div>\n </div>\n</div>\n\n<div class=\"targeting-rule-outer\">\n <div class=\"drag-handle\"></div>\n <div class=\"white-box grow side-padd vertical-center\">\n <div class=\"chip-container fixed-width\" [ngClass]=\"flagState.addButtonRenderState.hasPercentageOnlyRule ? 'fixed-width-wide' : ''\">\n <mat-chip-set matTooltipPosition=\"above\" [matTooltip]=\"getChipTooltip()\">\n <mat-chip disabled>{{getChipText()}}</mat-chip>\n </mat-chip-set>\n </div>\n <app-feature-flag-value class=\"value grow\" [flagState]=\"flagState\"\n tooltip=\"Served value\" [formGroup]=\"formGroup.controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n </div>\n</div>\n\n<mat-menu #ormenu class=\"menu-long-text-or\">\n <a mat-menu-item (click)=\"addUserCondition()\"><mat-icon>track_changes</mat-icon>Add rule with user condition</a>\n <a mat-menu-item (click)=\"addSegmentCondition()\"><mat-icon>pie_chart</mat-icon>Add rule with segment condition</a>\n <div matTooltip=\"There's no other flag in the Config to select as a prerequisite.\"\n [matTooltipDisabled]=\"flagState.prerequisiteSettings.length > 0\">\n <a mat-menu-item (click)=\"addPrerequisiteFlagCondition()\" [disabled]=\"!flagState.prerequisiteSettings.length\">\n <mat-icon>account_tree</mat-icon>Add rule with flag condition (prerequisite)\n </a>\n </div>\n</mat-menu>","import { Component, Inject, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormHelper, FormGenerator } from '../../../bootstrap';\n\n@Component({\n selector: 'app-percentage-evaluation-attribute-dialog',\n templateUrl: './percentage-evaluation-attribute-dialog.component.html',\n styleUrls: ['./percentage-evaluation-attribute-dialog.component.scss']\n})\nexport class PercentageEvaluationAttributeDialogComponent implements OnInit {\n\n FormHelper = FormHelper;\n readOnly: boolean;\n defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n formControl: FormControl<string>;\n\n constructor(\n public dialogRef: MatDialogRef<PercentageEvaluationAttributeDialogComponent>,\n private formGenerator: FormGenerator,\n @Inject(MAT_DIALOG_DATA) public data: { percentageEvaluationAttribute: string, readOnly: boolean }\n ) {\n }\n\n ngOnInit(): void {\n this.formControl = this.formGenerator.generatePercentageEvaluationAttributeFormControl(this.data.percentageEvaluationAttribute, this.data.readOnly)\n }\n\n close() {\n this.dialogRef.close();\n }\n\n attributeChanged(event: Event): void {\n const value = (event.target as HTMLSelectElement).value;\n if (this.defaultComparisonAttributes.indexOf(value) === 0) {\n if (this.formControl.value !== null) {\n this.formControl.setValue(null);\n this.formControl.markAsDirty();\n }\n } else if (this.isDefault(value)) {\n if (this.formControl.value !== value) {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n }\n } else if (this.formControl.value !== '') {\n this.formControl.setValue('');\n this.formControl.markAsDirty();\n }\n }\n\n isDefault(attribute: string): boolean {\n return attribute === null || this.defaultComparisonAttributes.indexOf(attribute) !== -1;\n }\n\n set() {\n if (this.formControl.invalid) {\n this.formControl.markAsTouched();\n return;\n }\n\n this.dialogRef.close({ percentageEvaluationAttribute: this.formControl.value });\n }\n}\n\n","<h1 mat-dialog-title>Change percentage evaluation attribute</h1>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n When evaluating percentage-based user targeting, ConfigCat should use a specific user attribute as the basis for\n determining whether a user falls within the targeted percentage group.</p>\n\n <div class=\"components\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Evaluation attribute</mat-label>\n <mat-hint>This attribute will be used in all percentage based targeting within this feature flag.</mat-hint>\n <select matNativeControl (change)=\"attributeChanged($event)\" [disabled]=\"formControl.disabled\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes; let i = index\"\n [selected]=\"comparisonAttribute === formControl.value || (formControl.value === null && i === 0)\">\n {{comparisonAttribute}}</option>\n <option [selected]=\"!isDefault(formControl.value)\">\n Custom\n </option>\n </select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"isDefault(formControl.value)\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\">\n <mat-error *ngIf=\"formControl.invalid\">\n {{FormHelper.getErrorMessage(formControl)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\"> <a\n href=\"https://configcat.com/docs/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\" rel=\"noopener noreferrer\">\n Read more </a> about percentage-based targeting in the docs.</p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n</div>","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { IDependeeSetting } from '../../../_models/setting-value-formgroup';\nimport { Router } from '@angular/router';\nimport { PublicApiService } from '../../../_services';\n\n@Component({\n selector: 'app-dependees-dialog',\n templateUrl: './dependees-dialog.component.html'\n})\nexport class DependeesDialogComponent {\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: {\n dependees: IDependeeSetting[],\n name: string,\n organizationId: string,\n productId: string,\n configId: string,\n environmentId: string\n },\n\n private router: Router,\n private publicApiService: PublicApiService\n ) { }\n\n getDashboardUrl(settingId: number) {\n const urlTree = this.router.createUrlTree(['v2', this.data.organizationId,\n this.data.productId, this.data.configId, this.data.environmentId, settingId]);\n return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);\n }\n}\n","<h1 mat-dialog-title>Prerequisite references</h1>\n<div mat-dialog-content>\n <p>\n <strong>{{data.name}}</strong> is the prerequisite of the following feature flags:\n </p>\n <ul *ngFor=\"let dependee of data.dependees\">\n <li><a [href]=\"getDashboardUrl(dependee.settingId)\" rel=\"noopener noreferrer\" target=\"_blank\">{{dependee.name}}\n ({{dependee.key}})</a></li>\n </ul>\n</div>\n\n<div mat-dialog-actions>\n <button type=\"button\" mat-stroked-button mat-dialog-close>Close</button>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n MessagingService, ISegment,\n IPrerequisiteChanged, IFeatureFlagLimitations, UpdateSettingValueForm,\n FormGenerator, SettingType, IFlagState\n} from '../../bootstrap';\nimport { PercentageEvaluationAttributeDialogComponent } from './percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component';\nimport { Router } from '@angular/router';\nimport { PublicApiService } from '../../_services';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { DependeesDialogComponent } from './dependees-dialog/dependees-dialog.component';\n\nexport interface IGlance {\n ruleText: string\n percentageText: string\n class: string\n}\n\n@Component({\n selector: 'app-feature-flag',\n templateUrl: './feature-flag.component.html',\n styleUrls: [\n './feature-flag.component.scss'\n ]\n})\nexport class FeatureFlagComponent {\n @Input() formGroup: FormGroup<UpdateSettingValueForm>;\n @Input() flagState: IFlagState;\n @Input() segments: ISegment[];\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() hasOtherEnvironment: boolean;\n @Input() environmentName = \"\";\n @Input() showEnvironmentName = false;\n @Input() deleteSettingText = 'Delete setting';\n @Input() canDeleteSetting = false;\n\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n\n @Output() expandedChanged = new EventEmitter<boolean>();\n @Output() deleteSettingRequested = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter<IPrerequisiteChanged>();\n @Output() recalcAddButtons = new EventEmitter();\n\n constructor(\n private dialog: MatDialog,\n private messagingService: MessagingService,\n private formGenerator: FormGenerator,\n private router: Router,\n private publicApiService: PublicApiService,\n private clipboard: Clipboard) {\n }\n\n setExpanded(expanded: boolean) {\n this.expandedChanged.emit(expanded);\n }\n\n deleteSetting() {\n this.deleteSettingRequested.emit({ setting: this.flagState.settingValue.setting });\n }\n\n keyCopied() {\n this.messagingService.showSuccessSnack('Copied.');\n }\n\n subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n\n changePercentageEvaluationAttribute() {\n if (this.flagState.readOnly) {\n return;\n }\n\n const dialogRef = this.dialog.open(PercentageEvaluationAttributeDialogComponent, {\n width: '500px',\n data: {\n percentageEvaluationAttribute: this.formGroup.controls.percentageEvaluationAttribute.value,\n readOnly: this.flagState.readOnly\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result && result.percentageEvaluationAttribute !== this.formGroup.controls.percentageEvaluationAttribute.value) {\n this.formGroup.controls.percentageEvaluationAttribute.setValue(result.percentageEvaluationAttribute);\n this.formGroup.controls.percentageEvaluationAttribute.updateValueAndValidity();\n this.formGroup.controls.percentageEvaluationAttribute.markAsDirty();\n this.formGroup.controls.percentageEvaluationAttribute.markAsTouched();\n }\n });\n }\n\n getGlance(): IGlance {\n if (this.formGroup.controls.targetingRules.length === 0 || this.flagState.panelExpanded) {\n return null;\n }\n\n const glance: IGlance = { ruleText: this.getRuleText(), percentageText: '', class: 'default' }\n\n const hasTrueRule = this.formGroup.controls.targetingRules.controls.some(r => r.controls.value?.controls?.boolValue?.value === true);\n const lastFormulaTerm = this.formGroup.controls.targetingRules.controls[this.formGroup.controls.targetingRules.controls.length - 1];\n if (this.formGenerator.isPercentageOnlyTargetingRule(lastFormulaTerm)) {\n if (this.flagState.settingValue.setting.settingType === SettingType.Boolean) {\n const boolRule = lastFormulaTerm.controls.percentageOptions.controls.filter(p => p.controls.value.controls?.boolValue?.value)[0];\n if (boolRule.controls.percentage.value > 0) {\n glance.percentageText = 'ON for ' + boolRule.controls.percentage.value + '%';\n glance.class = 'on';\n }\n else {\n glance.percentageText = 'OFF (%)';\n glance.class = hasTrueRule ? 'on' : 'off'\n }\n } else {\n glance.percentageText = lastFormulaTerm.controls.percentageOptions.controls.map(p => p.controls.percentage.value + '%').join(' / ');\n glance.class = 'other';\n }\n } else {\n switch (this.flagState.settingValue.setting.settingType) {\n case SettingType.Double:\n glance.percentageText = this.formGroup.controls.defaultValue.value.doubleValue?.toString() ?? '';\n break;\n case SettingType.Int:\n glance.percentageText = this.formGroup.controls.defaultValue.value.intValue?.toString() ?? '';\n break;\n case SettingType.String:\n glance.percentageText = this.formGroup.controls.defaultValue.value.stringValue;\n break;\n case SettingType.Boolean:\n glance.percentageText = this.formGroup.controls.defaultValue.value.boolValue === true ? 'ON' : 'OFF';\n break;\n }\n\n if (this.flagState.settingValue.setting.settingType === SettingType.Boolean) {\n glance.class = this.formGroup.controls.defaultValue.value.boolValue === true || hasTrueRule ? 'on' : 'off';\n } else {\n glance.class = 'other';\n }\n }\n\n return glance;\n }\n\n getRuleText(): string {\n const count = this.formGroup.controls.targetingRules.controls.filter(tr => !this.formGenerator.isPercentageOnlyTargetingRule(tr)).length;\n if (count === 0) {\n return '';\n }\n\n return '+ ' + count + ' rule' + (count > 1 ? 's' : '');\n }\n\n copyDirectLink() {\n try {\n this.clipboard.copy(this.getDashboardUrl());\n this.messagingService.showSuccessSnack(\"Copied direct link to clipboard.\");\n } catch {\n this.messagingService.showSuccessSnack(\"Clipboard unavailable.\");\n }\n }\n\n getDashboardUrl() {\n const urlTree = this.router.createUrlTree(['v2', this.flagState.settingValue.config.product.organization.organizationId,\n this.flagState.settingValue.config.product.productId, this.flagState.settingValue.config.configId, this.flagState.settingValue.environment.environmentId, this.flagState.settingValue.setting.settingId]);\n return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);\n }\n\n openDependeesDialog() {\n this.dialog.open(DependeesDialogComponent, {\n data: {\n dependees: this.flagState.dependeeSettings,\n name: this.flagState.settingValue.setting.name,\n organizationId: this.flagState.settingValue.config.product.organization.organizationId,\n productId: this.flagState.settingValue.config.product.productId,\n configId: this.flagState.settingValue.config.configId,\n environmentId: this.flagState.settingValue.environment.environmentId\n }\n });\n }\n}\n","<div class=\"outer\">\n <div class=\"mat-elevation-z0 feature-flag\" [ngClass]=\"{'invalid': formGroup.touched && formGroup.invalid}\">\n <div class=\"expandcollapse\">\n <div *ngIf=\"flagState.panelExpanded\" matTooltip=\"Collapse\" (click)=\"setExpanded(!flagState.panelExpanded)\"\n class=\"btn\">\n <mat-icon>arrow_drop_up</mat-icon>\n </div>\n <div *ngIf=\"!flagState.panelExpanded\" matTooltip=\"Expand\" (click)=\"setExpanded(!flagState.panelExpanded)\"\n class=\"btn\">\n <mat-icon>arrow_drop_down</mat-icon>\n </div>\n </div>\n <div class=\"header\">\n <div class=\"top\">\n <div class=\"left\">\n <div class=\"name-key\">\n <span class=\"name\"\n [matTooltip]=\"flagState.settingValue.setting.name\">{{flagState.settingValue.setting.name}}</span>\n <span *ngIf=\"showEnvironmentName\" class=\"environment-name\" [matTooltip]=\"environmentName\">({{environmentName}})</span>\n <span class=\"key-outer\" matTooltip=\"Copy feature flag key to clipboard\"\n [cdkCopyToClipboard]=\"flagState.settingValue.setting.key\"\n (cdkCopyToClipboardCopied)=\"keyCopied()\">\n <span class=\"key\">\n <code>{{flagState.settingValue.setting.key}}</code>\n </span>\n <mat-icon>content_copy</mat-icon>\n </span>\n </div>\n </div>\n\n <div class=\"right\">\n <div class=\"line\">\n <button type=\"button\" class=\"prereq-button\" mat-icon-button\n *ngIf=\"flagState.dependeeSettings && flagState.dependeeSettings.length\"\n [track]=\"['prerequisite button click', 'Feature flags & settings V2 page']\"\n [matTooltip]=\"'Prerequisite of '+flagState.dependeeSettings.length+' other flag(s).'\"\n (click)=\"openDependeesDialog()\">\n <mat-icon>account_tree</mat-icon>\n </button>\n <button type=\"button\" class=\"more-button\" [matMenuTriggerFor]=\"moreMenu\" mat-icon-button\n [track]=\"['more menu button click', 'Feature flags & settings V2 page']\" matTooltip=\"More\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"hint-container\">\n <div class=\"hint\" *ngIf=\"flagState.settingValue.setting.hint\">\n {{flagState.settingValue.setting.hint}}\n </div>\n\n <app-feature-flag-value class=\"glance\"\n [class.text-glance]=\"flagState.settingValue.setting.settingType !== 'boolean'\"\n *ngIf=\"!flagState.panelExpanded && !formGroup.controls.targetingRules.length\"\n [flagState]=\"flagState\" [formGroup]=\"formGroup.controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations\" tooltip=\"Served value\"></app-feature-flag-value>\n\n <div class=\"quick-glance\" *ngIf=\"getGlance() as glance\" (click)=\"setExpanded(!flagState.panelExpanded)\">\n <div class=\"container\" [class]=\"glance.class\">\n <div class=\"quick-glance-item\" *ngIf=\"glance.percentageText\">{{glance.percentageText}}</div>\n <div class=\"quick-glance-item\" *ngIf=\"glance.ruleText\">{{glance.ruleText}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"flagState.panelExpanded\">\n <div class=\"eval-formula-wrapper\">\n <app-evaluation-formula [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n [featureFlagLimitations]=\"featureFlagLimitations\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\" [canManageSegments]=\"false\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [showPercentageEvaluationAttribute]=\"!!formGroup.controls.percentageEvaluationAttribute.value\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttribute()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit($event)\"\n (recalcAddButtons)=\"recalcAddButtons.emit()\">\n </app-evaluation-formula>\n </div>\n </ng-container>\n </div>\n</div>\n<mat-menu #moreMenu=\"matMenu\">\n <div mat-menu-item data-robot=\"history\" (click)=\"changePercentageEvaluationAttribute()\"\n [track]=\"['change percentage attribute click', 'Feature flags & settings V2 page']\"\n [disabled]=\"this.flagState.readOnly\">\n <mat-icon>percent</mat-icon>\n <span>Change percentage attribute</span>\n </div>\n <a href=\"{{getDashboardUrl()}}\" target=\"_blank\" rel=\"noopener noreferrer\">\n <div mat-menu-item data-robot=\"history\">\n <mat-icon>open_in_new</mat-icon>\n <span>Open in ConfigCat</span>\n </div>\n </a>\n <div mat-menu-item data-robot=\"renameSetting\"\n [track]=\"['copy direct link click', 'Feature flags & settings V2 page']\" (click)=\"copyDirectLink()\">\n <mat-icon>content_copy</mat-icon>\n <span>Copy direct link</span>\n </div>\n <div *ngIf=\"canDeleteSetting\">\n <mat-divider></mat-divider>\n <div mat-menu-item data-robot=\"deleteSetting\"\n [track]=\"['delete feature flag click', 'Feature flags & settings V2 page']\" (click)=\"deleteSetting()\">\n <mat-icon>delete_outline</mat-icon>\n <span>{{deleteSettingText}}</span>\n </div>\n </div>\n</mat-menu>","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { BaseComponent } from '../base/base.component';\nimport { SegmentListModel, SettingDataModel, SettingFormulaModel, UpdateEvaluationFormulaModel } from 'ng-configcat-publicapi';\nimport { IFlagState } from '../_models/flag-state';\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { IPrerequisiteSetting, TargetingRuleForm, UpdateSettingValueForm } from '../_models/setting-value-formgroup';\nimport { PublicApiService } from '../_services';\nimport { Subscription, forkJoin, throwError } from 'rxjs';\nimport { ConfirmationDialogComponent } from '../dialogs/confirmation-dialog/confirmation-dialog';\nimport { ReasonDialogComponent } from '../dialogs/reason-dialog/reason-dialog.component';\nimport { FormGenerator } from '../_services/form-generator';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { SaveSnackbarComponent } from '../dialogs/save-snackbar/save-snackbar.component';\nimport { DeleteSettingModel } from '../_models';\nimport { RerouteDialogComponent } from '../bootstrap';\n\n@Component({\n selector: 'configcat-feature-flag-item',\n templateUrl: './feature-flag-item.component.html',\n styleUrls: ['./feature-flag-item.component.scss']\n})\nexport class FeatureFlagItemComponent extends BaseComponent implements OnInit, OnDestroy {\n\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n @Input() settingId!: number;\n\n @Input() canDeleteSetting = true;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = true;\n\n @Output() deleteSettingRequested = new EventEmitter();\n\n @Output() loadSucceeded = new EventEmitter();\n @Output() loadFailed = new EventEmitter();\n @Output() saveSucceeded = new EventEmitter();\n @Output() saveFailed = new EventEmitter();\n @Output() expandedStateChanged = new EventEmitter();\n @Output() formValuesChanged = new EventEmitter();\n\n segments!: SegmentListModel[];\n dashboardBasePath: string;\n loading = true;\n\n formGroup: FormGroup<UpdateSettingValueForm>;\n formValueChangesSubscription: Subscription;\n\n settings: SettingDataModel[];\n\n flagState: IFlagState;\n\n settingFormula: SettingFormulaModel;\n prerequisiteSettings: IPrerequisiteSetting[];\n\n showFeedBackMessage = false;\n\n hasSettingValues = false;\n\n hasOtherEnvironment = false;\n\n constructor(\n private formGenerator: FormGenerator,\n private dialog: MatDialog,\n private snackBar: MatSnackBar,\n publicApiService: PublicApiService\n ) {\n super(publicApiService);\n this.dashboardBasePath = publicApiService.getDashboardBasePath();\n }\n\n\n ngOnInit() {\n this.reloadSettingValues();\n }\n\n ngOnDestroy(): void {\n this.unsubscribeFormValueChangesSubscription();\n }\n\n reloadSettingValues() {\n\n this.loading = true;\n this.createSettingValuesV2Service()\n\n forkJoin({\n segments: this.createSegmentsService().getSegments(this.productId),\n settings: this.createSettingsService().getSettings(this.configId),\n settingFormula: this.createSettingValuesV2Service().getSettingValueV2(this.environmentId, this.settingId)\n }).subscribe(result => {\n this.settings = result.settings;\n this.prerequisiteSettings = this.settings.map(sv => {\n return {\n settingId: sv.settingId,\n key: sv.key,\n name: sv.name,\n settingType: sv.settingType\n }\n });\n this.segments = result.segments;\n this.handleFetchedSettingValues(result.settingFormula);\n this.loading = false;\n this.loadSucceeded.emit();\n },\n (error) => {\n this.loadFailed.emit(error);\n return throwError(error);\n });\n }\n\n handleFetchedSettingValues(model: SettingFormulaModel) {\n this.settingFormula = model;\n // when we have less we had previously\n this.flagState = {\n addButtonRenderState: {\n hasPercentageOnlyRule: false,\n renderTopAddButtons: false,\n addRuleButtonTracker: []\n },\n readOnly: model.readOnly,\n dependeeSettings: [],\n settingValue: model,\n panelExpanded: true,\n prerequisiteSettings: this.getAvailablePrerequisiteSettings(model.setting.settingId)\n }\n\n this.unsubscribeFormValueChangesSubscription();\n\n this.createFormGroupFromState(this.settingFormula);\n\n this.formValueChangesSubscription = this.formGroup.valueChanges.subscribe(() => {\n this.formValuesChanged.emit();\n })\n\n this.recalcAddButtons();\n this.recalcPrerequisites();\n }\n\n unsubscribeFormValueChangesSubscription() {\n if (this.formValueChangesSubscription) {\n this.formValueChangesSubscription.unsubscribe();\n this.formValueChangesSubscription = null;\n }\n }\n\n private createFormGroupFromState(model: SettingFormulaModel) {\n this.formGroup = this.formGenerator.generateSettingValuesFormGroup(model, model.readOnly, this.prerequisiteSettings, model.featureFlagLimitations);\n }\n\n getAvailablePrerequisiteSettings(settingId: number) {\n return this.prerequisiteSettings.filter(ds => ds.settingId !== settingId);\n }\n\n revert() {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'Revert to last saved state?',\n body: 'All changes will be lost.',\n yesButtonLabel: 'Revert',\n noButtonLabel: 'No'\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'yes') {\n this.revertDirtyValuesFromState();\n }\n });\n }\n\n revertDirtyValuesFromState() {\n\n if (this.formGroup.dirty) {\n this.formGroup.setControl('defaultValue',\n this.formGenerator.generateValueFormGroup(this.settingFormula.defaultValue, this.settingFormula.setting.settingType, this.settingFormula.readOnly, this.settingFormula.featureFlagLimitations));\n this.formGroup.setControl('percentageEvaluationAttribute',\n new FormControl({ value: this.settingFormula.percentageEvaluationAttribute, disabled: this.settingFormula.readOnly }, { validators: [Validators.max(1000)] }),);\n this.formGroup.setControl('targetingRules',\n new FormArray<FormGroup<TargetingRuleForm>>(\n this.settingFormula.targetingRules.map(ft => this.formGenerator.generateTargetingRuleFormGroup(ft, this.settingFormula.setting.settingType, this.settingFormula.readOnly, this.prerequisiteSettings, this.settingFormula.featureFlagLimitations))\n ));\n this.recalcAddButtons();\n }\n\n this.formGroup.markAsPristine();\n this.formGroup.markAsUntouched();\n this.recalcPrerequisites();\n this.showFeedBackMessage = false;\n }\n\n submit() {\n if (!this.formGroup) {\n return;\n }\n\n if (!this.formGroup.valid) {\n this.showFeedBackMessage = true;\n this.formGroup.markAllAsTouched();\n return;\n }\n\n this.showFeedBackMessage = false;\n const value: UpdateEvaluationFormulaModel = {\n ...this.formGroup.getRawValue(),\n };\n\n this.updateSettingValues(value);\n }\n\n updateSettingValues(updateModel: UpdateEvaluationFormulaModel, reason: string = null) {\n\n this.createSettingValuesV2Service().replaceSettingValueV2(this.environmentId, this.settingId, updateModel, reason)\n .subscribe({\n next: settingValues => {\n this.handleFetchedSettingValues(settingValues);\n\n this.snackBar.openFromComponent(SaveSnackbarComponent, { duration: 5000, panelClass: 'green-snackbar' });\n this.saveSucceeded.emit();\n },\n error: (error) => {\n\n if (error.status === 400 && error.error && error.error.Reason && error.error.Reason[0] === 'Reason required.') {\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\n width: '450px'\n });\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result && result.button === 'save' && result.reason) {\n this.updateSettingValues(updateModel, result.reason);\n }\n });\n return;\n }\n\n if (error.status === 400 && error.error && error.error.SegmentCondition && error.error.SegmentCondition[0] === 'Segment not found.') {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n width: '450px',\n data: {\n title: 'Cannot save feature flags',\n body: 'A segment referenced by one of your feature flags has been deleted. Reload the config to see its latest state, apply your changes and try the save again.',\n yesButtonLabel: 'Reload',\n hideNoButton: true\n }\n });\n dialogRef.afterClosed()\n .subscribe(() => {\n this.reloadSettingValues();\n });\n return;\n }\n\n if (error.status === 400 && error.error && ('' + error.error).startsWith('Circular dependency detected.')) {\n const errorMessage = ('' + error.error).slice('Circular dependency detected.'.length + 1);\n this.dialog.open(ConfirmationDialogComponent, {\n width: '450px',\n data: {\n title: 'Cannot save feature flags.',\n body: 'Circular dependency detected between the following feature flags:<p>' + errorMessage + '</p>Please <strong>eliminate the circular dependency</strong> before saving your feature flags.',\n yesButtonLabel: 'I understand',\n hideNoButton: true\n }\n });\n return;\n }\n\n this.formGroup.setErrors({ internalServerError: 'Internal server error' });\n this.formGroup.markAsTouched();\n this.showFeedBackMessage = true;\n this.saveFailed.emit();\n }\n });\n }\n\n onDeleteSettingRequested(setting) {\n if (this.formGroup.dirty) {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'Discard changes?',\n body: 'You have unsaved feature flag changes. If you continue, unsaved changes will be lost.',\n yesButtonLabel: 'Discard changes',\n noButtonLabel: 'No'\n }\n });\n\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result === 'yes') {\n this.revertDirtyValuesFromState();\n this.deleteSettingInternal(setting);\n }\n });\n } else {\n this.deleteSettingInternal(setting);\n }\n }\n\n private deleteSettingInternal(setting) {\n this.deleteSettingRequested.emit(<DeleteSettingModel>{ config: this.settingFormula.config, environment: this.settingFormula.environment, setting: setting.setting })\n }\n\n subscriptionLimitReachedCalled() {\n this.dialog.open(RerouteDialogComponent, {\n data: {\n title: 'You have reached the limits of your plan',\n body: ` Upgrade your plan or join our <a href=\"https://configcat.com/referrals\" target=\"_blank\" rel=\"noopener noreferrer\">referral program</a> to increase your limits.`,\n yesButtonLabel: `See plans`,\n yesButtonLink: this.dashboardBasePath + \"/organization/plans\",\n noButtonLabel: `Close`\n }\n });\n }\n\n addSegmentConditionRequestedWithoutSegments() {\n this.dialog.open(RerouteDialogComponent, {\n data: {\n title: 'There are no segments in this product yet.',\n body: `Go ahead to the ConfiCat Dashboard and create your first user segment before adding it to a targeting rule.`,\n yesButtonLabel: `Go to the dashboard`,\n yesButtonLink: this.dashboardBasePath + \"/product/\" + this.productId + \"/segments\"\n }\n });\n }\n\n trackByIndex(index: number): any {\n return index;\n }\n\n recalcPrerequisites(): void {\n const settingValue = this.settingFormula;\n this.flagState.dependeeSettings = this.settings.filter(s => settingValue.settingIdsWherePrerequisite?.includes(s.settingId))\n .map(s => { return { key: s.key, name: s.name, settingId: s.settingId } });\n return;\n }\n\n recalcAddButtons(): void {\n const state = this.flagState;\n const group = this.formGroup;\n\n state.addButtonRenderState.renderTopAddButtons = !group.controls.targetingRules.controls.length ||\n this.hasOnlyPercentageRule(group);\n\n if (!group.controls.targetingRules.controls.length) {\n state.addButtonRenderState.addRuleButtonTracker = [];\n state.addButtonRenderState.hasPercentageOnlyRule = false;\n } else {\n const hasPercOnly = state.addButtonRenderState.hasPercentageOnlyRule = group.controls.targetingRules.controls.length > 0\n && this.formGenerator.isPercentageOnlyTargetingRule(group.controls.targetingRules.controls[group.controls.targetingRules.controls.length - 1]);\n state.addButtonRenderState.addRuleButtonTracker = group.controls.targetingRules.controls.map((item, i, rules) => {\n const isLastRule = i === group.controls.targetingRules.controls.length - 1;\n const isBeforeLast = i === group.controls.targetingRules.controls.length - 2;\n return {\n showAddRuleButtons: hasPercOnly ? i === rules.length - 2 : i === rules.length - 1,\n showOrChip: hasPercOnly ? i < rules.length - 2 : i < rules.length - 1,\n renderSeparationArea: this.formGenerator.isPercentageOnlyTargetingRule(item) ||\n (this.settingFormula.readOnly && (isLastRule || (hasPercOnly && isBeforeLast))),\n }\n });\n }\n }\n\n hasOnlyPercentageRule(group: FormGroup<UpdateSettingValueForm>): boolean {\n return group.controls.targetingRules.controls.length === 1 &&\n this.formGenerator.isPercentageOnlyTargetingRule(group.controls.targetingRules.controls[0])\n }\n\n expandedChanged(expandedState: boolean): void {\n this.flagState.panelExpanded = expandedState;\n this.expandedStateChanged.emit();\n }\n}\n","<div class=\"container\">\n <ng-container *ngIf=\"!loading\">\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" id=\"feature-flag-form\">\n <div [ngClass]=\"{'invalid-flag': formGroup.invalid}\">\n <app-feature-flag [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n [featureFlagLimitations]=\"settingFormula.featureFlagLimitations\" [hasOtherEnvironment]=\"false\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisites()\" (recalcAddButtons)=\"recalcAddButtons()\"\n (expandedChanged)=\"expandedChanged($event)\"\n [showEnvironmentName]=\"showEnvironmentName\" [environmentName]=\"settingFormula.environment.name\"\n [deleteSettingText]=\"deleteSettingText\" [canDeleteSetting]=\"canDeleteSetting\">\n </app-feature-flag>\n </div>\n <div class=\"save\" *ngIf=\"!settingFormula.readOnly && formGroup?.dirty\">\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [class.animate]=\"formGroup.dirty\"\n [track]=\"['save & publish click', 'feature flags and settings']\">\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\n </button>\n <button type=\"button\" class=\"revert-button\" mat-stroked-button (click)=\"revert()\"\n [track]=\"['revert click', 'feature flags and settings']\">\n <span>Revert</span>\n </button>\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\n <span>Something went wrong and we could not save your settings. You can try again or <a\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact\n us.</a></span>\n </div>\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\n <span>Oh no! A feature flag has invalid or missing data.&nbsp;</span>\n </div>\n </div>\n </div>\n </form>\n\n </ng-container>\n</div>","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { SettingItemComponent } from './setting-item/setting-item.component';\nimport { SettingSelectComponent } from './selects/setting-select/setting-select.component';\nimport { ProductSelectComponent } from './selects/product-select/product-select.component';\nimport { ConfigSelectComponent } from './selects/config-select/config-select.component';\nimport { EnvironmentSelectComponent } from './selects/environment-select/environment-select.component';\nimport { Configuration } from './configuration';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AuthorizationComponent } from './authorization/authorization.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { ExpandDialogComponent } from './dialogs/expand-dialog/expand-dialog.component';\nimport { ReasonDialogComponent } from './dialogs/reason-dialog/reason-dialog.component';\nimport { SaveSnackbarComponent } from './dialogs/save-snackbar/save-snackbar.component';\nimport { RolloutPercentageItemsComponent } from './setting-list/setting/rollout-percentage-items/rollout-percentage-items.component';\nimport { RolloutRulesComponent } from './setting-list/setting/rollout-rules/rollout-rules.component';\nimport { ValueComponent } from './setting-list/setting/value/value.component';\nimport { SettingListComponent } from './setting-list/setting-list.component';\nimport { SettingComponent } from './setting-list/setting/setting.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipModule } from '@angular/material/tooltip';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { RouterModule } from '@angular/router';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { BaseComponent } from './base/base.component';\nimport { BaseSelectComponent } from './base/base-select.component';\nimport { ApiModule } from 'ng-configcat-publicapi';\nimport { InputDisplayNormalizerDirective } from './_directives/input-display-normalizer.directive';\nimport { DeleteSettingDialogComponent } from './dialogs/delete-setting-dialog/delete-setting-dialog.component';\nimport { EvaluationFormulaComponent } from './v2/feature-flag/evaluation-formula/evaluation-formula.component';\nimport { FeatureFlagValueComponent } from './v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component';\nimport { PopoutTextEditorDialogComponent } from './v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component';\nimport { ConditionChipComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component';\nimport { ConditionsComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component';\nimport { PrerequisiteFlagConditionComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component';\nimport { SegmentConditionComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component';\nimport { ComparatorDialogComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component';\nimport { PopoutListEditorDialogComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component';\nimport { UserConditionComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component';\nimport { PercentageOptionsComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component';\nimport { TargetingRuleComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component';\nimport { FeatureFlagComponent } from './v2/feature-flag/feature-flag.component';\nimport { PercentageEvaluationAttributeDialogComponent } from './v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component';\nimport { ConfirmationDialogComponent } from './dialogs/confirmation-dialog/confirmation-dialog';\nimport { FormGenerator } from './_services/form-generator';\nimport { ComparisonValueListHelper } from './_services/comparison-value-list-helper';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { TrackingDirective } from './_services/tracking.directive';\nimport { ClipboardModule } from \"@angular/cdk/clipboard\";\nimport { AceEditorComponent } from './ace-editor/ace-editor.component';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatRadioModule } from \"@angular/material/radio\";\nimport { FeatureFlagItemComponent } from './v2/feature-flag-item.component';\nimport { MessagingService } from './_services/messaging.service';\nimport { DateTimePickerComponent } from './v2/feature-flag/date-time-picker/date-time-picker.component';\nimport { DependeesDialogComponent } from './v2/feature-flag/dependees-dialog/dependees-dialog.component';\nimport { InfoDialogComponent } from './dialogs/info-dialog/info-dialog';\nimport { RerouteDialogComponent } from './dialogs/reroute-dialog/reroute-dialog';\n\n@NgModule({\n declarations: [\n BaseComponent,\n BaseSelectComponent,\n ProductSelectComponent,\n ConfigSelectComponent,\n EnvironmentSelectComponent,\n SettingSelectComponent,\n SettingItemComponent,\n AuthorizationComponent,\n SettingListComponent,\n SettingComponent,\n RolloutPercentageItemsComponent,\n RolloutRulesComponent,\n ValueComponent,\n ReasonDialogComponent,\n SaveSnackbarComponent,\n ExpandDialogComponent,\n DeleteSettingDialogComponent,\n InputDisplayNormalizerDirective,\n FeatureFlagComponent,\n EvaluationFormulaComponent,\n FeatureFlagValueComponent,\n TargetingRuleComponent,\n PercentageOptionsComponent,\n ConditionsComponent,\n UserConditionComponent,\n SegmentConditionComponent,\n PrerequisiteFlagConditionComponent,\n PopoutListEditorDialogComponent,\n PopoutTextEditorDialogComponent,\n PercentageEvaluationAttributeDialogComponent,\n ConditionChipComponent,\n ComparatorDialogComponent,\n ConfirmationDialogComponent,\n InfoDialogComponent,\n TrackingDirective,\n AceEditorComponent,\n FeatureFlagItemComponent,\n DateTimePickerComponent,\n DependeesDialogComponent,\n RerouteDialogComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n BrowserAnimationsModule,\n MatFormFieldModule,\n MatOptionModule,\n MatSelectModule,\n MatButtonModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n MatChipsModule,\n MatAutocompleteModule,\n DragDropModule,\n RouterModule,\n MatSnackBarModule,\n MatDialogModule,\n MatMenuModule,\n ApiModule,\n MatButtonToggleModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatDividerModule,\n ClipboardModule,\n MatPaginatorModule,\n MatTableModule,\n MatRadioModule\n ],\n exports: [\n AuthorizationComponent,\n ProductSelectComponent,\n ConfigSelectComponent,\n EnvironmentSelectComponent,\n SettingSelectComponent,\n SettingItemComponent,\n InputDisplayNormalizerDirective,\n DeleteSettingDialogComponent,\n FeatureFlagItemComponent\n ],\n providers: [\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: { disableTooltipInteractivity: true },\n },\n\n FormGenerator,\n ComparisonValueListHelper,\n MessagingService\n ]\n})\nexport class NgConfigCatPublicApiUIModule {\n public static forRoot(configurationFactory: () => Configuration): ModuleWithProviders<NgConfigCatPublicApiUIModule> {\n return {\n ngModule: NgConfigCatPublicApiUIModule,\n providers: [{ provide: Configuration, useFactory: configurationFactory }]\n };\n }\n\n constructor() { }\n}\n","/*\n * Public API Surface of ng-configcat-publicapi-ui\n */\n\nexport * from './lib/ng-configcat-publicapi-ui.module';\nexport * from './lib/_directives';\nexport * from './lib/_services';\nexport * from './lib/setting-item/setting-item.component';\nexport * from './lib/authorization/authorization.component';\nexport * from './lib/selects/product-select/product-select.component';\nexport * from './lib/selects/config-select/config-select.component';\nexport * from './lib/selects/environment-select/environment-select.component';\nexport * from './lib/selects/setting-select/setting-select.component';\nexport * from './lib/dialogs/delete-setting-dialog/delete-setting-dialog.component';\nexport * from './lib/v2/feature-flag-item.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PublicApiConfiguration","i2.Configuration","i1.PublicApiService","i1","i2","i3","i8","i4","i5","i6.InputDisplayNormalizerDirective","i6.ValueComponent","i2.SettingListFormHelper","i9","i11","i12.ValueComponent","i13.InputDisplayNormalizerDirective","i1.SettingListFormHelper","i6","i7.RolloutPercentageItemsComponent","i8.RolloutRulesComponent","i9.ValueComponent","i8.SettingComponent","i2.SettingListComponent","i7","i2.PublicApiService","UserComparator","i9.AceEditorComponent","i2.FormGenerator","i10.InputDisplayNormalizerDirective","i1.FormGenerator","i9.InputDisplayNormalizerDirective","i10.FeatureFlagValueComponent","ComparatorGroup","i10","i12","i15.AceEditorComponent","i1.ComparisonValueListHelper","i1.MessagingService","i14.ConditionChipComponent","i15.DateTimePickerComponent","i9.ConditionChipComponent","i10.TrackingDirective","i7.FeatureFlagValueComponent","i8.ConditionChipComponent","i8.UserConditionComponent","i9.SegmentConditionComponent","i10.PrerequisiteFlagConditionComponent","i8.FeatureFlagValueComponent","i9.PercentageOptionsComponent","i10.ConditionsComponent","i11.TargetingRuleComponent","i2.MessagingService","i4.PublicApiService","i13.EvaluationFormulaComponent","i14.FeatureFlagValueComponent","i15.TrackingDirective","i9.FeatureFlagComponent"],"mappings":"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"}
1
+ {"version":3,"file":"ng-configcat-publicapi-ui.mjs","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/_services/platform-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reason-dialog/reason-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reason-dialog/reason-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/save-snackbar/save-snackbar.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/save-snackbar/save-snackbar.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/setting-list-form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/expand-dialog/expand-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/expand-dialog/expand-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_directives/input-display-normalizer.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/value/value.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/value/value.component.html","../../../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-percentage-items/rollout-percentage-items.component.html","../../../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/rollout-rules/rollout-rules.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/setting.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/setting.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting-list.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting-list.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-item/setting-item.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-item/setting-item.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/base/base-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/setting-select/setting-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/setting-select/setting-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/product-select/product-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/product-select/product-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/config-select/config-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/config-select/config-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/environment-select/environment-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/environment-select/environment-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/authorization/authorization.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/authorization/authorization.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_models/user-comparator.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-generator.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/date-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/app-data-adapter.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/confirmation-dialog/confirmation-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/confirmation-dialog/confirmation-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reroute-dialog/reroute-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reroute-dialog/reroute-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/info-dialog/info-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/info-dialog/info-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/comparison-value-list-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/messaging.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/ace-editor/ace-editor.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/ace-editor/ace-editor.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/date-time-picker/date-time-picker.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/date-time-picker/date-time-picker.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/tracking.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/feature-flag.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/feature-flag.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag-item.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag-item.component.html","../../../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';\n\n@Injectable()\nexport class Configuration {\n basicAuthUsername?: string;\n basicAuthPassword?: string;\n basePath = 'https://api.configcat.com';\n dashboardBasePath = 'https://app.configcat.com';\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n Configuration as PublicApiConfiguration,\n ProductsService, EnvironmentsService, ConfigsService,\n FeatureFlagsSettingsService, FeatureFlagSettingValuesService, MeService,\n IntegrationLinksService,\n SegmentsService,\n FeatureFlagSettingValuesV2Service\n} from 'ng-configcat-publicapi';\nimport { Configuration } from '../configuration';\n\n@Injectable({ providedIn: 'root' })\nexport class PublicApiService {\n\n constructor(\n private httpClient: HttpClient,\n @Optional() private configuration: Configuration) {\n }\n\n createMeService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new MeService(this.httpClient, basePath ?? this.configuration?.basePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createProductsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new ProductsService(this.httpClient, basePath ?? this.configuration?.basePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createConfigsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new ConfigsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createEnvironmentsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new EnvironmentsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSettingsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new FeatureFlagsSettingsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSettingValuesV2Service(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new FeatureFlagSettingValuesV2Service(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSettingValuesService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new FeatureFlagSettingValuesService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createIntegrationLinksService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new IntegrationLinksService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSegmentsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new SegmentsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n getDashboardBasePath() {\n return this.configuration?.dashboardBasePath ?? 'https://app.configcat.com';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { PublicApiService } from '../_services/public-api.service';\n\n@Component({\n selector: 'base',\n template: '<div></div>'\n})\nexport class BaseComponent {\n\n @Input() basePath: string | null = null;\n @Input() basicAuthUsername: string | null = null;\n @Input() basicAuthPassword: string | null = null;\n\n constructor(private publicApiService: PublicApiService) {\n }\n\n protected createProductsService() {\n return this.publicApiService.createProductsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createConfigsService() {\n return this.publicApiService.createConfigsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createEnvironmentsService() {\n return this.publicApiService.createEnvironmentsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSettingsService() {\n return this.publicApiService.createSettingsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSettingValuesService() {\n return this.publicApiService.createSettingValuesService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSettingValuesV2Service() {\n return this.publicApiService.createSettingValuesV2Service(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSegmentsService() {\n return this.publicApiService.createSegmentsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n}\n","export class PlatformHelper {\n public static isChromium() {\n // https://stackoverflow.com/a/62797156/8656352\n return !!(window as any).chrome;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { UntypedFormControl, UntypedFormGroup, UntypedFormArray, FormGroup, AbstractControl } from '@angular/forms';\nimport { PlatformHelper } from './platform-helper';\n\nexport const percentageRegex = '^[0-9]*$';\nexport const wholeNumberRegex = '^[-+]?[0-9]\\\\d*$';\nexport const timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;\nexport const featureFlagKeyRegex = '^[a-zA-Z]+[a-zA-Z0-9_-]*$';\n\nexport class FormHelper {\n\n public static getErrorMessage(control: UntypedFormControl | UntypedFormGroup | UntypedFormArray | AbstractControl, hint = '') {\n if (!control || control.valid) {\n return null;\n }\n if (control.hasError('validateNumberNan')) {\n return `Invalid value.`\n }\n \n if (control.hasError('matDatepickerParse')) {\n return `Invalid date value.`\n }\n \n if (control.hasError('required')) {\n if (control instanceof UntypedFormArray) {\n return 'The list must contain min 1 items.';\n } else {\n return hint ? `${hint} The field is required.` : `The field is required.`;\n }\n }\n \n if (control.hasError('emails')) {\n return control.errors.emails;\n }\n \n if (control.hasError('minlength')) {\n if (control instanceof UntypedFormArray) {\n return 'The list must contain min ' + control.errors.minlength.requiredLength + ' items.';\n } else {\n return 'The field must be at least ' + control.errors.minlength.requiredLength + ' characters long.';\n }\n }\n \n if (control.hasError('maxlength')) {\n if (control instanceof UntypedFormArray) {\n return 'The list must contain max ' + control.errors.maxlength.requiredLength + ' items.';\n } else {\n return 'The field must be at max ' + control.errors.maxlength.requiredLength + ' characters long.';\n }\n }\n \n if (control.hasError('serverSide')) {\n return control.errors.serverSide;\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === percentageRegex) {\n return 'The percentage value must be a whole number.';\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === wholeNumberRegex) {\n return 'Please enter a whole number e.g. 42.';\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === timeRegex) {\n return 'Invalid time value.';\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === featureFlagKeyRegex) {\n return 'Invalid key. Keys must start with a letter, followed by a combination of numbers, letters, underscores and hyphens.';\n }\n\n if (control.hasError('pattern')) {\n return 'Not a valid e-mail address.';\n } \n \n if (control.hasError('alreadyExists')) {\n return control.errors.alreadyExists;\n }\n \n if (control.hasError('validateSemVer')) {\n return 'Invalid semantic version.';\n }\n \n if (control.hasError('validatePercentageSum')) {\n return 'The sum of percentages must be equal to 100.';\n }\n \n if (control.hasError('min')) {\n return 'The value must be greater than ' + (control.errors.min.min - 1) + '.';\n }\n \n if (control.hasError('max')) {\n return 'The value must be less than ' + (control.errors.max.max + 1) + '.';\n }\n \n return '';\n }\n\n\n public static handleErrors(formGroup: FormGroup, error: any) {\n if (error instanceof HttpErrorResponse) {\n const response = error as HttpErrorResponse;\n switch (response.status) {\n case 400:\n let unknownFieldName = false;\n for (const fieldName in error.error) {\n if (error.error.hasOwnProperty(fieldName) && error.error[fieldName] &&\n (error.error[fieldName]?.length > 0 || error.error[fieldName]?.Errors?.length > 0)) {\n let jsonFieldName = fieldName;\n if (jsonFieldName.length > 0) {\n jsonFieldName = jsonFieldName[0].toLowerCase() + jsonFieldName.slice(1);\n }\n\n const errorMessage = error.error[fieldName]?.Errors?.length > 0 ?\n (error.error[fieldName]?.Errors.map((e: any) => e.ErrorMessage)).join(', ')\n : error.error[fieldName];\n\n if (formGroup.controls.hasOwnProperty(jsonFieldName)) {\n formGroup.controls[jsonFieldName].setErrors({ serverSide: errorMessage });\n } else {\n unknownFieldName = true;\n }\n }\n }\n if (unknownFieldName) {\n formGroup.setErrors({ serverSide: 'Something went wrong.' });\n }\n break;\n // in these cases we do not show errors on the form, they're handled by the http\n // interceptor in src\\app\\_interceptors\\httpstatuscode.interceptor.ts\n case 402:\n case 429:\n return;\n }\n } else {\n formGroup.setErrors({ serverSide: 'Something went wrong on our side. This is not your fault. Please try again.' });\n }\n }\n\n /**\n * Converts a value representing a number to a `number` value.\n * Returns `NaN` in the case of non-numerical values.\n */\n public static normalizeNumber(value: any): number {\n switch (typeof value) {\n case \"number\":\n return value;\n case \"string\":\n // NOTE: `Number()` converts whitespace strings to 0.\n return value.trim() === '' ? NaN : Number(value);\n case \"bigint\":\n return Number(value);\n default:\n return NaN;\n }\n }\n\n /**\n * Converts a value representing a number to the normalized `string`\n * representation of the number. (e.g. `.1` --> `'0.1'`, `3.14e2` --> `'314'`).\n * Returns `''` in the case of non-numerical values or non-finite numerical values.\n */\n public static normalizeNumberStoredAsString(value: any): string {\n value = FormHelper.normalizeNumber(value);\n // NOTE: `NaN` is not considered finite.\n return isFinite(value) ? value + '' : '';\n }\n\n \n public static formatNumberForDisplay(value: number) {\n if (!isFinite(value)) {\n return '';\n }\n\n // Chromium-based browsers don't respect the `lang` attribute,\n // they use a display format corresponding to the browser's language setting.\n if (PlatformHelper.isChromium()) {\n return value.toLocaleString();\n }\n\n // Firefox (and probably other browsers) respect the `lang` attribute,\n // which is currently set to the fixed value of \"en\" (see index.html),\n // so in these cases dot should be used as the decimal separator.\n // (In case localization is implemented in the application, this logic should be revised!)\n return value + '';\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { UntypedFormGroup, UntypedFormBuilder, Validators } from '@angular/forms';\n\n@Component({\n selector: 'configcat-reason-dialog',\n templateUrl: './reason-dialog.component.html',\n styleUrls: ['./reason-dialog.component.scss']\n})\nexport class ReasonDialogComponent implements OnInit {\n\n formGroup!: UntypedFormGroup;\n\n constructor(\n public dialogRef: MatDialogRef<ReasonDialogComponent>,\n private formBuilder: UntypedFormBuilder\n ) { }\n\n ngOnInit() {\n this.formGroup = this.formBuilder.group({\n reason: ['', [Validators.required, Validators.maxLength(1000)]]\n });\n }\n\n handleSaveButton() {\n if (!this.formGroup.valid) {\n return;\n }\n\n this.dialogRef.close({ button: 'save', reason: this.formGroup.controls.reason.value });\n }\n\n cancel() {\n this.dialogRef.close({ button: 'cancel' });\n }\n}\n","<h1 mat-dialog-title>Add notes</h1>\n<form [formGroup]=\"formGroup\" (ngSubmit)=\"handleSaveButton()\">\n <div mat-dialog-content class=\"container\">\n <p>This will appear in the Audit Log (in the Notes section when you expand the corresponding entry).</p>\n <mat-form-field appearance=\"outline\">\n <mat-label>Note</mat-label>\n <textarea matInput formControlName=\"reason\" name=\"reason\" placeholder=\"I'm changing settings because...\"\n rows=\"3\"></textarea>\n <mat-error *ngIf=\"formGroup.controls.reason.invalid\">The field is required.</mat-error>\n </mat-form-field>\n </div>\n <div mat-dialog-actions>\n <button type=\"submit\" style=\"margin-right: 10px;\" mat-flat-button color=\"primary\">Add notes & Save</button>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\">Cancel</button>\n </div>\n</form>","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'configcat-save-snackbar',\n templateUrl: './save-snackbar.component.html',\n styleUrls: ['./save-snackbar.component.scss']\n})\nexport class SaveSnackbarComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<p class=\"header\">Settings saved successfully.</p>","import { Injectable } from '@angular/core';\nimport { SettingValuesModel } from '../_models/settingValuesModel';\nimport { UntypedFormBuilder, Validators, UntypedFormGroup, UntypedFormArray } from '@angular/forms';\nimport { RolloutPercentageItemModel, RolloutRuleComparator, RolloutRuleModel, SettingType, SettingValueModel } from 'ng-configcat-publicapi';\nimport { FormHelper } from './form-helper';\n\n@Injectable({ providedIn: 'root' })\nexport class SettingListFormHelper {\n\n constructor(private formBuilder: UntypedFormBuilder) { }\n\n createSettingValuesFormGroup(settingValuesModel: SettingValuesModel) {\n const formGroup = this.formBuilder.group({\n settingValues: this.formBuilder.array(\n settingValuesModel.settingValues.map(sv => {\n return this.createSettingValueFormGroup(sv, settingValuesModel.readOnly);\n })),\n\n // Decorator\n environment: this.formBuilder.group({\n environmentId: [{ value: settingValuesModel.environment.environmentId, disabled: true }],\n name: [{ value: settingValuesModel.environment.name, disabled: true }],\n }),\n\n comparisonAttributes: [[]]\n });\n\n const rolloutRules = this.getAllRolloutRules(formGroup);\n const comparisonAttributes = this.getComparisonAttributes(rolloutRules);\n formGroup.patchValue({ comparisonAttributes: comparisonAttributes });\n return formGroup;\n }\n\n\n createSettingValueFormGroup(settingValueModel: SettingValueModel, readOnly: boolean) {\n if (!settingValueModel.setting) {\n return this.formBuilder.group({});\n }\n return this.formBuilder.group({\n settingId: [settingValueModel.setting.settingId],\n value: [\n { value: settingValueModel.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingValueModel.setting.settingType)\n ],\n rolloutPercentageItems: settingValueModel.rolloutPercentageItems\n ? this.formBuilder.array(settingValueModel.rolloutPercentageItems.map(p => {\n // @ts-ignore()\n return this.createRolloutPercentageItemFormGroup(p, readOnly, settingValueModel.setting.settingType);\n }))\n : this.formBuilder.array([]), rolloutRules: settingValueModel.rolloutRules\n ? this.formBuilder.array(settingValueModel.rolloutRules.map(r => {\n // @ts-ignore()\n return this.createRolloutRuleFormGroup(r, readOnly, settingValueModel.setting.settingType);\n }))\n : this.formBuilder.array([]),\n\n updatedAt: [{ value: settingValueModel.updatedAt, disabled: true }],\n lastUpdaterUserEmail: [{ value: settingValueModel.lastUpdaterUserEmail, disabled: true }],\n lastUpdaterUserFullName: [{ value: settingValueModel.lastUpdaterUserFullName, disabled: true }],\n\n rolloutPercentageItemsSum: [{ value: 100, disabled: false }, [Validators.min(100), Validators.max(100)]],\n // Decoration\n setting: this.formBuilder.group({\n settingId: [{ value: settingValueModel.setting.settingId, disabled: true }],\n key: [{ value: settingValueModel.setting.key, disabled: true }],\n name: [{ value: settingValueModel.setting.name, disabled: true }],\n hint: [{ value: settingValueModel.setting.hint, disabled: true }],\n settingType: [{ value: settingValueModel.setting.settingType, disabled: true }],\n creatorEmail: [{ value: settingValueModel.setting.creatorEmail, disabled: true }],\n creatorFullName: [{ value: settingValueModel.setting.creatorFullName, disabled: true }],\n createdAt: [{ value: settingValueModel.setting.createdAt, disabled: true }]\n }),\n\n integrationLinks: settingValueModel.integrationLinks ? this.formBuilder.array(settingValueModel.integrationLinks.map(il => {\n return this.formBuilder.group({\n key: [{ value: il.key, disabled: true }],\n description: [{ value: il.description, disabled: true }],\n integrationLinkType: [{ value: il.integrationLinkType, disabled: true }],\n url: [{ value: il.url, disabled: true }],\n });\n })) : this.formBuilder.array([])\n });\n }\n\n createRolloutPercentageItemFormGroup(p: RolloutPercentageItemModel, readOnly: boolean, settingType: SettingType | undefined) {\n return this.formBuilder.group({\n percentage: [{ value: p.percentage, disabled: readOnly }, [Validators.required, Validators.min(0), Validators.max(100)]],\n value: [\n { value: p.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingType)\n ],\n valueDisabled: [\n { value: p.value, disabled: true }, // For percentage item value\n ]\n });\n }\n\n createRolloutRuleFormGroup(r: RolloutRuleModel, readOnly: boolean, settingType: SettingType | undefined) {\n if (r.comparator) {\n return this.formBuilder.group({\n type: [{ value: 0, disabled: true }],\n comparisonAttribute: [{ value: r.comparisonAttribute, disabled: readOnly }, [Validators.required]],\n comparator: [{ value: r.comparator, disabled: readOnly }, [Validators.required]],\n comparisonValue: [{ value: r.comparisonValue, disabled: readOnly }, [Validators.required]],\n value: [\n { value: r.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingType)\n ],\n });\n } else if (r.segmentComparator) {\n return this.formBuilder.group({\n type: [{ value: 1, disabled: true }],\n segmentComparator: [{ value: r.segmentComparator, disabled: readOnly }, [Validators.required]],\n segmentId: [{ value: r.segmentId, disabled: readOnly }, [Validators.required]],\n value: [\n { value: r.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingType)\n ],\n });\n } else {\n throw new Error('Invalid rollout rule');\n }\n }\n\n private getValidatorsForSettingType(settingType: SettingType | undefined) {\n switch (settingType) {\n case SettingType.Int:\n return [Validators.required,\n Validators.min(-2147483648), Validators.max(2147483647), Validators.pattern('^[-+]?[0-9]\\\\d*$')];\n case SettingType.Double:\n return [Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\n case SettingType.String:\n case SettingType.Boolean:\n return [Validators.required];\n default:\n return [];\n }\n }\n\n private getAllRolloutRules(formGroup: UntypedFormGroup) {\n const settingValues = formGroup.get('settingValues') as UntypedFormArray;\n const rolloutRules = settingValues.controls.map(cv => (cv.get('rolloutRules') as UntypedFormArray).value);\n return rolloutRules.length === 0 ? rolloutRules : rolloutRules.reduce((a, b) => a.concat(b));\n }\n\n private getComparisonAttributes(rolloutRules: any[]) {\n if (rolloutRules.length > 0) {\n const currentComparisonAttributes = rolloutRules.map(r => r.comparisonAttribute);\n\n const defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n const comparisonAttributes = currentComparisonAttributes.filter(c => defaultComparisonAttributes.indexOf(c) === -1);\n return Array.from(new Set(comparisonAttributes));\n } else {\n return [];\n }\n }\n\n getComparisonValueType(comparator: RolloutRuleComparator) {\n switch (comparator) {\n case RolloutRuleComparator.NumberEquals:\n case RolloutRuleComparator.NumberDoesNotEqual:\n case RolloutRuleComparator.NumberLess:\n case RolloutRuleComparator.NumberLessOrEquals:\n case RolloutRuleComparator.NumberGreater:\n case RolloutRuleComparator.NumberGreaterOrEquals:\n return 'number';\n default:\n return 'text';\n }\n }\n\n normalizeComparisonValue(comparator: RolloutRuleComparator | undefined, comparisonValue: any) {\n // In the case of number inputs value is a number but API expects\n // a string, so we need to make sure that it's converted to string.\n return comparator && this.getComparisonValueType(comparator) === \"number\"\n ? FormHelper.normalizeNumberStoredAsString(comparisonValue)\n : comparisonValue;\n }\n}\n","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\nimport { UntypedFormBuilder, UntypedFormGroup, UntypedFormArray, UntypedFormControl } from '@angular/forms';\n\n@Component({\n selector: 'configcat-expand-dialog',\n templateUrl: './expand-dialog.component.html',\n styleUrls: ['./expand-dialog.component.scss']\n})\nexport class ExpandDialogComponent implements OnInit, OnDestroy {\n\n formControlSubscription!: Subscription | null;\n formGroupSubscription!: Subscription | null;\n\n formGroup!: UntypedFormGroup;\n readOnly = false;\n\n constructor(public dialogRef: MatDialogRef<ExpandDialogComponent>,\n private formBuilder: UntypedFormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n }\n\n\n ngOnInit(): void {\n this.readOnly = this.data.control.disabled;\n if (this.data.multiline) {\n this.buildFormGroup();\n } else {\n this.formControlSubscription = this.data.control.valueChanges.subscribe((value: any) => {\n this.data.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.data.control.markAsDirty();\n }, () => { }, () => { });\n }\n }\n\n values() {\n return this.formGroup.get('values') as UntypedFormArray;\n }\n\n getValueControls() {\n return this.values().controls.map(c => c as UntypedFormControl);\n }\n\n buildFormGroup() {\n const value = this.data.control.value ? this.data.control.value : '';\n const list = value.split(',').map((v: any) => v.trim()).filter((v: any) => !!v);\n this.formGroup = this.formBuilder.group({\n values: this.formBuilder.array(list.map((v: any) => this.formBuilder.control({ value: v, disabled: this.data.control.disabled })))\n });\n this.formGroupSubscription = this.formGroup.valueChanges.subscribe((formGroupValue) => {\n this.data.control.setValue(formGroupValue.values\n .filter((v: any) => !!v)\n .join(','), { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.data.control.updateValueAndValidity();\n this.data.control.markAsDirty();\n });\n }\n\n add() {\n (this.formGroup.controls.values as UntypedFormArray).push(this.formBuilder.control(''));\n }\n\n remove(index: any) {\n (this.formGroup.controls.values as UntypedFormArray).removeAt(index);\n }\n\n ngOnDestroy() {\n if (this.formControlSubscription) {\n this.formControlSubscription.unsubscribe();\n this.formControlSubscription = null;\n }\n\n if (this.formGroupSubscription) {\n this.formGroupSubscription.unsubscribe();\n this.formGroupSubscription = null;\n }\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","<div mat-dialog-content class=\"container\">\n <mat-form-field appearance=\"outline\" *ngIf=\"!data.multiline\" subscriptSizing=\"dynamic\">\n <mat-label></mat-label>\n <textarea matInput [formControl]=\"data.control\" rows=\"10\"></textarea>\n </mat-form-field>\n <div [formGroup]=\"formGroup\" *ngIf=\"data.multiline\">\n <div *ngFor=\"let valueControl of getValueControls(); let i = index;\" class=\"value-field\">\n <mat-form-field appearance=\"outline\">\n <input matInput [formControl]=\"valueControl\" />\n </mat-form-field>\n <button (click)=\"remove(i)\" mat-icon-button type=\"button\" class=\"no-density-mat-icon-button\"\n matTooltip=\"Remove item\" *ngIf=\"!readOnly\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n </div>\n <button (click)=\"add()\" mat-stroked-button type=\"button\" *ngIf=\"!readOnly\">\n <mat-icon>add</mat-icon>Add item\n </button>\n </div>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"close()\">Done</button>\n</div>","import { Directive, HostListener } from '@angular/core';\n\n/**\n * Makes sure that values entered into HTML input fields are displayed in the correct format,\n * where correct means normalized (e.g. `'.10'` --> `'0.1'`) and corresponding to the locale setting.\n * \n * The format is adjusted on the blur event. Only the format of number inputs is adjusted currently.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'input[inputDisplayNormalizer]'\n})\nexport class InputDisplayNormalizerDirective {\n constructor() { }\n\n @HostListener('blur', ['$event'])\n onChange($event: any) {\n const target = $event.target;\n if (target.type === 'number') {\n let value = target.value;\n value = value.trim() !== '' ? Number(value) : NaN;\n if (isFinite(value)) {\n // The string returned by the `value` property and the string displayed in the input field are not necessarily equal.\n // HACK: When the returned and the displayed value differs only in the decimal separator,\n // Chrome won't update the displayed value unless the value is changed first...\n target.value = '';\n target.value = value;\n }\n }\n }\n}","import { Component, Input } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ExpandDialogComponent } from '../../../dialogs/expand-dialog/expand-dialog.component';\nimport { SettingModel, SettingType } from 'ng-configcat-publicapi';\nimport { FormHelper } from '../../../_services/form-helper';\n\n@Component({\n selector: 'configcat-value',\n templateUrl: './value.component.html',\n styleUrls: [\n './slider.scss',\n './value.component.scss'\n ]\n})\nexport class ValueComponent {\n\n @Input() valueFormControl!: UntypedFormControl;\n\n @Input() setting!: SettingModel;\n\n SettingType = SettingType;\n\n constructor(private dialog: MatDialog) {\n }\n\n popOut() {\n this.dialog.open(ExpandDialogComponent, {\n width: '640px',\n data: { control: this.valueFormControl }\n });\n }\n\n formatDecimalNumber(value: number) {\n return FormHelper.formatNumberForDisplay(value);\n }\n}\n","<div class=\"flex\">\n <div class=\"container\" [ngSwitch]=\"setting.settingType\">\n <div *ngSwitchCase=\"SettingType.String\" class=\"with-validation\">\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"text\"\n [formControl]=\"valueFormControl\" placeholder=\"my value\" name=\"value\">\n <div class=\"expand\" (click)=\"popOut()\" matTooltip=\"Pop-out Editor\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n <div *ngSwitchCase=\"SettingType.Int\" class=\"with-validation\">\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"number\" [formControl]=\"valueFormControl\"\n placeholder=\"42\" name=\"value\" digitOnly digitOnlyAllowNegatives=\"true\"/>\n </div>\n <div *ngSwitchCase=\"SettingType.Double\" class=\"with-validation\">\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"number\" [formControl]=\"valueFormControl\"\n placeholder=\"{{ formatDecimalNumber(3.14) }}\" name=\"value\" inputDisplayNormalizer>\n </div>\n <div *ngSwitchCase=\"SettingType.Boolean\" class=\"toggle\">\n <label class=\"switch\">\n <input type=\"checkbox\" [formControl]=\"valueFormControl\" name=\"value\" />\n <span class=\"slider round\"></span>\n </label>\n </div>\n </div>\n <div *ngIf=\"setting.settingType === SettingType.Boolean\" class=\"spacer\"></div>\n\n</div>\n","import { Component, Input } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormArray, UntypedFormControl } from '@angular/forms';\nimport { SettingType } from 'ng-configcat-publicapi';\n\n@Component({\n selector: 'configcat-rollout-percentage-items',\n templateUrl: './rollout-percentage-items.component.html',\n styleUrls: ['./rollout-percentage-items.component.scss']\n})\nexport class RolloutPercentageItemsComponent {\n\n @Input() formGroup!: UntypedFormGroup;\n @Input() readOnly = false;\n SettingType = SettingType;\n\n\n setting() {\n return this.formGroup.get('setting')?.value;\n }\n\n rolloutRules() {\n return this.formGroup.get('rolloutRules') as UntypedFormArray;\n }\n\n rolloutPercentageItems() {\n return this.formGroup.get('rolloutPercentageItems') as UntypedFormArray;\n }\n\n rolloutPercentageItemsSum() {\n return this.formGroup.get('rolloutPercentageItemsSum') as UntypedFormControl;\n }\n\n value(rolloutPercentageItem: UntypedFormGroup): UntypedFormControl {\n return this.setting().settingType === SettingType.Boolean ?\n rolloutPercentageItem.get('valueDisabled') as UntypedFormControl :\n rolloutPercentageItem.get('value') as UntypedFormControl;\n }\n\n constructor() { }\n\n percentageChanged(index: number) {\n if (this.rolloutPercentageItems().controls[index].value.percentage < 0) {\n (this.rolloutPercentageItems().controls[index] as UntypedFormGroup).controls.percentage.setValue(0);\n }\n if (this.rolloutPercentageItems().controls[index].value.percentage > 100) {\n (this.rolloutPercentageItems().controls[index] as UntypedFormGroup).controls.percentage.setValue(100);\n }\n\n if (this.rolloutPercentageItems().controls.length === 2) {\n (this.rolloutPercentageItems().controls[1 - index] as UntypedFormGroup).controls.percentage\n .setValue(100 - this.rolloutPercentageItems().controls[index].value.percentage);\n }\n\n this.updateSum();\n }\n\n updateSum() {\n if (this.rolloutPercentageItems().controls.length === 0) {\n this.rolloutPercentageItemsSum().setValue(100);\n } else {\n this.rolloutPercentageItemsSum().setValue(\n this.rolloutPercentageItems().controls.map(v => v.value.percentage)\n .reduce((a, b) => a + b)\n );\n }\n }\n\n removeRolloutPercentageItem(index: number) {\n this.rolloutPercentageItems().removeAt(index);\n this.rolloutPercentageItems().markAsDirty();\n this.updateSum();\n }\n\n removeAll() {\n this.rolloutPercentageItems().clear();\n this.rolloutPercentageItems().markAsDirty();\n this.updateSum();\n }\n\n getRolloutPercentageItemFormGroups() {\n return this.rolloutPercentageItems()?.controls?.map(c => c as UntypedFormGroup);\n }\n\n getPercentageFormControl(rolloutPercentageItem: any) {\n return rolloutPercentageItem.controls.percentage as UntypedFormControl;\n }\n}\n","<div class=\"percentage-wrapper\" [formGroup]=\"formGroup\">\n\n <div class=\"if\" *ngIf=\"rolloutRules().controls.length > 0\">\n <mat-chip-set>\n <mat-chip class=\"chip\">ELSE IF</mat-chip>\n </mat-chip-set>\n </div>\n <div class=\"grow\">\n <div class=\"percentage-row flex\"\n *ngFor=\"let rolloutPercentageItem of getRolloutPercentageItemFormGroups(); let i = index\">\n <div class=\"flex\">\n <input type=\"number\" [formControl]=\"getPercentageFormControl(rolloutPercentageItem)\"\n (input)=\"percentageChanged(i)\" digitOnly>%\n <span class=\"users\">of <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </span>\n </div>\n\n <div class=\"delete-option\" matTooltip=\"Remove this % option\"\n *ngIf=\"!readOnly && rolloutPercentageItems().controls.length > 2\"\n (click)=\"removeRolloutPercentageItem(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n\n <span matTooltip=\"The sum of percentages must be equal to 100.\" matTooltipPosition=\"above\"\n *ngIf=\"(i === rolloutPercentageItems().controls.length -1) && (rolloutPercentageItemsSum().invalid)\">\n <mat-icon color=\"warn\">\n error_outline\n </mat-icon>\n </span>\n\n <div class=\"value flex\">\n <span class=\"value-name\" *ngIf=\"setting().settingType !== SettingType.Boolean\">Served value:</span>\n <configcat-value class=\"served-value\" [valueFormControl]=\"value(rolloutPercentageItem)\"\n [setting]=\"setting()\">\n </configcat-value>\n </div>\n <div class=\"delete\" matTooltip=\"Remove % options\" (click)=\"removeAll()\" *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormControl, UntypedFormArray, Validators } from '@angular/forms';\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\nimport { valid } from 'semver';\nimport { ExpandDialogComponent } from '../../../dialogs/expand-dialog/expand-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SettingType, RolloutRuleComparator, SegmentListModel, SegmentComparator } from 'ng-configcat-publicapi';\nimport { SettingListFormHelper } from '../../../_services/setting-list-form-helper';\nimport { FormHelper } from '../../../_services/form-helper';\n\n@Component({\n selector: 'configcat-rollout-rules',\n templateUrl: './rollout-rules.component.html',\n styleUrls: ['./rollout-rules.component.scss']\n})\nexport class RolloutRulesComponent {\n\n @Input() formGroup!: UntypedFormGroup;\n @Input() readOnly = false;\n @Input() segments!: SegmentListModel[];\n\n SettingType = SettingType;\n\n defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n\n rolloutRuleComparators = [\n { value: RolloutRuleComparator.IsOneOf, label: 'IS ONE OF (cleartext)' },\n { value: RolloutRuleComparator.IsNotOneOf, label: 'IS NOT ONE OF (cleartext)' },\n { value: RolloutRuleComparator.Contains, label: 'CONTAINS (cleartext)' },\n { value: RolloutRuleComparator.DoesNotContain, label: 'DOES NOT CONTAIN (cleartext)' },\n\n { value: RolloutRuleComparator.SemVerIsOneOf, label: 'IS ONE OF (SemVer)' },\n { value: RolloutRuleComparator.SemVerIsNotOneOf, label: 'IS NOT ONE OF (SemVer)' },\n { value: RolloutRuleComparator.SemVerLess, label: '< (SemVer)' },\n { value: RolloutRuleComparator.SemVerLessOrEquals, label: '<= (SemVer)' },\n { value: RolloutRuleComparator.SemVerGreater, label: '> (SemVer)' },\n { value: RolloutRuleComparator.SemVerGreaterOrEquals, label: '>= (SemVer)' },\n\n { value: RolloutRuleComparator.NumberEquals, label: '= (Number)' },\n { value: RolloutRuleComparator.NumberDoesNotEqual, label: '!= (Number)' },\n { value: RolloutRuleComparator.NumberLess, label: '< (Number)' },\n { value: RolloutRuleComparator.NumberLessOrEquals, label: '<= (Number)' },\n { value: RolloutRuleComparator.NumberGreater, label: '> (Number)' },\n { value: RolloutRuleComparator.NumberGreaterOrEquals, label: '>= (Number)' },\n\n { value: RolloutRuleComparator.SensitiveIsOneOf, label: 'IS ONE OF (hashed)' },\n { value: RolloutRuleComparator.SensitiveIsNotOneOf, label: 'IS NOT ONE OF (hashed)' },\n ];\n\n segmentComparators = [\n { value: SegmentComparator.IsIn, label: 'IS IN SEGMENT' },\n { value: SegmentComparator.IsNotIn, label: 'IS NOT IN SEGMENT' },\n ];\n\n constructor(\n private dialog: MatDialog,\n private settingListFormHelper: SettingListFormHelper) { }\n\n setting() {\n return this.formGroup.get('setting')?.value;\n }\n\n rolloutRules() {\n return this.formGroup.get('rolloutRules') as UntypedFormArray;\n }\n\n comparisonAttributes() {\n return this.formGroup.root.get('comparisonAttributes')?.value;\n }\n\n removeRule(index: any) {\n this.rolloutRules().removeAt(index);\n this.rolloutRules().markAsDirty();\n }\n\n onDrop(event: any) {\n const rolloutRules = this.rolloutRules().controls;\n moveItemInArray(rolloutRules, event.previousIndex, event.currentIndex);\n this.formGroup.markAsDirty();\n }\n\n attributeChanged(event: any, comparisonAttribute: UntypedFormControl) {\n if (this.defaultComparisonAttributes.indexOf(event.value) !== -1) {\n if (comparisonAttribute.value !== event.value) {\n comparisonAttribute.setValue(event.value);\n this.formGroup.markAsDirty();\n }\n } else {\n if (comparisonAttribute.value !== '') {\n comparisonAttribute.setValue('');\n this.formGroup.markAsDirty();\n }\n }\n }\n\n getPlaceHolder(rolloutRule: any) {\n if (!rolloutRule.controls.comparisonAttribute.value) {\n return '';\n }\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.SensitiveIsOneOf:\n case RolloutRuleComparator.SensitiveIsNotOneOf:\n switch (rolloutRule.controls.comparisonAttribute.value.toLowerCase()) {\n case 'identifier':\n return 'e.g: user_id1, user_id2, user_id3';\n case 'email':\n return 'e.g: jane@example.com, john@example.com';\n case 'country':\n return 'e.g: France, Brazil';\n default:\n return 'e.g: value1, value2, value3';\n }\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n switch (rolloutRule.controls.comparisonAttribute.value.toLowerCase()) {\n case 'identifier':\n return 'part-of-id';\n case 'email':\n return 'e.g: @example.com';\n case 'country':\n return 'e.g: United';\n default:\n return 'e.g: any-part-of-your-value-string';\n }\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n return 'e.g: 1.0.0, 2.0.1';\n case RolloutRuleComparator.SemVerLessOrEquals:\n case RolloutRuleComparator.SemVerLess:\n case RolloutRuleComparator.SemVerGreater:\n case RolloutRuleComparator.SemVerGreaterOrEquals:\n return 'e.g: 1.0.0';\n case RolloutRuleComparator.NumberEquals:\n case RolloutRuleComparator.NumberDoesNotEqual:\n case RolloutRuleComparator.NumberLess:\n case RolloutRuleComparator.NumberLessOrEquals:\n case RolloutRuleComparator.NumberGreater:\n case RolloutRuleComparator.NumberGreaterOrEquals:\n return 'e.g: 42';\n }\n\n return '';\n }\n\n getComparisonValueType(rolloutRule: any) {\n return this.settingListFormHelper.getComparisonValueType(rolloutRule.controls.comparator.value);\n }\n\n getInfoClass(rolloutRule: any) {\n if (!rolloutRule.controls.comparisonAttribute.value) {\n return 'info';\n }\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n return 'warn';\n default:\n return 'info';\n }\n }\n\n getInfoTooltip(rolloutRule: any) {\n if (!rolloutRule.controls.comparisonAttribute.value) {\n return 'Learn more about comparators';\n }\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n return 'Consider using sensitive text comparators. Click to learn more.';\n default:\n return 'Click to learn more about comparators';\n }\n }\n\n comparatorChanged(rolloutRule: any) {\n let validators: any[] = [];\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.SensitiveIsOneOf:\n case RolloutRuleComparator.SensitiveIsNotOneOf:\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n validators = [Validators.required, Validators.maxLength(65535)];\n break;\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n validators = [Validators.required, this.validateSemVerList];\n break;\n case RolloutRuleComparator.SemVerLessOrEquals:\n case RolloutRuleComparator.SemVerLess:\n case RolloutRuleComparator.SemVerGreater:\n case RolloutRuleComparator.SemVerGreaterOrEquals:\n validators = [Validators.required, this.validateSemVer];\n break;\n case RolloutRuleComparator.NumberEquals:\n case RolloutRuleComparator.NumberDoesNotEqual:\n case RolloutRuleComparator.NumberLess:\n case RolloutRuleComparator.NumberLessOrEquals:\n case RolloutRuleComparator.NumberGreater:\n case RolloutRuleComparator.NumberGreaterOrEquals:\n validators = [Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\n break;\n }\n\n rolloutRule.controls.comparisonValue.setValidators(validators);\n if (this.getComparisonValueType(rolloutRule) === \"number\") {\n const oldValue = rolloutRule.controls.comparisonValue.value;\n rolloutRule.controls.comparisonValue.setValue(FormHelper.normalizeNumberStoredAsString(rolloutRule.controls.comparisonValue.value));\n if (oldValue !== rolloutRule.controls.comparisonValue.value) {\n rolloutRule.controls.comparisonValue.markAsTouched();\n }\n }\n rolloutRule.controls.comparisonValue.updateValueAndValidity();\n }\n\n isListType(rolloutRule: any) {\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.SensitiveIsOneOf:\n case RolloutRuleComparator.SensitiveIsNotOneOf:\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n return true;\n default:\n return false;\n }\n }\n\n validateSemVer(c: UntypedFormControl) {\n\n if (valid(c.value) === null) {\n return {\n validateSemVer: {\n valid: false\n }\n };\n }\n\n return null;\n }\n\n validateSemVerList(c: UntypedFormControl) {\n if (!c.value) {\n return {\n validateSemVerList: {\n valid: false\n }\n };\n }\n\n const semvers = c.value.split(',').map((s: any) => s.trim());\n if (semvers.find((s: any) => s && s !== '' && valid(s) === null)) {\n return {\n validateSemVerList: {\n valid: false\n }\n };\n }\n\n return null;\n }\n\n popOut(rolloutRule: any) {\n this.dialog.open(ExpandDialogComponent, {\n width: '640px',\n data: {\n control: rolloutRule.controls.comparisonValue,\n multiline: this.isListType(rolloutRule)\n }\n });\n }\n\n\n trackByIndex(index: number): any {\n return index;\n }\n\n getRolloutRuleValueFormControl(rolloutRule: any) {\n return rolloutRule.controls.value as UntypedFormControl;\n }\n\n getRolloutRuleComparisonValueFormControl(rolloutRule: any) {\n return rolloutRule.controls.comparisonValue as UntypedFormControl;\n }\n\n getRolloutRuleComparisonAttributeFormControl(rolloutRule: any) {\n return rolloutRule.controls.comparisonAttribute as UntypedFormControl;\n }\n\n getRolloutRuleTypeFormControl(rolloutRule: any) {\n return rolloutRule.controls.type as UntypedFormControl;\n }\n\n getRolloutRuleComparatorFormControl(rolloutRule: any) {\n return rolloutRule.controls.comparator as UntypedFormControl;\n }\n\n getRolloutRuleSegmentComparatorFormControl(rolloutRule: any) {\n return rolloutRule.controls.segmentComparator as UntypedFormControl;\n }\n\n getRolloutRuleSegmentIdFormControl(rolloutRule: any) {\n return rolloutRule.controls.segmentId as UntypedFormControl;\n }\n}\n","<div [formGroup]=\"formGroup\">\n <div cdkDropList (cdkDropListDropped)=\"onDrop($event)\" [cdkDropListDisabled]=\"readOnly\"\n [cdkDropListData]=\"rolloutRules().controls\">\n <div *ngFor=\"let rolloutRule of rolloutRules().controls; trackBy: trackByIndex; let i = index\" cdkDrag>\n <div class=\"targeting-row\">\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 0\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user's</a>\n </div>\n\n <select class=\"custom-select attribute-select\" matTooltip=\"Comparison attribute\"\n matTooltipPosition=\"above\"\n (change)=\"attributeChanged($event.target, getRolloutRuleComparisonAttributeFormControl(rolloutRule))\"\n [disabled]=\"readOnly\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\n [selected]=\"comparisonAttribute === getRolloutRuleComparisonAttributeFormControl(rolloutRule).value\">\n {{comparisonAttribute}}</option>\n <option\n [selected]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) === -1\">\n Custom\n </option>\n </select>\n\n\n <span class=\"attribute-span\" matTooltip=\"Custom user attribute\" matTooltipPosition=\"above\"\n [hidden]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) !== -1\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid\">*</span>\n <input\n [ngClass]=\"{'invalid': getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid}\"\n type=\"text\" matInput [matAutocomplete]=\"auto\"\n [formControl]=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule)\" class=\"attribute\"\n placeholder=\"e.g. Eye color\">\n </span>\n\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of comparisonAttributes()\" [value]=\"option\">\n {{option}}\n </mat-option>\n </mat-autocomplete>\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select\" [formControl]=\"getRolloutRuleComparatorFormControl(rolloutRule)\"\n matTooltip=\"Comparator\" matTooltipPosition=\"above\"\n (change)=\"comparatorChanged(rolloutRule)\">\n <optgroup label=\"CONFIDENTIAL TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(16, 18)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(0, 4)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"SEMANTIC VERSION\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(4, 10)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"NUMBER\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(10, 16)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n </select>\n <div [class]=\"getInfoClass(rolloutRule)\" [matTooltip]=\"getInfoTooltip(rolloutRule)\">\n <a href=\"https://configcat.com/docs/advanced/targeting/#comparator\" target=\"_blank\"\n rel=\"noopener noreferrer\">\n <mat-icon>info</mat-icon>\n </a>\n </div>\n </div>\n\n <div class=\"comparison-value\">\n <span class=\"error\"\n *ngIf=\"getRolloutRuleComparisonValueFormControl(rolloutRule).invalid\">*</span>\n\n <input [ngClass]=\"{'invalid': getRolloutRuleComparisonValueFormControl(rolloutRule).invalid}\"\n [formControl]=\"getRolloutRuleComparisonValueFormControl(rolloutRule)\"\n [type]=\"getComparisonValueType(rolloutRule)\" [placeholder]=\"getPlaceHolder(rolloutRule)\"\n matTooltip=\"Comparison value\" matTooltipPosition=\"above\" inputDisplayNormalizer>\n <div class=\"expand\" matTooltip=\"Pop-out Editor\" matTooltipPosition=\"above\"\n (click)=\"popOut(rolloutRule)\" *ngIf=\"getComparisonValueType(rolloutRule)==='text'\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 1\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user</a>\n </div>\n\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select segment-comparator\"\n [formControl]=\"getRolloutRuleSegmentComparatorFormControl(rolloutRule)\"\n matTooltip=\"Segment comparator\" matTooltipPosition=\"above\">\n <option *ngFor=\"let comparator of segmentComparators\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </select>\n </div>\n\n <div class=\"select-wrapper\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleSegmentIdFormControl(rolloutRule).invalid\">*</span>\n <select class=\"custom-select segment-select\"\n [formControl]=\"getRolloutRuleSegmentIdFormControl(rolloutRule)\" matTooltip=\"Segment\"\n matTooltipPosition=\"above\"\n [ngClass]=\"{'invalid': getRolloutRuleSegmentIdFormControl(rolloutRule).invalid}\">\n <option *ngFor=\"let segment of segments\" [ngValue]=\"segment.segmentId\">\n {{segment.name}}\n </option>\n </select>\n </div>\n\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n\n <div class=\"value flex\">\n <div class=\"serve\" *ngIf=\"setting().settingType !== SettingType.Boolean\">\n <mat-chip-set>\n <mat-chip class=\"chip\">Serve:</mat-chip>\n </mat-chip-set>\n </div>\n\n <configcat-value class=\"served-value\"\n [valueFormControl]=\"getRolloutRuleValueFormControl(rolloutRule)\" [setting]=\"setting()\">\n </configcat-value>\n </div>\n </div>\n </div>\n </div>\n</div>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormArray, UntypedFormControl } from '@angular/forms';\nimport { RolloutPercentageItemModel, RolloutRuleComparator, RolloutRuleModel, SegmentComparator, SegmentListModel, SettingModel, SettingType } from 'ng-configcat-publicapi';\nimport { SettingListFormHelper } from '../../_services/setting-list-form-helper';\n\n@Component({\n selector: 'setting',\n templateUrl: './setting.component.html',\n styleUrls: ['./setting.component.scss']\n})\nexport class SettingComponent implements OnInit {\n\n @Input() dashboardBasePath = 'https://app.configcat.com';\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n\n @Input() formGroup!: UntypedFormGroup;\n @Input() readOnly = false;\n @Input() canDeleteSetting = false;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = false;\n @Input() segments!: SegmentListModel[];\n\n @Output() deleteSettingRequested = new EventEmitter();\n\n rulesBeingRendered = false;\n\n SettingType = SettingType;\n\n constructor(private formHelper: SettingListFormHelper) { }\n\n ngOnInit() { }\n\n environment() {\n return this.formGroup.root.get('environment')?.value;\n }\n\n setting() {\n return <SettingModel>this.formGroup.get('setting')?.value;\n }\n\n integrationLinks() {\n return this.formGroup.get('integrationLinks') as UntypedFormArray;\n }\n\n rolloutRules() {\n return this.formGroup.get('rolloutRules') as UntypedFormArray;\n }\n\n rolloutPercentageItems() {\n return this.formGroup.get('rolloutPercentageItems') as UntypedFormArray;\n }\n\n value() {\n return this.formGroup.get('value') as UntypedFormControl;\n }\n\n addRolloutRule() {\n this.rolloutRules().push(this.formHelper.createRolloutRuleFormGroup(\n <RolloutRuleModel>{\n comparisonAttribute: 'Identifier',\n comparator: RolloutRuleComparator.SensitiveIsOneOf,\n comparisonValue: '',\n value: this.setting().settingType === SettingType.Boolean ? false as unknown : null\n },\n this.readOnly, this.setting().settingType));\n this.rolloutRules().markAsDirty();\n }\n\n addSegmentRolloutRule() {\n this.rolloutRules().push(this.formHelper.createRolloutRuleFormGroup(\n <RolloutRuleModel>{\n segmentComparator: SegmentComparator.IsIn,\n value: this.setting().settingType === SettingType.Boolean ? false as unknown : null\n },\n this.readOnly, this.setting().settingType));\n this.rolloutRules().markAsDirty();\n }\n\n removeRolloutRules() {\n this.rolloutRules().clear();\n this.rolloutRules().markAsDirty();\n }\n\n addRolloutPercentageItem() {\n\n if (this.rolloutPercentageItems().length === 0) {\n switch (this.setting().settingType) {\n case SettingType.Boolean:\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 0,\n value: true as unknown\n },\n this.readOnly, this.setting().settingType));\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 100,\n value: false as unknown\n },\n this.readOnly, this.setting().settingType));\n break;\n\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n for (let i = 0; i < 4; i++) {\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 25,\n value: null\n },\n this.readOnly, this.setting().settingType));\n }\n\n break;\n }\n } else if (this.setting().settingType !== SettingType.Boolean) {\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 0,\n value: null\n },\n this.readOnly, this.setting().settingType));\n }\n\n this.rolloutPercentageItems().markAsDirty();\n }\n\n removeRolloutPercentageItems() {\n this.rolloutPercentageItems().clear();\n this.rolloutPercentageItems().markAsDirty();\n }\n\n deleteSetting() {\n this.deleteSettingRequested.emit({ setting: this.setting() });\n }\n\n getDashboardUrl() {\n return this.dashboardBasePath + '/' + this.productId + '/' + this.configId + '/' + this.environmentId + '?settingId=' + this.setting().settingId;\n }\n}\n","<div class=\"setting-full\" [formGroup]=\"formGroup\">\n <div class=\"delete\" (click)=\"deleteSetting()\" *ngIf=\"canDeleteSetting\" [matTooltip]=\"deleteSettingText\"\n data-robot=\"deleteSetting\">\n <mat-icon>cancel</mat-icon>\n </div>\n <div class=\"setting-header\">\n <div class=\"setting-name\">\n <div class=\"name\" data-robot=\"settingName\">\n {{setting().name}}\n <span *ngIf=\"showEnvironmentName\"> ({{environment().name}})</span>\n </div>\n </div>\n </div>\n <div class=\"setting-content\">\n <div class=\"setting-details\">\n <div class=\"setting-key\"><code data-robot=\"settingKey\">{{setting().key}}</code></div>\n <span *ngIf=\"setting().hint\" class=\"description\">{{setting().hint}}</span>\n <div class=\"open\"><a [href]=\"getDashboardUrl()\" target=\"_blank\" rel=\"noopener noreferrer\">Open in ConfigCat</a>\n </div>\n </div>\n\n <div class=\"rules-list\">\n <div>\n <configcat-rollout-rules *ngIf=\"rolloutRules().controls.length !== 0\" [formGroup]=\"formGroup\"\n [segments]=\"segments\" [readOnly]=\"readOnly\">\n </configcat-rollout-rules>\n </div>\n\n <configcat-rollout-percentage-items *ngIf=\"rolloutPercentageItems().controls.length !== 0\" [formGroup]=\"formGroup\"\n [readOnly]=\"readOnly\">\n </configcat-rollout-percentage-items>\n\n <div class=\"all-other flex\">\n <div *ngIf=\"rolloutPercentageItems().length === 0 && rolloutRules().length !== 0\"\n matTooltip=\"This value will be served to all users who the above rules don't apply.\"\n matTooltipPosition=\"above\">\n <mat-chip-set>\n <mat-chip class=\"chip\">To all other users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n <div *ngIf=\"rolloutPercentageItems().length !== 0\"\n matTooltip=\"This fallback value will be served in case the user can't be identified.\"\n matTooltipPosition=\"above\">\n <mat-chip-set>\n <mat-chip class=\"chip\">To unidentified users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n <div *ngIf=\"rolloutPercentageItems().length === 0 && rolloutRules().length === 0\">\n <mat-chip-set>\n <mat-chip class=\"chip\">To all users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n <configcat-value class=\"served-value\" [valueFormControl]=\"value()\" [setting]=\"setting()\">\n </configcat-value>\n </div>\n <div class=\"buttons\">\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addRolloutRule()\" *ngIf=\"!readOnly\">\n {{rolloutRules().length === 0 ? 'Target specific users' : 'Add new targeting rule'}}\n </button>\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addSegmentRolloutRule()\" *ngIf=\"!readOnly\">\n {{rolloutRules().length === 0 ? 'Target segment' : 'Target new segment'}}\n </button>\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addRolloutPercentageItem()\"\n *ngIf=\"!readOnly\"\n [disabled]=\"setting().settingType === SettingType.Boolean && rolloutPercentageItems().length !== 0\">\n {{rolloutPercentageItems().length === 0 ? 'Target % of users' : 'Add new % option'}}\n </button>\n </div>\n </div>\n </div>\n</div>","import { Component, Input, Output, EventEmitter, OnDestroy, OnChanges } from '@angular/core';\nimport { SettingValuesModel, UpdateSettingValuesModel } from '../_models';\nimport { UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { forkJoin, Observable, Subscription } from 'rxjs';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ReasonDialogComponent } from '../dialogs/reason-dialog/reason-dialog.component';\nimport { SaveSnackbarComponent } from '../dialogs/save-snackbar/save-snackbar.component';\nimport { SettingListFormHelper } from '../_services/setting-list-form-helper';\nimport { RolloutPercentageItemModel, RolloutRuleModel, SegmentListModel, SettingModel, UpdateSettingValueModel } from 'ng-configcat-publicapi';\n\n@Component({\n selector: 'configcat-setting-list',\n templateUrl: './setting-list.component.html',\n styleUrls: ['./setting-list.component.scss']\n})\nexport class SettingListComponent implements OnChanges, OnDestroy {\n\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n @Input() dashboardBasePath = 'https://app.configcat.com';\n\n @Input() canDeleteSetting = false;\n\n @Input() onSave!: (value: UpdateSettingValuesModel) => Observable<SettingValuesModel>;\n @Input() loadSettingValues!: () => Observable<SettingValuesModel>;\n @Input() loadSegments!: () => Observable<SegmentListModel[]>;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = false;\n\n @Output() loadSucceeded = new EventEmitter();\n @Output() deleteSettingRequested = new EventEmitter();\n @Output() formValuesChanged = new EventEmitter();\n\n formValuesChangedSubscription!: Subscription | null;\n\n loading = true;\n\n settingValues!: SettingValuesModel;\n segments!: SegmentListModel[];\n formGroup!: UntypedFormGroup;\n\n submitting = false;\n showRevertQuestion = false;\n showFeedBackMessage = false;\n readOnly = false;\n\n constructor(private formHelper: SettingListFormHelper,\n private snackBar: MatSnackBar,\n private dialog: MatDialog) { }\n\n ngOnChanges(): void {\n this.reloadSettingValues();\n }\n\n ngOnDestroy() {\n if (this.formValuesChangedSubscription) {\n this.formValuesChangedSubscription.unsubscribe();\n this.formValuesChangedSubscription = null;\n }\n }\n\n reloadSettingValues() {\n this.showFeedBackMessage = false;\n this.loading = true;\n forkJoin({\n segments: this.loadSegments(),\n settingValues: this.loadSettingValues()\n }).subscribe(result => {\n this.readOnly = result.settingValues.readOnly;\n this.settingValues = result.settingValues;\n this.segments = result.segments;\n this.createFormGroup();\n this.loading = false;\n this.loadSucceeded.emit(true);\n },\n () => {\n this.snackBar.open('Ooops. We could not load your Feature Flags and Settings. Please try again or contact us.',\n 'Dismiss', { duration: 60000, panelClass: 'red-snackbar' });\n });\n }\n\n createFormGroup() {\n this.formGroup = this.formHelper.createSettingValuesFormGroup(this.settingValues);\n this.formValuesChangedSubscription = this.formGroup.valueChanges.subscribe(() => {\n this.formValuesChanged.emit();\n });\n }\n\n settingValuesFormArray() {\n return this.formGroup.get('settingValues') as UntypedFormArray;\n }\n\n getSettingValueFormGroups() {\n return this.settingValuesFormArray().controls.map(c => c as UntypedFormGroup);\n }\n\n private buildUpdateSettingValuesModel(settingValuesVM: UpdateSettingValueModel[]) {\n return settingValuesVM.map(settingValueVM => {\n return <UpdateSettingValueModel>\n {\n rolloutRules: settingValueVM.rolloutRules?.map(rolloutRuleVM =>\n <RolloutRuleModel>{\n comparisonAttribute: rolloutRuleVM.comparisonAttribute,\n comparator: rolloutRuleVM.comparator,\n comparisonValue: this.formHelper.normalizeComparisonValue(rolloutRuleVM.comparator, rolloutRuleVM.comparisonValue),\n segmentComparator: rolloutRuleVM.segmentComparator,\n segmentId: rolloutRuleVM.segmentId,\n value: rolloutRuleVM.value\n }),\n rolloutPercentageItems: settingValueVM.rolloutPercentageItems?.map(rolloutPercentageItemVM =>\n <RolloutPercentageItemModel>{\n percentage: rolloutPercentageItemVM.percentage,\n value: rolloutPercentageItemVM.value\n }),\n value: settingValueVM.value\n };\n });\n }\n\n submit() {\n if (!this.formGroup || !this.formGroup.valid) {\n this.showFeedBackMessage = true;\n this.formGroup.markAsTouched();\n return;\n }\n\n this.showFeedBackMessage = false;\n this.submitting = true;\n\n const updateSettingValuesModel = <UpdateSettingValuesModel>{\n settingValues: this.buildUpdateSettingValuesModel(this.formGroup.controls.settingValues.value),\n knownLastUpdatedAt: this.settingValues.lastUpdatedAt,\n forced: false\n };\n\n if (this.settingValues.reasonRequired) {\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\n width: '450px'\n });\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result && result.button === 'save' && result.reason) {\n\n updateSettingValuesModel.reason = result.reason;\n this.updateSettingValues(updateSettingValuesModel);\n } else {\n this.submitting = false;\n }\n });\n return;\n }\n\n this.updateSettingValues(updateSettingValuesModel);\n }\n\n updateSettingValues(updateSettingValuesModel: any) {\n this.onSave(updateSettingValuesModel).subscribe(settingValues => {\n this.settingValues = settingValues;\n this.createFormGroup();\n this.submitting = false;\n this.snackBar.openFromComponent(SaveSnackbarComponent, { duration: 5000, panelClass: 'green-snackbar' });\n }, (error) => {\n if (error.status === 400 && error.error && error.error.Reason && error.error.Reason[0] === 'Reason required') {\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\n width: '450px'\n });\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result && result.button === 'save' && result.reason) {\n updateSettingValuesModel.reason = result.reason;\n this.updateSettingValues(updateSettingValuesModel);\n } else {\n this.submitting = false;\n }\n });\n return;\n }\n\n this.formGroup.setErrors({ internalServerError: 'Internal server error' });\n this.showFeedBackMessage = true;\n });\n }\n\n handleRevertYes() {\n this.showRevertQuestion = false;\n this.reloadSettingValues();\n }\n\n handleRevertCancel() {\n this.showRevertQuestion = false;\n }\n\n onDeleteSettingRequested(setting: { setting: SettingModel }) {\n this.deleteSettingRequested.emit({\n setting: setting.setting,\n environment: this.settingValues.environment,\n config: this.settingValues.config\n });\n }\n}\n","<form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" *ngIf=\"!loading\">\n <div class=\"wrapper\" *ngFor=\"let settingValueFromGroup of getSettingValueFormGroups(); let i = index\">\n <setting [formGroup]=\"settingValueFromGroup\" [readOnly]=\"readOnly\" [canDeleteSetting]=\"canDeleteSetting\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\n [showEnvironmentName]=\"showEnvironmentName\" [segments]=\"segments\" [productId]=\"productId\" [configId]=\"configId\"\n [environmentId]=\"environmentId\" [dashboardBasePath]=\"dashboardBasePath\">\n </setting>\n </div>\n\n <div class=\"save\" *ngIf=\"!readOnly && !submitting && formGroup.dirty\">\n\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [disabled]=\"submitting\">\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\n </button>\n <button type=\"button\" mat-stroked-button *ngIf=\"!showRevertQuestion\" (click)=\"showRevertQuestion = true\">\n <mat-icon>history</mat-icon><span>Revert changes</span>\n </button>\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\n <span>Something went wrong and we could not save your settings. You can try again or <a\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact us.</a></span>\n </div>\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\n <span>Oh no! A feature flag has invalid or missing data.</span>\n </div>\n </div>\n <div *ngIf=\"showRevertQuestion\">\n <span class=\"revert\">Revert to last saved state?</span>\n <button type=\"button\" class=\"yes\" mat-stroked-button (click)=\"handleRevertYes()\">Yes</button>\n <button type=\"button\" mat-stroked-button (click)=\"handleRevertCancel()\">No</button>\n </div>\n </div>\n</form>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { BaseComponent } from '../base/base.component';\nimport { EvaluationVersion, SegmentListModel, SettingFormulaModel, SettingValueModel, UpdateSettingValueModel } from 'ng-configcat-publicapi';\nimport { Observable, throwError, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { PublicApiService } from '../_services';\nimport { SettingValuesModel, UpdateSettingValuesModel } from '../_models';\n\n@Component({\n selector: 'configcat-setting-item',\n templateUrl: './setting-item.component.html',\n styleUrls: ['./setting-item.component.scss']\n})\nexport class SettingItemComponent extends BaseComponent implements OnInit {\n\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n @Input() evaluationVersion!: EvaluationVersion;\n @Input() settingId!: number;\n\n @Input() canDeleteSetting = true;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = true;\n\n @Output() deleteSettingRequested = new EventEmitter();\n\n @Output() loadSucceeded = new EventEmitter();\n @Output() loadFailed = new EventEmitter();\n @Output() saveSucceeded = new EventEmitter();\n @Output() saveFailed = new EventEmitter();\n\n @Output() formValuesChanged = new EventEmitter();\n\n settingValue!: SettingValueModel;\n segments!: SegmentListModel[];\n dashboardBasePath: string;\n\n settingFormulaModel!: SettingFormulaModel;\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n this.dashboardBasePath = publicApiService.getDashboardBasePath();\n }\n\n ngOnInit(): void {\n }\n\n loadSettingValues = (): Observable<SettingValuesModel> => {\n return this.createSettingValuesService().getSettingValue(this.environmentId, this.settingId)\n .pipe(\n map(settingValue => {\n this.settingValue = settingValue;\n\n const settingValues = {\n settingValues: [settingValue],\n readOnly: settingValue.readOnly,\n config: settingValue.config,\n environment: settingValue.environment\n } as SettingValuesModel;\n\n return settingValues;\n }),\n catchError(error => {\n this.loadFailed.emit(error);\n return throwError(error);\n })\n );\n }\n\n itemLoadSucceeded() {\n this.loadSucceeded.emit(true);\n }\n\n loadSegments = (): Observable<SegmentListModel[]> => {\n return this.createSegmentsService().getSegments(this.productId)\n .pipe(\n map(segments => {\n this.segments = segments;\n return segments;\n }),\n catchError(error => {\n return throwError(error);\n })\n );\n }\n\n handleSave = (model: UpdateSettingValuesModel): Observable<SettingValuesModel> => {\n if (model.settingValues.length === 0) {\n return of();\n }\n const updateModel = model.settingValues[0] as UpdateSettingValueModel;\n\n return this.createSettingValuesService().replaceSettingValue(\n this.environmentId, this.settingId, updateModel, model.reason)\n .pipe(\n map(settingValue => {\n this.settingValue = settingValue;\n\n const settingValues = {\n settingValues: [settingValue],\n readOnly: settingValue.readOnly,\n config: settingValue.config,\n environment: settingValue.environment\n } as SettingValuesModel;\n\n this.saveSucceeded.emit(settingValues);\n return settingValues;\n }),\n catchError(error => {\n this.saveFailed.emit(error);\n return throwError(error);\n })\n );\n }\n\n onDeleteSettingRequested(setting: any) {\n this.deleteSettingRequested.emit({\n setting: setting.setting,\n environment: this.settingValue.environment,\n config: this.settingValue.config\n });\n }\n\n onFormValuesChanged() {\n this.formValuesChanged.emit();\n }\n}\n","<configcat-setting-list [canDeleteSetting]=\"canDeleteSetting\" [onSave]=\"handleSave\"\n [loadSettingValues]=\"loadSettingValues\" [loadSegments]=\"loadSegments\" (loadSucceeded)=\"itemLoadSucceeded()\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\n [showEnvironmentName]=\"showEnvironmentName\" (formValuesChanged)=\"onFormValuesChanged()\" [productId]=\"productId\"\n [configId]=\"configId\" [environmentId]=\"environmentId\" [dashboardBasePath]=\"dashboardBasePath\">\n</configcat-setting-list>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { BaseComponent } from './base.component';\n\n@Component({\n selector: 'base-select',\n template: '<div></div>'\n})\nexport class BaseSelectComponent extends BaseComponent {\n\n @Input() customDropdown: boolean = false;\n\n @Output() dropdownOpened = new EventEmitter<boolean>();\n\n protected openChanged(event: any) {\n this.dropdownOpened.emit(event);\n }\n}\n\n\n","import { Component, OnInit, Input, OnChanges } from '@angular/core';\nimport { SettingModel } from 'ng-configcat-publicapi';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-setting-select',\n templateUrl: './setting-select.component.html',\n styleUrls: ['./setting-select.component.css']\n})\nexport class SettingSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n\n @Input() valueFormControl!: UntypedFormControl;\n @Input() configId!: string;\n settings: SettingModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.settings = [];\n this.reloadSettings();\n }\n\n ngOnChanges() {\n this.reloadSettings();\n }\n\n reloadSettings() {\n if (this.configId) {\n this.createSettingsService().getSettings(this.configId).subscribe(settings => {\n this.settings = settings;\n if (this.settings.length > 0) {\n this.valueFormControl.setValue(this.settings[0].settingId);\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n }\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\" *ngIf=\"settings\">\n <mat-label>Feature flag or setting</mat-label>\n <mat-select placeholder=\"Feature flag or setting\" [formControl]=\"valueFormControl\" name=\"value\"\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let setting of settings\" [value]=\"setting.settingId\" matTooltip=\"{{setting.name}}\"\n [matTooltipShowDelay]=\"1000\">{{setting.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input } from '@angular/core';\nimport { ProductModel } from 'ng-configcat-publicapi';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-product-select',\n templateUrl: './product-select.component.html',\n styleUrls: ['./product-select.component.css']\n})\nexport class ProductSelectComponent extends BaseSelectComponent implements OnInit {\n\n @Input() valueFormControl!: UntypedFormControl;\n products: ProductModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.products = [];\n this.createProductsService().getProducts().subscribe(products => {\n this.products = products;\n if (this.products.length > 0) {\n this.valueFormControl.setValue(this.products[0].productId, {\n emitEvent: true,\n emitModelToViewChange: true, emitViewToModelChange: true\n });\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Product</mat-label>\n <mat-select placeholder=\"Product\" [formControl]=\"valueFormControl\" name=\"productValue\"\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let product of products\" [value]=\"product.productId\" matTooltip=\"{{product.name}}\"\n [matTooltipShowDelay]=\"1000\">{{product.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input, OnChanges, forwardRef } from '@angular/core';\nimport { ConfigModel } from 'ng-configcat-publicapi';\nimport { NG_VALUE_ACCESSOR, UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-config-select',\n templateUrl: './config-select.component.html',\n styleUrls: ['./config-select.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ConfigSelectComponent),\n multi: true\n }\n ]\n})\nexport class ConfigSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n\n @Input() valueFormControl!: UntypedFormControl;\n @Input() productId!: string;\n configs: ConfigModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.configs = [];\n this.reloadConfigs();\n }\n\n ngOnChanges() {\n this.reloadConfigs();\n }\n\n reloadConfigs() {\n if (this.productId) {\n this.createConfigsService().getConfigs(this.productId).subscribe(configs => {\n this.configs = configs;\n if (this.configs.length > 0) {\n this.valueFormControl.setValue(this.configs[0].configId);\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n }\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\" *ngIf=\"configs\">\n <mat-label>Config</mat-label>\n <mat-select placeholder=\"Config\" [formControl]=\"valueFormControl\" name=\"value\" disableOptionCentering\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let config of configs\" [value]=\"config.configId\" matTooltip=\"{{config.name}}\"\n [matTooltipShowDelay]=\"1000\">{{config.name}}</mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input, OnChanges } from '@angular/core';\nimport { EnvironmentModel } from 'ng-configcat-publicapi';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-environment-select',\n templateUrl: './environment-select.component.html',\n styleUrls: ['./environment-select.component.css']\n})\nexport class EnvironmentSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n\n @Input() valueFormControl!: UntypedFormControl;\n @Input() productId!: string;\n environments: EnvironmentModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.environments = [];\n this.reloadEnvironments();\n }\n\n ngOnChanges() {\n this.reloadEnvironments();\n }\n\n reloadEnvironments() {\n if (this.productId) {\n this.createEnvironmentsService().getEnvironments(this.productId).subscribe(environments => {\n this.environments = environments;\n if (this.environments.length > 0) {\n this.valueFormControl.setValue(this.environments[0].environmentId);\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n }\n\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\" *ngIf=\"environments\">\n <mat-label>Environment</mat-label>\n <mat-select placeholder=\"Environment\" [formControl]=\"valueFormControl\" name=\"value\"\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let environment of environments\" [value]=\"environment.environmentId\"\n matTooltip=\"{{environment.name}}\" [matTooltipShowDelay]=\"1000\">{{environment.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormBuilder, Validators } from '@angular/forms';\nimport { PublicApiService } from '../_services';\nimport { FormHelper } from '../_services/form-helper';\n\n@Component({\n selector: 'configcat-authorization',\n templateUrl: './authorization.component.html',\n styleUrls: ['./authorization.component.scss']\n})\nexport class AuthorizationComponent implements OnInit {\n\n formGroup!: UntypedFormGroup;\n @Input() basePath = null;\n @Input() integrationName = 'ConfigCat Feature Flags';\n @Output() authorized = new EventEmitter();\n @Output() error = new EventEmitter();\n FormHelper = FormHelper;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private publicApiService: PublicApiService\n ) { }\n\n ngOnInit(): void {\n this.formGroup = this.formBuilder.group({\n basicAuthUsername: ['', Validators.required],\n basicAuthPassword: ['', Validators.required],\n });\n }\n\n onSubmit() {\n if (!this.formGroup.valid) {\n return;\n }\n\n const meService = this.publicApiService.createMeService(\n this.formGroup.controls.basicAuthUsername.value,\n this.formGroup.controls.basicAuthPassword.value,\n this.basePath);\n\n meService.getMe().subscribe(me => {\n this.authorized.emit({\n basicAuthUsername: this.formGroup.controls.basicAuthUsername.value,\n basicAuthPassword: this.formGroup.controls.basicAuthPassword.value,\n email: me.email,\n fullName: me.fullName\n });\n },\n () => {\n this.formGroup.setErrors({ invalidAuthorization: 'Invalid Basic auth user name or password' });\n this.error.emit();\n }\n );\n }\n\n getPublicApiUrl() {\n return this.publicApiService.getDashboardBasePath() + '/my-account/public-api-credentials';\n }\n}\n","<form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n <div class=\"container\">\n <div class=\"form\">\n <p>\n In order to use {{integrationName}} you have to authorize first with your ConfigCat Public API\n credentials.\n </p>\n <ul>\n <li>\n <a [href]=\"getPublicApiUrl()\" target=\"_blank\" rel=\"noopener noreferrer\">\n Get your Basic Auth user name and password</a> to access ConfigCat Public API.\n <br />\n <b>Note!</b> Your ConfigCat account's email address and password will not work here.\n </li>\n <li>\n Type your credentials here and click the Authorize button.\n </li>\n </ul>\n\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Basic auth user name</mat-label>\n <input matInput placeholder=\"Basic auth user name\" formControlName=\"basicAuthUsername\">\n <mat-error *ngIf=\"formGroup.controls.basicAuthUsername.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.basicAuthUsername)}}\n </mat-error>\n </mat-form-field>\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Basic auth password</mat-label>\n <input matInput placeholder=\"Basic auth password\" formControlName=\"basicAuthPassword\" type=\"password\"\n autocomplete=\"current-password\">\n <mat-error *ngIf=\"formGroup.controls.basicAuthPassword.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.basicAuthPassword)}}\n </mat-error>\n </mat-form-field>\n <div>\n <button mat-flat-button color=\"primary\" type=\"submit\" class=\"submit\">Authorize</button>\n <mat-error *ngIf=\"formGroup.invalid && formGroup.errors && formGroup.errors.invalidAuthorization\">\n {{formGroup.errors.invalidAuthorization}}</mat-error>\n </div>\n </div>\n </div>\n</form>","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-delete-setting-dialog',\n templateUrl: './delete-setting-dialog.component.html',\n styleUrls: ['./delete-setting-dialog.component.scss']\n})\nexport class DeleteSettingDialogComponent {\n\n constructor(public dialogRef: MatDialogRef<DeleteSettingDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: { system: string, ticketType: string }) { }\n\n remove() {\n this.dialogRef.close({ button: 'remove' });\n }\n\n cancel() {\n this.dialogRef.close({ button: 'cancel' });\n }\n\n}\n","<h1 mat-dialog-title>Remove Feature Flag or Setting from {{data.system}}</h1>\n<div mat-dialog-actions class=\"container\">\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"remove()\">Remove from {{data.ticketType}}</button>\n <button type=\"button\" mat-raised-button (click)=\"cancel()\">Cancel</button>\n</div>","\nexport enum UserComparator {\n // RolloutRuleComparatorV2Type.StringList\n SensitiveIsOneOf = 'sensitiveIsOneOf',\n SensitiveIsNotOneOf = 'sensitiveIsNotOneOf',\n SensitiveTextStartsWithAnyOf = 'sensitiveTextStartsWithAnyOf',\n SensitiveTextEndsWithAnyOf = 'sensitiveTextEndsWithAnyOf',\n SensitiveTextNotStartsWithAnyOf = 'sensitiveTextNotStartsWithAnyOf',\n SensitiveTextNotEndsWithAnyOf = 'sensitiveTextNotEndsWithAnyOf',\n SensitiveArrayContainsAnyOf = 'sensitiveArrayContainsAnyOf',\n SensitiveArrayDoesNotContainAnyOf = 'sensitiveArrayDoesNotContainAnyOf',\n\n IsOneOf = 'isOneOf',\n IsNotOneOf = 'isNotOneOf',\n TextStartsWithAnyOf = 'textStartsWithAnyOf',\n TextEndsWithAnyOf = 'textEndsWithAnyOf',\n TextNotStartsWithAnyOf = 'textNotStartsWithAnyOf',\n TextNotEndsWithAnyOf = 'textNotEndsWithAnyOf',\n ArrayContainsAnyOf = 'arrayContainsAnyOf',\n ArrayDoesNotContainAnyOf = 'arrayDoesNotContainAnyOf',\n ContainsAnyOf = 'containsAnyOf',\n DoesNotContainAnyOf = 'doesNotContainAnyOf',\n\n // RolloutRuleComparatorV2Type.String\n SensitiveTextEquals = 'sensitiveTextEquals',\n SensitiveTextDoesNotEqual = 'sensitiveTextDoesNotEqual',\n TextEquals = 'textEquals',\n TextDoesNotEqual = 'textDoesNotEqual',\n\n // RolloutRuleComparatorV2Type.Number\n NumberEquals = 'numberEquals',\n NumberDoesNotEqual = 'numberDoesNotEqual',\n NumberLess = 'numberLess',\n NumberLessOrEquals = 'numberLessOrEquals',\n NumberGreater = 'numberGreater',\n NumberGreaterOrEquals = 'numberGreaterOrEquals',\n\n // RolloutRuleComparatorV2Type.SemverList\n SemVerIsOneOf = 'semVerIsOneOf',\n SemVerIsNotOneOf = 'semVerIsNotOneOf',\n\n // RolloutRuleComparatorV2Type.Semver\n SemVerLess = 'semVerLess',\n SemVerLessOrEquals = 'semVerLessOrEquals',\n SemVerGreater = 'semVerGreater',\n SemVerGreaterOrEquals = 'semVerGreaterOrEquals',\n\n // RolloutRuleComparatorV2Type.DateTime\n DateTimeBefore = 'dateTimeBefore',\n DateTimeAfter = 'dateTimeAfter',\n}\n\nexport enum UserComparatorText {\n // RolloutRuleComparatorV2Type.StringList\n SensitiveIsOneOf = 'IS ONE OF (hashed)',\n SensitiveIsNotOneOf = 'IS NOT ONE OF (hashed)',\n SensitiveTextStartsWithAnyOf = 'STARTS WITH ANY OF (hashed)',\n SensitiveTextEndsWithAnyOf = 'ENDS WITH ANY OF (hashed)',\n SensitiveTextNotStartsWithAnyOf = 'NOT STARTS WITH ANY OF (hashed)',\n SensitiveTextNotEndsWithAnyOf = 'NOT ENDS WITH ANY OF (hashed)',\n SensitiveArrayContainsAnyOf = 'ARRAY CONTAINS ANY OF (hashed)',\n SensitiveArrayDoesNotContainAnyOf = 'ARRAY NOT CONTAINS ANY OF (hashed)',\n\n IsOneOf = 'IS ONE OF (cleartext)',\n IsNotOneOf = 'IS NOT ONE OF (cleartext)',\n TextStartsWithAnyOf = 'STARTS WITH ANY OF (cleartext)',\n TextEndsWithAnyOf = 'ENDS WITH ANY OF (cleartext)',\n TextNotStartsWithAnyOf = 'NOT STARTS WITH ANY OF (cleartext)',\n TextNotEndsWithAnyOf = 'NOT ENDS WITH ANY OF (cleartext)',\n ArrayContainsAnyOf = 'ARRAY CONTAINS ANY OF (cleartext)',\n ArrayDoesNotContainAnyOf = 'ARRAY NOT CONTAINS ANY OF (cleartext)',\n ContainsAnyOf = 'CONTAINS ANY OF (cleartext)',\n DoesNotContainAnyOf = 'NOT CONTAINS ANY OF (cleartext)',\n\n // RolloutRuleComparatorV2Type.String\n SensitiveTextEquals = 'EQUALS (hashed)',\n SensitiveTextDoesNotEqual = 'NOT EQUALS (hashed)',\n TextEquals = 'EQUALS (cleartext)',\n TextDoesNotEqual = 'NOT EQUALS (cleartext)',\n\n // RolloutRuleComparatorV2Type.Number\n NumberEquals = '= (number)',\n NumberDoesNotEqual = '!= (number)',\n NumberLess = '< (number)',\n NumberLessOrEquals = '<= (number)',\n NumberGreater = '> (number)',\n NumberGreaterOrEquals = '>= (number)',\n\n // RolloutRuleComparatorV2Type.SemverList\n SemVerIsOneOf = 'IS ONE OF (semver)',\n SemVerIsNotOneOf = 'IS NOT ONE OF (semver)',\n\n // RolloutRuleComparatorV2Type.Semver\n SemVerLess = '< (semver)',\n SemVerLessOrEquals = '<= (semver)',\n SemVerGreater = '> (semver)',\n SemVerGreaterOrEquals = '>= (semver)',\n\n // RolloutRuleComparatorV2Type.DateTime\n DateTimeBefore = 'BEFORE (UTC datetime)',\n DateTimeAfter = 'AFTER (UTC datetime)',\n}\n\nexport enum UserComparatorType {\n StringList = 0,\n String = 1,\n Number = 2,\n SemverList = 3,\n Semver = 4,\n DateTime = 5\n}\n","import { Injectable } from \"@angular/core\";\nimport { FormArray, FormControl, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\nimport {\n UserComparator, UserComparatorType, SettingType,\n IComparisonValueModel, IComparisonValueListModel,\n IFeatureFlagLimitations,\n ComparisonValueForm, ComparisonValueListForm,\n ConditionForm,\n PrerequisiteFlagConditionForm,\n IPrerequisiteSetting,\n PercentageOptionForm,\n SegmentConditionForm,\n TargetingRuleForm,\n UpdateSettingValueForm, UserConditionForm, ValueForm,\n PrerequisiteComparator, IConditionModel, IPrerequisiteFlagConditionModel, ISegmentConditionModel, IUserConditionModel,\n IValueModel, ITargetingRuleModel, IPercentageOptionModel, ISettingValueModel\n} from \"../bootstrap\";\nimport { valid } from 'semver';\nimport { percentageRegex, wholeNumberRegex } from \"../_services/form-helper\";\n\n@Injectable()\nexport class FormGenerator {\n public generateSettingValuesFormGroup(model: ISettingValueModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<UpdateSettingValueForm> {\n return new FormGroup<UpdateSettingValueForm>({\n defaultValue: this.generateValueFormGroup(model.defaultValue, model.setting.settingType, readOnly, featureFlagLimitations),\n percentageEvaluationAttribute: this.generatePercentageEvaluationAttributeFormControl(model.percentageEvaluationAttribute, readOnly),\n targetingRules: new FormArray<FormGroup<TargetingRuleForm>>(\n model.targetingRules.map(ft => this.generateTargetingRuleFormGroup(ft, model.setting.settingType, readOnly, settings, featureFlagLimitations))\n )\n });\n }\n\n public generatePercentageEvaluationAttributeFormControl(percentageEvaluationAttribute: string, readOnly: boolean) {\n return new FormControl({ value: percentageEvaluationAttribute, disabled: readOnly }, { validators: [this.validateEmptyString, Validators.maxLength(1000)] })\n }\n\n public generateTargetingRuleFormGroup(model: ITargetingRuleModel, settingType: SettingType, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<TargetingRuleForm> {\n const conditions = new FormArray<FormGroup<ConditionForm>>(\n model.conditions.map(tr => this.generateConditionFormGroup(tr, readOnly, settings, featureFlagLimitations))\n )\n\n if (model.percentageOptions?.length > 0) {\n return new FormGroup<TargetingRuleForm>({\n conditions,\n percentageOptions: new FormArray<FormGroup<PercentageOptionForm>>(\n model.percentageOptions.map(pr => this.generatePercentageOptionFormGroup(pr, settingType, readOnly, featureFlagLimitations)),\n [this.validatePercentageSum]\n )\n });\n } else if (model.value) {\n return new FormGroup<TargetingRuleForm>({\n conditions,\n value: this.generateValueFormGroup(model.value, settingType, readOnly, featureFlagLimitations)\n });\n }\n\n throw Error(\"Invalid model\");\n }\n\n public generateTargetingRuleWithEmptyPercentageOptions(settingType: SettingType, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<TargetingRuleForm> {\n return this.generateTargetingRuleFormGroup({\n conditions: [],\n percentageOptions: this.getEmptyPercentageOptions(settingType)\n }, settingType, readOnly, settings, featureFlagLimitations);\n }\n\n public getEmptyPercentageOptions(settingType: SettingType): IPercentageOptionModel[] {\n switch (settingType) {\n case SettingType.Boolean:\n return [\n { percentage: 50, value: { boolValue: true } },\n { percentage: 50, value: { boolValue: false } }\n ];\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return [\n { percentage: 50, value: {} },\n { percentage: 50, value: {} },\n ];\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n public generatePercentageOptionFormGroup(model: IPercentageOptionModel, settingType: SettingType, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<PercentageOptionForm> {\n return new FormGroup<PercentageOptionForm>({\n percentage: new FormControl({ value: model.percentage, disabled: readOnly }, { nonNullable: true, validators: [this.validateNumberNan, Validators.required, Validators.min(0), Validators.max(100), Validators.pattern(percentageRegex)] }),\n value: this.generateValueFormGroup(model.value, settingType, readOnly || settingType === SettingType.Boolean, featureFlagLimitations),\n })\n }\n\n public generateConditionFormGroup(model: IConditionModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ConditionForm> {\n if (model.userCondition) {\n return new FormGroup<ConditionForm>({\n userCondition: this.generateUserConditionFormGroup(model.userCondition, readOnly, featureFlagLimitations)\n });\n } else if (model.segmentCondition) {\n return new FormGroup<ConditionForm>({\n segmentCondition: this.generateSegmentConditionFormGroup(model.segmentCondition, readOnly)\n });\n } else if (model.prerequisiteFlagCondition) {\n return new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: this.generatePrerequisiteFlagConditionFormGroup(model.prerequisiteFlagCondition, readOnly, settings, featureFlagLimitations)\n });\n } else {\n throw new Error('')\n }\n }\n\n public generateUserConditionFormGroup(value: IUserConditionModel, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<UserConditionForm> {\n return new FormGroup<UserConditionForm>({\n comparisonAttribute: new FormControl({ value: value.comparisonAttribute, disabled: readOnly }, { nonNullable: true, validators: [Validators.required, Validators.maxLength(1000)] }),\n comparator: new FormControl({ value: value.comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparisonValue: this.generateComparisonValueFormGroup(value.comparisonValue, value.comparator, readOnly, featureFlagLimitations)\n });\n }\n\n public generateSegmentConditionFormGroup(value: ISegmentConditionModel, readOnly: boolean): FormGroup<SegmentConditionForm> {\n return new FormGroup<SegmentConditionForm>({\n segmentId: new FormControl({ value: value.segmentId, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl({ value: value.comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n });\n }\n\n public generatePrerequisiteFlagConditionFormGroup(value: IPrerequisiteFlagConditionModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<PrerequisiteFlagConditionForm> {\n const setting = settings.filter(s => s.settingId == value.prerequisiteSettingId)[0];\n if (!setting) {\n throw new Error('Could not find prerequisite setting');\n }\n if (setting.settingType === SettingType.Boolean) {\n // In case of a boolean prerequisite setting, we are enforcing a 'True' prerequisiteComparisonValue \n // so we can simplify the UI with a simple 'Is true' or 'Is false' select.\n // 'Is true' = PrerequisiteComparator.Equals TRUE\n // 'Is false' = PrerequisiteComparator.DoesNotEqual TRUE\n let comparator = value.comparator;\n if (!value.prerequisiteComparisonValue) {\n // If the prerequisiteComparisonValue is false somehow (e.g. Public Management API), we should negate the comparator.\n comparator = comparator === PrerequisiteComparator.Equals ? PrerequisiteComparator.DoesNotEqual : PrerequisiteComparator.Equals;\n }\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl({ value: value.prerequisiteSettingId, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl({ value: comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n prerequisiteComparisonValue: this.generateValueFormGroup({ boolValue: true }, setting.settingType, readOnly, featureFlagLimitations)\n });\n } else {\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl({ value: value.prerequisiteSettingId, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl({ value: value.comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n prerequisiteComparisonValue: this.generateValueFormGroup(value.prerequisiteComparisonValue, setting.settingType, readOnly, featureFlagLimitations)\n });\n }\n }\n\n public generateEmptyPrerequisiteFlagConditionFormGroup(featureFlagLimitations: IFeatureFlagLimitations): FormGroup<PrerequisiteFlagConditionForm> {\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl(null, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl(PrerequisiteComparator.Equals, { nonNullable: true, validators: [Validators.required] }),\n prerequisiteComparisonValue: this.generateValueFormGroup({ boolValue: true }, SettingType.Boolean, false, featureFlagLimitations)\n });\n }\n\n public getNextIndex(formArray: FormArray<FormGroup<ComparisonValueListForm>>) {\n if (formArray.controls.length === 0) {\n return 0;\n }\n return Math.max(...formArray.controls.map(c => c.controls.index.value)) + 1;\n }\n\n public generateComparisonValueListFormGroup(listValue: IComparisonValueListModel, readOnly: boolean, validators: ValidatorFn[], index: number) {\n return new FormGroup<ComparisonValueListForm>({\n value: new FormControl({ value: listValue.value, disabled: readOnly }, { nonNullable: true, validators }),\n hint: new FormControl({ value: listValue.hint, disabled: readOnly }, [Validators.maxLength(1500)]),\n // The index column is generated on the first generation by default or by the getNextIndex() if a value is added to the listvalue. It is required so we can delete the rows on the poput editor.\n index: new FormControl({ value: index, disabled: true })\n });\n }\n\n public generateComparisonValueFormGroup(value: IComparisonValueModel, comparator: UserComparator, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ComparisonValueForm> {\n switch (this.getComparisonValueType(comparator)) {\n case UserComparatorType.String:\n return new FormGroup<ComparisonValueForm>({\n stringValue: new FormControl({ value: value.stringValue, disabled: readOnly }, { nonNullable: true, validators: this.getComparisonValueStringValidators(featureFlagLimitations) })\n });\n case UserComparatorType.StringList:\n return new FormGroup<ComparisonValueForm>({\n listValue: this.generateComparisonValueListValueArray(value.listValue, readOnly, featureFlagLimitations, this.getComparisonValueStringListItemValidators(featureFlagLimitations))\n });\n\n case UserComparatorType.Number:\n return new FormGroup<ComparisonValueForm>({\n doubleValue: new FormControl({ value: value.doubleValue, disabled: readOnly },\n // eslint-disable-next-line @typescript-eslint/no-loss-of-precision\n { nonNullable: true, validators: [this.validateNumberNan, Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)] })\n });\n\n case UserComparatorType.Semver:\n return new FormGroup<ComparisonValueForm>({\n stringValue: new FormControl({ value: value.stringValue, disabled: readOnly }, { nonNullable: true, validators: this.getComparisonValueSemverValidators(featureFlagLimitations) })\n });\n case UserComparatorType.SemverList:\n return new FormGroup<ComparisonValueForm>({\n listValue: this.generateComparisonValueListValueArray(value.listValue, readOnly, featureFlagLimitations, this.getComparisonValueSemverListItemValidators(featureFlagLimitations))\n });\n\n case UserComparatorType.DateTime:\n return new FormGroup<ComparisonValueForm>({\n doubleValue: new FormControl({ value: value.doubleValue, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] })\n });\n\n default: throw new Error('Invalid comparator');\n }\n }\n\n public generateComparisonValueListValueArray(listValue: IComparisonValueListModel[], readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations, itemValidators: ValidatorFn[]) {\n return new FormArray<FormGroup<ComparisonValueListForm>>(\n (listValue ?? []).map((lv, index) => { return this.generateComparisonValueListFormGroup(lv, readOnly, itemValidators, index); }),\n [Validators.required, Validators.minLength(1), Validators.maxLength(featureFlagLimitations.maxComparisonValueListLength)]\n )\n }\n\n public getComparisonValueStringValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength)];\n }\n\n public getComparisonValueStringListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength)];\n }\n\n public getComparisonValueSemverValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength), this.validateSemVer]\n }\n\n public getComparisonValueSemverListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength), this.validateSemVer]\n }\n\n public generateDefaultValue(settingType: SettingType): IValueModel {\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: false };\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return {};\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n public generateDefaultValueFormGroup(settingType: SettingType, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ValueForm> {\n return this.generateValueFormGroup(this.generateDefaultValue(settingType), settingType, readOnly, featureFlagLimitations);\n }\n\n public generateValueFormGroup(value: IValueModel, settingType: SettingType, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ValueForm> {\n switch (settingType) {\n case SettingType.Boolean:\n return new FormGroup<ValueForm>({\n boolValue: new FormControl({ value: value.boolValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n case SettingType.String:\n return new FormGroup<ValueForm>({\n stringValue: new FormControl({ value: value.stringValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n case SettingType.Int:\n return new FormGroup<ValueForm>({\n intValue: new FormControl({ value: value.intValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n case SettingType.Double:\n return new FormGroup<ValueForm>({\n doubleValue: new FormControl({ value: value.doubleValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n public getComparisonValueType(comparator: UserComparator): UserComparatorType {\n switch (comparator) {\n\n case UserComparator.SensitiveTextEquals:\n case UserComparator.SensitiveTextDoesNotEqual:\n case UserComparator.TextEquals:\n case UserComparator.TextDoesNotEqual:\n return UserComparatorType.String;\n\n case UserComparator.SensitiveIsOneOf:\n case UserComparator.SensitiveIsNotOneOf:\n case UserComparator.SensitiveTextStartsWithAnyOf:\n case UserComparator.SensitiveTextEndsWithAnyOf:\n case UserComparator.SensitiveTextNotStartsWithAnyOf:\n case UserComparator.SensitiveTextNotEndsWithAnyOf:\n case UserComparator.SensitiveArrayContainsAnyOf:\n case UserComparator.SensitiveArrayDoesNotContainAnyOf:\n case UserComparator.IsOneOf:\n case UserComparator.IsNotOneOf:\n case UserComparator.TextStartsWithAnyOf:\n case UserComparator.TextEndsWithAnyOf:\n case UserComparator.TextNotStartsWithAnyOf:\n case UserComparator.TextNotEndsWithAnyOf:\n case UserComparator.ArrayContainsAnyOf:\n case UserComparator.ArrayDoesNotContainAnyOf:\n case UserComparator.ContainsAnyOf:\n case UserComparator.DoesNotContainAnyOf:\n return UserComparatorType.StringList;\n\n case UserComparator.NumberEquals:\n case UserComparator.NumberDoesNotEqual:\n case UserComparator.NumberLess:\n case UserComparator.NumberLessOrEquals:\n case UserComparator.NumberGreater:\n case UserComparator.NumberGreaterOrEquals:\n return UserComparatorType.Number;\n\n case UserComparator.SemVerIsOneOf:\n case UserComparator.SemVerIsNotOneOf:\n return UserComparatorType.SemverList;\n\n case UserComparator.SemVerGreater:\n case UserComparator.SemVerGreaterOrEquals:\n case UserComparator.SemVerLess:\n case UserComparator.SemVerLessOrEquals:\n return UserComparatorType.Semver;\n\n case UserComparator.DateTimeBefore:\n case UserComparator.DateTimeAfter:\n return UserComparatorType.DateTime;\n\n default:\n throw new Error('Invalid comparator');\n }\n }\n\n\n getValidatorsForSettingType(settingType: SettingType, featureFlagLimitations: IFeatureFlagLimitations): ValidatorFn[] {\n switch (settingType) {\n case SettingType.Int:\n return [this.validateNumberNan, Validators.required,\n Validators.min(-2147483648), Validators.max(2147483647), Validators.pattern(wholeNumberRegex)];\n case SettingType.Double:\n // eslint-disable-next-line @typescript-eslint/no-loss-of-precision\n return [this.validateNumberNan, Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\n case SettingType.String:\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxStringFlagValueLength ?? 100000)];\n case SettingType.Boolean:\n return [Validators.required];\n default:\n return [];\n }\n }\n\n validateNumberNan(c: FormControl<number>) {\n if (c.value === null || isNaN(c.value)) {\n return {\n validateNumberNan: {\n valid: false\n }\n };\n }\n return null;\n }\n\n validateSemVer(c: FormControl<string>) {\n if (valid(c.value) === null) {\n return {\n validateSemVer: {\n valid: false\n }\n };\n }\n return null;\n }\n\n validateEmptyString(c: FormControl<string>) {\n if (c.value === '') {\n return {\n required: true\n };\n }\n return null;\n }\n\n validatePercentageSum(c: FormArray<FormGroup<PercentageOptionForm>>) {\n if (c?.controls.map(i => i.controls.percentage.value).reduce((a, b) => { return a + b }, 0) !== 100) {\n return {\n validatePercentageSum: {\n valid: false\n }\n };\n }\n return null;\n }\n\n isPercentageOnlyTargetingRule(formGroup: FormGroup<TargetingRuleForm>): boolean {\n return !formGroup.controls.value\n && !formGroup.controls.conditions.length\n && !!formGroup.controls.percentageOptions?.length;\n }\n\n addComparisonValueListValueItems(\n userComparator: UserComparator,\n listValueFormArray: FormArray<FormGroup<ComparisonValueListForm>>,\n comparisonValueList: IComparisonValueListModel[],\n featureFlagLimitations: IFeatureFlagLimitations) {\n const validators =\n this.getComparisonValueType(userComparator) === UserComparatorType.SemverList\n ? this.getComparisonValueSemverListItemValidators(featureFlagLimitations)\n : this.getComparisonValueStringListItemValidators(featureFlagLimitations);\n\n const maxIndex = this.getNextIndex(listValueFormArray);\n\n comparisonValueList.forEach(\n (comparisonValueListItem, index) => {\n const formGroup = this.generateComparisonValueListFormGroup(comparisonValueListItem, false, validators, maxIndex + index);\n formGroup.updateValueAndValidity();\n formGroup.markAsDirty();\n formGroup.markAllAsTouched();\n listValueFormArray.push(formGroup, { emitEvent: false });\n });\n\n listValueFormArray.updateValueAndValidity();\n listValueFormArray.markAsTouched();\n listValueFormArray.markAsDirty();\n }\n}\n","export class DateHelper {\n public static addDays(date: Date, value: number): void {\n // https://stackoverflow.com/a/3674550/8656352\n date.setDate(date.getDate() + value);\n }\n\n public static daysBetweenDates = function(from: Date, to: Date): number {\n if (!from || !to) {\n return 0;\n }\n return (new Date(to).getTime() - new Date(from).getTime()) / (1000 * 60 * 60 * 24);\n }\n\n public static formatDate(date: Date, formatString: string): string {\n if (!date) {\n return '';\n }\n const dateObj = new Date(date);\n \n return Object.entries({\n YYYY: dateObj.getFullYear(),\n YY: dateObj.getFullYear().toString().substring(2),\n yyyy: dateObj.getFullYear(),\n yy: dateObj.getFullYear().toString().substring(2),\n MMMM: dateObj.toLocaleString('default', { month: 'long' }),\n MMM: dateObj.toLocaleString('default', { month: 'short' }),\n MM: (dateObj.getMonth() + 1).toString().padStart(2, '0'),\n M: dateObj.getMonth() + 1,\n DDDD: dateObj.toLocaleDateString('default', { weekday: 'long' }),\n DDD: dateObj.toLocaleDateString('default', { weekday: 'short' }),\n DD: dateObj.getDate().toString().padStart(2, '0'),\n D: dateObj.getDate(),\n dddd: dateObj.toLocaleDateString('default', { weekday: 'long' }),\n ddd: dateObj.toLocaleDateString('default', { weekday: 'short' }),\n dd: dateObj.getDate().toString().padStart(2, '0'),\n d: dateObj.getDate(),\n HH: dateObj.getHours().toString().padStart(2, '0'), // military\n H: dateObj.getHours().toString(), // military\n hh: (dateObj.getHours() % 12).toString().padStart(2, '0'),\n h: (dateObj.getHours() % 12).toString(),\n mm: dateObj.getMinutes().toString().padStart(2, '0'),\n m: dateObj.getMinutes(),\n SS: dateObj.getSeconds().toString().padStart(2, '0'),\n S: dateObj.getSeconds(),\n ss: dateObj.getSeconds().toString().padStart(2, '0'),\n s: dateObj.getSeconds(),\n TTT: dateObj.getMilliseconds().toString().padStart(3, '0'),\n ttt: dateObj.getMilliseconds().toString().padStart(3, '0'),\n AMPM: dateObj.getHours() < 13 ? 'AM' : 'PM',\n ampm: dateObj.getHours() < 13 ? 'am' : 'pm',\n }).reduce((acc, entry) => {\n return acc.replace(entry[0], entry[1].toString())\n }, formatString)\n }\n\n public static offsetDate(date: Date, offsetMins: number) : Date {\n return new Date(date.getTime() + offsetMins * 60000);\n }\n}","import { Injectable } from \"@angular/core\";\nimport { NativeDateAdapter } from \"@angular/material/core\";\nimport { DateHelper } from \"./date-helper\";\n\n@Injectable()\nexport class AppDateAdapter extends NativeDateAdapter {\n format(date: Date): string {\n if (!date) {\n return '';\n }\n return DateHelper.formatDate(date, 'yyyy. MM. dd');\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-confirmation-dialog',\n templateUrl: './confirmation-dialog.html'\n})\nexport class ConfirmationDialogComponent {\n\n constructor(\n public dialogRef: MatDialogRef<ConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n yes() {\n this.dialogRef.close('yes');\n }\n\n cancel() {\n this.dialogRef.close('cancel');\n }\n}\n\nexport interface DialogData {\n title: string;\n body: string;\n yesButtonLabel: string;\n noButtonLabel: string;\n buttonColor: string;\n hideNoButton?: boolean;\n}","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<br>\n<div mat-dialog-actions>\n <button type=\"button\" style=\"margin-right: 10px;\" mat-flat-button\n [color]=\"data.buttonColor ? data.buttonColor : 'primary'\" (click)=\"yes()\"\n data-robot=\"dialogYes\">{{data.yesButtonLabel ? data.yesButtonLabel : 'Yes'}}</button>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\" data-robot=\"dialogNo\"\n *ngIf=\"!data.hideNoButton\">{{data.noButtonLabel ?\n data.noButtonLabel : 'Cancel'}}</button>\n</div>","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-reroute-dialog',\n templateUrl: './reroute-dialog.html',\n styleUrls: ['./reroute-dialog.scss']\n})\nexport class RerouteDialogComponent {\n\n constructor(\n public dialogRef: MatDialogRef<RerouteDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n yes() {\n this.dialogRef.close('yes');\n }\n\n cancel() {\n this.dialogRef.close('cancel');\n }\n}\n\nexport interface DialogData {\n title: string;\n body: string;\n yesButtonLabel: string;\n yesButtonLink: string;\n noButtonLabel: string;\n buttonColor: string;\n hideNoButton?: boolean;\n}","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<br>\n<div mat-dialog-actions>\n <a href=\"{{data.yesButtonLink}}\" class=\"hidden-link\" target=\"_blank\" rel=\"noopener noreferrer\">\n <button type=\"button\" style=\"margin-right: 10px;\" mat-flat-button\n [color]=\"data.buttonColor ? data.buttonColor : 'primary'\" (click)=\"yes()\"\n data-robot=\"dialogYes\">{{data.yesButtonLabel ? data.yesButtonLabel : 'Yes'}}</button>\n </a>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\" data-robot=\"dialogNo\"\n *ngIf=\"!data.hideNoButton\">{{data.noButtonLabel ?\n data.noButtonLabel : 'Cancel'}}</button>\n</div>","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nexport interface InfoDialogData {\n title: string;\n body: string;\n secondaryButtonLabel: string;\n secondaryButtonAction: () => void;\n}\n\n@Component({\n selector: 'app-info-dialog',\n templateUrl: './info-dialog.html'\n})\nexport class InfoDialogComponent {\n\n constructor(\n public dialogRef: MatDialogRef<InfoDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: InfoDialogData\n ) {}\n\n ok() {\n this.dialogRef.close();\n }\n\n secondaryButtonAction() {\n this.data.secondaryButtonAction();\n this.dialogRef.close();\n }\n}\n","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<br>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"ok()\">Ok</button>\n <button type=\"button\" mat-stroked-button *ngIf=\"data.secondaryButtonLabel\" (click)=\"secondaryButtonAction()\">{{data.secondaryButtonLabel}}</button>\n</div>","import { Injectable } from \"@angular/core\";\nimport { IComparisonValueListModel } from \"../bootstrap\";\nimport Papa from 'papaparse';\n\nexport interface ComparisonValueListParseResult {\n error?: string;\n comparisonValueList: IComparisonValueListModel[];\n}\n\n@Injectable()\nexport class ComparisonValueListHelper {\n formatValuesAndHintAsJson(comparisonValueList: IComparisonValueListModel[]): string {\n return JSON.stringify(comparisonValueList, null, 2);\n }\n\n formatValuesAndHintAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueListItem => {\n return [\n this.formatCsvStringValue(comparisonValueListItem.value ?? ''),\n this.formatCsvStringValue(comparisonValueListItem.hint ?? '')\n ].join(',');\n });\n return data.join('\\r\\n');\n }\n\n formatValuesAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueList => this.formatCsvStringValue(comparisonValueList.value ?? ''));\n return data.join(',');\n }\n\n formatCsvStringValue(value: string): string {\n if (!value) {\n return \"\";\n }\n const escaped = value.replaceAll(\"\\\"\", \"\\\"\\\"\",);\n return \"\\\"\" + escaped + \"\\\"\";\n }\n\n parseValuesAndHintsFromJson(value: string): ComparisonValueListParseResult {\n if (value === '') {\n return { comparisonValueList: [] };\n }\n try {\n const parsed: IComparisonValueListModel[] = JSON.parse(value);\n return { comparisonValueList: parsed.filter(v => !!v.value) };\n } catch {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n }\n\n parseValuesAndHintsFromCsv(value: string): ComparisonValueListParseResult {\n if (value === '') {\n return { comparisonValueList: [] };\n }\n const parseResult = Papa.parse<string[]>(value, { delimiter: ',', skipEmptyLines: true });\n if (parseResult.errors?.length) {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n if (parseResult?.data?.length === 0) { return { comparisonValueList: [] }; }\n return { comparisonValueList: parseResult.data.map(p => <IComparisonValueListModel>{ value: p[0], hint: p[1] }).filter(v => !!v.value) };\n }\n\n parseValuesFromCsv(value: string): ComparisonValueListParseResult {\n if (value === '') {\n return { comparisonValueList: [] };\n }\n const parseResult = Papa.parse<string[]>(value + \",\", { delimiter: ',', skipEmptyLines: true });\n if (parseResult.errors?.length) {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n if (!parseResult?.data?.length) { return { comparisonValueList: [] }; }\n return { comparisonValueList: parseResult.data.flat().map(p => <IComparisonValueListModel>{ value: p }).filter(v => !!v.value) };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Injectable()\nexport class MessagingService {\n\n constructor(private snackBar: MatSnackBar) { }\n\n showErrorSnack(message = 'Something went wrong.', action = 'Dismiss', durationMs = 60000) {\n this.snackBar.open(\n `Ooops. ${message} Please try again or contact us.`,\n action,\n { duration: durationMs, panelClass: 'red-snackbar' }\n );\n }\n\n showSuccessSnack(message = 'Success.', action = null, durationMs = 2500) {\n this.snackBar.open(\n message, action, { duration: durationMs, panelClass: 'green-snackbar' }\n );\n }\n\n showWarningSnack(message = 'Success.', action = 'Dismiss', durationMs = 5000) {\n this.snackBar.open(\n message, action, { duration: durationMs, panelClass: 'yellow-snackbar' }\n );\n }\n\n dismissCurrentSnack() {\n this.snackBar.dismiss();\n }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Input, OnDestroy, OnInit, Output, ViewChild } from \"@angular/core\";\nimport { Ace, config, edit } from \"ace-builds/src-noconflict/ace\";\nimport \"ace-builds/src-noconflict/mode-json\";\nimport \"ace-builds/src-noconflict/theme-tomorrow\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n@Component({\n selector: 'app-ace-editor',\n templateUrl: './ace-editor.component.html',\n styleUrls: ['./ace-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AceEditorComponent),\n multi: true\n }\n ],\n preserveWhitespaces: false,\n})\nexport class AceEditorComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy {\n\n private aceEditor: Ace.Editor;\n private onChangeDisabled = false;\n private onChangeModel: any;\n private _value: any;\n\n @ViewChild(\"aceEditor\", { static: true }) private editor: ElementRef<HTMLElement>;\n @Input()\n set value(value: string) {\n const checked = this.transformBoundValue(value);\n if (this._value == checked) return;\n this._value = checked ? checked : this.produceDefaultValue();\n if (this.aceEditor) {\n this.writeJsonValue(this._value);\n }\n }\n\n @Input() readOnly: boolean;\n\n @Output() valueChange = new EventEmitter();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onChange = new EventEmitter<string>();\n\n ngOnInit(): void {\n config.setModuleUrl(\"ace/mode/json_worker\", \"assets/scripts/worker-json.js\");\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.init();\n }, 200);\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n private init() {\n this.aceEditor = edit(this.editor.nativeElement, {\n wrap: true,\n tabSize: 2,\n highlightActiveLine: true,\n theme: \"ace/theme/tomorrow\",\n fontSize: 14,\n value: this.formatValue(this._value),\n });\n this.aceEditor.setReadOnly(this.readOnly);\n this.aceEditor.session.setMode(\"ace/mode/json\");\n\n this.aceEditor.on(\"change\", () => {\n if (!this.onChangeDisabled) {\n this._value = this.produceOutput(this.aceEditor.getValue());\n if (this.onChangeModel) {\n this.onChangeModel(this._value);\n }\n this.onChange.emit(this._value);\n this.valueChange.emit(this._value);\n }\n });\n }\n\n private writeJsonValue(value: any) {\n this.onChangeDisabled = true;\n this.aceEditor.setValue(this.formatValue(value), -1);\n this.onChangeDisabled = false;\n }\n\n private formatValue(value: any): string {\n const parsed = this.parseJsonOrNull(value);\n return parsed ? JSON.stringify(parsed, null, 2) : value;\n }\n\n private produceDefaultValue() {\n return \"{}\";\n }\n\n private produceOutput(value: any) {\n const parsed = this.parseJsonOrNull(value);\n return parsed ? JSON.stringify(parsed) : value;\n }\n\n private destroy() {\n if (this.aceEditor) {\n this.aceEditor.destroy();\n }\n }\n\n private parseJsonOrNull(value: string) {\n try {\n const parsed = JSON.parse(value);\n if (parsed === Infinity) {\n return null;\n }\n return parsed;\n } catch (e) {\n return null;\n }\n }\n\n private transformBoundValue(value: any): string {\n if (typeof value === 'object' && value !== null) {\n return JSON.stringify(value);\n }\n return value;\n }\n\n // ControlValueAccessor\n writeValue(value: any) {\n this.value = value;\n }\n\n // ControlValueAccessor\n registerOnChange(fn: any) {\n this.onChangeModel = fn;\n }\n\n // ControlValueAccessor\n registerOnTouched() {\n /* unused */\n }\n}","<div class=\"ace-editor-container\" #aceEditor></div>","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, ValidatorFn } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\nimport { FormHelper } from '../../../../bootstrap';\n\nexport interface PopoutTextEditorDialogData {\n value: string;\n readOnly: boolean;\n validators: ValidatorFn[];\n maxValueLength: number;\n description: string;\n}\n\n@Component({\n selector: 'app-popout-text-editor-dialog',\n templateUrl: './popout-text-editor-dialog.component.html',\n styleUrls: ['./popout-text-editor-dialog.component.scss']\n})\nexport class PopoutTextEditorDialogComponent implements OnInit, OnDestroy {\n\n formControlSubscription: Subscription;\n jsonData: string;\n format = \"text\";\n formHelper = FormHelper;\n control: FormControl<string>;\n\n constructor(public dialogRef: MatDialogRef<PopoutTextEditorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: PopoutTextEditorDialogData) {\n }\n\n ngOnInit(): void {\n this.jsonData = this.data.value;\n this.control = new FormControl<string>(\n { value: this.data.value, disabled: this.data.readOnly },\n { nonNullable: true, validators: [...this.data.validators] });\n\n if (!this.control.valid) {\n this.control.markAsTouched();\n }\n\n this.formControlSubscription = this.control.valueChanges.subscribe(value => {\n this.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.control.markAsDirty();\n this.control.markAsTouched();\n if (this.jsonData !== value) {\n this.jsonData = value;\n }\n });\n }\n\n onJsonChanged(value: string) {\n this.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.control.updateValueAndValidity();\n this.control.markAsTouched();\n this.control.markAsDirty();\n }\n\n ngOnDestroy() {\n if (this.control.dirty) {\n this.control.updateValueAndValidity();\n }\n if (this.formControlSubscription) {\n this.formControlSubscription.unsubscribe();\n this.formControlSubscription = null;\n }\n }\n\n set() {\n if (!this.control.valid) {\n this.control.markAllAsTouched();\n return;\n }\n\n this.dialogRef.close({ value: this.control.value });\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","<h2 mat-dialog-title>Advanced editor</h2>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n {{data.description}}\n </p>\n <mat-button-toggle-group [(ngModel)]=\"format\">\n <mat-button-toggle value=\"text\">Text</mat-button-toggle>\n <mat-button-toggle value=\"json\">JSON</mat-button-toggle>\n </mat-button-toggle-group>\n\n <mat-form-field *ngIf=\"format === 'text'\" appearance=\"outline\" class=\"editor-container editor-clear\"\n subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus [formControl]=\"control\" rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"26\"></textarea>\n <mat-error *ngIf=\"control.invalid\">\n {{formHelper.getErrorMessage(control)}}\n </mat-error>\n <mat-hint *ngIf=\"data.maxValueLength && (data.maxValueLength - control.value?.length > -1)\">\n Remaining characters:\n {{data.maxValueLength - control.value?.length}}</mat-hint>\n </mat-form-field>\n\n <div class=\"editor-container\" *ngIf=\"format === 'json'\">\n <app-ace-editor [(value)]=\"jsonData\" (onChange)=\"onJsonChanged($event)\"\n [readOnly]=\"data.readOnly\"></app-ace-editor>\n <span *ngIf=\"control.invalid\" class=\"error mat-mdc-form-field-error\">\n {{formHelper.getErrorMessage(control)}}</span>\n </div>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\"\n [disabled]=\"!control.touched || !control.valid\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" (click)=\"close()\">Close</button>\n</div>","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n FormHelper, ValueForm, SettingType,\n IFeatureFlagLimitations, FormGenerator, IFlagState\n} from '../../../../bootstrap';\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData } from '../popout-text-editor-dialog/popout-text-editor-dialog.component';\n\n@Component({\n selector: 'app-feature-flag-value',\n templateUrl: './feature-flag-value.component.html',\n styleUrls: [\n '../components.scss',\n '../../slider.scss',\n './feature-flag-value.component.scss'\n ]\n})\nexport class FeatureFlagValueComponent {\n @Input() formGroup: FormGroup<ValueForm>;\n @Input() flagState: IFlagState;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() isPrerequisite = false;\n @Input() tooltip: string;\n\n FormHelper = FormHelper;\n\n constructor(private dialog: MatDialog,\n private formGenerator: FormGenerator) {\n }\n\n expandText() {\n const dialogRef = this.dialog.open(PopoutTextEditorDialogComponent, {\n width: '800px',\n data: <PopoutTextEditorDialogData>{\n value: this.formGroup.controls.stringValue.value,\n readOnly: this.formGroup.controls.stringValue.disabled,\n validators: this.formGenerator.getValidatorsForSettingType(SettingType.String, this.featureFlagLimitations),\n maxValueLength: this.featureFlagLimitations.maxStringFlagValueLength ?? 100000,\n description: this.isPrerequisite\n ? 'Modify the text within the editor to change the prerequisite feature flag comparison value. The editor supports JSON syntax highlighting.'\n : 'Modify the text within the editor to change the feature flag value. The editor supports JSON syntax highlighting.'\n }\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data) {\n this.formGroup.controls.stringValue.setValue(data.value);\n this.formGroup.controls.stringValue.updateValueAndValidity();\n this.formGroup.controls.stringValue.markAsTouched();\n this.formGroup.controls.stringValue.markAsDirty();\n }\n });\n }\n}\n","<div class=\"targeting-rule-component smallest-form-field grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" *ngIf=\"formGroup.controls.stringValue\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.stringValue\" [matTooltip]=\"tooltip\"\n placeholder=\"Add text ...\" />\n <button matSuffix class=\"expand-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandText()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" *ngIf=\"formGroup.controls.intValue\">\n <input matInput type=\"number\" [formControl]=\"formGroup.controls.intValue\"\n digitOnly digitOnlyAllowNegatives=\"true\"\n inputDisplayNormalizer [matTooltip]=\"tooltip\" placeholder=\"Add number ...\" />\n <mat-error *ngIf=\"formGroup.controls.intValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.intValue)}}\n </mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" *ngIf=\"formGroup.controls.doubleValue\">\n <input matInput type=\"number\" [formControl]=\"formGroup.controls.doubleValue\" inputDisplayNormalizer\n [matTooltip]=\"tooltip\" placeholder=\"Add number ...\" />\n <mat-error *ngIf=\"formGroup.controls.doubleValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.doubleValue)}}\n </mat-error>\n </mat-form-field>\n <div *ngIf=\"formGroup.controls.boolValue\" class=\"bool\" [class.readonly]=\"flagState.readOnly\">\n <label class=\"switch\" [matTooltip]=\"tooltip\">\n <input type=\"checkbox\" [formControl]=\"formGroup.controls.boolValue\" />\n <span class=\"slider round\"></span>\n </label>\n </div>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport {\n FormHelper, IFlagState, IFeatureFlagLimitations,\n PercentageOptionForm, FormGenerator, SettingType\n} from '../../../../../bootstrap';\n\n@Component({\n selector: 'app-percentage-options',\n templateUrl: './percentage-options.component.html',\n styleUrls: [\n '../../components.scss',\n './percentage-options.component.scss',\n '../../chips.scss',\n '../../add-btn.scss'\n ]\n})\nexport class PercentageOptionsComponent {\n @Input() formArray: FormArray<FormGroup<PercentageOptionForm>>;\n @Input() flagState: IFlagState;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() showPercentageEvaluationAttribute: boolean;\n @Input() percentageEvaluationAttribute: string;\n @Input() isPercentageOnlyTargetingRule: boolean;\n\n @Output() lastPercentageOptionLeft = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() changePercentageEvaluationAttributeRequested = new EventEmitter();\n\n SettingType = SettingType;\n FormHelper = FormHelper;\n\n constructor(private formGenerator: FormGenerator) { }\n\n addOption() {\n if (this.formArray.length >= this.featureFlagLimitations.maxPercentageOptionCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n this.formArray.push(this.formGenerator.generatePercentageOptionFormGroup({\n percentage: 0,\n value: this.formGenerator.generateDefaultValue(this.flagState.settingValue.setting.settingType)\n }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations))\n this.formArray.markAsDirty();\n }\n\n remove(index: number): void {\n this.formArray.removeAt(index);\n this.formArray.markAsDirty();\n if (this.formArray.length < 2) {\n this.lastPercentageOptionLeft.emit();\n }\n }\n\n percentageChanged(index: number) {\n if (this.formArray.controls[index].value.percentage < 0) {\n this.formArray.controls[index].controls.percentage.setValue(0);\n }\n if (this.formArray.controls[index].value.percentage > 100) {\n this.formArray.controls[index].controls.percentage.setValue(100);\n }\n\n if (this.formArray.controls.length === 2) {\n this.formArray.controls[1 - index].controls.percentage\n .setValue(100 - this.formArray.controls[index].value.percentage);\n }\n }\n\n changePercentageEvaluationAttribute() {\n this.changePercentageEvaluationAttributeRequested.emit();\n }\n\n getPercentageEvaluationAttribute() {\n return !this.percentageEvaluationAttribute ? 'Identifier' : this.percentageEvaluationAttribute;\n }\n}\n","<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>","import { Component, Inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UserComparator } from '../../../../../../../bootstrap';\n\nenum ComparatorGroup {\n Text = 0,\n Number = 1,\n Semver = 2,\n DateTime = 3,\n Array = 4\n}\n\ninterface ComparatorItem {\n value: UserComparator,\n sensitiveValue?: UserComparator,\n label: string,\n description: string,\n group: ComparatorGroup,\n}\n\n@Component({\n selector: 'app-comparator-dialog',\n templateUrl: './comparator-dialog.component.html',\n styleUrls: ['./comparator-dialog.component.scss'],\n})\nexport class ComparatorDialogComponent implements OnInit {\n\n ComparatorGroup = ComparatorGroup;\n selectedGroup = ComparatorGroup.Text;\n selectedComparator = UserComparator.TextEquals;\n isConfidential = true;\n lastConfidentialValue = true;\n confidentialEnabled = true;\n UserComparator = UserComparator;\n\n comparisonAttributeTooltip = \"User Object's value passed to the SDK (Comparison attribute)\";\n comparisonValueTooltip = \"Comparison value set on the ConfigCat Dashboard\";\n\n comparators: ComparatorItem[] = [\n { value: UserComparator.TextEquals, sensitiveValue: UserComparator.SensitiveTextEquals, group: ComparatorGroup.Text, label: 'EQUALS', description: \"Checks whether the User Object's comparison attribute passed to the SDK is equal to the comparison value set on the ConfigCat Dashboard\" },\n { value: UserComparator.TextDoesNotEqual, sensitiveValue: UserComparator.SensitiveTextDoesNotEqual, group: ComparatorGroup.Text, label: 'NOT EQUALS', description: \"Checks whether the User Object's comparison attribute passed to the SDK is not equal to the comparison value\" },\n { value: UserComparator.IsOneOf, sensitiveValue: UserComparator.SensitiveIsOneOf, group: ComparatorGroup.Text, label: 'IS ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK is equal to any of the comparison values\" },\n { value: UserComparator.IsNotOneOf, sensitiveValue: UserComparator.SensitiveIsNotOneOf, group: ComparatorGroup.Text, label: 'IS NOT ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK is not equal to any of the comparison values\" },\n { value: UserComparator.TextStartsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextStartsWithAnyOf, group: ComparatorGroup.Text, label: 'STARTS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK starts with any of the comparison values\" },\n { value: UserComparator.TextNotStartsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextNotStartsWithAnyOf, group: ComparatorGroup.Text, label: 'NOT STARTS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK does not start with any of the comparison values\" },\n { value: UserComparator.TextEndsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextEndsWithAnyOf, group: ComparatorGroup.Text, label: 'ENDS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK ends with any of the comparison values\" },\n { value: UserComparator.TextNotEndsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextNotEndsWithAnyOf, group: ComparatorGroup.Text, label: 'NOT ENDS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK does not end with any of the comparison values\" },\n { value: UserComparator.ContainsAnyOf, group: ComparatorGroup.Text, label: 'CONTAINS ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK contains any comparison values as a substring\" },\n { value: UserComparator.DoesNotContainAnyOf, group: ComparatorGroup.Text, label: 'DOES NOT CONTAIN ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK does not contain any comparison values as a substring\" },\n\n { value: UserComparator.NumberEquals, group: ComparatorGroup.Number, label: '= (EQUALS)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is equal to the comparison value\" },\n { value: UserComparator.NumberDoesNotEqual, group: ComparatorGroup.Number, label: '!= (NOT EQUALS)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is not equal to the comparison value\" },\n { value: UserComparator.NumberLess, group: ComparatorGroup.Number, label: '< (LESS THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is less than the comparison value\" },\n { value: UserComparator.NumberLessOrEquals, group: ComparatorGroup.Number, label: '<= (LESS THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is less than or equal to the comparison value\" },\n { value: UserComparator.NumberGreater, group: ComparatorGroup.Number, label: '> (GREATER THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is greater than the comparison value\" },\n { value: UserComparator.NumberGreaterOrEquals, group: ComparatorGroup.Number, label: '>= (GRATER THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is greater than or equal to the comparison value\" },\n\n { value: UserComparator.SemVerIsOneOf, group: ComparatorGroup.Semver, label: 'IS ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is equal to any of the comparison values\" },\n { value: UserComparator.SemVerIsNotOneOf, group: ComparatorGroup.Semver, label: 'IS NOT ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is not equal to any of the comparison values\" },\n { value: UserComparator.SemVerLess, group: ComparatorGroup.Semver, label: '< (LESS THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is less than the comparison value\" },\n { value: UserComparator.SemVerLessOrEquals, group: ComparatorGroup.Semver, label: '<= (LESS THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is less than or equal to the comparison value\" },\n { value: UserComparator.SemVerGreater, group: ComparatorGroup.Semver, label: '> (GREATER THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is greater than the comparison value\" },\n { value: UserComparator.SemVerGreaterOrEquals, group: ComparatorGroup.Semver, label: '>= (GRATER THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is greater than or equal to the comparison value\" },\n\n { value: UserComparator.DateTimeBefore, group: ComparatorGroup.DateTime, label: 'BEFORE (UTC)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as the seconds elapsed since Unix Epoch) is less than the comparison value\" },\n { value: UserComparator.DateTimeAfter, group: ComparatorGroup.DateTime, label: 'AFTER (UTC)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as the seconds elapsed since Unix Epoch) is greater than the comparison value.value\" },\n\n { value: UserComparator.ArrayContainsAnyOf, group: ComparatorGroup.Array, sensitiveValue: UserComparator.SensitiveArrayContainsAnyOf, label: 'ARRAY CONTAINS ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a string list) contains any of the comparison values\" },\n { value: UserComparator.ArrayDoesNotContainAnyOf, group: ComparatorGroup.Array, sensitiveValue: UserComparator.SensitiveArrayDoesNotContainAnyOf, label: 'ARRAY NOT CONTAINS ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a string list) does not contain any of the comparison values\" },\n ]\n\n constructor(\n public dialogRef: MatDialogRef<ComparatorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit(): void {\n const selected = this.comparators.find(c => c.value === this.data.selectedComparator || c.sensitiveValue === this.data.selectedComparator);\n this.selectedGroup = selected.group;\n this.selectedComparator = selected.value;\n this.isConfidential = this.data.selectedComparator === selected.sensitiveValue;\n this.lastConfidentialValue = !selected.sensitiveValue ? true : this.isConfidential;\n this.confidentialEnabled = !!selected.sensitiveValue;\n }\n\n listComparators(group: ComparatorGroup): ComparatorItem[] {\n return this.comparators.filter(c => c.group === group);\n }\n\n changeGroup(group: ComparatorGroup): void {\n this.selectedGroup = group;\n }\n\n confidentialChange(confidential: boolean): void {\n if (!this.confidentialEnabled || this.data.readOnly) {\n return;\n }\n this.isConfidential = this.lastConfidentialValue = confidential;\n }\n\n comparatorChange(comp: UserComparator): void {\n if (this.data.readOnly) {\n return;\n }\n\n this.selectedComparator = comp;\n const selected = this.comparators.find(c => c.value === comp || c.sensitiveValue === comp);\n this.confidentialEnabled = !!selected.sensitiveValue;\n if (!this.confidentialEnabled) {\n this.isConfidential = false;\n } else {\n this.isConfidential = this.lastConfidentialValue;\n }\n }\n\n set(): void {\n const selected = this.comparators.find(c => c.value === this.selectedComparator || c.sensitiveValue === this.selectedComparator);\n const result = this.isConfidential && selected.sensitiveValue ? selected.sensitiveValue : selected.value;\n this.dialogRef.close(result);\n }\n}\n","<h2 mat-dialog-title cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle class=\"draggable\">Comparator selector</h2>\n<div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"selectedGroup\" (ngModelChange)=\"changeGroup($event)\">\n <mat-button-toggle [value]=\"ComparatorGroup.Text\">Text</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Number\">Number</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Semver\">Semantic version</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.DateTime\">Datetime</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Array\">Array</mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div mat-dialog-content class=\"container\" [ngSwitch]=\"selectedGroup\">\n <div *ngSwitchCase=\"ComparatorGroup.Text\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain string/text.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Text}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Number\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain numbers.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Number}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Semver\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain semantic versions.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Semver}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.DateTime\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain datetimes.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.DateTime}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Array\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain items of a string/text list.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Array}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button mat-dialog-close>Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" mat-dialog-close>Close</button>\n</div>\n\n<ng-template #comparators let-group=\"group\">\n <div>\n <mat-radio-group (change)=\"comparatorChange($event.value)\">\n <div class=\"comparator-container\">\n <div class=\"item\" [ngClass]=\"'col-' + i % 2\" [class.selected]=\"comparator.value === selectedComparator\" \n *ngFor=\"let comparator of listComparators(group); let i = index\" (click)=\"comparatorChange(comparator.value)\"> \n <mat-radio-button color=\"primary\" [value]=\"comparator.value\" [disabled]=\"data.readOnly\"\n [checked]=\"comparator.value === selectedComparator\" [matTooltip]=\"comparator.description\">\n <div class=\"title\">\n {{comparator.label}}\n </div>\n </mat-radio-button>\n <div class=\"description\">\n <div class=\"example\">\n <ng-container [ngSwitch]=\"comparator.value\">\n\n <!-- TEXT -->\n <ng-container *ngSwitchCase=\"UserComparator.TextEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> EQUALS <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT EQUALS <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, <span class=\"match-val\">iOS</span> ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, Windows ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">bob</span>, jane ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ bob, jane ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">&#64;foo.com</span>, &#64;bar.com ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;example.com</span> NOT ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ &#64;foo.com, &#64;bar.com ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://test-app.foo.com</span> CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">test</span>, localhost ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://app.foo.com</span> NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ test, localhost ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n <!-- NUMBER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.NumberEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> = <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> != <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">3.14</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n\n <!-- SEMVER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">1.0.0</span>, 4.3.5 ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2.1.0</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ 1.0.0, 4.3.5 ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.0.0-alpha</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.2.0</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.1.0</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n <!-- DATETIME -->\n\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeBefore\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 10:36:24</span> BEFORE <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeAfter\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 15:41:06</span> AFTER <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n <!-- ARRAY -->\n\n <ng-container *ngSwitchCase=\"UserComparator.ArrayContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Writer, Reader ]</span> ARRAY CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">Writer</span>, Admin ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ArrayDoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Guest, Reader ]</span> ARRAY NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Writer, Admin ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>\n\n<ng-template #confidential>\n <p>Select how the <i>comparison values</i> should be persisted:</p>\n <div matTooltip=\"The currently selected comparator does not support hashed comparison values, they will be presented as cleartext in the config JSON.\"\n [matTooltipDisabled]=\"confidentialEnabled\">\n <mat-radio-group class=\"confidential-container\" (change)=\"confidentialChange($event.value)\">\n <div class=\"confidential item\" (click)=\"confidentialChange(true)\">\n <mat-radio-button color=\"primary\" [value]=\"true\" [checked]=\"isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Hashed</div>\n <div class=\"icon\"><mat-icon>lock</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n We recommend using this option in case of frontend applications targeting users based on sensitive data (like email addresses, names, etc). \n \n </div>\n </div>\n <div class=\"cleartext item\" (click)=\"confidentialChange(false)\">\n <mat-radio-button color=\"primary\" [value]=\"false\" [checked]=\"!isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Cleartext</div>\n <div class=\"icon\"><mat-icon>lock_open_right</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n You can use this option when you target users based on non-sensitive data. Comparison values will be presented as plain text in the <i>config JSON</i>.\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>","import { AfterViewInit, Component, DestroyRef, Inject, OnInit, ViewChild, inject } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Subscription } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n FormHelper, IFeatureFlagLimitations, ComparisonValueForm, ComparisonValueListForm,\n FormGenerator, UserComparator, ComparisonValueListHelper, ComparisonValueListParseResult,\n IComparisonValueListModel\n} from '../../../../../../../bootstrap';\n\nexport type PopoutListEditorDialogData = {\n comparisonValueList: IComparisonValueListModel[],\n comparator: UserComparator,\n featureFlagLimitations: IFeatureFlagLimitations\n readOnly: boolean\n};\n\nenum VisualizationType {\n Table = 0,\n Json = 1,\n Csv = 2,\n Csl = 3\n}\n\n@Component({\n selector: 'app-popout-list-editor-dialog',\n templateUrl: './popout-list-editor-dialog.component.html',\n styleUrls: ['./popout-list-editor-dialog.component.scss']\n})\nexport class PopoutListEditorDialogComponent implements OnInit, AfterViewInit {\n destroyRef = inject(DestroyRef);\n FormHelper = FormHelper;\n VisualizationType = VisualizationType;\n\n dataSource = new MatTableDataSource<FormGroup<ComparisonValueListForm>>([]);\n plainText = \"\";\n formGroup: FormGroup<ComparisonValueForm>;\n filterValue = '';\n valueChanged = false;\n currentlyHasHints = false;\n\n displayedColumns = ['value', 'hint', 'action'];\n visualizationType = VisualizationType.Table;\n comparisonValueListParseResult: ComparisonValueListParseResult;\n valueChangeSubscription: Subscription;\n focusIndex = 0;\n\n paginator: MatPaginator;\n @ViewChild(\"paginator\", { static: false }) set setPaginator(paginator: MatPaginator) {\n this.paginator = paginator;\n if (this.dataSource) {\n this.dataSource.paginator = this.paginator;\n }\n }\n\n constructor(\n private formGenerator: FormGenerator,\n public dialogRef: MatDialogRef<PopoutListEditorDialogComponent>,\n private comparisonValueListHelper: ComparisonValueListHelper,\n @Inject(MAT_DIALOG_DATA) public data: PopoutListEditorDialogData) { }\n\n ngOnInit(): void {\n const comparisonValueList = this.data.comparisonValueList;\n if (!comparisonValueList.length) {\n comparisonValueList.push({ value: '' });\n }\n\n this.setFormGroup(comparisonValueList);\n }\n\n setFormGroup(comparisonValueList: IComparisonValueListModel[]) {\n this.formGroup = this.formGenerator.generateComparisonValueFormGroup(\n { listValue: comparisonValueList },\n this.data.comparator, this.data.readOnly, this.data.featureFlagLimitations);\n\n if (this.formGroup.invalid) {\n this.formGroup.markAllAsTouched();\n }\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n this.checkHasHints();\n this.valueChangeSubscription = this.formGroup.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({ next: () => this.checkHasHints() });\n }\n\n checkHasHints() {\n this.currentlyHasHints = !!this.formGroup.controls.listValue.controls.find(r => !!r.value.hint);\n }\n\n setDataSource() {\n if (this.dataSource) {\n this.dataSource.data = this.formGroup.controls.listValue.controls;\n if (this.dataSource.paginator) {\n this.dataSource.paginator.length = this.dataSource.data.length;\n }\n }\n }\n\n ngAfterViewInit(): void {\n this.dataSource = new MatTableDataSource(this.formGroup.controls.listValue.controls);\n this.dataSource.paginator = this.paginator;\n this.dataSource.filterPredicate = (row, filter) => [\n // \"Filter audit log items by any detail.\" -> This list should be kept in sync with the HTML template!\n row.controls.value.value,\n row.controls.hint.value\n ].some(v => v?.toLowerCase().includes(filter));\n this.focusIndex = 0;\n }\n\n applyFilter() {\n this.dataSource.filter = (this.filterValue ?? \"\").trim().toLowerCase();\n\n if (this.dataSource.paginator) {\n this.focusIndex = 0;\n this.dataSource.paginator.firstPage();\n }\n }\n\n add() {\n if (this.formGroup.controls.listValue.controls.length >= this.data.featureFlagLimitations.maxComparisonValueListLength) {\n return;\n }\n\n this.formGenerator.addComparisonValueListValueItems(\n this.data.comparator,\n this.formGroup.controls.listValue,\n [{ value: '' }],\n this.data.featureFlagLimitations);\n\n this.setDataSource();\n this.filterValue = '';\n this.applyFilter();\n this.focusIndex = this.formGroup.controls.listValue.controls.length - 1;\n this.dataSource.paginator.lastPage();\n }\n\n remove(row: FormGroup<ComparisonValueListForm>) {\n const index = this.formGroup.controls.listValue.controls.findIndex(c => c.controls.index.value === row.controls.index.value);\n if (index === -1) { return; }\n this.formGroup.controls.listValue.controls.splice(index, 1);\n this.formGroup.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.listValue.markAsTouched();\n this.formGroup.controls.listValue.markAsDirty();\n this.setDataSource();\n }\n\n set() {\n if (this.visualizationType !== VisualizationType.Table) {\n if (this.comparisonValueListParseResult?.error) {\n return;\n }\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n this.valueChanged = false;\n }\n\n if (this.formGroup.invalid) {\n this.formGroup.markAllAsTouched();\n return;\n }\n\n this.dialogRef.close({ comparisonValueList: this.getRawValue() });\n }\n\n close() {\n this.dialogRef.close();\n }\n\n removeAll() {\n this.setFormGroup([]);\n this.setDataSource();\n this.focusIndex = 0;\n this.dataSource.paginator.firstPage();\n }\n\n getRawValue(): IComparisonValueListModel[] {\n return this.formGroup.controls.listValue.value.map(v => { return { value: v.value, hint: v.hint ?? '' } });\n }\n\n focusInvalid() {\n if (this.visualizationType !== VisualizationType.Table) {\n this.changeVisualizationType(VisualizationType.Table);\n }\n const invalidIndex = this.formGroup.controls.listValue.controls.findIndex(c => c.invalid);\n if (invalidIndex !== -1) {\n this.formGroup.markAllAsTouched();\n this.filterValue = '';\n this.applyFilter();\n this.dataSource.paginator.length = this.dataSource.data.length;\n const pageNumber = Math.floor(invalidIndex / this.dataSource.paginator.pageSize);\n this.focusIndex = invalidIndex;\n this.dataSource.paginator.pageIndex = pageNumber;\n this.paginator.page.next({\n pageIndex: pageNumber,\n pageSize: this.paginator.pageSize,\n length: this.paginator.length\n });\n }\n }\n\n changeVisualizationType(visualizationType: VisualizationType) {\n if (this.valueChanged && this.visualizationType !== VisualizationType.Table) {\n if (this.comparisonValueListParseResult.error) {\n return;\n }\n\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n }\n\n this.visualizationType = visualizationType;\n this.valueChanged = false;\n\n switch (visualizationType) {\n case VisualizationType.Json:\n this.plainText = this.comparisonValueListHelper.formatValuesAndHintAsJson(this.getRawValue());\n break;\n case VisualizationType.Csv:\n this.plainText = this.comparisonValueListHelper.formatValuesAndHintAsCsv(this.getRawValue());\n break;\n case VisualizationType.Csl:\n this.plainText = this.comparisonValueListHelper.formatValuesAsCsv(this.getRawValue());\n break;\n case VisualizationType.Table:\n if (this.dataSource.paginator) {\n this.focusIndex = 0;\n this.dataSource.paginator.firstPage();\n }\n break;\n }\n this.recalculate();\n }\n\n textValueChanged() {\n this.valueChanged = true;\n this.recalculate();\n if (!this.comparisonValueListParseResult?.error) {\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n }\n }\n\n recalculate() {\n switch (this.visualizationType) {\n case VisualizationType.Json:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesAndHintsFromJson(this.plainText);\n break;\n case VisualizationType.Csv:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesAndHintsFromCsv(this.plainText);\n break;\n case VisualizationType.Csl:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesFromCsv(this.plainText);\n break;\n default:\n this.comparisonValueListParseResult = { comparisonValueList: [] };\n break;\n }\n if (this.visualizationType !== VisualizationType.Table && !this.comparisonValueListParseResult.error) {\n this.currentlyHasHints = !!this.comparisonValueListParseResult.comparisonValueList.find(r => !!r.hint);\n } else if (this.visualizationType !== VisualizationType.Table) {\n this.checkHasHints();\n }\n }\n\n loadFile(event) {\n const file = event.target.files[0];\n const fileReader = new FileReader();\n fileReader.onload = () => {\n this.plainText = fileReader.result.toString();\n this.textValueChanged();\n };\n fileReader.readAsText(file);\n }\n}\n","<h2 mat-dialog-title>Advanced editor</h2>\n<div mat-dialog-content class=\"container\">\n\n <div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"visualizationType\" (ngModelChange)=\"changeVisualizationType($event)\">\n <mat-button-toggle [value]=\"VisualizationType.Table\"\n [disabled]=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Table || !comparisonValueListParseResult?.error\">Table</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Json\"\n [disabled]=\"visualizationType !== VisualizationType.Json && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Json || !comparisonValueListParseResult?.error\">JSON</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csv\"\n [disabled]=\"visualizationType !== VisualizationType.Csv && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Csv || !comparisonValueListParseResult?.error\">CSV\n with hints</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csl\"\n [disabled]=\"(visualizationType !== VisualizationType.Csl && comparisonValueListParseResult?.error) || currentlyHasHints\"\n [matTooltip]=\"currentlyHasHints ? 'There are hints set to your values so the CSV without hints view is not available' : 'Can not switch between views while there are errors in the current view.'\"\n [matTooltipDisabled]=\"(visualizationType === VisualizationType.Csl || !comparisonValueListParseResult?.error) && !currentlyHasHints\">CSV\n without hints</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div [hidden]=\"visualizationType !== VisualizationType.Table\" class=\"table-format\">\n <p class=\"description\">\n Modify the items within the list of comparison values. The hint helps you label the value for easier\n reference.\n </p>\n <div class=\"controls\">\n <div>\n <mat-form-field class=\"filter\" appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <mat-label>Filter</mat-label>\n <input matInput [(ngModel)]=\"filterValue\" (ngModelChange)=\"applyFilter()\"\n placeholder=\"Filter values and hints.\">\n </mat-form-field>\n </div>\n <div class=\"control-button-container\">\n <div class=\"add-btn-container\" matTooltip=\"Add item\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <div [matTooltip]=\"'Maximum ' + data.featureFlagLimitations.maxComparisonValueListLength + ' items can be added.'\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length < data.featureFlagLimitations.maxComparisonValueListLength\">\n <button (click)=\"add()\" mat-icon-button type=\"button\" *ngIf=\"!data.readOnly\" class=\"add-btn\"\n [disabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <mat-icon>add_circle</mat-icon>\n </button>\n </div>\n </div>\n\n <button type=\"button\" mat-icon-button matTooltip=\"Remove all\" class=\"grey-button\" *ngIf=\"!data.readOnly\"\n (click)=\"removeAll()\"><mat-icon>delete_outline</mat-icon></button>\n </div>\n </div>\n <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"value\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Comparison value </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) === focusIndex\" focus />\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) !== focusIndex\" />\n <mat-error *ngIf=\"row.controls.value.invalid\">\n {{FormHelper.getErrorMessage(row.controls.value)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Hint </th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.hint\" />\n <mat-error *ngIf=\"row.controls.hint.invalid\">\n {{FormHelper.getErrorMessage(row.controls.hint)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header></th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top\">\n <button class=\"grey-button\" (click)=\"remove(row)\" mat-icon-button type=\"button\"\n matTooltip=\"Remove item\" *ngIf=\"!data.readOnly\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\">\n </tr>\n </table>\n <div class=\"small-form-field\">\n <mat-paginator #paginator showFirstLastButtons [pageSizeOptions]=\"[5, 10, 50, 100]\"></mat-paginator>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Json\" class=\"json-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a JSON text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.json\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"json-editor\">\n <app-ace-editor [(value)]=\"plainText\" (valueChange)=\"textValueChanged()\"\n [readOnly]=\"data.readOnly\"></app-ace-editor>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csv\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values and hints) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csl\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values only) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult\">\n <p *ngIf=\"!comparisonValueListParseResult.error && comparisonValueListParseResult.comparisonValueList.length\"\n class=\"small-chip-input\">\n Preview ({{comparisonValueListParseResult.comparisonValueList.length}} items)\n <mat-chip-set>\n <span *ngFor=\"let listValueItem of comparisonValueListParseResult.comparisonValueList | slice:0:10\"\n [matTooltip]=\"listValueItem.hint ? listValueItem.hint : 'No hint'\" class=\"chip-container\">\n <mat-chip-row>\n {{listValueItem.value}}\n </mat-chip-row>\n </span>\n <mat-chip-row *ngIf=\"comparisonValueListParseResult.comparisonValueList.length > 10\">\n {{comparisonValueListParseResult.comparisonValueList.length - 10}} remaining items...\n </mat-chip-row>\n </mat-chip-set>\n </p>\n <mat-error *ngIf=\"comparisonValueListParseResult.error\" class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Couldn't parse your values. Please check the format.</span>\n </mat-error>\n </div>\n <mat-error\n *ngIf=\"formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>{{FormHelper.getErrorMessage(formGroup.controls.listValue)}}</span>\n </mat-error>\n <mat-error\n *ngIf=\"!valueChanged && formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && !formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Invalid items.&nbsp;</span>\n <div>\n <button type=\"button\" mat-stroked-button color=\"primary\"\n *ngIf=\"visualizationType !== VisualizationType.Table || paginator?.getNumberOfPages() > 1\"\n (click)=\"focusInvalid()\" class=\"jump\">\n Jump to fix\n </button>\n </div>\n </mat-error>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" (click)=\"close()\">Close</button>\n</div>","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-condition-chip',\n templateUrl: './condition-chip.component.html',\n styleUrl: '../../../chips.scss'\n})\nexport class ConditionChipComponent implements OnInit {\n\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n chipText: string;\n\n ngOnInit(): void {\n this.chipText = this.conditionIndex > 0\n ? 'AND'\n : this.targetingRuleIndex === 0\n ? 'IF'\n : 'ELSE IF';\n }\n}\n","<div class=\"chip-container fixed-width\">\n <div *ngIf=\"conditionIndex > 0\" class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <mat-chip-set>\n <mat-chip disabled>{{chipText}}</mat-chip>\n </mat-chip-set>\n</div>","import { Component, DestroyRef, Input, OnInit, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, Validators } from '@angular/forms';\nimport { FormHelper, timeRegex } from '../../../_services/form-helper';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter } from '@angular/material/core';\nimport { AppDateAdapter } from '../../../_services/app-data-adapter';\nimport { DateHelper } from '../../../_services/date-helper';\n\nexport interface DateTimeForm {\n dateValue: FormControl<Date | undefined>;\n timeValue: FormControl<string>;\n}\n\n@Component({\n selector: 'app-date-time-picker',\n templateUrl: './date-time-picker.component.html',\n styleUrls: ['./date-time-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true,\n },\n { provide: DateAdapter, useClass: AppDateAdapter }\n ]\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor, Validator {\n FormHelper = FormHelper;\n destroyRef = inject(DestroyRef);\n formGroup: FormGroup<DateTimeForm>;\n private onChangeModel: any;\n private onTouchModel: any;\n @Input() dateTooltip: string;\n @Input() timeTooltip: string;\n\n ngOnInit(): void {\n this.formGroup = new FormGroup<DateTimeForm>({\n dateValue: new FormControl<Date>(undefined, { nonNullable: true, validators: [Validators.required] }),\n timeValue: new FormControl<string>(undefined, { nonNullable: true, validators: [Validators.pattern(timeRegex), Validators.required] })\n });\n this.formGroup.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(value => {\n if (!value.dateValue || !value.timeValue) {\n if (this.onChangeModel) {\n this.onChangeModel(undefined);\n }\n if (this.onTouchModel) {\n this.onTouchModel();\n }\n return;\n }\n\n let dateTimeValue = new Date(value.dateValue);\n dateTimeValue = DateHelper.offsetDate(dateTimeValue, -dateTimeValue.getTimezoneOffset())\n const splitted = value.timeValue.split(':');\n if (splitted.length === 2) {\n dateTimeValue.setUTCHours(parseInt(splitted[0]));\n dateTimeValue.setUTCMinutes(parseInt(splitted[1]));\n dateTimeValue.setUTCSeconds(0);\n dateTimeValue.setUTCMilliseconds(0);\n } else {\n dateTimeValue.setUTCHours(0);\n dateTimeValue.setUTCMinutes(0);\n dateTimeValue.setUTCSeconds(0);\n dateTimeValue.setUTCMilliseconds(0);\n }\n if (this.onChangeModel) {\n this.onChangeModel(dateTimeValue.getTime() / 1000.0);\n }\n if (this.onTouchModel) {\n this.onTouchModel();\n }\n })\n }\n\n writeValue(obj: any): void {\n if (!obj) {\n this.formGroup.patchValue({ dateValue: undefined, timeValue: undefined });\n }\n const date = new Date(obj * 1000.0);\n const dateValue = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));\n const utcHours = date.getUTCHours();\n const utcMinutes = date.getUTCMinutes();\n const timeValue = `${(utcHours < 10 ? '0' : '') + utcHours}:${(utcMinutes < 10 ? '0' : '') + utcMinutes}`;\n this.formGroup.patchValue({ dateValue, timeValue }, { onlySelf: true, emitEvent: false });\n }\n\n registerOnChange(fn: any): void {\n this.onChangeModel = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouchModel = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (isDisabled) {\n this.formGroup.disable();\n }\n else {\n this.formGroup.enable();\n }\n }\n\n validate(): ValidationErrors {\n return this.formGroup.errors;\n }\n}\n","<div class=\"outer\">\n <div class=\"component date\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-icon-button\">\n <input matInput [formControl]=\"formGroup.controls.dateValue\" [matDatepicker]=\"datepicker\"\n [matTooltip]=\"dateTooltip\">\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\n <mat-datepicker #datepicker></mat-datepicker>\n <mat-error *ngIf=\"formGroup.controls.dateValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.dateValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"time\" [formControl]=\"formGroup.controls.timeValue\" [matTooltip]=\"timeTooltip\" />\n <mat-error *ngIf=\"formGroup.controls.timeValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.timeValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</div>","import { ENTER, COMMA } from '@angular/cdk/keycodes';\nimport { ChangeDetectorRef, Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatChipInputEvent, MatChipEditedEvent, MatChipGrid, MatChipRow } from '@angular/material/chips';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateAdapter, ErrorStateMatcher } from '@angular/material/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport {\n FormHelper, ComparisonValueListForm, UserConditionForm, FormGenerator,\n UserComparator, UserComparatorText, UserComparatorType,\n IComparisonValueListModel, IComparisonValueModel, AppDateAdapter,\n IFeatureFlagLimitations, ConfirmationDialogComponent, ComparisonValueListHelper, MessagingService, InfoDialogComponent\n} from '../../../../../../bootstrap';\nimport { ComparatorDialogComponent } from './comparator-dialog/comparator-dialog.component';\nimport { PopoutListEditorDialogComponent, PopoutListEditorDialogData } from './popout-list-editor-dialog/popout-list-editor-dialog.component';\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData } from '../../../popout-text-editor-dialog/popout-text-editor-dialog.component';\n\nexport class ListValueErrorStateMatcher implements ErrorStateMatcher {\n constructor(private formGroup: FormGroup<UserConditionForm>) { }\n isErrorState(): boolean {\n return this.formGroup.controls.comparisonValue.controls.listValue?.touched && this.formGroup.controls.comparisonValue.controls.listValue?.invalid;\n }\n}\n\nenum ComparatorGroup {\n ConfidentialText = 'CONFIDENTIAL TEXT',\n Text = 'TEXT',\n SemanticVersion = 'SEMANTIC VERSION',\n Number = 'NUMBER',\n DateTime = 'DATETIME',\n ConfidentialArray = 'CONFIDENTIAL ARRAY',\n Array = 'ARRAY'\n}\n\ninterface IComparatorValue {\n value: UserComparator,\n label: UserComparatorText,\n group: ComparatorGroup,\n index: number,\n}\n\nconst allComparators: IComparatorValue[] = [\n { value: UserComparator.IsOneOf, label: UserComparatorText.IsOneOf, group: ComparatorGroup.Text, index: 0 },\n { value: UserComparator.IsNotOneOf, label: UserComparatorText.IsNotOneOf, group: ComparatorGroup.Text, index: 1 },\n { value: UserComparator.ContainsAnyOf, label: UserComparatorText.ContainsAnyOf, group: ComparatorGroup.Text, index: 2 },\n { value: UserComparator.DoesNotContainAnyOf, label: UserComparatorText.DoesNotContainAnyOf, group: ComparatorGroup.Text, index: 3 },\n { value: UserComparator.SemVerIsOneOf, label: UserComparatorText.SemVerIsOneOf, group: ComparatorGroup.SemanticVersion, index: 4 },\n { value: UserComparator.SemVerIsNotOneOf, label: UserComparatorText.SemVerIsNotOneOf, group: ComparatorGroup.SemanticVersion, index: 5 },\n { value: UserComparator.SemVerLess, label: UserComparatorText.SemVerLess, group: ComparatorGroup.SemanticVersion, index: 6 },\n { value: UserComparator.SemVerLessOrEquals, label: UserComparatorText.SemVerLessOrEquals, group: ComparatorGroup.SemanticVersion, index: 7 },\n { value: UserComparator.SemVerGreater, label: UserComparatorText.SemVerGreater, group: ComparatorGroup.SemanticVersion, index: 8 },\n { value: UserComparator.SemVerGreaterOrEquals, label: UserComparatorText.SemVerGreaterOrEquals, group: ComparatorGroup.SemanticVersion, index: 9 },\n { value: UserComparator.NumberEquals, label: UserComparatorText.NumberEquals, group: ComparatorGroup.Number, index: 10 },\n { value: UserComparator.NumberDoesNotEqual, label: UserComparatorText.NumberDoesNotEqual, group: ComparatorGroup.Number, index: 11 },\n { value: UserComparator.NumberLess, label: UserComparatorText.NumberLess, group: ComparatorGroup.Number, index: 12 },\n { value: UserComparator.NumberLessOrEquals, label: UserComparatorText.NumberLessOrEquals, group: ComparatorGroup.Number, index: 13 },\n { value: UserComparator.NumberGreater, label: UserComparatorText.NumberGreater, group: ComparatorGroup.Number, index: 14 },\n { value: UserComparator.NumberGreaterOrEquals, label: UserComparatorText.NumberGreaterOrEquals, group: ComparatorGroup.Number, index: 15 },\n { value: UserComparator.SensitiveIsOneOf, label: UserComparatorText.SensitiveIsOneOf, group: ComparatorGroup.ConfidentialText, index: 16 },\n { value: UserComparator.SensitiveIsNotOneOf, label: UserComparatorText.SensitiveIsNotOneOf, group: ComparatorGroup.ConfidentialText, index: 17 },\n { value: UserComparator.DateTimeBefore, label: UserComparatorText.DateTimeBefore, group: ComparatorGroup.DateTime, index: 18 },\n { value: UserComparator.DateTimeAfter, label: UserComparatorText.DateTimeAfter, group: ComparatorGroup.DateTime, index: 19 },\n { value: UserComparator.SensitiveTextEquals, label: UserComparatorText.SensitiveTextEquals, group: ComparatorGroup.ConfidentialText, index: 20 },\n { value: UserComparator.SensitiveTextDoesNotEqual, label: UserComparatorText.SensitiveTextDoesNotEqual, group: ComparatorGroup.ConfidentialText, index: 21 },\n { value: UserComparator.SensitiveTextStartsWithAnyOf, label: UserComparatorText.SensitiveTextStartsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 22 },\n { value: UserComparator.SensitiveTextNotStartsWithAnyOf, label: UserComparatorText.SensitiveTextNotStartsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 23 },\n { value: UserComparator.SensitiveTextEndsWithAnyOf, label: UserComparatorText.SensitiveTextEndsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 24 },\n { value: UserComparator.SensitiveTextNotEndsWithAnyOf, label: UserComparatorText.SensitiveTextNotEndsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 25 },\n { value: UserComparator.SensitiveArrayContainsAnyOf, label: UserComparatorText.SensitiveArrayContainsAnyOf, group: ComparatorGroup.ConfidentialArray, index: 26 },\n { value: UserComparator.SensitiveArrayDoesNotContainAnyOf, label: UserComparatorText.SensitiveArrayDoesNotContainAnyOf, group: ComparatorGroup.ConfidentialArray, index: 27 },\n { value: UserComparator.TextEquals, label: UserComparatorText.TextEquals, group: ComparatorGroup.Text, index: 28 },\n { value: UserComparator.TextDoesNotEqual, label: UserComparatorText.TextDoesNotEqual, group: ComparatorGroup.Text, index: 29 },\n { value: UserComparator.TextStartsWithAnyOf, label: UserComparatorText.TextStartsWithAnyOf, group: ComparatorGroup.Text, index: 30 },\n { value: UserComparator.TextNotStartsWithAnyOf, label: UserComparatorText.TextNotStartsWithAnyOf, group: ComparatorGroup.Text, index: 31 },\n { value: UserComparator.TextEndsWithAnyOf, label: UserComparatorText.TextEndsWithAnyOf, group: ComparatorGroup.Text, index: 32 },\n { value: UserComparator.TextNotEndsWithAnyOf, label: UserComparatorText.TextNotEndsWithAnyOf, group: ComparatorGroup.Text, index: 33 },\n { value: UserComparator.ArrayContainsAnyOf, label: UserComparatorText.ArrayContainsAnyOf, group: ComparatorGroup.Array, index: 34 },\n { value: UserComparator.ArrayDoesNotContainAnyOf, label: UserComparatorText.ArrayDoesNotContainAnyOf, group: ComparatorGroup.Array, index: 35 },\n]\n\nconst defaultComparatorIds = [16, 17, 20, 21, 22, 23, 24, 25, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19];\n\n@Component({\n selector: 'app-user-condition',\n templateUrl: './user-condition.component.html',\n styleUrls: [\n '../../../components.scss',\n './user-condition.component.scss'\n ],\n providers: [\n { provide: DateAdapter, useClass: AppDateAdapter }\n ],\n})\nexport class UserConditionComponent implements OnInit {\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n FormHelper = FormHelper;\n\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n @Input() readOnly: boolean;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() formGroup: FormGroup<UserConditionForm>;\n matChipGrid: MatChipGrid;\n\n @ViewChild(\"chipGrid\", { static: false }) set setMatChipGrid(matChipGrid: MatChipGrid) {\n this.matChipGrid = matChipGrid;\n }\n\n defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n\n dateValue: Date;\n timeValue: string;\n\n comparatorSuggestions = new Map<any, any>();\n selectedComparator: UserComparator;\n comparatorSeparator = \"────────────────────\";\n\n keepOrder = (a: any, _: any) => a;\n\n RolloutRuleComparatorV2Type = UserComparatorType;\n rolloutRuleComparatorType: UserComparatorType;\n isClearTextComparatorSelected: boolean;\n\n // The chip grid's [formControl] only accepts a FormControl. We have a FormArray (because of the name+hint).\n // We have to fake a FormControl and match that formControl's errorstate with the original component's errorState.\n fakeFormControl = new FormControl<string>('');\n errorStateMatcher: ListValueErrorStateMatcher;\n\n constructor(private formGenerator: FormGenerator,\n private dialog: MatDialog,\n private comparisonValueListHelper: ComparisonValueListHelper,\n private clipboard: Clipboard,\n private messagingService: MessagingService,\n private changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n this.rolloutRuleComparatorType = this.formGenerator.getComparisonValueType(this.formGroup.controls.comparator.value);\n this.isClearTextComparatorSelected = this.isClearTextComparator(this.formGroup.controls.comparator.value);\n this.errorStateMatcher = new ListValueErrorStateMatcher(this.formGroup);\n this.selectedComparator = this.formGroup.controls.comparator.value;\n this.calcComparators();\n }\n\n attributeChanged(event: Event): void {\n const value = (<HTMLSelectElement>event.target).value;\n if (this.defaultComparisonAttributes.indexOf(value) !== -1) {\n if (this.formGroup.controls.comparisonAttribute.value !== value) {\n this.formGroup.controls.comparisonAttribute.setValue(value);\n this.formGroup.markAsDirty();\n this.calcComparators(true);\n }\n } else if (this.formGroup.controls.comparisonAttribute.value !== '') {\n this.formGroup.controls.comparisonAttribute.setValue('');\n this.formGroup.markAsDirty();\n this.calcComparators(true);\n }\n }\n\n comparatorChanged(value: any): void {\n if (value === \"showall\") {\n this.changeDetectorRef.detectChanges();\n this.selectedComparator = this.formGroup.controls.comparator.value;\n this.changeDetectorRef.detectChanges();\n this.compDialog();\n return;\n }\n\n this.formGroup.controls.comparator.setValue(value);\n this.formGroup.markAsDirty();\n this.selectedComparator = value;\n this.isClearTextComparatorSelected = this.isClearTextComparator(this.formGroup.controls.comparator.value);\n\n const oldRolloutRuleComparatorType = this.rolloutRuleComparatorType;\n this.rolloutRuleComparatorType = this.formGenerator.getComparisonValueType(this.formGroup.controls.comparator.value);\n if (oldRolloutRuleComparatorType !== this.rolloutRuleComparatorType) {\n const defaultValue: IComparisonValueModel = this.rolloutRuleComparatorType === UserComparatorType.DateTime ? {\n doubleValue: new Date().getTime() / 1000.0\n } : {};\n this.formGroup.setControl('comparisonValue', this.formGenerator.generateComparisonValueFormGroup(defaultValue, this.formGroup.controls.comparator.value, false, this.featureFlagLimitations))\n }\n }\n\n compDialog() {\n const dialogRef = this.dialog.open(ComparatorDialogComponent, {\n width: '1130px',\n position: {\n top: window.innerHeight < 750 ? '0px' : window.innerHeight < 950 ? '50px' : '100px',\n },\n data: {\n readOnly: this.readOnly,\n selectedComparator: this.formGroup.controls.comparator.value\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result && result !== this.formGroup.controls.comparator.value) {\n this.comparatorChanged(result);\n this.calcComparators();\n }\n });\n }\n\n add(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n\n event.chipInput?.clear();\n\n if (!value) { return; }\n\n if (value.indexOf(',') === -1) {\n this.formGenerator.addComparisonValueListValueItems(\n this.formGroup.controls.comparator.value,\n this.formGroup.controls.comparisonValue.controls.listValue,\n [{ value }],\n this.featureFlagLimitations);\n return;\n }\n\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'How would you like to add the items?',\n body: `We've noticed a comma in the value you want to add. <br/> Do you want to add it as a single item, or would you prefer to insert multiple items separated by commas?`,\n yesButtonLabel: 'Add multiple items',\n noButtonLabel: 'Add as a single item'\n },\n disableClose: true\n });\n\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result === 'yes') {\n const comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesFromCsv(value);\n if (comparisonValueListParseResult.error) {\n this.messagingService.showWarningSnack('Parse error');\n } else if (comparisonValueListParseResult.comparisonValueList.length > 0) {\n this.formGenerator.addComparisonValueListValueItems(\n this.formGroup.controls.comparator.value,\n this.formGroup.controls.comparisonValue.controls.listValue,\n comparisonValueListParseResult.comparisonValueList,\n this.featureFlagLimitations);\n }\n } else {\n this.formGenerator.addComparisonValueListValueItems(\n this.formGroup.controls.comparator.value,\n this.formGroup.controls.comparisonValue.controls.listValue,\n [{ value }],\n this.featureFlagLimitations);\n }\n });\n }\n\n remove(index: number): void {\n if (index >= 0) {\n this.formGroup.controls.comparisonValue.controls.listValue.controls.splice(index, 1);\n this.formGroup.controls.comparisonValue.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.controls.listValue.markAsDirty();\n }\n }\n\n edit(index: number, event: MatChipEditedEvent) {\n const value = event.value.trim();\n\n // https://github.com/angular/components/issues/26584#issuecomment-1699469605\n // The mat chip control does not work well with long values. The basic setup is overflow: visible.\n // The overflow:hidden, text-overflow: ellipsis is solved in the styles.scss:\n //.mdc-evolution-chip-set .mdc-evolution-chip {\n // .mdc-evolution-chip__cell--primary,\n // .mdc-evolution-chip__action--primary,\n // .mat-mdc-chip-action-label {\n // white-space: nowrap;\n // overflow: hidden;\n // text-overflow: ellipsis;\n // }\n // }\n // \n // This works totally fine until you edit a chip's value that is long (double click on it) \n // and e.g. insert a character to the end of the value.\n // After focusing out from the input, the original chip's value is shifted or even missing if the text is long enough. \n // If we set the input's value to '' here, the shifting is solved and everything works as expected\n (event.chip as MatChipRow).defaultEditInput?.setValue('');\n\n if (!value) {\n this.remove(index);\n } else if (index >= 0) {\n this.formGroup.controls.comparisonValue.controls.listValue.controls[index].patchValue({ value });\n this.formGroup.controls.comparisonValue.controls.listValue.controls[index].updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.controls.listValue.markAsDirty();\n }\n }\n\n expandText() {\n const dialogRef = this.dialog.open(PopoutTextEditorDialogComponent, {\n width: '800px',\n data: <PopoutTextEditorDialogData>{\n value: this.formGroup.controls.comparisonValue.controls.stringValue.value,\n readOnly: this.formGroup.controls.comparisonValue.controls.stringValue.disabled,\n validators: this.rolloutRuleComparatorType === UserComparatorType.Semver\n ? this.formGenerator.getComparisonValueSemverValidators(this.featureFlagLimitations)\n : this.formGenerator.getComparisonValueStringValidators(this.featureFlagLimitations),\n maxValueLength: this.featureFlagLimitations.maxComparisonValueLength,\n description: 'Modify the text within the editor to change the comparison value. The editor supports JSON syntax highlighting.'\n }\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data && data.value !== this.formGroup.controls.comparisonValue.controls.stringValue.value) {\n this.formGroup.controls.comparisonValue.controls.stringValue.setValue(data.value);\n this.formGroup.controls.comparisonValue.controls.stringValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.stringValue.markAsTouched();\n this.formGroup.controls.comparisonValue.controls.stringValue.markAsDirty();\n }\n });\n }\n\n expandList() {\n const dialogRef = this.dialog.open(PopoutListEditorDialogComponent, {\n width: '670px',\n data: <PopoutListEditorDialogData>{\n comparisonValueList: this.getRawValue(),\n comparator: this.formGroup.controls.comparator.value,\n featureFlagLimitations: this.featureFlagLimitations,\n readOnly: this.readOnly\n }\n });\n dialogRef.afterClosed().subscribe((data: { comparisonValueList: IComparisonValueListModel[] }) => {\n if (data?.comparisonValueList) {\n const oldValue =\n this.formGroup.controls.comparisonValue.controls.listValue.value\n .map(l => { return { value: l.value, hint: l.hint }; });\n const newValue = data.comparisonValueList\n .map(l => { return { value: l.value, hint: l.hint }; });\n if (JSON.stringify(oldValue) === JSON.stringify(newValue)) {\n return;\n }\n const validators =\n this.formGenerator.getComparisonValueType(this.formGroup.controls.comparator.value) === UserComparatorType.SemverList\n ? this.formGenerator.getComparisonValueSemverListItemValidators(this.featureFlagLimitations)\n : this.formGenerator.getComparisonValueStringListItemValidators(this.featureFlagLimitations);\n const formArray = this.formGenerator.generateComparisonValueListValueArray(data.comparisonValueList, this.readOnly, this.featureFlagLimitations, validators);\n this.formGroup.controls.comparisonValue.setControl('listValue', formArray);\n this.formGroup.controls.comparisonValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.markAsDirty();\n }\n });\n }\n\n removeAll() {\n this.formGroup.controls.comparisonValue.controls.listValue.controls.splice(0, this.formGroup.controls.comparisonValue.controls.listValue.controls.length);\n this.formGroup.controls.comparisonValue.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.controls.listValue.markAsDirty();\n }\n\n copyValuesAsCsv() {\n this.copyToClipboard(this.comparisonValueListHelper.formatValuesAsCsv(this.getRawValue()));\n }\n\n copyToClipboard(value: string) {\n if (value) {\n try {\n this.clipboard.copy(value);\n this.messagingService.showSuccessSnack(\"Copied to clipboard.\");\n } catch {\n this.messagingService.showSuccessSnack(\"Clipboard unavailable.\");\n }\n\n } else {\n this.messagingService.showWarningSnack(\"Nothing to be copied.\");\n }\n }\n\n getRawValue(): IComparisonValueListModel[] {\n return this.formGroup.controls.comparisonValue.controls.listValue.value.map(v => { return { value: v.value, hint: v.hint } });\n }\n\n isValueInvalid(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n return listValueItemControl.controls.value.touched && listValueItemControl.controls.value.invalid;\n }\n\n isHintInvalid(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n return listValueItemControl.controls.hint.touched && listValueItemControl.controls.hint.invalid;\n }\n\n isListValueItemInvalid(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n return this.isValueInvalid(listValueItemControl) || this.isHintInvalid(listValueItemControl);\n }\n\n getListValueItemTooltipMessage(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n if (this.isValueInvalid(listValueItemControl)) {\n return FormHelper.getErrorMessage(listValueItemControl.controls.value);\n } else if (this.isHintInvalid(listValueItemControl)) {\n return \"Hint:\" + FormHelper.getErrorMessage(listValueItemControl.controls.hint);\n }\n if (listValueItemControl.controls.hint.value) {\n return listValueItemControl.controls.hint.value;\n }\n return \"No hint\";\n }\n\n calcComparators(resetVal = false): void {\n if (!this.formGroup.controls.comparisonAttribute.value) {\n return;\n }\n this.buildComparatorSuggestions(defaultComparatorIds, resetVal);\n }\n\n buildComparatorSuggestions(ids: number[], resetVal: boolean): void {\n let comps = ids.map(id => allComparators[id]);\n const selected = allComparators.find(val => val.value === this.formGroup.controls.comparator.value);\n if (resetVal && !ids.includes(selected.index) && this.isNullCompVal(this.formGroup.controls.comparisonValue.value)) {\n this.comparatorChanged(comps[0].value);\n } else if (!ids.includes(selected.index)) {\n if (selected.value === UserComparator.ContainsAnyOf || selected.value === UserComparator.DoesNotContainAnyOf) {\n comps = [allComparators[2], allComparators[3], ...comps]\n } else {\n const selectedGroup = allComparators.filter(val => val.group === selected.group);\n comps = [...selectedGroup, ...comps]\n }\n }\n comps = this.dedupComps(comps);\n this.comparatorSuggestions = comps.reduce((entryMap, e) => entryMap.set(e.group, [...entryMap.get(e.group) || [], e]), new Map());\n this.comparatorSeparator = this.genSeparator(comps);\n }\n\n dedupComps(comps: IComparatorValue[]): IComparatorValue[] {\n const result: IComparatorValue[] = [];\n comps.forEach(val => {\n if (!result.find(e => e.index === val.index)) {\n result.push(val);\n }\n });\n return result;\n }\n\n genSeparator(comps: IComparatorValue[]): string {\n let max = 0;\n comps.forEach(val => {\n if (val.label.length > max) {\n max = val.label.length;\n }\n });\n return Array(max).join(\"─\");\n }\n\n isNumberArr(val: any): boolean {\n if (!Array.isArray(val)) {\n return false;\n }\n\n return val.length > 0 && val.every(item => typeof item === 'number');\n }\n\n isNullCompVal(compVal: Partial<{ stringValue?: string; doubleValue?: number; listValue?: Partial<{ value: string; hint?: string; index: number; }>[]; }>): boolean {\n return !compVal.doubleValue && !compVal.listValue && !compVal.stringValue;\n }\n\n\n isClearTextComparator(comparator: UserComparator): boolean {\n switch (comparator) {\n case UserComparator.IsOneOf:\n case UserComparator.IsNotOneOf:\n case UserComparator.TextStartsWithAnyOf:\n case UserComparator.TextEndsWithAnyOf:\n case UserComparator.TextNotStartsWithAnyOf:\n case UserComparator.TextNotEndsWithAnyOf:\n case UserComparator.ArrayContainsAnyOf:\n case UserComparator.ArrayDoesNotContainAnyOf:\n case UserComparator.ContainsAnyOf:\n case UserComparator.DoesNotContainAnyOf:\n case UserComparator.TextEquals:\n case UserComparator.TextDoesNotEqual: return true;\n default: return false;\n }\n }\n\n openCleartextInfoDialog() {\n this.dialog.open(InfoDialogComponent, {\n width: '600px',\n data: {\n title: `Consider using confidential comparators`,\n body: `Comparison value will be presented as plain text \n in the <i>config JSON</i>. If you have sensitive data, consider using one of the confidential (hashed) comparators.<br/><br/>\n See the <a href=\"https://configcat.com/docs/targeting/targeting-rule/user-condition/#confidential-text-comparators\" target=\"_blank\">documentation</a> for more information.`,\n secondaryButtonLabel: 'Open comparator selector',\n secondaryButtonAction: () => this.compDialog()\n }\n });\n }\n}\n","<div class=\"targeting-rule-line smallest-form-field\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"conditionIndex\"></app-condition-chip>\n\n <div class=\"explanation\"><a href=\"https://configcat.com/docs/targeting/targeting-rule/user-condition/\"\n target=\"_blank\" rel=\"noopener noreferrer\" class=\"user-link\">user's</a></div>\n </div>\n\n <div class=\"wrapper-group\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component pad-right\"\n [ngClass]=\"{'small': defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) === -1}\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl (change)=\"attributeChanged($event)\"\n [disabled]=\"formGroup.controls.comparisonAttribute.disabled\" matTooltip=\"Comparison attribute\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\n [selected]=\"comparisonAttribute === formGroup.controls.comparisonAttribute.value\">\n {{comparisonAttribute}}</option>\n <option\n [selected]=\"defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) === -1\">\n Custom\n </option>\n </select>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right small\"\n [hidden]=\"defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) !== -1\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" (blur)=\"calcComparators(true)\"\n [formControl]=\"formGroup.controls.comparisonAttribute\" matTooltip=\"Custom comparison attribute\">\n <mat-error *ngIf=\"formGroup.controls.comparisonAttribute.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonAttribute)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"targeting-rule-component pad-right comparator\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl (change)=\"comparatorChanged(selectedComparator)\"\n [(ngModel)]=\"selectedComparator\" [disabled]=\"readOnly\" matTooltip=\"Comparator\">\n <optgroup *ngFor=\"let group of comparatorSuggestions | keyvalue: keepOrder\"\n [label]=\"'&nbsp;' + group.key\">\n <option *ngFor=\"let comparator of group.value\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup [label]=\"comparatorSeparator\"></optgroup>\n <option value=\"showall\">&nbsp;&nbsp;SHOW ALL COMPARATORS&nbsp;&nbsp;</option>\n </select>\n <button matSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"All comparators\"\n (click)=\"compDialog()\"><mat-icon>list_alt</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <ng-container [ngSwitch]=\"rolloutRuleComparatorType\">\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.String\"\n [ngTemplateOutlet]=\"textTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.Semver\"\n [ngTemplateOutlet]=\"semverTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.StringList\"\n [ngTemplateOutlet]=\"listTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.SemverList\"\n [ngTemplateOutlet]=\"listTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.Number\"\n [ngTemplateOutlet]=\"numberTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.DateTime\"\n [ngTemplateOutlet]=\"dateTimeTemplate\"></ng-container>\n </ng-container>\n\n</div>\n\n<ng-template #textTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.comparisonValue.controls.stringValue\"\n matTooltip=\"Comparison value (text)\" placeholder=\"Add text ...\" />\n <button matPrefix class=\"prefix-button\" type=\"button\" mat-icon-button *ngIf=\"isClearTextComparatorSelected\"\n (click)=\"openCleartextInfoDialog()\"\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"><mat-icon>lock_open_right</mat-icon></button>\n <button matSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandText()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n\n<ng-template #semverTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.comparisonValue.controls.stringValue\"\n matTooltip=\"Comparison value (semantic version)\" placeholder=\"Add semantic version ... (1.2.3)\" />\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #listTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.listValue\"\n class=\"targeting-rule-component grow small-chip-input top-icon-suffix\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-chip-grid #chipGrid [formControl]=\"fakeFormControl\" [errorStateMatcher]=\"errorStateMatcher\">\n <span class=\"chip-container\"\n *ngFor=\"let listValueItem of formGroup.controls.comparisonValue.controls.listValue.controls | slice:0:20; let i = index\"\n [matTooltip]=\"getListValueItemTooltipMessage(listValueItem)\">\n <mat-chip-row (removed)=\"remove(i)\" [disabled]=\"readOnly\" [removable]=\"!readOnly\" class=\"chip\"\n [editable]=\"!readOnly\" (edited)=\"edit(i, $event)\"\n [ngClass]=\"{'invalid': isListValueItemInvalid(listValueItem)}\">\n\n {{listValueItem.controls.value.value}}\n\n <button type=\"button\" matChipRemove *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n </span>\n <button mat-stroked-button class=\"show-all\" type=\"button\"\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.controls.length > 20\"\n (click)=\"expandList()\">\n show all {{formGroup.controls.comparisonValue.controls.listValue.controls.length}}\n items</button>\n <input [disabled]=\"readOnly\" [placeholder]=\"!readOnly ? 'Add item to list ...' : ''\"\n [matChipInputFor]=\"chipGrid\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n matChipInputAddOnBlur (matChipInputTokenEnd)=\"add($event)\" matTooltip=\"Comparison values (list)\" />\n </mat-chip-grid>\n <button matIconPrefix class=\"prefix-button\" type=\"button\" mat-icon-button *ngIf=\"isClearTextComparatorSelected\"\n (click)=\"openCleartextInfoDialog()\"\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"><mat-icon>lock_open_right</mat-icon></button>\n <button matIconSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"More...\"\n [matMenuTriggerFor]=\"moreMenu\"><mat-icon>more_vert</mat-icon></button>\n <button matIconSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandList()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.invalid && formGroup.controls.comparisonValue.controls.listValue.errors\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.listValue)}}\n </mat-error>\n <mat-error\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.invalid && !formGroup.controls.comparisonValue.controls.listValue.errors\">\n Invalid items\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #numberTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"number\" [formControl]=\"formGroup.controls.comparisonValue.controls.doubleValue\"\n matTooltip=\"Comparison value (number)\" placeholder=\"Add number ...\" inputDisplayNormalizer />\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.doubleValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #dateTimeTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue\" class=\"targeting-rule-component datetime\">\n <app-date-time-picker [formControl]=\"formGroup.controls.comparisonValue.controls.doubleValue\"\n dateTooltip=\"Comparison value (date)\" timeTooltip=\"Comparison value (time)\" />\n </div>\n</ng-template>\n\n\n<mat-menu #moreMenu>\n <a mat-menu-item (click)=\"expandList()\"><mat-icon>edit_note</mat-icon>Advanced editor</a>\n <a mat-menu-item (click)=\"copyValuesAsCsv()\"><mat-icon>content_copy</mat-icon>Copy as CSV (values only)</a>\n <a mat-menu-item (click)=\"removeAll()\" [disabled]=\"readOnly\"><mat-icon>delete_outline</mat-icon>Remove\n all</a>\n</mat-menu>","import { Directive, Input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[track]'\n})\nexport class TrackingDirective {\n @Input() track: string[];\n // Intentionally empty class, to be easier to copy the source from the Dashboard, we had to create this directive, but we do not want to track in integrations.\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FormHelper, SegmentConditionForm, ISegment, SegmentComparator } from '../../../../../../bootstrap';\n\n@Component({\n selector: 'app-segment-condition',\n templateUrl: './segment-condition.component.html',\n styleUrls: [\n '../../../components.scss',\n './segment-condition.component.scss'\n ]\n})\nexport class SegmentConditionComponent {\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n @Input() formGroup: FormGroup<SegmentConditionForm>;\n @Input() segments: ISegment[];\n @Input() canManageSegments: boolean;\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n\n FormHelper = FormHelper;\n\n segmentComparators = [\n { value: SegmentComparator.IsIn, label: 'IS IN SEGMENT' },\n { value: SegmentComparator.IsNotIn, label: 'IS NOT IN SEGMENT' },\n ];\n\n createSegment() {\n this.createSegmentRequested.emit();\n }\n}\n","<div class=\"targeting-rule-line smallest-form-field\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"conditionIndex\"></app-condition-chip>\n\n <div class=\"explanation\"><a href=\"https://configcat.com/docs/targeting/targeting-rule/segment-condition/\" target=\"_blank\"\n rel=\"noopener noreferrer\" class=\"user-link\">user</a></div>\n </div>\n\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.comparator\" matTooltip=\"Segment comparator\">\n <option *ngFor=\"let comparator of segmentComparators\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.segmentId\" matTooltip=\"Segment\">\n <option [ngValue]=\"null\" disabled selected hidden *ngIf=\"segments.length\">Select segment ...\n </option>\n <option *ngFor=\"let segment of segments\" [ngValue]=\"segment.segmentId\"\n [title]=\"segment.description\">\n {{segment.name}}\n </option>\n <option *ngIf=\"segments.length === 0\" disabled>\n no segments available\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.segmentId.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.segmentId)}}\n </mat-error>\n </mat-form-field>\n </div>\n <button class=\"segment-more\" type=\"button\" mat-icon-button *ngIf=\"canManageSegments\"\n matTooltip=\"Create and manage segments\" [matMenuTriggerFor]=\"segmentMenu\"\n [track]=\"['segment menu click', 'feature flags and settings']\">\n <mat-icon [inline]=\"true\">more_vert</mat-icon>\n </button>\n </div>\n</div>\n\n<mat-menu #segmentMenu=\"matMenu\">\n <ng-template matMenuContent>\n <a mat-menu-item (click)=\"createSegmentRequested.emit()\"\n [track]=\"['create segment click', 'Feature flags & settings V2 page']\">\n <mat-icon>add</mat-icon><span>Create new segment</span>\n </a>\n <a mat-menu-item (click)=\"manageSegmentsRequested.emit()\"\n [track]=\"['manage segment click', 'Feature flags & settings V2 page']\">\n <mat-icon>pie_chart</mat-icon><span>Manage segments</span>\n </a>\n </ng-template>\n</mat-menu>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n FormHelper, PrerequisiteComparator, IFeatureFlagLimitations,\n PrerequisiteFlagConditionForm, IPrerequisiteSetting,\n IValueModel, FormGenerator, SettingType\n} from '../../../../../../bootstrap';\n\n@Component({\n selector: 'app-prerequisite-flag-condition',\n templateUrl: './prerequisite-flag-condition.component.html',\n styleUrls: [\n '../../../components.scss',\n './prerequisite-flag-condition.component.scss'\n ]\n})\nexport class PrerequisiteFlagConditionComponent implements OnInit {\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n @Input() formGroup: FormGroup<PrerequisiteFlagConditionForm>;\n @Input() prerequisiteSettings: IPrerequisiteSetting[];\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Output() prerequisiteConditionChanged = new EventEmitter();\n SettingType = SettingType;\n prerequisiteSettingType: SettingType;\n\n FormHelper = FormHelper;\n\n prerequisiteComparators = [\n { value: PrerequisiteComparator.Equals, label: 'EQUALS' },\n { value: PrerequisiteComparator.DoesNotEqual, label: 'NOT EQUALS' },\n ];\n\n booleanPrerequisiteComparators = [\n { value: PrerequisiteComparator.Equals, label: 'IS ON' },\n { value: PrerequisiteComparator.DoesNotEqual, label: 'IS OFF' },\n ];\n\n constructor(private formGenerator: FormGenerator) { }\n\n ngOnInit() {\n this.prerequisiteSettingType = this.getSettingType();\n }\n\n getSettingType() {\n const prerequisiteSetting = this.prerequisiteSettings.filter(s => s.settingId == this.formGroup.controls.prerequisiteSettingId.value)[0];\n return prerequisiteSetting?.settingType ?? SettingType.Boolean;\n }\n\n prerequisiteSettingChanged() {\n const oldPrerequisiteSettingType = this.prerequisiteSettingType;\n this.prerequisiteSettingType = this.getSettingType();\n if (oldPrerequisiteSettingType !== this.prerequisiteSettingType) {\n this.formGroup.setControl('prerequisiteComparisonValue',\n this.formGenerator.generateValueFormGroup(\n this.getDefaultValueModel(this.prerequisiteSettingType), this.prerequisiteSettingType, false, this.featureFlagLimitations\n )\n );\n }\n this.prerequisiteConditionChanged.emit();\n }\n\n getDefaultValueModel(settingType: SettingType): IValueModel {\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: true };\n case SettingType.String:\n return { stringValue: '' };\n case SettingType.Int:\n return { intValue: 0 };\n case SettingType.Double:\n return { doubleValue: 0 };\n default:\n throw new Error('Invalid SettingType');\n }\n }\n}\n","<div class=\"targeting-rule-line smallest-form-field\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"conditionIndex\"></app-condition-chip>\n <div class=\"explanation\"><a href=\"https://configcat.com/docs/targeting/targeting-rule/flag-condition/\"\n target=\"_blank\" rel=\"noopener noreferrer\" class=\"user-link\">flag</a></div>\n </div>\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.prerequisiteSettingId\"\n (change)=\"prerequisiteSettingChanged()\" matTooltip=\"Prerequisite feature flag or setting key\">\n <option [ngValue]=\"null\" disabled selected hidden *ngIf=\"prerequisiteSettings.length\">Select feature\n flag ...</option>\n <option *ngFor=\"let setting of prerequisiteSettings\" [ngValue]=\"setting.settingId\">\n {{setting.key}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.prerequisiteSettingId.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.prerequisiteSettingId)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right\" *ngIf=\"prerequisiteSettingType === SettingType.Boolean\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.comparator\"\n matTooltip=\"Prerequisite feature flag comparison value\">\n <option *ngFor=\"let prerequisiteComparator of booleanPrerequisiteComparators\"\n [ngValue]=\"prerequisiteComparator.value\">\n {{prerequisiteComparator.label}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right\" *ngIf=\"prerequisiteSettingType !== SettingType.Boolean\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.comparator\" matTooltip=\"Comparator\">\n <option *ngFor=\"let prerequisiteComparator of prerequisiteComparators\"\n [ngValue]=\"prerequisiteComparator.value\">\n {{prerequisiteComparator.label}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <app-feature-flag-value class=\"wrapper-group grow\" *ngIf=\"prerequisiteSettingType !== SettingType.Boolean\"\n tooltip=\"Prerequisite feature flag comparison value\"\n [formGroup]=\"formGroup.controls.prerequisiteComparisonValue\" [isPrerequisite]=\"true\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport {\n IFlagState, IFeatureFlagLimitations,\n ConditionForm, FormGenerator, UserComparator, ISegment, SegmentComparator\n} from '../../../../../bootstrap';\n\n@Component({\n selector: 'app-conditions',\n templateUrl: './conditions.component.html',\n styleUrls: [\n '../../components.scss',\n './conditions.component.scss',\n '../../add-btn.scss'\n ]\n})\nexport class ConditionsComponent {\n @Input() formArray: FormArray<FormGroup<ConditionForm>>;\n @Input() segments: ISegment[];\n @Input() flagState: IFlagState;\n @Input() targetingRuleIndex: number;\n @Input() canManageSegments: boolean;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n @Output() lastConditionDeleted = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter();\n\n constructor(private formGenerator: FormGenerator) {\n }\n\n addUserCondition() {\n if (!this.checkLimitations()) return;\n\n const f = this.formGenerator.generateConditionFormGroup({\n userCondition: { comparisonAttribute: 'Identifier', comparator: UserComparator.SensitiveTextEquals, comparisonValue: { stringValue: '' } }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations);\n this.formArray.push(f);\n f.markAsDirty();\n }\n\n addSegmentCondition() {\n if (!this.checkLimitations()) return;\n\n if (this.segments.length === 0) {\n this.addSegmentConditionRequestedWithoutSegments.emit();\n return;\n }\n const f = this.formGenerator.generateConditionFormGroup({\n segmentCondition: { comparator: SegmentComparator.IsIn, segmentId: null }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations);\n this.formArray.push(f);\n f.markAsDirty();\n }\n\n addPrerequisiteFlagCondition() {\n if (!this.checkLimitations()) return;\n\n const f = new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: this.formGenerator.generateEmptyPrerequisiteFlagConditionFormGroup(this.featureFlagLimitations)\n });\n this.formArray.push(f);\n f.markAsDirty();\n }\n\n remove(index: number): void {\n const shouldEmit = !!this.formArray.controls[index].controls.prerequisiteFlagCondition;\n this.formArray.removeAt(index);\n this.formArray.markAsDirty();\n if (!this.formArray.controls.length) {\n this.lastConditionDeleted.emit();\n }\n if (shouldEmit) {\n this.prerequisiteConditionChanged.emit();\n }\n }\n\n checkLimitations() {\n if (this.formArray.controls.length >= this.featureFlagLimitations.maxConditionPerTargetingRuleCount) {\n this.subscriptionLimitReached.emit();\n return false;\n }\n return true;\n }\n}\n","<div *ngFor=\"let condition of formArray.controls; let i = index\" class=\"condition\">\n <app-user-condition class=\"grow\" *ngIf=\"condition.controls.userCondition\" [readOnly]=\"flagState.readOnly\"\n [formGroup]=\"condition.controls.userCondition\" [featureFlagLimitations]=\"featureFlagLimitations\"\n [targetingRuleIndex]=\"targetingRuleIndex\" [conditionIndex]=\"i\"></app-user-condition>\n <app-segment-condition class=\"grow\" *ngIf=\"condition.controls.segmentCondition\"\n [formGroup]=\"condition.controls.segmentCondition\" [segments]=\"segments\" [canManageSegments]=\"canManageSegments\"\n (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\" [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"i\"></app-segment-condition>\n <app-prerequisite-flag-condition class=\"grow\" *ngIf=\"condition.controls.prerequisiteFlagCondition\"\n [formGroup]=\"condition.controls.prerequisiteFlagCondition\"\n [prerequisiteSettings]=\"flagState.prerequisiteSettings\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"i\"></app-prerequisite-flag-condition>\n <div class=\"delete-button\" *ngIf=\"formArray.controls.length > 1 && !flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove condition\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n</div>\n\n<div class=\"add-cond\" *ngIf=\"formArray.controls.length && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div [matMenuTriggerFor]=\"andmenu\" matTooltip=\"Add AND condition\" class=\"add-btn add-and\">+ AND</div>\n</div>\n\n<mat-menu #andmenu class=\"menu-long-text-and\">\n <a mat-menu-item (click)=\"addUserCondition()\"><mat-icon>track_changes</mat-icon>Add user condition</a>\n <a mat-menu-item (click)=\"addSegmentCondition()\"><mat-icon>pie_chart</mat-icon>Add segment condition</a>\n <div matTooltip=\"There's no other flag in the Config to select as a prerequisite.\"\n [matTooltipDisabled]=\"flagState.prerequisiteSettings.length > 0\">\n <a mat-menu-item (click)=\"addPrerequisiteFlagCondition()\" [disabled]=\"!flagState.prerequisiteSettings.length\">\n <mat-icon>account_tree</mat-icon>Add flag condition (prerequisite)\n </a>\n </div>\n</mat-menu>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormArray } from '@angular/forms';\nimport {\n ISegment, TargetingRuleForm, \n FormGenerator, IFeatureFlagLimitations, IFlagState,\n PercentageOptionForm, IValueModel, SettingType\n} from '../../../../bootstrap'\n\n\n@Component({\n selector: 'app-targeting-rule',\n templateUrl: './targeting-rule.component.html',\n styleUrls: [\n './targeting-rule.component.scss',\n '../chips.scss',\n '../add-btn.scss'\n ]\n})\nexport class TargetingRuleComponent {\n @Input() formGroup: FormGroup<TargetingRuleForm>;\n @Input() segments: ISegment[];\n @Input() flagState: IFlagState;\n @Input() targetingRuleIndex: number;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() canManageSegments: boolean;\n @Input() showPercentageEvaluationAttribute: boolean;\n @Input() percentageEvaluationAttribute: string;\n\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n @Output() removedAllRules = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() changePercentageEvaluationAttributeRequested = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter();\n\n constructor(private formGenerator: FormGenerator) { }\n\n convertToPercentage() {\n if (!this.formGroup.controls.value || this.formGroup.controls.value.disabled) {\n return;\n }\n\n const currentValue: IValueModel = this.formGroup.controls.value.value;\n\n switch (this.flagState.settingValue.setting.settingType) {\n case SettingType.Boolean: {\n this.formGroup.setControl('percentageOptions',\n new FormArray<FormGroup<PercentageOptionForm>>([\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: currentValue.boolValue ? 100 : 0, value: { boolValue: true } }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations),\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: currentValue.boolValue ? 0 : 100, value: { boolValue: false } }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations)\n ], [this.formGenerator.validatePercentageSum]))\n this.formGroup.removeControl('value');\n this.formGroup.markAsDirty();\n break;\n }\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double: {\n this.formGroup.setControl('percentageOptions',\n new FormArray<FormGroup<PercentageOptionForm>>([\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: 100, value: currentValue }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations),\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: 0, value: {} }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations)\n ], [this.formGenerator.validatePercentageSum]))\n this.formGroup.removeControl('value');\n this.formGroup.markAsDirty();\n break;\n }\n\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n isPercentageOnly(): boolean {\n return this.formGenerator.isPercentageOnlyTargetingRule(this.formGroup);\n }\n\n showBadge(): boolean {\n return this.targetingRuleIndex !== 0 || !this.isPercentageOnly();\n }\n\n getChipText(): string {\n return this.targetingRuleIndex !== 0\n && this.isPercentageOnly()\n ? 'OTHERWISE'\n : 'THEN';\n }\n\n getChipTooltip(): string {\n return this.targetingRuleIndex !== 0\n && this.isPercentageOnly()\n ? 'This value will be served to all identified users who do not match the targeting rules above.'\n : '';\n }\n\n lastPercentageOptionLeft() {\n if (this.formGroup.controls.conditions.length === 0) {\n this.removedAllRules.emit();\n return;\n }\n const lastValue = this.formGroup.controls.percentageOptions.controls[0].controls.value.getRawValue();\n this.formGroup.setControl('value', this.formGenerator.generateValueFormGroup(lastValue, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations));\n this.formGroup.removeControl('percentageOptions');\n this.formGroup.markAsDirty();\n }\n\n lastConditionDeleted() {\n if (!this.formGroup.controls.percentageOptions?.controls?.length) {\n this.removedAllRules.emit();\n }\n }\n\n subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n}\n","<div class=\"side-padd conditions\" *ngIf=\"formGroup.controls.conditions?.length\">\n <app-conditions [formArray]=\"formGroup.controls.conditions\" [segments]=\"segments\" [flagState]=\"flagState\"\n [targetingRuleIndex]=\"targetingRuleIndex\" (lastConditionDeleted)=\"lastConditionDeleted()\"\n [canManageSegments]=\"canManageSegments\" (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"></app-conditions>\n</div>\n\n<mat-divider *ngIf=\"formGroup.controls.conditions?.length\"></mat-divider>\n\n<div class=\"served-value\">\n <div class=\"flex side-padd\">\n <div class=\"chip-container fixed-width\" *ngIf=\"showBadge()\" [matTooltip]=\"getChipTooltip()\">\n <mat-chip-set>\n <mat-chip disabled>{{getChipText()}}</mat-chip>\n </mat-chip-set>\n </div>\n\n <app-percentage-options class=\"grow\" *ngIf=\"formGroup.controls.percentageOptions?.length\"\n [formArray]=\"formGroup.controls.percentageOptions\" [flagState]=\"flagState\"\n (lastPercentageOptionLeft)=\"lastPercentageOptionLeft()\"\n (subscriptionLimitReached)=\"subscriptionLimitReached.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" [isPercentageOnlyTargetingRule]=\"isPercentageOnly()\"\n [showPercentageEvaluationAttribute]=\"showPercentageEvaluationAttribute\"\n [percentageEvaluationAttribute]=\"percentageEvaluationAttribute\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\">\n </app-percentage-options>\n <app-feature-flag-value class=\"grow\" *ngIf=\"formGroup.controls.value\" [flagState]=\"flagState\"\n [formGroup]=\"formGroup.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\" tooltip=\"Served value\"></app-feature-flag-value>\n </div>\n\n <div class=\"add-perc flex side-padd bot-padd\" *ngIf=\"formGroup.controls.value && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"convertToPercentage()\" matTooltip=\"Target a percentage of users to whom this rule applies\"\n class=\"add-btn add-perc-btn\">+ % OPTION</div>\n </div>\n</div>","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormArray } from '@angular/forms';\nimport {\n UserComparator, ISegment, SegmentComparator,\n UpdateSettingValueForm, TargetingRuleForm, ConditionForm,\n FormGenerator, IFeatureFlagLimitations, IPrerequisiteChanged, IFlagState\n} from '../../../bootstrap';\n\n@Component({\n selector: 'app-evaluation-formula',\n templateUrl: './evaluation-formula.component.html',\n styleUrls: [\n './evaluation-formula.component.scss',\n './chips.scss',\n './add-btn.scss'\n ]\n})\nexport class EvaluationFormulaComponent {\n @Input() formGroup: FormGroup<UpdateSettingValueForm>;\n @Input() segments: ISegment[];\n @Input() flagState: IFlagState;\n @Input() showVariationId: boolean;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() canManageSegments: boolean;\n @Input() showPercentageEvaluationAttribute: boolean;\n\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n @Output() changePercentageEvaluationAttributeRequested = new EventEmitter();\n\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter<IPrerequisiteChanged>();\n @Output() recalcAddButtons = new EventEmitter();\n\n constructor(private formGenerator: FormGenerator) { }\n\n addUserCondition() {\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = new FormGroup<TargetingRuleForm>({\n conditions: new FormArray<FormGroup<ConditionForm>>([\n this.formGenerator.generateConditionFormGroup({\n userCondition: { comparisonAttribute: 'Identifier', comparator: UserComparator.SensitiveTextEquals, comparisonValue: { stringValue: '' } }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations)\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.featureFlagLimitations)\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addSegmentCondition() {\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n if (this.segments.length === 0) {\n this.addSegmentConditionRequestedWithoutSegments.emit();\n return false;\n }\n\n const formGroup = new FormGroup<TargetingRuleForm>({\n conditions: new FormArray<FormGroup<ConditionForm>>([\n this.formGenerator.generateConditionFormGroup({\n segmentCondition: { comparator: SegmentComparator.IsIn, segmentId: null }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations)\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.featureFlagLimitations)\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addPrerequisiteFlagCondition() {\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = new FormGroup<TargetingRuleForm>({\n conditions: new FormArray<FormGroup<ConditionForm>>([\n new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: this.formGenerator.generateEmptyPrerequisiteFlagConditionFormGroup(this.featureFlagLimitations)\n })\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.featureFlagLimitations)\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addPercentageOptions() {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return false;\n }\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = this.formGenerator.generateTargetingRuleWithEmptyPercentageOptions(\n this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations\n )\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addTargetingRuleFormGroup(formGroup: FormGroup<TargetingRuleForm>) {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n this.formGroup.controls.targetingRules.insert(this.formGroup.controls.targetingRules.controls.length - 1, formGroup);\n } else {\n this.formGroup.controls.targetingRules.push(formGroup);\n }\n this.recalcAddButtons.emit();\n return true;\n }\n\n checkFeatureFlagLimitations() {\n if (this.formGroup.controls.targetingRules.length >= this.featureFlagLimitations.maxTargetingRuleCount) {\n this.subscriptionLimitReached.emit();\n return false;\n }\n return true;\n }\n\n trackByIndex(index: number): any {\n return index;\n }\n\n onDrop(event: CdkDragDrop<any>) {\n const targetingRules = this.formGroup.controls.targetingRules.controls;\n moveItemInArray(targetingRules, event.previousIndex, event.currentIndex);\n this.formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n }\n\n isDragDisabled(targetingRule: FormGroup<TargetingRuleForm>) {\n // If the last targeting rule has only percentage options, we should not allow moving anything before/after it.\n return this.flagState.readOnly || this.formGenerator.isPercentageOnlyTargetingRule(targetingRule);\n }\n\n sortPredicate() {\n return (index: number) => this.sortPredicateFunction(index);\n }\n\n sortPredicateFunction(index: number) {\n // If the last targeting rule has only percentage options, we should not allow moving anything before/after it.\n return index < this.formGroup.controls.targetingRules.controls.length - 1 ||\n !this.formGenerator.isPercentageOnlyTargetingRule(this.formGroup.controls.targetingRules.controls[index])\n }\n\n getChipText(): string {\n if (this.formGroup.controls.targetingRules.controls.length > 0) {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return 'To unidentified:';\n } else {\n return 'To all others:';\n }\n }\n\n return 'To all users:';\n }\n\n getChipTooltip(): string {\n if (this.formGroup.controls.targetingRules.controls.length > 0) {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return 'This fallback value will be served in case the user can\\'t be identified.';\n } else {\n return 'This value will be served to all users who the above rules don\\'t apply.';\n }\n }\n\n return '';\n }\n\n remove(index: number): void {\n const shouldEmitPrerequisiteChanged = this.formGroup.controls\n .targetingRules.controls[index].controls\n .conditions?.controls\n .some(c => c.controls.prerequisiteFlagCondition);\n this.formGroup.controls.targetingRules.removeAt(index);\n this.formGroup.controls.targetingRules.markAsDirty();\n this.recalcAddButtons.emit();\n if (shouldEmitPrerequisiteChanged) {\n this.recalcPrerequisiteReferences();\n }\n }\n\n subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n\n recalcPrerequisiteReferences(): void {\n const prerequisiteIds = []\n for (const rule of this.formGroup.controls.targetingRules.controls) {\n for (const condition of rule.controls.conditions.controls) {\n if (condition.controls.prerequisiteFlagCondition) {\n prerequisiteIds.push(condition.controls.prerequisiteFlagCondition.controls.prerequisiteSettingId.value)\n }\n }\n }\n this.prerequisiteConditionChanged.emit({\n settingId: this.flagState.settingValue.setting.settingId,\n prerequisiteIds: prerequisiteIds\n });\n }\n}\n","<div class=\"targeting-rule-outer\" *ngIf=\"flagState.addButtonRenderState.renderTopAddButtons && !flagState.readOnly\">\n <div class=\"grow vertical-center add-box pad-bottom left-align\">\n <div class=\"add-btn add-if\" [matMenuTriggerFor]=\"ormenu\" \n matTooltip=\"Add targeting rule\">+ IF</div>\n <div class=\"add-btn add-if pad-left\" (click)=\"addPercentageOptions()\" matTooltip=\"Target a percentage of users\" \n *ngIf=\"!flagState.addButtonRenderState.hasPercentageOnlyRule\">+ %</div>\n </div>\n</div>\n\n<div cdkDropList (cdkDropListDropped)=\"onDrop($event)\" [cdkDropListDisabled]=\"flagState.readOnly\" [cdkDropListSortPredicate]=\"sortPredicate()\">\n <div *ngFor=\"let targetingRule of formGroup.controls.targetingRules.controls; trackBy: trackByIndex; let i = index\">\n <div class=\"targeting-rule-outer grow\" cdkDrag [cdkDragDisabled]=\"isDragDisabled(targetingRule)\"\n [cdkDragData]=\"targetingRule\">\n <div class=\"drag-handle\">\n <div *ngIf=\"!isDragDisabled(targetingRule)\" cdkDragHandle matTooltip=\"Drag here to reorder\"\n matTooltipPosition=\"above\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n <div class=\"white-box grow\">\n <app-targeting-rule class=\"grow\" [formGroup]=\"targetingRule\" [segments]=\"segments\"\n [flagState]=\"flagState\" [targetingRuleIndex]=\"i\"\n (removedAllRules)=\"remove(i)\" [featureFlagLimitations]=\"featureFlagLimitations\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n [canManageSegments]=\"canManageSegments\" (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [showPercentageEvaluationAttribute]=\"showPercentageEvaluationAttribute\"\n [percentageEvaluationAttribute]=\"formGroup.controls.percentageEvaluationAttribute.value\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisiteReferences()\"></app-targeting-rule>\n <div class=\"delete\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove targeting rule\" (click)=\"remove(i)\"\n *ngIf=\"!flagState.readOnly\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"targeting-rule-outer\" *ngIf=\"flagState.addButtonRenderState.addRuleButtonTracker[i]?.showAddRuleButtons && !flagState.readOnly\">\n <div class=\"grow vertical-center add-box pad-bottom pad-top center-shift\">\n <div class=\"add-btn add-if\" \n [matMenuTriggerFor]=\"ormenu\" \n matTooltip=\"Add targeting rule\" \n *ngIf=\"!flagState.readOnly\">+ OR</div>\n <div class=\"add-btn add-if pad-left\" (click)=\"addPercentageOptions()\" \n matTooltip=\"Target a percentage of users\" \n *ngIf=\"!flagState.addButtonRenderState.hasPercentageOnlyRule\">+ %</div>\n </div>\n </div>\n <div class=\"or-chip\" *ngIf=\"flagState.addButtonRenderState.addRuleButtonTracker[i]?.showOrChip\">\n <div class=\"chip-container\">\n <mat-chip-set>\n <mat-chip disabled>OR</mat-chip>\n </mat-chip-set>\n </div>\n </div>\n <div class=\"or-chip\" *ngIf=\"flagState.addButtonRenderState.addRuleButtonTracker[i]?.renderSeparationArea\"></div>\n </div>\n</div>\n\n<div class=\"targeting-rule-outer\">\n <div class=\"drag-handle\"></div>\n <div class=\"white-box grow side-padd vertical-center\">\n <div class=\"chip-container fixed-width\" [ngClass]=\"flagState.addButtonRenderState.hasPercentageOnlyRule ? 'fixed-width-wide' : ''\">\n <mat-chip-set matTooltipPosition=\"above\" [matTooltip]=\"getChipTooltip()\">\n <mat-chip disabled>{{getChipText()}}</mat-chip>\n </mat-chip-set>\n </div>\n <app-feature-flag-value class=\"value grow\" [flagState]=\"flagState\"\n tooltip=\"Served value\" [formGroup]=\"formGroup.controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n </div>\n</div>\n\n<mat-menu #ormenu class=\"menu-long-text-or\">\n <a mat-menu-item (click)=\"addUserCondition()\"><mat-icon>track_changes</mat-icon>Add rule with user condition</a>\n <a mat-menu-item (click)=\"addSegmentCondition()\"><mat-icon>pie_chart</mat-icon>Add rule with segment condition</a>\n <div matTooltip=\"There's no other flag in the Config to select as a prerequisite.\"\n [matTooltipDisabled]=\"flagState.prerequisiteSettings.length > 0\">\n <a mat-menu-item (click)=\"addPrerequisiteFlagCondition()\" [disabled]=\"!flagState.prerequisiteSettings.length\">\n <mat-icon>account_tree</mat-icon>Add rule with flag condition (prerequisite)\n </a>\n </div>\n</mat-menu>","import { Component, Inject, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormHelper, FormGenerator } from '../../../bootstrap';\n\n@Component({\n selector: 'app-percentage-evaluation-attribute-dialog',\n templateUrl: './percentage-evaluation-attribute-dialog.component.html',\n styleUrls: ['./percentage-evaluation-attribute-dialog.component.scss']\n})\nexport class PercentageEvaluationAttributeDialogComponent implements OnInit {\n\n FormHelper = FormHelper;\n readOnly: boolean;\n defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n formControl: FormControl<string>;\n\n constructor(\n public dialogRef: MatDialogRef<PercentageEvaluationAttributeDialogComponent>,\n private formGenerator: FormGenerator,\n @Inject(MAT_DIALOG_DATA) public data: { percentageEvaluationAttribute: string, readOnly: boolean }\n ) {\n }\n\n ngOnInit(): void {\n this.formControl = this.formGenerator.generatePercentageEvaluationAttributeFormControl(this.data.percentageEvaluationAttribute, this.data.readOnly)\n }\n\n close() {\n this.dialogRef.close();\n }\n\n attributeChanged(event: Event): void {\n const value = (event.target as HTMLSelectElement).value;\n if (this.defaultComparisonAttributes.indexOf(value) === 0) {\n if (this.formControl.value !== null) {\n this.formControl.setValue(null);\n this.formControl.markAsDirty();\n }\n } else if (this.isDefault(value)) {\n if (this.formControl.value !== value) {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n }\n } else if (this.formControl.value !== '') {\n this.formControl.setValue('');\n this.formControl.markAsDirty();\n }\n }\n\n isDefault(attribute: string): boolean {\n return attribute === null || this.defaultComparisonAttributes.indexOf(attribute) !== -1;\n }\n\n set() {\n if (this.formControl.invalid) {\n this.formControl.markAsTouched();\n return;\n }\n\n this.dialogRef.close({ percentageEvaluationAttribute: this.formControl.value });\n }\n}\n\n","<h1 mat-dialog-title>Change percentage evaluation attribute</h1>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n When evaluating percentage-based user targeting, ConfigCat should use a specific user attribute as the basis for\n determining whether a user falls within the targeted percentage group.</p>\n\n <div class=\"components\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Evaluation attribute</mat-label>\n <mat-hint>This attribute will be used in all percentage based targeting within this feature flag.</mat-hint>\n <select matNativeControl (change)=\"attributeChanged($event)\" [disabled]=\"formControl.disabled\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes; let i = index\"\n [selected]=\"comparisonAttribute === formControl.value || (formControl.value === null && i === 0)\">\n {{comparisonAttribute}}</option>\n <option [selected]=\"!isDefault(formControl.value)\">\n Custom\n </option>\n </select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"isDefault(formControl.value)\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\">\n <mat-error *ngIf=\"formControl.invalid\">\n {{FormHelper.getErrorMessage(formControl)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\"> <a\n href=\"https://configcat.com/docs/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\" rel=\"noopener noreferrer\">\n Read more </a> about percentage-based targeting in the docs.</p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n</div>","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { IDependeeSetting } from '../../../_models/setting-value-formgroup';\nimport { Router } from '@angular/router';\nimport { PublicApiService } from '../../../_services';\n\n@Component({\n selector: 'app-dependees-dialog',\n templateUrl: './dependees-dialog.component.html'\n})\nexport class DependeesDialogComponent {\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: {\n dependees: IDependeeSetting[],\n name: string,\n organizationId: string,\n productId: string,\n configId: string,\n environmentId: string\n },\n\n private router: Router,\n private publicApiService: PublicApiService\n ) { }\n\n getDashboardUrl(settingId: number) {\n const urlTree = this.router.createUrlTree(['v2', this.data.organizationId,\n this.data.productId, this.data.configId, this.data.environmentId, settingId]);\n return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);\n }\n}\n","<h1 mat-dialog-title>Prerequisite references</h1>\n<div mat-dialog-content>\n <p>\n <strong>{{data.name}}</strong> is the prerequisite of the following feature flags:\n </p>\n <ul *ngFor=\"let dependee of data.dependees\">\n <li><a [href]=\"getDashboardUrl(dependee.settingId)\" rel=\"noopener noreferrer\" target=\"_blank\">{{dependee.name}}\n ({{dependee.key}})</a></li>\n </ul>\n</div>\n\n<div mat-dialog-actions>\n <button type=\"button\" mat-stroked-button mat-dialog-close>Close</button>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n MessagingService, ISegment,\n IPrerequisiteChanged, IFeatureFlagLimitations, UpdateSettingValueForm,\n FormGenerator, SettingType, IFlagState\n} from '../../bootstrap';\nimport { PercentageEvaluationAttributeDialogComponent } from './percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component';\nimport { Router } from '@angular/router';\nimport { PublicApiService } from '../../_services';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { DependeesDialogComponent } from './dependees-dialog/dependees-dialog.component';\n\nexport interface IGlance {\n ruleText: string\n percentageText: string\n class: string\n}\n\n@Component({\n selector: 'app-feature-flag',\n templateUrl: './feature-flag.component.html',\n styleUrls: [\n './feature-flag.component.scss'\n ]\n})\nexport class FeatureFlagComponent {\n @Input() formGroup: FormGroup<UpdateSettingValueForm>;\n @Input() flagState: IFlagState;\n @Input() segments: ISegment[];\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() hasOtherEnvironment: boolean;\n @Input() environmentName = \"\";\n @Input() showEnvironmentName = false;\n @Input() deleteSettingText = 'Delete setting';\n @Input() canDeleteSetting = false;\n\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n\n @Output() expandedChanged = new EventEmitter<boolean>();\n @Output() deleteSettingRequested = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter<IPrerequisiteChanged>();\n @Output() recalcAddButtons = new EventEmitter();\n\n constructor(\n private dialog: MatDialog,\n private messagingService: MessagingService,\n private formGenerator: FormGenerator,\n private router: Router,\n private publicApiService: PublicApiService,\n private clipboard: Clipboard) {\n }\n\n setExpanded(expanded: boolean) {\n this.expandedChanged.emit(expanded);\n }\n\n deleteSetting() {\n this.deleteSettingRequested.emit({ setting: this.flagState.settingValue.setting });\n }\n\n keyCopied() {\n this.messagingService.showSuccessSnack('Copied.');\n }\n\n subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n\n changePercentageEvaluationAttribute() {\n if (this.flagState.readOnly) {\n return;\n }\n\n const dialogRef = this.dialog.open(PercentageEvaluationAttributeDialogComponent, {\n width: '500px',\n data: {\n percentageEvaluationAttribute: this.formGroup.controls.percentageEvaluationAttribute.value,\n readOnly: this.flagState.readOnly\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result && result.percentageEvaluationAttribute !== this.formGroup.controls.percentageEvaluationAttribute.value) {\n this.formGroup.controls.percentageEvaluationAttribute.setValue(result.percentageEvaluationAttribute);\n this.formGroup.controls.percentageEvaluationAttribute.updateValueAndValidity();\n this.formGroup.controls.percentageEvaluationAttribute.markAsDirty();\n this.formGroup.controls.percentageEvaluationAttribute.markAsTouched();\n }\n });\n }\n\n getGlance(): IGlance {\n if (this.formGroup.controls.targetingRules.length === 0 || this.flagState.panelExpanded) {\n return null;\n }\n\n const glance: IGlance = { ruleText: this.getRuleText(), percentageText: '', class: 'default' }\n\n const hasTrueRule = this.formGroup.controls.targetingRules.controls.some(r => r.controls.value?.controls?.boolValue?.value === true);\n const lastFormulaTerm = this.formGroup.controls.targetingRules.controls[this.formGroup.controls.targetingRules.controls.length - 1];\n if (this.formGenerator.isPercentageOnlyTargetingRule(lastFormulaTerm)) {\n if (this.flagState.settingValue.setting.settingType === SettingType.Boolean) {\n const boolRule = lastFormulaTerm.controls.percentageOptions.controls.filter(p => p.controls.value.controls?.boolValue?.value)[0];\n if (boolRule.controls.percentage.value > 0) {\n glance.percentageText = 'ON for ' + boolRule.controls.percentage.value + '%';\n glance.class = 'on';\n }\n else {\n glance.percentageText = 'OFF (%)';\n glance.class = hasTrueRule ? 'on' : 'off'\n }\n } else {\n glance.percentageText = lastFormulaTerm.controls.percentageOptions.controls.map(p => p.controls.percentage.value + '%').join(' / ');\n glance.class = 'other';\n }\n } else {\n switch (this.flagState.settingValue.setting.settingType) {\n case SettingType.Double:\n glance.percentageText = this.formGroup.controls.defaultValue.value.doubleValue?.toString() ?? '';\n break;\n case SettingType.Int:\n glance.percentageText = this.formGroup.controls.defaultValue.value.intValue?.toString() ?? '';\n break;\n case SettingType.String:\n glance.percentageText = this.formGroup.controls.defaultValue.value.stringValue;\n break;\n case SettingType.Boolean:\n glance.percentageText = this.formGroup.controls.defaultValue.value.boolValue === true ? 'ON' : 'OFF';\n break;\n }\n\n if (this.flagState.settingValue.setting.settingType === SettingType.Boolean) {\n glance.class = this.formGroup.controls.defaultValue.value.boolValue === true || hasTrueRule ? 'on' : 'off';\n } else {\n glance.class = 'other';\n }\n }\n\n return glance;\n }\n\n getRuleText(): string {\n const count = this.formGroup.controls.targetingRules.controls.filter(tr => !this.formGenerator.isPercentageOnlyTargetingRule(tr)).length;\n if (count === 0) {\n return '';\n }\n\n return '+ ' + count + ' rule' + (count > 1 ? 's' : '');\n }\n\n copyDirectLink() {\n try {\n this.clipboard.copy(this.getDashboardUrl());\n this.messagingService.showSuccessSnack(\"Copied direct link to clipboard.\");\n } catch {\n this.messagingService.showSuccessSnack(\"Clipboard unavailable.\");\n }\n }\n\n getDashboardUrl() {\n const urlTree = this.router.createUrlTree(['v2', this.flagState.settingValue.config.product.organization.organizationId,\n this.flagState.settingValue.config.product.productId, this.flagState.settingValue.config.configId, this.flagState.settingValue.environment.environmentId, this.flagState.settingValue.setting.settingId]);\n return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);\n }\n\n openDependeesDialog() {\n this.dialog.open(DependeesDialogComponent, {\n data: {\n dependees: this.flagState.dependeeSettings,\n name: this.flagState.settingValue.setting.name,\n organizationId: this.flagState.settingValue.config.product.organization.organizationId,\n productId: this.flagState.settingValue.config.product.productId,\n configId: this.flagState.settingValue.config.configId,\n environmentId: this.flagState.settingValue.environment.environmentId\n }\n });\n }\n}\n","<div class=\"outer\">\n <div class=\"mat-elevation-z0 feature-flag\" [ngClass]=\"{'invalid': formGroup.touched && formGroup.invalid}\">\n <div class=\"expandcollapse\">\n <div *ngIf=\"flagState.panelExpanded\" matTooltip=\"Collapse\" (click)=\"setExpanded(!flagState.panelExpanded)\"\n class=\"btn\">\n <mat-icon>arrow_drop_up</mat-icon>\n </div>\n <div *ngIf=\"!flagState.panelExpanded\" matTooltip=\"Expand\" (click)=\"setExpanded(!flagState.panelExpanded)\"\n class=\"btn\">\n <mat-icon>arrow_drop_down</mat-icon>\n </div>\n </div>\n <div class=\"header\">\n <div class=\"top\">\n <div class=\"left\">\n <div class=\"name-key\">\n <span class=\"name\"\n [matTooltip]=\"flagState.settingValue.setting.name\">{{flagState.settingValue.setting.name}}</span>\n <span *ngIf=\"showEnvironmentName\" class=\"environment-name\" [matTooltip]=\"environmentName\">({{environmentName}})</span>\n <span class=\"key-outer\" matTooltip=\"Copy feature flag key to clipboard\"\n [cdkCopyToClipboard]=\"flagState.settingValue.setting.key\"\n (cdkCopyToClipboardCopied)=\"keyCopied()\">\n <span class=\"key\">\n <code>{{flagState.settingValue.setting.key}}</code>\n </span>\n <mat-icon>content_copy</mat-icon>\n </span>\n </div>\n </div>\n\n <div class=\"right\">\n <div class=\"line\">\n <button type=\"button\" class=\"prereq-button\" mat-icon-button\n *ngIf=\"flagState.dependeeSettings && flagState.dependeeSettings.length\"\n [track]=\"['prerequisite button click', 'Feature flags & settings V2 page']\"\n [matTooltip]=\"'Prerequisite of '+flagState.dependeeSettings.length+' other flag(s).'\"\n (click)=\"openDependeesDialog()\">\n <mat-icon>account_tree</mat-icon>\n </button>\n <button type=\"button\" class=\"more-button\" [matMenuTriggerFor]=\"moreMenu\" mat-icon-button\n [track]=\"['more menu button click', 'Feature flags & settings V2 page']\" matTooltip=\"More\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"hint-container\">\n <div class=\"hint\" *ngIf=\"flagState.settingValue.setting.hint\">\n {{flagState.settingValue.setting.hint}}\n </div>\n\n <app-feature-flag-value class=\"glance\"\n [class.text-glance]=\"flagState.settingValue.setting.settingType !== 'boolean'\"\n *ngIf=\"!flagState.panelExpanded && !formGroup.controls.targetingRules.length\"\n [flagState]=\"flagState\" [formGroup]=\"formGroup.controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations\" tooltip=\"Served value\"></app-feature-flag-value>\n\n <div class=\"quick-glance\" *ngIf=\"getGlance() as glance\" (click)=\"setExpanded(!flagState.panelExpanded)\">\n <div class=\"container\" [class]=\"glance.class\">\n <div class=\"quick-glance-item\" *ngIf=\"glance.percentageText\">{{glance.percentageText}}</div>\n <div class=\"quick-glance-item\" *ngIf=\"glance.ruleText\">{{glance.ruleText}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"flagState.panelExpanded\">\n <div class=\"eval-formula-wrapper\">\n <app-evaluation-formula [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n [featureFlagLimitations]=\"featureFlagLimitations\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\" [canManageSegments]=\"false\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [showPercentageEvaluationAttribute]=\"!!formGroup.controls.percentageEvaluationAttribute.value\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttribute()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit($event)\"\n (recalcAddButtons)=\"recalcAddButtons.emit()\">\n </app-evaluation-formula>\n </div>\n </ng-container>\n </div>\n</div>\n<mat-menu #moreMenu=\"matMenu\">\n <div mat-menu-item data-robot=\"history\" (click)=\"changePercentageEvaluationAttribute()\"\n [track]=\"['change percentage attribute click', 'Feature flags & settings V2 page']\"\n [disabled]=\"this.flagState.readOnly\">\n <mat-icon>percent</mat-icon>\n <span>Change percentage attribute</span>\n </div>\n <a href=\"{{getDashboardUrl()}}\" target=\"_blank\" rel=\"noopener noreferrer\">\n <div mat-menu-item data-robot=\"history\">\n <mat-icon>open_in_new</mat-icon>\n <span>Open in ConfigCat</span>\n </div>\n </a>\n <div mat-menu-item data-robot=\"renameSetting\"\n [track]=\"['copy direct link click', 'Feature flags & settings V2 page']\" (click)=\"copyDirectLink()\">\n <mat-icon>content_copy</mat-icon>\n <span>Copy direct link</span>\n </div>\n <div *ngIf=\"canDeleteSetting\">\n <mat-divider></mat-divider>\n <div mat-menu-item data-robot=\"deleteSetting\"\n [track]=\"['delete feature flag click', 'Feature flags & settings V2 page']\" (click)=\"deleteSetting()\">\n <mat-icon>delete_outline</mat-icon>\n <span>{{deleteSettingText}}</span>\n </div>\n </div>\n</mat-menu>","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { BaseComponent } from '../base/base.component';\nimport { SegmentListModel, SettingDataModel, SettingFormulaModel, UpdateEvaluationFormulaModel } from 'ng-configcat-publicapi';\nimport { IFlagState } from '../_models/flag-state';\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { IPrerequisiteSetting, TargetingRuleForm, UpdateSettingValueForm } from '../_models/setting-value-formgroup';\nimport { PublicApiService } from '../_services';\nimport { Subscription, forkJoin, throwError } from 'rxjs';\nimport { ConfirmationDialogComponent } from '../dialogs/confirmation-dialog/confirmation-dialog';\nimport { ReasonDialogComponent } from '../dialogs/reason-dialog/reason-dialog.component';\nimport { FormGenerator } from '../_services/form-generator';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { SaveSnackbarComponent } from '../dialogs/save-snackbar/save-snackbar.component';\nimport { DeleteSettingModel } from '../_models';\nimport { RerouteDialogComponent } from '../bootstrap';\n\n@Component({\n selector: 'configcat-feature-flag-item',\n templateUrl: './feature-flag-item.component.html',\n styleUrls: ['./feature-flag-item.component.scss']\n})\nexport class FeatureFlagItemComponent extends BaseComponent implements OnInit, OnDestroy {\n\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n @Input() settingId!: number;\n\n @Input() canDeleteSetting = true;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = true;\n\n @Output() deleteSettingRequested = new EventEmitter();\n\n @Output() loadSucceeded = new EventEmitter();\n @Output() loadFailed = new EventEmitter();\n @Output() saveSucceeded = new EventEmitter();\n @Output() saveFailed = new EventEmitter();\n @Output() expandedStateChanged = new EventEmitter();\n @Output() formValuesChanged = new EventEmitter();\n\n segments!: SegmentListModel[];\n dashboardBasePath: string;\n loading = true;\n\n formGroup: FormGroup<UpdateSettingValueForm>;\n formValueChangesSubscription: Subscription;\n\n settings: SettingDataModel[];\n\n flagState: IFlagState;\n\n settingFormula: SettingFormulaModel;\n prerequisiteSettings: IPrerequisiteSetting[];\n\n showFeedBackMessage = false;\n\n hasSettingValues = false;\n\n hasOtherEnvironment = false;\n\n constructor(\n private formGenerator: FormGenerator,\n private dialog: MatDialog,\n private snackBar: MatSnackBar,\n publicApiService: PublicApiService\n ) {\n super(publicApiService);\n this.dashboardBasePath = publicApiService.getDashboardBasePath();\n }\n\n\n ngOnInit() {\n this.reloadSettingValues();\n }\n\n ngOnDestroy(): void {\n this.unsubscribeFormValueChangesSubscription();\n }\n\n reloadSettingValues() {\n\n this.loading = true;\n this.createSettingValuesV2Service()\n\n forkJoin({\n segments: this.createSegmentsService().getSegments(this.productId),\n settings: this.createSettingsService().getSettings(this.configId),\n settingFormula: this.createSettingValuesV2Service().getSettingValueV2(this.environmentId, this.settingId)\n }).subscribe(result => {\n this.settings = result.settings;\n this.prerequisiteSettings = this.settings.map(sv => {\n return {\n settingId: sv.settingId,\n key: sv.key,\n name: sv.name,\n settingType: sv.settingType\n }\n });\n this.segments = result.segments;\n this.handleFetchedSettingValues(result.settingFormula);\n this.loading = false;\n this.loadSucceeded.emit();\n },\n (error) => {\n this.loadFailed.emit(error);\n return throwError(error);\n });\n }\n\n handleFetchedSettingValues(model: SettingFormulaModel) {\n this.settingFormula = model;\n // when we have less we had previously\n this.flagState = {\n addButtonRenderState: {\n hasPercentageOnlyRule: false,\n renderTopAddButtons: false,\n addRuleButtonTracker: []\n },\n readOnly: model.readOnly,\n dependeeSettings: [],\n settingValue: model,\n panelExpanded: true,\n prerequisiteSettings: this.getAvailablePrerequisiteSettings(model.setting.settingId)\n }\n\n this.unsubscribeFormValueChangesSubscription();\n\n this.createFormGroupFromState(this.settingFormula);\n\n this.formValueChangesSubscription = this.formGroup.valueChanges.subscribe(() => {\n this.formValuesChanged.emit();\n })\n\n this.recalcAddButtons();\n this.recalcPrerequisites();\n }\n\n unsubscribeFormValueChangesSubscription() {\n if (this.formValueChangesSubscription) {\n this.formValueChangesSubscription.unsubscribe();\n this.formValueChangesSubscription = null;\n }\n }\n\n private createFormGroupFromState(model: SettingFormulaModel) {\n this.formGroup = this.formGenerator.generateSettingValuesFormGroup(model, model.readOnly, this.prerequisiteSettings, model.featureFlagLimitations);\n }\n\n getAvailablePrerequisiteSettings(settingId: number) {\n return this.prerequisiteSettings.filter(ds => ds.settingId !== settingId);\n }\n\n revert() {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'Revert to last saved state?',\n body: 'All changes will be lost.',\n yesButtonLabel: 'Revert',\n noButtonLabel: 'No'\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'yes') {\n this.revertDirtyValuesFromState();\n }\n });\n }\n\n revertDirtyValuesFromState() {\n\n if (this.formGroup.dirty) {\n this.formGroup.setControl('defaultValue',\n this.formGenerator.generateValueFormGroup(this.settingFormula.defaultValue, this.settingFormula.setting.settingType, this.settingFormula.readOnly, this.settingFormula.featureFlagLimitations));\n this.formGroup.setControl('percentageEvaluationAttribute',\n new FormControl({ value: this.settingFormula.percentageEvaluationAttribute, disabled: this.settingFormula.readOnly }, { validators: [Validators.max(1000)] }),);\n this.formGroup.setControl('targetingRules',\n new FormArray<FormGroup<TargetingRuleForm>>(\n this.settingFormula.targetingRules.map(ft => this.formGenerator.generateTargetingRuleFormGroup(ft, this.settingFormula.setting.settingType, this.settingFormula.readOnly, this.prerequisiteSettings, this.settingFormula.featureFlagLimitations))\n ));\n this.recalcAddButtons();\n }\n\n this.formGroup.markAsPristine();\n this.formGroup.markAsUntouched();\n this.recalcPrerequisites();\n this.showFeedBackMessage = false;\n }\n\n submit() {\n if (!this.formGroup) {\n return;\n }\n\n if (!this.formGroup.valid) {\n this.showFeedBackMessage = true;\n this.formGroup.markAllAsTouched();\n return;\n }\n\n this.showFeedBackMessage = false;\n const value: UpdateEvaluationFormulaModel = {\n ...this.formGroup.getRawValue(),\n };\n\n this.updateSettingValues(value);\n }\n\n updateSettingValues(updateModel: UpdateEvaluationFormulaModel, reason: string = null) {\n\n this.createSettingValuesV2Service().replaceSettingValueV2(this.environmentId, this.settingId, updateModel, reason)\n .subscribe({\n next: settingValues => {\n this.handleFetchedSettingValues(settingValues);\n\n this.snackBar.openFromComponent(SaveSnackbarComponent, { duration: 5000, panelClass: 'green-snackbar' });\n this.saveSucceeded.emit();\n },\n error: (error) => {\n\n if (error.status === 400 && error.error && error.error.Reason && error.error.Reason[0] === 'Reason required.') {\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\n width: '450px'\n });\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result && result.button === 'save' && result.reason) {\n this.updateSettingValues(updateModel, result.reason);\n }\n });\n return;\n }\n\n if (error.status === 400 && error.error && error.error.SegmentCondition && error.error.SegmentCondition[0] === 'Segment not found.') {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n width: '450px',\n data: {\n title: 'Cannot save feature flags',\n body: 'A segment referenced by one of your feature flags has been deleted. Reload the config to see its latest state, apply your changes and try the save again.',\n yesButtonLabel: 'Reload',\n hideNoButton: true\n }\n });\n dialogRef.afterClosed()\n .subscribe(() => {\n this.reloadSettingValues();\n });\n return;\n }\n\n if (error.status === 400 && error.error && ('' + error.error).startsWith('Circular dependency detected.')) {\n const errorMessage = ('' + error.error).slice('Circular dependency detected.'.length + 1);\n this.dialog.open(ConfirmationDialogComponent, {\n width: '450px',\n data: {\n title: 'Cannot save feature flags.',\n body: 'Circular dependency detected between the following feature flags:<p>' + errorMessage + '</p>Please <strong>eliminate the circular dependency</strong> before saving your feature flags.',\n yesButtonLabel: 'I understand',\n hideNoButton: true\n }\n });\n return;\n }\n\n this.formGroup.setErrors({ internalServerError: 'Internal server error' });\n this.formGroup.markAsTouched();\n this.showFeedBackMessage = true;\n this.saveFailed.emit();\n }\n });\n }\n\n onDeleteSettingRequested(setting) {\n if (this.formGroup.dirty) {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'Discard changes?',\n body: 'You have unsaved feature flag changes. If you continue, unsaved changes will be lost.',\n yesButtonLabel: 'Discard changes',\n noButtonLabel: 'No'\n }\n });\n\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result === 'yes') {\n this.revertDirtyValuesFromState();\n this.deleteSettingInternal(setting);\n }\n });\n } else {\n this.deleteSettingInternal(setting);\n }\n }\n\n private deleteSettingInternal(setting) {\n this.deleteSettingRequested.emit(<DeleteSettingModel>{ config: this.settingFormula.config, environment: this.settingFormula.environment, setting: setting.setting })\n }\n\n subscriptionLimitReachedCalled() {\n this.dialog.open(RerouteDialogComponent, {\n data: {\n title: 'You have reached the limits of your plan',\n body: ` Upgrade your plan or join our <a href=\"https://configcat.com/referrals\" target=\"_blank\" rel=\"noopener noreferrer\">referral program</a> to increase your limits.`,\n yesButtonLabel: `See plans`,\n yesButtonLink: this.dashboardBasePath + \"/organization/plans\",\n noButtonLabel: `Close`\n }\n });\n }\n\n addSegmentConditionRequestedWithoutSegments() {\n this.dialog.open(RerouteDialogComponent, {\n data: {\n title: 'There are no segments in this product yet.',\n body: `Go ahead to the ConfiCat Dashboard and create your first user segment before adding it to a targeting rule.`,\n yesButtonLabel: `Go to the dashboard`,\n yesButtonLink: this.dashboardBasePath + \"/product/\" + this.productId + \"/segments\"\n }\n });\n }\n\n trackByIndex(index: number): any {\n return index;\n }\n\n recalcPrerequisites(): void {\n const settingValue = this.settingFormula;\n this.flagState.dependeeSettings = this.settings.filter(s => settingValue.settingIdsWherePrerequisite?.includes(s.settingId))\n .map(s => { return { key: s.key, name: s.name, settingId: s.settingId } });\n return;\n }\n\n recalcAddButtons(): void {\n const state = this.flagState;\n const group = this.formGroup;\n\n state.addButtonRenderState.renderTopAddButtons = !group.controls.targetingRules.controls.length ||\n this.hasOnlyPercentageRule(group);\n\n if (!group.controls.targetingRules.controls.length) {\n state.addButtonRenderState.addRuleButtonTracker = [];\n state.addButtonRenderState.hasPercentageOnlyRule = false;\n } else {\n const hasPercOnly = state.addButtonRenderState.hasPercentageOnlyRule = group.controls.targetingRules.controls.length > 0\n && this.formGenerator.isPercentageOnlyTargetingRule(group.controls.targetingRules.controls[group.controls.targetingRules.controls.length - 1]);\n state.addButtonRenderState.addRuleButtonTracker = group.controls.targetingRules.controls.map((item, i, rules) => {\n const isLastRule = i === group.controls.targetingRules.controls.length - 1;\n const isBeforeLast = i === group.controls.targetingRules.controls.length - 2;\n return {\n showAddRuleButtons: hasPercOnly ? i === rules.length - 2 : i === rules.length - 1,\n showOrChip: hasPercOnly ? i < rules.length - 2 : i < rules.length - 1,\n renderSeparationArea: this.formGenerator.isPercentageOnlyTargetingRule(item) ||\n (this.settingFormula.readOnly && (isLastRule || (hasPercOnly && isBeforeLast))),\n }\n });\n }\n }\n\n hasOnlyPercentageRule(group: FormGroup<UpdateSettingValueForm>): boolean {\n return group.controls.targetingRules.controls.length === 1 &&\n this.formGenerator.isPercentageOnlyTargetingRule(group.controls.targetingRules.controls[0])\n }\n\n expandedChanged(expandedState: boolean): void {\n this.flagState.panelExpanded = expandedState;\n this.expandedStateChanged.emit();\n }\n}\n","<div class=\"container\">\n <ng-container *ngIf=\"!loading\">\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" id=\"feature-flag-form\">\n <div [ngClass]=\"{'invalid-flag': formGroup.invalid}\">\n <app-feature-flag [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n [featureFlagLimitations]=\"settingFormula.featureFlagLimitations\" [hasOtherEnvironment]=\"false\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisites()\" (recalcAddButtons)=\"recalcAddButtons()\"\n (expandedChanged)=\"expandedChanged($event)\"\n [showEnvironmentName]=\"showEnvironmentName\" [environmentName]=\"settingFormula.environment.name\"\n [deleteSettingText]=\"deleteSettingText\" [canDeleteSetting]=\"canDeleteSetting\">\n </app-feature-flag>\n </div>\n <div class=\"save\" *ngIf=\"!settingFormula.readOnly && formGroup?.dirty\">\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [class.animate]=\"formGroup.dirty\"\n [track]=\"['save & publish click', 'feature flags and settings']\">\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\n </button>\n <button type=\"button\" class=\"revert-button\" mat-stroked-button (click)=\"revert()\"\n [track]=\"['revert click', 'feature flags and settings']\">\n <span>Revert</span>\n </button>\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\n <span>Something went wrong and we could not save your settings. You can try again or <a\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact\n us.</a></span>\n </div>\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\n <span>Oh no! A feature flag has invalid or missing data.&nbsp;</span>\n </div>\n </div>\n </div>\n </form>\n\n </ng-container>\n</div>","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { SettingItemComponent } from './setting-item/setting-item.component';\nimport { SettingSelectComponent } from './selects/setting-select/setting-select.component';\nimport { ProductSelectComponent } from './selects/product-select/product-select.component';\nimport { ConfigSelectComponent } from './selects/config-select/config-select.component';\nimport { EnvironmentSelectComponent } from './selects/environment-select/environment-select.component';\nimport { Configuration } from './configuration';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AuthorizationComponent } from './authorization/authorization.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { ExpandDialogComponent } from './dialogs/expand-dialog/expand-dialog.component';\nimport { ReasonDialogComponent } from './dialogs/reason-dialog/reason-dialog.component';\nimport { SaveSnackbarComponent } from './dialogs/save-snackbar/save-snackbar.component';\nimport { RolloutPercentageItemsComponent } from './setting-list/setting/rollout-percentage-items/rollout-percentage-items.component';\nimport { RolloutRulesComponent } from './setting-list/setting/rollout-rules/rollout-rules.component';\nimport { ValueComponent } from './setting-list/setting/value/value.component';\nimport { SettingListComponent } from './setting-list/setting-list.component';\nimport { SettingComponent } from './setting-list/setting/setting.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipModule } from '@angular/material/tooltip';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { RouterModule } from '@angular/router';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { BaseComponent } from './base/base.component';\nimport { BaseSelectComponent } from './base/base-select.component';\nimport { ApiModule } from 'ng-configcat-publicapi';\nimport { InputDisplayNormalizerDirective } from './_directives/input-display-normalizer.directive';\nimport { DeleteSettingDialogComponent } from './dialogs/delete-setting-dialog/delete-setting-dialog.component';\nimport { EvaluationFormulaComponent } from './v2/feature-flag/evaluation-formula/evaluation-formula.component';\nimport { FeatureFlagValueComponent } from './v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component';\nimport { PopoutTextEditorDialogComponent } from './v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component';\nimport { ConditionChipComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component';\nimport { ConditionsComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component';\nimport { PrerequisiteFlagConditionComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component';\nimport { SegmentConditionComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component';\nimport { ComparatorDialogComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component';\nimport { PopoutListEditorDialogComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component';\nimport { UserConditionComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component';\nimport { PercentageOptionsComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component';\nimport { TargetingRuleComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component';\nimport { FeatureFlagComponent } from './v2/feature-flag/feature-flag.component';\nimport { PercentageEvaluationAttributeDialogComponent } from './v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component';\nimport { ConfirmationDialogComponent } from './dialogs/confirmation-dialog/confirmation-dialog';\nimport { FormGenerator } from './_services/form-generator';\nimport { ComparisonValueListHelper } from './_services/comparison-value-list-helper';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { TrackingDirective } from './_services/tracking.directive';\nimport { ClipboardModule } from \"@angular/cdk/clipboard\";\nimport { AceEditorComponent } from './ace-editor/ace-editor.component';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatRadioModule } from \"@angular/material/radio\";\nimport { FeatureFlagItemComponent } from './v2/feature-flag-item.component';\nimport { MessagingService } from './_services/messaging.service';\nimport { DateTimePickerComponent } from './v2/feature-flag/date-time-picker/date-time-picker.component';\nimport { DependeesDialogComponent } from './v2/feature-flag/dependees-dialog/dependees-dialog.component';\nimport { InfoDialogComponent } from './dialogs/info-dialog/info-dialog';\nimport { RerouteDialogComponent } from './dialogs/reroute-dialog/reroute-dialog';\n\n@NgModule({\n declarations: [\n BaseComponent,\n BaseSelectComponent,\n ProductSelectComponent,\n ConfigSelectComponent,\n EnvironmentSelectComponent,\n SettingSelectComponent,\n SettingItemComponent,\n AuthorizationComponent,\n SettingListComponent,\n SettingComponent,\n RolloutPercentageItemsComponent,\n RolloutRulesComponent,\n ValueComponent,\n ReasonDialogComponent,\n SaveSnackbarComponent,\n ExpandDialogComponent,\n DeleteSettingDialogComponent,\n InputDisplayNormalizerDirective,\n FeatureFlagComponent,\n EvaluationFormulaComponent,\n FeatureFlagValueComponent,\n TargetingRuleComponent,\n PercentageOptionsComponent,\n ConditionsComponent,\n UserConditionComponent,\n SegmentConditionComponent,\n PrerequisiteFlagConditionComponent,\n PopoutListEditorDialogComponent,\n PopoutTextEditorDialogComponent,\n PercentageEvaluationAttributeDialogComponent,\n ConditionChipComponent,\n ComparatorDialogComponent,\n ConfirmationDialogComponent,\n InfoDialogComponent,\n TrackingDirective,\n AceEditorComponent,\n FeatureFlagItemComponent,\n DateTimePickerComponent,\n DependeesDialogComponent,\n RerouteDialogComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n BrowserAnimationsModule,\n MatFormFieldModule,\n MatOptionModule,\n MatSelectModule,\n MatButtonModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n MatChipsModule,\n MatAutocompleteModule,\n DragDropModule,\n RouterModule,\n MatSnackBarModule,\n MatDialogModule,\n MatMenuModule,\n ApiModule,\n MatButtonToggleModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatDividerModule,\n ClipboardModule,\n MatPaginatorModule,\n MatTableModule,\n MatRadioModule\n ],\n exports: [\n AuthorizationComponent,\n ProductSelectComponent,\n ConfigSelectComponent,\n EnvironmentSelectComponent,\n SettingSelectComponent,\n SettingItemComponent,\n InputDisplayNormalizerDirective,\n DeleteSettingDialogComponent,\n FeatureFlagItemComponent\n ],\n providers: [\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: { disableTooltipInteractivity: true },\n },\n\n FormGenerator,\n ComparisonValueListHelper,\n MessagingService\n ]\n})\nexport class NgConfigCatPublicApiUIModule {\n public static forRoot(configurationFactory: () => Configuration): ModuleWithProviders<NgConfigCatPublicApiUIModule> {\n return {\n ngModule: NgConfigCatPublicApiUIModule,\n providers: [{ provide: Configuration, useFactory: configurationFactory }]\n };\n }\n\n constructor() { }\n}\n","/*\n * Public API Surface of ng-configcat-publicapi-ui\n */\n\nexport * from './lib/ng-configcat-publicapi-ui.module';\nexport * from './lib/_directives';\nexport * from './lib/_services';\nexport * from './lib/setting-item/setting-item.component';\nexport * from './lib/authorization/authorization.component';\nexport * from './lib/selects/product-select/product-select.component';\nexport * from './lib/selects/config-select/config-select.component';\nexport * from './lib/selects/environment-select/environment-select.component';\nexport * from './lib/selects/setting-select/setting-select.component';\nexport * from './lib/dialogs/delete-setting-dialog/delete-setting-dialog.component';\nexport * from './lib/v2/feature-flag-item.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PublicApiConfiguration","i2.Configuration","i1.PublicApiService","i1","i2","i3","i8","i4","i5","i6.InputDisplayNormalizerDirective","i6.ValueComponent","i2.SettingListFormHelper","i9","i11","i12.ValueComponent","i13.InputDisplayNormalizerDirective","i1.SettingListFormHelper","i6","i7.RolloutPercentageItemsComponent","i8.RolloutRulesComponent","i9.ValueComponent","i8.SettingComponent","i2.SettingListComponent","i7","i2.PublicApiService","UserComparator","i9.AceEditorComponent","i2.FormGenerator","i10.InputDisplayNormalizerDirective","i1.FormGenerator","i9.InputDisplayNormalizerDirective","i10.FeatureFlagValueComponent","ComparatorGroup","i10","i12","i15.AceEditorComponent","i1.ComparisonValueListHelper","i1.MessagingService","i14.ConditionChipComponent","i15.DateTimePickerComponent","i9.ConditionChipComponent","i10.TrackingDirective","i7.FeatureFlagValueComponent","i8.ConditionChipComponent","i8.UserConditionComponent","i9.SegmentConditionComponent","i10.PrerequisiteFlagConditionComponent","i8.FeatureFlagValueComponent","i9.PercentageOptionsComponent","i10.ConditionsComponent","i11.TargetingRuleComponent","i2.MessagingService","i4.PublicApiService","i13.EvaluationFormulaComponent","i14.FeatureFlagValueComponent","i15.TrackingDirective","i9.FeatureFlagComponent"],"mappings":"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"}