ng-configcat-publicapi-ui 5.3.13 → 5.3.14
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-configcat-publicapi-ui.mjs","sources":["../../../projects/ng-configcat-publicapi-ui/src/lib/_services/public-api.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_models/user-comparator.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/dialogs/notification-snack/notification-snack.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/notification-snack/notification-snack.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/messaging.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/comparison-value-list-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/custom-validators.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-generator.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/theme.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/setting-list-form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/ng-configcat-publicapi-ui.module.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_directives/input-display-normalizer.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/base/base.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/concurrent-delete-dialog/concurrent-delete-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/concurrent-delete-dialog/concurrent-delete-dialog.component.html","../../../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/_directives/digit-only.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_directives/autofocus.directive.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/dialogs/popout-editor/popout-editor.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/popout-editor/popout-editor.component.html","../../../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/_directives/deselect.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/rollout-rules/rollout-rules.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/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/authorization/authorization.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/authorization/authorization.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/base/base-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/product-select/product-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/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/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/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/_services/tracking.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_models/setting-form.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/error-handler.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/variation-helper.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/loader/loader.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/loader/loader.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/copyable-value/copyable-value.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/copyable-value/copyable-value.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_directives/pasted-data-trimmer.directive.ts","../../../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/dialogs/variations-dialog/variations-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/variations-dialog/variations-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/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/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/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/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/_services/date-helper.ts","../../../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/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/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/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/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/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/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/link-feature-flag/link-feature-flag.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/link-feature-flag/link-feature-flag.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/box/box.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/box/box.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/create-feature-flag/create-feature-flag.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/create-feature-flag/create-feature-flag.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/create-config/create-config.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/create-config/create-config.component.html","../../../projects/ng-configcat-publicapi-ui/src/public-api.ts","../../../projects/ng-configcat-publicapi-ui/src/ng-configcat-publicapi-ui.ts"],"sourcesContent":["import { HttpClient } from \"@angular/common/http\";\nimport { inject, Injectable } from \"@angular/core\";\nimport {\n ConfigsService,\n EnvironmentsService,\n FeatureFlagSettingValuesService,\n FeatureFlagSettingValuesV2Service,\n FeatureFlagsSettingsService,\n IntegrationLinksService,\n MeService,\n OrganizationsService,\n ProductsService,\n Configuration as PublicApiConfiguration,\n SegmentsService,\n} from \"ng-configcat-publicapi\";\nimport { CONFIGCAT_PUBLICAPI_UI_CONFIGURATION } from \"../ng-configcat-publicapi-ui.module\";\n\nconst defaultPublicApiBasePath = \"https://api.configcat.com\";\nconst defaultDashboardBasePath = \"https://app.configcat.com\";\n\n@Injectable()\nexport class PublicApiService {\n private readonly httpClient = inject(HttpClient);\n private readonly configuration = inject(CONFIGCAT_PUBLICAPI_UI_CONFIGURATION, { optional: true });\n\n createMeService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new MeService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createProductsService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new ProductsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createConfigsService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new ConfigsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createEnvironmentsService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new EnvironmentsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createSettingsService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new FeatureFlagsSettingsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createSettingValuesV2Service(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new FeatureFlagSettingValuesV2Service(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createSettingValuesService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new FeatureFlagSettingValuesService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createIntegrationLinksService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new IntegrationLinksService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createSegmentsService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new SegmentsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createOrganizationService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new OrganizationsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n getDashboardBasePath() {\n return this.configuration?.dashboardBasePath ?? defaultDashboardBasePath;\n }\n}\n","import { HttpErrorResponse } from \"@angular/common/http\";\nimport { FormArray, FormControl, FormGroup } from \"@angular/forms\";\n\nexport const percentageRegex = \"^[0-9]*$\";\nexport const wholeNumberRegex = \"^[-+]?[0-9]\\\\d*$\";\nexport const featureFlagKeyRegex = \"^[a-zA-Z]+[a-zA-Z0-9_-]*$\";\n\nexport const defaultErrorMessageTypes = [\n \"email\",\n \"compare\",\n \"password\",\n \"minLength\",\n \"maxLength\",\n \"ascii\",\n \"unique\",\n \"url\",\n \"certificate\",\n];\n\nexport class FormHelper {\n\n public static handleErrors(formGroup: FormGroup, error: Error) {\n if (error instanceof HttpErrorResponse) {\n switch (error.status) {\n case 400: {\n let unknownFieldName = false;\n\n for (const fieldName in error.error) {\n const errorMessage = this.getHttpErrorResponseMessage(error, fieldName);\n\n if (errorMessage) {\n let jsonFieldName = fieldName;\n if (jsonFieldName.length > 0) {\n jsonFieldName = jsonFieldName[0].toLowerCase() + jsonFieldName.slice(1);\n }\n\n if (Object.prototype.hasOwnProperty.call(formGroup.controls, 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 }\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({\n serverSide: \"Something went wrong on our side. This is not your fault. Please try again.\",\n });\n }\n }\n\n public static getHttpErrorResponseMessage(error: HttpErrorResponse, fieldName: string): string | undefined {\n if (!error.error || !Object.prototype.hasOwnProperty.call(error.error, fieldName)) {\n return;\n }\n\n const errorObjectValue = error.error as Record<string, { Errors: { ErrorMessage: string }[] }>;\n if (\n Object.prototype.hasOwnProperty.call(errorObjectValue, fieldName)\n && Object.prototype.hasOwnProperty.call(errorObjectValue[fieldName], \"Errors\")\n && errorObjectValue[fieldName].Errors.length > 0\n ) {\n return errorObjectValue[fieldName].Errors.map(e => e.ErrorMessage).join(\", \");\n }\n\n const errorStringValue = error.error as Record<string, string | string[]>;\n const errorValue = errorStringValue[fieldName];\n if (!errorValue) {\n return;\n }\n if (Array.isArray(errorValue)) {\n return errorValue[0];\n }\n return errorValue;\n }\n\n public static getErrorMessage(control: FormControl | FormGroup | FormArray, hint = \"\"): string {\n if (control.valid) {\n return \"\";\n }\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(\"matTimepickerParse\")) {\n return \"Invalid time value.\";\n }\n\n for (const defaultErrorMessageType of defaultErrorMessageTypes) {\n if (control.hasError(defaultErrorMessageType)) {\n const errorMessage = (control.errors![defaultErrorMessageType] as { message: string }).message;\n if (errorMessage) {\n return errorMessage;\n }\n }\n }\n\n if (control.hasError(\"required\")) {\n if (control instanceof FormArray) {\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(\"validateUniqueVariationsByValue\")) {\n return \"Each served value must be unique.\";\n } else if (control.hasError(\"validateUniqueVariationsByNameAndValue\")) {\n return \"The combination of the name and value must be unique.\";\n }\n\n if (control.hasError(\"emails\")) {\n return control.errors![\"emails\"] as string;\n }\n\n if (control.hasError(\"minlength\")) {\n if (control instanceof FormArray) {\n return (\n \"The list must contain min \"\n + (control.errors![\"minlength\"] as { requiredLength: number }).requiredLength\n + \" items.\"\n );\n } else {\n return (\n \"The field must be at least \"\n + (control.errors![\"minlength\"] as { requiredLength: number }).requiredLength\n + \" characters long.\"\n );\n }\n }\n\n if (control.hasError(\"maxlength\")) {\n if (control instanceof FormArray) {\n return (\n \"The list must contain max \"\n + (control.errors![\"maxlength\"] as { requiredLength: number }).requiredLength\n + \" items.\"\n );\n } else {\n return (\n \"The field must be at max \"\n + (control.errors![\"maxlength\"] as { requiredLength: number }).requiredLength\n + \" characters long.\"\n );\n }\n }\n\n if (control.hasError(\"whitespace\")) {\n return \"Can not contain whitespaces.\";\n }\n\n if (control.hasError(\"serverSide\")) {\n return control.errors![\"serverSide\"] as string;\n }\n\n if (control.hasError(\"pattern\")) {\n const patternError = control.errors![\"pattern\"] as { requiredPattern: string | RegExp };\n if (patternError.requiredPattern === percentageRegex) {\n return \"The percentage value must be a whole number.\";\n }\n\n if (patternError.requiredPattern === wholeNumberRegex) {\n return \"Please enter a whole number e.g. 42.\";\n }\n\n if (patternError.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\n if (control.hasError(\"alreadyExists\")) {\n return control.errors![\"alreadyExists\"] as string;\n }\n\n if (control.hasError(\"validateSemVer\") || control.hasError(\"validateSemVerList\")) {\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\"] as { min: number }).min - 1) + \".\";\n }\n\n if (control.hasError(\"max\")) {\n return \"The value must be less than \" + ((control.errors![\"max\"] as { max: number }).max + 1) + \".\";\n }\n\n return \"\";\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: string | number | bigint): 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: string): string {\n const numberValue = FormHelper.normalizeNumber(value);\n // NOTE: `NaN` is not considered finite.\n return isFinite(numberValue) ? numberValue + \"\" : \"\";\n }\n\n}\n","import { UserComparator } from \"ng-configcat-publicapi\";\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 function 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:\n return true;\n default:\n return false;\n }\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 { DatePipe } from \"@angular/common\";\nimport { inject, Injectable } from \"@angular/core\";\nimport { NativeDateAdapter } from \"@angular/material/core\";\n\n@Injectable()\nexport class AppDateAdapter extends NativeDateAdapter {\n private readonly datepipe = inject(DatePipe);\n\n override format(date: Date, displayFormat: Record<string, string>): string {\n if (!displayFormat?.[\"hour\"]) {\n return this.datepipe.transform(date, \"yyyy. MM. dd\") ?? \"\";\n } else if (!displayFormat?.[\"year\"]) {\n return this.datepipe.transform(date, \"HH:mm\") ?? \"\";\n } else {\n return this.datepipe.transform(date, \"yyyy. MM. dd HH:mm\") ?? \"\";\n }\n }\n}\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\n\nexport interface ConfirmationDialogData {\n title: string;\n body: string;\n yesButtonLabel?: string;\n cancelButtonLabel?: string;\n yesButtonColor?: string;\n hideCancelButton?: boolean;\n}\n\n@Component({\n selector: \"app-confirmation-dialog\",\n templateUrl: \"./confirmation-dialog.html\",\n imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, MatButton],\n})\nexport class ConfirmationDialogComponent {\n dialogRef = inject<MatDialogRef<ConfirmationDialogComponent, string>>(MatDialogRef);\n data = inject<ConfirmationDialogData>(MAT_DIALOG_DATA);\n\n yes() {\n this.dialogRef.close(\"yes\");\n }\n\n cancel() {\n this.dialogRef.close(\"cancel\");\n }\n}\n","<h1 mat-dialog-title>{{ data.title }}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<div mat-dialog-actions>\n <button\n type=\"button\"\n mat-flat-button\n data-robot=\"dialogYes\"\n [color]=\"data.yesButtonColor ? data.yesButtonColor : 'primary'\"\n (click)=\"yes()\">\n {{ data.yesButtonLabel ? data.yesButtonLabel : \"Yes\" }}\n </button>\n @if (!data.hideCancelButton) {\n <button type=\"button\" mat-stroked-button data-robot=\"dialogNo\" (click)=\"cancel()\">\n {{ data.cancelButtonLabel ? data.cancelButtonLabel : \"Cancel\" }}\n </button>\n }\n</div>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\n\n@Component({\n selector: \"app-reroute-dialog\",\n templateUrl: \"./reroute-dialog.html\",\n styleUrls: [\"./reroute-dialog.scss\"],\n imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, MatButton],\n})\nexport class RerouteDialogComponent {\n dialogRef = inject<MatDialogRef<RerouteDialogComponent, string>>(MatDialogRef);\n data = inject<DialogData>(MAT_DIALOG_DATA);\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}\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 class=\"hidden-link\" target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"data.yesButtonLink\">\n <button\n type=\"button\"\n style=\"margin-right: 10px\"\n mat-flat-button\n data-robot=\"dialogYes\"\n [color]=\"data.buttonColor ? data.buttonColor : 'primary'\"\n (click)=\"yes()\">\n {{ data.yesButtonLabel ? data.yesButtonLabel : \"Yes\" }}\n </button>\n </a>\n @if (!data.hideNoButton) {\n <button type=\"button\" mat-stroked-button data-robot=\"dialogNo\" (click)=\"cancel()\">\n {{ data.noButtonLabel ? data.noButtonLabel : \"Cancel\" }}\n </button>\n }\n</div>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { NgClass } from \"@angular/common\";\nimport { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\n\nexport interface InfoDialogData {\n title: string;\n iconName?: string;\n iconColor?: string;\n body: string;\n primaryButtonLabel?: string;\n secondaryButtonLabel?: string;\n secondaryButtonAction?: () => void;\n}\n\nexport type InfoDialogResult = \"ok\" | \"nok\";\n\n@Component({\n selector: \"app-info-dialog\",\n templateUrl: \"./info-dialog.html\",\n styleUrls: [\"./info-dialog.scss\"],\n imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatIcon, MatDialogActions, MatButton, NgClass],\n})\nexport class InfoDialogComponent {\n dialogRef = inject<MatDialogRef<InfoDialogComponent, InfoDialogResult>>(MatDialogRef);\n data = inject<InfoDialogData>(MAT_DIALOG_DATA);\n\n readonly iconCssClass?: string;\n\n constructor() {\n const data = this.data;\n\n if (data.iconName) {\n this.iconCssClass = \"icon-\" + data.iconName.replace(\"_\", \"-\");\n }\n }\n\n ok() {\n this.dialogRef.close(\"ok\");\n }\n\n secondaryButtonAction() {\n this.data.secondaryButtonAction?.();\n this.dialogRef.close(\"nok\");\n }\n}\n","<h1 mat-dialog-title>{{ data.title }}</h1>\n<div mat-dialog-content [class.content-with-icon]=\"!!data.iconName\">\n @if (!!data.iconName) {\n <mat-icon class=\"icon\" [ngClass]=\"iconCssClass\" [style.color]=\"data.iconColor\">{{ data.iconName }}</mat-icon>\n }\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"ok()\">{{ data.primaryButtonLabel ?? \"OK\" }}</button>\n @if (data.secondaryButtonLabel) {\n <button type=\"button\" mat-stroked-button (click)=\"secondaryButtonAction()\">{{ data.secondaryButtonLabel }}</button>\n }\n</div>\n","import { Component, DestroyRef, ElementRef, inject, viewChild } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MAT_SNACK_BAR_DATA, MatSnackBarAction, MatSnackBarActions, MatSnackBarLabel, MatSnackBarRef } from \"@angular/material/snack-bar\";\nimport { timer } from \"rxjs\";\n\nexport enum NotificationSnackColor {\n Green,\n Yellow,\n Red,\n Blue,\n}\n\nexport interface NotificationSnackData {\n color: NotificationSnackColor;\n message: string;\n}\n\n@Component({\n selector: \"app-notification-snack\",\n templateUrl: \"./notification-snack.component.html\",\n styleUrls: [\"./notification-snack.component.scss\"],\n imports: [MatIconButton, MatSnackBarAction, MatSnackBarActions, MatSnackBarLabel, MatIcon],\n})\nexport class NotificationSnackComponent {\n snackBarRef = inject<MatSnackBarRef<NotificationSnackComponent>>(MatSnackBarRef);\n data = inject<NotificationSnackData>(MAT_SNACK_BAR_DATA);\n\n NotificationSnackColor = NotificationSnackColor;\n readonly progressBar = viewChild.required<ElementRef<HTMLElement>>(\"progressBar\");\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.snackBarRef.afterOpened().pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n const duration = this.snackBarRef.containerInstance.snackBarConfig.duration ?? 0;\n if (duration > 0) {\n const tick = 500;\n let step = duration;\n timer(0, tick)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n step -= tick;\n const progress = ((step / duration) * 100);\n if (progress < 0) {\n this.progressBar().nativeElement.style.width = \"0%\";\n return;\n }\n this.progressBar().nativeElement.style.width = `${progress}%`;\n });\n }\n });\n }\n}\n","<div\n class=\"snack-container\"\n [class.green]=\"data.color === NotificationSnackColor.Green\"\n [class.yellow]=\"data.color === NotificationSnackColor.Yellow\"\n [class.red]=\"data.color === NotificationSnackColor.Red\"\n [class.blue]=\"data.color === NotificationSnackColor.Blue\">\n <div\n class=\"content\"\n matSnackBarLabel\n [class.error]=\"data.color === NotificationSnackColor.Red\"\n [class.warn]=\"data.color === NotificationSnackColor.Yellow\"\n [class.success]=\"data.color === NotificationSnackColor.Green\"\n [class.info]=\"data.color === NotificationSnackColor.Blue\">\n <div [innerHTML]=\"data.message\"></div>\n </div>\n\n <span matSnackBarActions>\n <button\n type=\"button\"\n class=\"dismiss\"\n mat-icon-button\n matSnackBarAction\n [class.green]=\"data.color === NotificationSnackColor.Green\"\n [class.yellow]=\"data.color === NotificationSnackColor.Yellow\"\n [class.red]=\"data.color === NotificationSnackColor.Red\"\n [class.blue]=\"data.color === NotificationSnackColor.Blue\"\n (click)=\"snackBarRef.dismissWithAction()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n\n <div class=\"progress-container\">\n <div\n #progressBar\n class=\"progress-bar\"\n [class.green]=\"data.color === NotificationSnackColor.Green\"\n [class.yellow]=\"data.color === NotificationSnackColor.Yellow\"\n [class.red]=\"data.color === NotificationSnackColor.Red\"\n [class.blue]=\"data.color === NotificationSnackColor.Blue\"></div>\n </div>\n</div>\n","import { inject, Injectable } from \"@angular/core\";\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\nimport { NotificationSnackColor, NotificationSnackComponent } from \"../dialogs/notification-snack/notification-snack.component\";\n\n@Injectable()\nexport class MessagingService {\n private readonly snackBar = inject(MatSnackBar);\n\n showErrorSnack(message = \"Something went wrong.\", durationMs = 60000) {\n this.snackBar.openFromComponent(NotificationSnackComponent, {\n duration: durationMs,\n data: {\n color: NotificationSnackColor.Red,\n message: `Ooops. ${message} Please try again or contact us.`,\n },\n });\n }\n\n showSuccessSnack(message = \"Success.\", durationMs = 2500) {\n this.snackBar.openFromComponent(NotificationSnackComponent, {\n duration: durationMs,\n data: {\n color: NotificationSnackColor.Green,\n message: message,\n },\n });\n }\n\n showWarningSnack(message = \"Success.\", durationMs = 5000) {\n this.snackBar.openFromComponent(NotificationSnackComponent, {\n duration: durationMs,\n data: {\n color: NotificationSnackColor.Yellow,\n message: message,\n },\n });\n }\n\n dismissCurrentSnack() {\n this.snackBar.dismiss();\n }\n}\n","import Papa from \"papaparse\";\nimport { IComparisonValueListModel } from \"../bootstrap\";\n\nexport interface ComparisonValueListParseResult {\n error?: string;\n comparisonValueList: IComparisonValueListModel[];\n}\n\nexport function formatValuesAndHintAsJson(comparisonValueList: IComparisonValueListModel[]): string {\n return JSON.stringify(comparisonValueList, null, 2);\n}\n\nexport function formatValuesAndHintAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueListItem => {\n return [\n formatCsvStringValue(comparisonValueListItem.value),\n formatCsvStringValue(comparisonValueListItem.hint ?? \"\"),\n ].join(\",\");\n });\n return data.join(\"\\r\\n\");\n}\n\nexport function formatValuesAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueList =>\n formatCsvStringValue(comparisonValueList.value)\n );\n return data.join(\",\");\n}\n\nexport function formatCsvStringValue(value: string): string {\n if (!value) {\n return \"\";\n }\n const escaped = value.replaceAll('\"', '\"\"');\n return '\"' + escaped + '\"';\n}\n\nexport function parseValuesAndHintsFromJson(value: string): ComparisonValueListParseResult {\n if (value === \"\") {\n return { comparisonValueList: [] };\n }\n try {\n const parsed: IComparisonValueListModel[] = JSON.parse(value) as IComparisonValueListModel[];\n return { comparisonValueList: parsed.filter(v => !!v.value) };\n } catch {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n}\n\nexport function 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) {\n return { comparisonValueList: [] };\n }\n return {\n comparisonValueList: parseResult.data\n .map(p => ({ value: p[0], hint: p[1] }) as IComparisonValueListModel)\n .filter(v => !!v.value),\n };\n}\n\nexport function 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) {\n return { comparisonValueList: [] };\n }\n return {\n comparisonValueList: parseResult.data\n .flat()\n .map(p => ({ value: p }) as IComparisonValueListModel)\n .filter(v => !!v.value),\n };\n}\n","import { AbstractControl, FormArray, FormControl, FormGroup, ValidationErrors, Validators } from \"@angular/forms\";\nimport { valid } from \"semver\";\nimport { PredefinedVariationFormGroup } from \"../_models/setting-form\";\n\nexport function validateSemVer(c: FormControl<string>): ValidationErrors | null {\n if (valid(c.value) === null) {\n return {\n validateSemVer: {\n valid: false,\n },\n };\n }\n return null;\n}\n\nexport function validateSemVerList(c: FormControl<string>): ValidationErrors | null {\n if (!c.value) {\n return {\n validateSemVerList: {\n valid: false,\n },\n };\n }\n\n const semvers = c.value.split(\",\").map(s => s.trim());\n if (semvers.find(s => s && s !== \"\" && valid(s) === null)) {\n return {\n validateSemVerList: {\n valid: false,\n },\n };\n }\n\n return null;\n}\n\nexport function validateNumberNan(c: AbstractControl): ValidationErrors | null {\n const numberControl = c as FormControl<number | null> | null;\n if (numberControl && (numberControl.value === null || isNaN(numberControl.value))) {\n return {\n validateNumberNan: {\n valid: false,\n },\n };\n }\n return null;\n}\n\nexport function validateEmptyString(c: AbstractControl): ValidationErrors | null {\n const stringControl = c as FormControl<string> | null;\n if (stringControl?.value === \"\") {\n return {\n required: true,\n };\n }\n return null;\n}\n\nexport function noWhitespaceValidator(c: AbstractControl): ValidationErrors | null {\n return typeof c.value !== \"string\" || !c.value.match(/\\s/g) ? null : { whitespace: true };\n}\n\nexport function nonEmptyStringValidator(c: AbstractControl): ValidationErrors | null {\n let errors = Validators.required(c);\n if (!errors && typeof c.value === \"string\" && /^\\s*$/.test(c.value)) {\n errors = { required: true };\n }\n return errors;\n}\n\n// eslint-disable-next-line sonarjs/no-invariant-returns\nexport function validateUniqueVariations(c: AbstractControl): ValidationErrors | null {\n const control = c as FormArray<FormGroup<PredefinedVariationFormGroup>>;\n if (!control) {\n return null;\n }\n\n control.controls.forEach(current => {\n if (control.controls.filter(c => c.controls.valueForComparison.value === current.controls.valueForComparison.value).length > 1) {\n addError(getValueControl(current), \"validateUniqueVariationsByValue\");\n } else {\n removeError(getValueControl(current), \"validateUniqueVariationsByValue\");\n }\n\n if (control.controls.filter(c =>\n (c.controls.name.value ? c.controls.name.value : c.controls.valueForComparison.value) ===\n (current.controls.name.value ? current.controls.name.value : current.controls.valueForComparison.value)).length > 1) {\n if (current.controls.name.value) {\n addError(current.controls.name, \"validateUniqueVariationsByNameAndValue\");\n } else {\n addError(getValueControl(current), \"validateUniqueVariationsByNameAndValue\");\n }\n } else {\n removeError(current.controls.name, \"validateUniqueVariationsByNameAndValue\");\n removeError(getValueControl(current), \"validateUniqueVariationsByNameAndValue\");\n }\n });\n\n return null;\n}\n\nfunction addError(control: FormControl<boolean> | FormControl<string> | FormControl<string | null> | FormControl<number> | undefined, error: string) {\n if (!control) return;\n if (!control.hasError(error)) {\n const errors = { ...control.errors };\n errors[error] = { valid: false };\n control.setErrors(errors);\n control.markAsTouched();\n }\n}\n\nfunction removeError(control: FormControl<boolean> | FormControl<string> | FormControl<string | null> | FormControl<number> | undefined, error: string) {\n if (!control) return;\n if (control.hasError(error)) {\n const errors = { ...control.errors };\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete errors[error];\n control.setErrors(Object.keys(errors).length ? errors : null);\n }\n}\n\nfunction getValueControl(control: FormGroup<PredefinedVariationFormGroup>) {\n return control.controls.value.controls.boolValue\n ?? control.controls.value.controls.stringValue\n ?? control.controls.value.controls.intValue\n ?? control.controls.value.controls.doubleValue;\n}\n","import { AbstractControl, FormArray, FormControl, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\nimport { PredefinedVariationModel, SegmentComparator, UpdateEvaluationFormulaModel, ValueModel } from \"ng-configcat-publicapi\";\nimport { percentageRegex, wholeNumberRegex } from \"../_services/form-helper\";\nimport {\n ComparisonValueForm,\n ComparisonValueListForm,\n ConditionForm,\n IComparisonValueListModel,\n IComparisonValueModel,\n IConditionModel,\n IFeatureFlagLimitations,\n IPercentageOptionModel,\n IPrerequisiteFlagConditionModel,\n IPrerequisiteSetting,\n ISegmentConditionModel,\n ISettingValueModel,\n ITargetingRuleModel,\n IUserConditionModel,\n IValueModel,\n PercentageOptionForm,\n PrerequisiteComparator,\n PrerequisiteFlagConditionForm,\n SegmentConditionForm,\n SettingType,\n TargetingRuleForm,\n UpdateSettingValueForm,\n UserComparator,\n UserComparatorType,\n UserConditionForm,\n ValueForm,\n} from \"../bootstrap\";\nimport { validateEmptyString, validateNumberNan, validateSemVer } from \"./custom-validators\";\n\nexport function generateSettingValuesFormGroup(\n model: ISettingValueModel,\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<UpdateSettingValueForm> {\n return new FormGroup<UpdateSettingValueForm>({\n defaultValue: generateValueFormGroup(\n model.defaultValue,\n model.setting.settingType,\n model.setting.predefinedVariations,\n readOnly,\n featureFlagLimitations\n ),\n percentageEvaluationAttribute: generatePercentageEvaluationAttributeFormControl(\n model.percentageEvaluationAttribute,\n readOnly\n ),\n targetingRules: new FormArray<FormGroup<TargetingRuleForm>>(\n model.targetingRules.map(ft =>\n generateTargetingRuleFormGroup(\n ft,\n model.setting.settingType,\n model.setting.predefinedVariations,\n readOnly,\n settings,\n featureFlagLimitations\n )\n )\n ),\n });\n}\n\nexport function generatePercentageEvaluationAttributeFormControl(percentageEvaluationAttribute: string | null, readOnly: boolean) {\n return new FormControl<string | null>(\n { value: percentageEvaluationAttribute, disabled: readOnly },\n { validators: [validateEmptyString, Validators.maxLength(1000)], nonNullable: true }\n );\n}\n\nexport function generateTargetingRuleFormGroup(\n model: ITargetingRuleModel,\n settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<TargetingRuleForm> {\n const conditions = new FormArray<FormGroup<ConditionForm>>(\n model.conditions.map(tr => 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 =>\n generatePercentageOptionFormGroup(pr, settingType, predefinedVariations, readOnly, featureFlagLimitations)\n ),\n [validatePercentageSum]\n ),\n });\n } else if (model.value) {\n return new FormGroup<TargetingRuleForm>({\n conditions,\n value: generateValueFormGroup(model.value, settingType, predefinedVariations, readOnly, featureFlagLimitations),\n });\n }\n\n throw Error(\"Invalid model\");\n}\n\nexport function generateTargetingRuleWithEmptyPercentageOptions(\n settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<TargetingRuleForm> {\n return generateTargetingRuleFormGroup(\n {\n conditions: [],\n percentageOptions: getEmptyPercentageOptions(settingType, predefinedVariations, featureFlagLimitations),\n value: null,\n },\n settingType,\n predefinedVariations,\n readOnly,\n settings,\n featureFlagLimitations\n );\n}\n\nexport function getEmptyPercentageOptions(settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n featureFlagLimitations: IFeatureFlagLimitations\n): IPercentageOptionModel[] {\n if (predefinedVariations.length) {\n const predefinedVariationsToAdd = predefinedVariations.slice(0, Math.min(predefinedVariations.length, featureFlagLimitations.maxPercentageOptionCount));\n const percentage = Math.trunc(100 / predefinedVariationsToAdd.length);\n const firstPercentage = 100 - percentage * (predefinedVariationsToAdd.length - 1);\n return predefinedVariationsToAdd\n .map((v, index) =>\n ({\n percentage: index === 0 ? firstPercentage : percentage,\n value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: v.predefinedVariationId },\n })\n );\n }\n switch (settingType) {\n case SettingType.Boolean:\n return [\n { percentage: 50, value: { boolValue: true, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null } },\n { percentage: 50, value: { boolValue: false, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null } },\n ];\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return [\n { percentage: 50, value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null } },\n { percentage: 50, value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null } },\n ];\n default:\n throw new Error(\"Invalid SettingType\");\n }\n}\n\nexport function generatePercentageOptionFormGroup(\n model: IPercentageOptionModel,\n settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<PercentageOptionForm> {\n return new FormGroup<PercentageOptionForm>({\n percentage: new FormControl<number>(\n { value: model.percentage, disabled: readOnly },\n {\n nonNullable: true,\n validators: [\n validateNumberNan,\n Validators.required,\n Validators.min(0),\n Validators.max(100),\n Validators.pattern(percentageRegex),\n ],\n }\n ),\n value: generateValueFormGroup(\n model.value,\n settingType,\n predefinedVariations,\n readOnly || settingType === SettingType.Boolean,\n featureFlagLimitations\n ),\n });\n}\n\nexport function generateConditionFormGroup(\n model: IConditionModel,\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<ConditionForm> {\n if (model.userCondition) {\n return new FormGroup<ConditionForm>({\n userCondition: generateUserConditionFormGroup(model.userCondition, readOnly, featureFlagLimitations),\n });\n } else if (model.segmentCondition) {\n return new FormGroup<ConditionForm>({\n segmentCondition: generateSegmentConditionFormGroup(model.segmentCondition, readOnly),\n });\n } else if (model.prerequisiteFlagCondition) {\n return new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: generatePrerequisiteFlagConditionFormGroup(\n model.prerequisiteFlagCondition,\n readOnly,\n settings,\n featureFlagLimitations\n ),\n });\n } else {\n throw new Error(\"\");\n }\n}\n\nexport function generateUserConditionFormGroup(\n value: IUserConditionModel,\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<UserConditionForm> {\n return new FormGroup<UserConditionForm>({\n comparisonAttribute: new FormControl(\n { value: value.comparisonAttribute, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required, Validators.maxLength(1000)] }\n ),\n comparator: new FormControl(\n { value: value.comparator, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n comparisonValue: generateComparisonValueFormGroup(\n value.comparisonValue,\n value.comparator,\n readOnly,\n featureFlagLimitations\n ),\n });\n}\n\nexport function generateSegmentConditionFormGroup(\n value: ISegmentConditionModel,\n readOnly: boolean\n): FormGroup<SegmentConditionForm> {\n return new FormGroup<SegmentConditionForm>({\n segmentId: new FormControl(\n { value: value.segmentId, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n comparator: new FormControl(\n { value: value.comparator, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n });\n}\n\nexport function generatePrerequisiteFlagConditionFormGroup(\n value: IPrerequisiteFlagConditionModel,\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<PrerequisiteFlagConditionForm> {\n const setting = settings.find(s => s.settingId === value.prerequisiteSettingId);\n if (!setting) {\n throw new Error(\"Could not find prerequisite setting\");\n }\n if (!setting.predefinedVariations.length && 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.boolValue) {\n // If the prerequisiteComparisonValue is false somehow (e.g. Public Management API), we should negate the comparator.\n comparator =\n comparator === PrerequisiteComparator.Equals\n ? PrerequisiteComparator.DoesNotEqual\n : PrerequisiteComparator.Equals;\n }\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl(\n { value: value.prerequisiteSettingId, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n comparator: new FormControl(\n { value: comparator, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n prerequisiteComparisonValue: generateValueFormGroup(\n { boolValue: true, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null },\n setting.settingType,\n setting.predefinedVariations,\n readOnly,\n featureFlagLimitations\n ),\n });\n } else {\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl(\n { value: value.prerequisiteSettingId, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n comparator: new FormControl(\n { value: value.comparator, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n prerequisiteComparisonValue: generateValueFormGroup(\n value.prerequisiteComparisonValue,\n setting.settingType,\n setting.predefinedVariations,\n readOnly,\n featureFlagLimitations\n ),\n });\n }\n}\n\nexport function generateEmptySegmentConditionFormGroup(\n): FormGroup<SegmentConditionForm> {\n return new FormGroup<SegmentConditionForm>({\n segmentId: new FormControl<string | null>(\n null,\n { nonNullable: true, validators: [Validators.required] }\n ),\n comparator: new FormControl<SegmentComparator>(\n SegmentComparator.IsIn,\n { nonNullable: true, validators: [Validators.required] }\n ),\n });\n}\n\nexport function generateEmptyPrerequisiteFlagConditionFormGroup(\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<PrerequisiteFlagConditionForm> {\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl<number | null>(null, {\n nonNullable: true,\n validators: [Validators.required],\n }),\n comparator: new FormControl(PrerequisiteComparator.Equals, {\n nonNullable: true,\n validators: [Validators.required],\n }),\n prerequisiteComparisonValue: generateValueFormGroup(\n { boolValue: true, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null },\n SettingType.Boolean,\n [],\n false,\n featureFlagLimitations\n ),\n });\n}\n\nexport function 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\nexport function generateComparisonValueListFormGroup(\n listValue: IComparisonValueListModel,\n readOnly: boolean,\n validators: ValidatorFn[],\n index: number\n) {\n return new FormGroup<ComparisonValueListForm>({\n value: new FormControl({ value: listValue.value, disabled: readOnly }, { nonNullable: true, validators }),\n hint: new FormControl(\n { value: listValue.hint, disabled: readOnly },\n { validators: [Validators.maxLength(1500)], nonNullable: true }\n ),\n // The index column is generated on the first generation by default or by the getNextIndex() if a value is added\n // to the listvalue. It is required so we can delete the rows on the popout editor.\n index: new FormControl({ value: index, disabled: true }, { nonNullable: true }),\n });\n}\n\nexport function generateComparisonValueFormGroup(\n value: IComparisonValueModel,\n comparator: UserComparator,\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<ComparisonValueForm> {\n switch (getComparisonValueType(comparator)) {\n case UserComparatorType.String:\n return new FormGroup<ComparisonValueForm>({\n stringValue: new FormControl(\n { value: value.stringValue ?? \"\", disabled: readOnly },\n { nonNullable: true, validators: getComparisonValueStringValidators(featureFlagLimitations) }\n ),\n });\n case UserComparatorType.StringList:\n return new FormGroup<ComparisonValueForm>({\n listValue: generateComparisonValueListValueArray(\n value.listValue ?? [],\n readOnly,\n featureFlagLimitations,\n getComparisonValueStringListItemValidators(featureFlagLimitations)\n ),\n });\n\n case UserComparatorType.Number:\n return new FormGroup<ComparisonValueForm>({\n doubleValue: new FormControl(\n { value: value.doubleValue ?? 0, disabled: readOnly },\n\n {\n nonNullable: true,\n validators: [\n validateNumberNan,\n Validators.required,\n Validators.min(-Number.MAX_VALUE),\n Validators.max(Number.MAX_VALUE),\n ],\n }\n ),\n });\n\n case UserComparatorType.Semver:\n return new FormGroup<ComparisonValueForm>({\n stringValue: new FormControl(\n { value: value.stringValue ?? \"\", disabled: readOnly },\n { nonNullable: true, validators: getComparisonValueSemverValidators(featureFlagLimitations) }\n ),\n });\n case UserComparatorType.SemverList:\n return new FormGroup<ComparisonValueForm>({\n listValue: generateComparisonValueListValueArray(\n value.listValue ?? [],\n readOnly,\n featureFlagLimitations,\n getComparisonValueSemverListItemValidators(featureFlagLimitations)\n ),\n });\n\n case UserComparatorType.DateTime:\n return new FormGroup<ComparisonValueForm>({\n doubleValue: new FormControl(\n { value: value.doubleValue ?? 0, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n });\n\n default:\n throw new Error(\"Invalid comparator\");\n }\n}\n\nexport function generateComparisonValueListValueArray(\n listValue: IComparisonValueListModel[],\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations,\n itemValidators: ValidatorFn[]\n) {\n return new FormArray<FormGroup<ComparisonValueListForm>>(\n listValue.map((lv, index) => {\n return generateComparisonValueListFormGroup(lv, readOnly, itemValidators, index);\n }),\n [\n Validators.required,\n Validators.minLength(1),\n Validators.maxLength(featureFlagLimitations.maxComparisonValueListLength),\n ]\n );\n}\n\nexport function getComparisonValueStringValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength)];\n}\n\nexport function getComparisonValueStringListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength)];\n}\n\nexport function getComparisonValueSemverValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength), validateSemVer];\n}\n\nexport function getComparisonValueSemverListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [\n Validators.required,\n Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength),\n validateSemVer,\n ];\n}\n\nexport function generateDefaultValue(settingType: SettingType, predefinedVariations: PredefinedVariationModel[]): IValueModel {\n if (predefinedVariations.length) {\n return { boolValue: null, intValue: null, stringValue: null, doubleValue: null, predefinedVariationId: predefinedVariations[0].predefinedVariationId };\n }\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: false, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null };\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null };\n default:\n throw new Error(\"Invalid SettingType\");\n }\n}\n\nexport function generatePrerequisiteDefaultValue(settingType: SettingType, predefinedVariations: PredefinedVariationModel[]): IValueModel {\n if (predefinedVariations.length) {\n return generateDefaultValue(settingType, predefinedVariations);\n }\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: true, intValue: null, stringValue: null, doubleValue: null, predefinedVariationId: null };\n case SettingType.String:\n return { boolValue: null, intValue: null, stringValue: \"\", doubleValue: null, predefinedVariationId: null };\n case SettingType.Int:\n return { boolValue: null, intValue: 0, stringValue: null, doubleValue: null, predefinedVariationId: null };\n case SettingType.Double:\n return { boolValue: null, intValue: null, stringValue: null, doubleValue: 0, predefinedVariationId: null };\n default:\n throw new Error(\"Invalid SettingType\");\n }\n}\n\nexport function generateDefaultValueFormGroup(\n settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<ValueForm> {\n return generateValueFormGroup(\n generateDefaultValue(settingType, predefinedVariations),\n settingType,\n predefinedVariations,\n readOnly,\n featureFlagLimitations\n );\n}\n\nexport function generateValueFormGroup(\n value: IValueModel,\n settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<ValueForm> {\n if (predefinedVariations.length) {\n return new FormGroup<ValueForm>({\n predefinedVariationId: new FormControl(\n { value: value.predefinedVariationId ?? predefinedVariations[0].predefinedVariationId, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n });\n }\n switch (settingType) {\n case SettingType.Boolean:\n return new FormGroup<ValueForm>({\n boolValue: new FormControl(\n { value: value.boolValue ?? false, disabled: readOnly },\n { nonNullable: true, validators: getValidatorsForSettingType(settingType, featureFlagLimitations) }\n ),\n });\n\n case SettingType.String:\n return new FormGroup<ValueForm>({\n stringValue: new FormControl(\n { value: value.stringValue ?? \"\", disabled: readOnly },\n { nonNullable: true, validators: getValidatorsForSettingType(settingType, featureFlagLimitations) }\n ),\n });\n\n case SettingType.Int:\n return new FormGroup<ValueForm>({\n intValue: new FormControl(\n { value: value.intValue ?? 0, disabled: readOnly },\n { nonNullable: true, validators: getValidatorsForSettingType(settingType, featureFlagLimitations) }\n ),\n });\n\n case SettingType.Double:\n return new FormGroup<ValueForm>({\n doubleValue: new FormControl(\n { value: value.doubleValue ?? 0, disabled: readOnly },\n { nonNullable: true, validators: getValidatorsForSettingType(settingType, featureFlagLimitations) }\n ),\n });\n\n default:\n throw new Error(\"Invalid SettingType\");\n }\n}\n\nexport function getComparisonValueType(comparator: UserComparator): UserComparatorType {\n switch (comparator) {\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\nexport function getValidatorsForSettingType(\n settingType: SettingType,\n featureFlagLimitations: IFeatureFlagLimitations\n): ValidatorFn[] {\n switch (settingType) {\n case SettingType.Int:\n return [\n validateNumberNan,\n Validators.required,\n Validators.min(-2147483648),\n Validators.max(2147483647),\n Validators.pattern(wholeNumberRegex),\n ];\n case SettingType.Double:\n return [\n validateNumberNan,\n Validators.required,\n Validators.min(-Number.MAX_VALUE),\n Validators.max(Number.MAX_VALUE),\n ];\n case SettingType.String:\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxStringFlagValueLength)];\n case SettingType.Boolean:\n return [Validators.required];\n default:\n return [];\n }\n}\n\nexport function isPercentageOnlyTargetingRule(formGroup: FormGroup<TargetingRuleForm>): boolean {\n return (\n !formGroup.controls.value\n && !formGroup.controls.conditions.length\n && !!formGroup.controls.percentageOptions?.length\n );\n}\n\nexport function addComparisonValueListValueItems(\n userComparator: UserComparator,\n listValueFormArray: FormArray<FormGroup<ComparisonValueListForm>>,\n comparisonValueList: IComparisonValueListModel[],\n featureFlagLimitations: IFeatureFlagLimitations\n) {\n const validators =\n getComparisonValueType(userComparator) === UserComparatorType.SemverList\n ? getComparisonValueSemverListItemValidators(featureFlagLimitations)\n : getComparisonValueStringListItemValidators(featureFlagLimitations);\n\n const maxIndex = getNextIndex(listValueFormArray);\n\n comparisonValueList.forEach((comparisonValueListItem, index) => {\n const formGroup = generateComparisonValueListFormGroup(\n comparisonValueListItem,\n false,\n validators,\n maxIndex + index\n );\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\nexport function validatePercentageSum(c: AbstractControl) {\n const formArray = c as FormArray<FormGroup<PercentageOptionForm>>;\n if (\n formArray.controls\n .map(i => i.controls.percentage.value)\n .reduce((a, b) => {\n return a + b;\n }, 0) !== 100\n ) {\n return {\n validatePercentageSum: {\n valid: false,\n },\n };\n }\n return null;\n}\n\nexport function getRawValue(formGroup: FormGroup<UpdateSettingValueForm>): UpdateEvaluationFormulaModel {\n return {\n defaultValue: getRawSettiongValue(formGroup.controls.defaultValue),\n percentageEvaluationAttribute: formGroup.controls.percentageEvaluationAttribute.value,\n targetingRules: formGroup.controls.targetingRules.controls.map(t => ({\n value: t.controls.value ? getRawSettiongValue(t.controls.value) : null,\n percentageOptions: t.controls.percentageOptions\n ? t.controls.percentageOptions.controls.map(p => ({\n percentage: p.controls.percentage.value,\n value: getRawSettiongValue(p.controls.value),\n }))\n : [],\n conditions: t.controls.conditions.controls.map(c => ({\n userCondition: c.controls.userCondition\n ? {\n comparisonAttribute: c.controls.userCondition.controls.comparisonAttribute.value,\n comparator: c.controls.userCondition.controls.comparator.value,\n comparisonValue: {\n doubleValue: c.controls.userCondition.controls.comparisonValue.controls.doubleValue\n ? c.controls.userCondition.controls.comparisonValue.controls.doubleValue.value\n : null,\n stringValue: c.controls.userCondition.controls.comparisonValue.controls.stringValue\n ? c.controls.userCondition.controls.comparisonValue.controls.stringValue.value\n : null,\n listValue: c.controls.userCondition.controls.comparisonValue.controls.listValue\n ? c.controls.userCondition.controls.comparisonValue.controls.listValue.controls.map(l => ({\n value: l.controls.value.value,\n hint: l.controls.hint.value,\n index: l.controls.index.value,\n }))\n : null,\n },\n }\n : null,\n segmentCondition: c.controls.segmentCondition\n ? {\n segmentId: c.controls.segmentCondition.controls.segmentId.value!,\n comparator: c.controls.segmentCondition.controls.comparator.value,\n }\n : null,\n prerequisiteFlagCondition: c.controls.prerequisiteFlagCondition\n ? {\n comparator: c.controls.prerequisiteFlagCondition.controls.comparator.value,\n prerequisiteSettingId: c.controls.prerequisiteFlagCondition.controls.prerequisiteSettingId.value!,\n prerequisiteComparisonValue: getRawSettiongValue(\n c.controls.prerequisiteFlagCondition.controls.prerequisiteComparisonValue\n ),\n }\n : null,\n })),\n })),\n };\n}\n\nexport function getRawSettiongValue(formGroup: FormGroup<ValueForm>): ValueModel {\n return {\n stringValue: formGroup.controls.stringValue ? formGroup.controls.stringValue.value : null,\n boolValue: formGroup.controls.boolValue ? formGroup.controls.boolValue.value : null,\n doubleValue: formGroup.controls.doubleValue ? formGroup.controls.doubleValue.value : null,\n intValue: formGroup.controls.intValue ? formGroup.controls.intValue.value : null,\n predefinedVariationId: formGroup.controls.predefinedVariationId ? formGroup.controls.predefinedVariationId.value : null,\n };\n}\n","import { DOCUMENT, inject, Injectable } from \"@angular/core\";\nimport { Observable, Subject } from \"rxjs\";\n\nexport enum Theme {\n Light = \"light\",\n Dark = \"dark\",\n}\n\n@Injectable()\nexport class ThemeService {\n private readonly document = inject(DOCUMENT);\n\n private currentTheme = Theme.Light;\n private readonly themeSubject = new Subject<boolean>();\n\n initialize(): void {\n //init with Theme.Light.\n this.currentTheme = Theme.Light;\n this.setThemeAttributeAndNotify();\n }\n\n isDark(): boolean {\n return this.currentTheme === Theme.Dark;\n }\n\n setTheme(theme: Theme): void {\n this.currentTheme = theme;\n this.setThemeAttributeAndNotify();\n }\n\n asObservable(): Observable<boolean> {\n return this.themeSubject.asObservable();\n }\n\n private setThemeAttributeAndNotify() {\n this.setThemeAttribute();\n this.themeSubject.next(this.isDark());\n }\n\n private setThemeAttribute(): void {\n if (this.isDark()) {\n this.document.body.setAttribute(\"data-theme\", Theme.Dark);\n } else {\n this.document.body.removeAttribute(\"data-theme\");\n }\n }\n}\n","import { inject, Injectable } from \"@angular/core\";\nimport { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\nimport {\n FeatureFlagLimitations,\n RolloutPercentageItemModel,\n RolloutRuleComparator,\n RolloutRuleModel,\n SettingType,\n SettingValueModel,\n SettingValueType,\n} from \"ng-configcat-publicapi\";\nimport { PercentageItemFormGroup, RolloutRuleFormGroup, SettingValueFormGroup, SettingValuesFormGroup } from \"../_models/setting-list-form\";\nimport { SettingValuesModel } from \"../_models/settingValuesModel\";\nimport { validateSemVer, validateSemVerList } from \"./custom-validators\";\nimport { FormHelper, percentageRegex, wholeNumberRegex } from \"./form-helper\";\n\n@Injectable()\nexport class SettingListFormHelper {\n private readonly formBuilder = inject(FormBuilder);\n\n createSettingValuesFormGroup(settingValuesModel: SettingValuesModel): FormGroup<SettingValuesFormGroup> {\n const rolloutRules = this.getAllRolloutRules(settingValuesModel.settingValues);\n const comparisonAttributes = this.getComparisonAttributes(rolloutRules);\n const formGroup = this.formBuilder.group<SettingValuesFormGroup>({\n settingValues: this.formBuilder.array(\n settingValuesModel.settingValues.map(sv => this.createSettingValueFormGroup(sv, settingValuesModel.readOnly, sv.featureFlagLimitations))\n ),\n comparisonAttributes: this.formBuilder.array<FormControl<string>>(\n comparisonAttributes.map(a => new FormControl(a, { nonNullable: true }))\n ),\n });\n return formGroup;\n }\n\n createSettingValueFormGroup(\n settingValueModel: SettingValueModel,\n readOnly: boolean,\n featureFlagLimitations: FeatureFlagLimitations\n ): FormGroup<SettingValueFormGroup> {\n return this.formBuilder.group({\n value: new FormControl<SettingValueType | null>(\n { value: settingValueModel.value, disabled: readOnly },\n {\n validators: this.getValidatorsForSettingType(settingValueModel.setting.settingType, featureFlagLimitations),\n nonNullable: true,\n }\n ),\n rolloutPercentageItems: this.formBuilder.array(\n settingValueModel.rolloutPercentageItems.map(p => {\n return this.createRolloutPercentageItemFormGroup(\n p,\n readOnly,\n settingValueModel.setting.settingType,\n featureFlagLimitations\n );\n })\n ),\n rolloutRules: this.formBuilder.array(\n settingValueModel.rolloutRules.map(r => {\n return this.createRolloutRuleFormGroup(\n r,\n readOnly,\n settingValueModel.setting.settingType,\n featureFlagLimitations\n );\n })\n ),\n\n rolloutPercentageItemsSum: new FormControl(\n { value: 100, disabled: false },\n { validators: [Validators.min(100), Validators.max(100)], nonNullable: true }\n ),\n });\n }\n\n createRolloutPercentageItemFormGroup(\n p: RolloutPercentageItemModel,\n readOnly: boolean,\n settingType: SettingType,\n featureFlagLimitations: FeatureFlagLimitations\n ): FormGroup<PercentageItemFormGroup> {\n return this.formBuilder.group({\n percentage: new FormControl(\n { value: p.percentage, disabled: readOnly },\n {\n nonNullable: true,\n validators: [\n Validators.required,\n Validators.min(0),\n Validators.max(100),\n Validators.pattern(percentageRegex),\n ],\n }\n ),\n value: new FormControl<SettingValueType | null>(\n { value: p.value, disabled: readOnly },\n {\n validators: [Validators.required, ...this.getValidatorsForSettingType(settingType, featureFlagLimitations)],\n nonNullable: true,\n }\n ),\n valueDisabled: new FormControl<SettingValueType | null>(\n { value: p.value, disabled: true }, // For percentage item value\n { nonNullable: true }\n ),\n });\n }\n\n createEmptyPercentageItemFormGroup(\n percentage: number,\n readOnly: boolean,\n settingType: SettingType,\n featureFlagLimitations: FeatureFlagLimitations\n ): FormGroup<PercentageItemFormGroup> {\n return this.formBuilder.group({\n percentage: new FormControl(\n { value: percentage, disabled: readOnly },\n {\n nonNullable: true,\n validators: [\n Validators.required,\n Validators.min(0),\n Validators.max(100),\n Validators.pattern(percentageRegex),\n ],\n }\n ),\n value: new FormControl<SettingValueType | null>(\n { value: null, disabled: readOnly },\n {\n validators: [Validators.required, ...this.getValidatorsForSettingType(settingType, featureFlagLimitations)],\n nonNullable: true,\n }\n ),\n valueDisabled: new FormControl<SettingValueType | null>(\n { value: null, disabled: true }, // For percentage item value\n { nonNullable: true }\n ),\n });\n }\n\n createRolloutRuleFormGroup(\n r: RolloutRuleModel,\n readOnly: boolean,\n settingType: SettingType,\n featureFlagLimitations: FeatureFlagLimitations\n ): FormGroup<RolloutRuleFormGroup> {\n if (r.comparator) {\n return this.formBuilder.group<RolloutRuleFormGroup>({\n type: new FormControl({ value: 0, disabled: true }, { nonNullable: true }),\n comparisonAttribute: new FormControl(\n { value: r.comparisonAttribute!, disabled: readOnly },\n { validators: [Validators.required, Validators.maxLength(1000)], nonNullable: true }\n ),\n comparator: new FormControl(\n { value: r.comparator, disabled: readOnly },\n { validators: [Validators.required], nonNullable: true }\n ),\n comparisonValue: new FormControl(\n { value: r.comparisonValue!, disabled: readOnly },\n { validators: this.getComparisonValueValidators(r.comparator, featureFlagLimitations), nonNullable: true }\n ),\n value: new FormControl(\n { value: r.value, disabled: readOnly },\n { validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations), nonNullable: true }\n ),\n });\n } else if (r.segmentComparator) {\n return this.formBuilder.group<RolloutRuleFormGroup>({\n type: new FormControl({ value: 1, disabled: true }, { nonNullable: true }),\n segmentComparator: new FormControl(\n { value: r.segmentComparator, disabled: readOnly },\n { validators: [Validators.required], nonNullable: true }\n ),\n segmentId: new FormControl(\n { value: r.segmentId!, disabled: readOnly },\n { validators: [Validators.required], nonNullable: true }\n ),\n value: new FormControl(\n { value: r.value, disabled: readOnly },\n { validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations), nonNullable: true }\n ),\n });\n } else {\n throw new Error(\"Invalid rollout rule\");\n }\n }\n\n getValidatorsForSettingType(settingType: SettingType, featureFlagLimitations: FeatureFlagLimitations): ValidatorFn[] {\n switch (settingType) {\n case SettingType.Int:\n return [\n Validators.required,\n Validators.min(-2147483648),\n Validators.max(2147483647),\n Validators.pattern(wholeNumberRegex),\n ];\n case SettingType.Double:\n return [Validators.required, Validators.min(-Number.MAX_VALUE), Validators.max(Number.MAX_VALUE)];\n case SettingType.String:\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxStringFlagValueLength)];\n case SettingType.Boolean:\n return [Validators.required];\n default:\n return [];\n }\n }\n\n getComparisonValueValidators(\n comparator: RolloutRuleComparator,\n featureFlagLimitations: FeatureFlagLimitations\n ): ValidatorFn[] {\n switch (comparator) {\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 return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength)];\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n return [\n Validators.required,\n validateSemVerList,\n Validators.maxLength(featureFlagLimitations.maxComparisonValueLength),\n ];\n case RolloutRuleComparator.SemVerLessOrEquals:\n case RolloutRuleComparator.SemVerLess:\n case RolloutRuleComparator.SemVerGreater:\n case RolloutRuleComparator.SemVerGreaterOrEquals:\n return [\n Validators.required,\n validateSemVer,\n Validators.maxLength(featureFlagLimitations.maxComparisonValueLength),\n ];\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 [Validators.required, Validators.min(-Number.MAX_VALUE), Validators.max(Number.MAX_VALUE)];\n default:\n return [Validators.required];\n }\n }\n\n private getAllRolloutRules(settingValues: SettingValueModel[]): RolloutRuleModel[] {\n const rolloutRules = settingValues.map(cv => cv.rolloutRules);\n return rolloutRules.length === 0 ? [] : rolloutRules.reduce((a, b) => a.concat(b), []);\n }\n\n private getComparisonAttributes(rolloutRules: RolloutRuleModel[]): string[] {\n if (rolloutRules.length > 0) {\n const currentComparisonAttributes = rolloutRules\n .filter(r => r.comparisonAttribute)\n .map(r => r.comparisonAttribute) as string[];\n\n const defaultComparisonAttributes = [\"Identifier\", \"Email\", \"Country\"];\n const comparisonAttributes = currentComparisonAttributes.filter(c => !defaultComparisonAttributes.includes(c));\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, comparisonValue: string) {\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 getRawValues(formGroup: FormGroup<SettingValuesFormGroup>) {\n return formGroup.controls.settingValues.controls.map(v => this.getRawValue(v));\n }\n\n getRawValue(formGroup: FormGroup<SettingValueFormGroup>) {\n return {\n value: formGroup.controls.value.value!,\n rolloutPercentageItems: formGroup.controls.rolloutPercentageItems?.controls.map(i => ({\n percentage: i.controls.percentage.value,\n value: i.controls.value.value! })),\n rolloutRules: formGroup.controls.rolloutRules?.controls.map(r => ({\n comparisonAttribute: r.controls.comparisonAttribute?.value,\n comparator: r.controls.comparator?.value,\n comparisonValue: r.controls.comparisonValue?.value,\n segmentId: r.controls.segmentId?.value,\n segmentComparator: r.controls.segmentComparator?.value,\n value: r.controls.value.value!,\n })),\n };\n }\n}\n","import { CloseScrollStrategy, Overlay, OVERLAY_DEFAULT_CONFIG } from \"@angular/cdk/overlay\";\nimport { DatePipe } from \"@angular/common\";\nimport { InjectionToken, Provider } from \"@angular/core\";\nimport { MAT_AUTOCOMPLETE_SCROLL_STRATEGY } from \"@angular/material/autocomplete\";\nimport { MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS } from \"@angular/material/button-toggle\";\nimport { MAT_DATEPICKER_SCROLL_STRATEGY } from \"@angular/material/datepicker\";\nimport { MatDialogRef } from \"@angular/material/dialog\";\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from \"@angular/material/form-field\";\nimport { MAT_MENU_SCROLL_STRATEGY } from \"@angular/material/menu\";\nimport { MAT_SELECT_CONFIG, MAT_SELECT_SCROLL_STRATEGY } from \"@angular/material/select\";\nimport { MAT_TIMEPICKER_SCROLL_STRATEGY } from \"@angular/material/timepicker\";\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MAT_TOOLTIP_SCROLL_STRATEGY } from \"@angular/material/tooltip\";\nimport { PublicApiService } from \"./_services\";\nimport { MessagingService } from \"./_services/messaging.service\";\nimport { SettingListFormHelper } from \"./_services/setting-list-form-helper\";\nimport { ThemeService } from \"./_services/theme.service\";\nimport { AppDateAdapter } from \"./bootstrap\";\nimport { IConfigCatPublicApiConfiguration } from \"./configuration\";\n\nconst closeScrollStrategyFactory = (overlay: Overlay): (() => CloseScrollStrategy) => {\n return () => overlay.scrollStrategies.close();\n};\n\nexport function provideConfigCatPublicApiUi(): Provider[] {\n return [\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: { floatLabel: \"always\" },\n },\n {\n provide: MAT_SELECT_CONFIG,\n useValue: {\n overlayPanelClass: \"select-overlay-panel\",\n },\n },\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: { disableTooltipInteractivity: true },\n },\n {\n // There are weird issues with tooltips. If the tooltip is on a mat select, and the you open the mat select\n // and move your mouse outside the browser, and come back, the overlay popover causes the tooltip to be shown everywhere.\n // Weird. Turning off the usePopover fixes the issue.\n provide: OVERLAY_DEFAULT_CONFIG,\n useValue: { usePopover: false },\n },\n { provide: MAT_TOOLTIP_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MAT_MENU_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MAT_SELECT_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MAT_DATEPICKER_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MAT_TIMEPICKER_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MatDialogRef, useValue: {} },\n {\n provide: MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS,\n useValue: { hideSingleSelectionIndicator: true, hideMultipleSelectionIndicator: true },\n },\n { provide: DatePipe },\n AppDateAdapter,\n MessagingService,\n ThemeService,\n PublicApiService,\n SettingListFormHelper,\n ];\n}\n\nexport const CONFIGCAT_PUBLICAPI_UI_CONFIGURATION = new InjectionToken<IConfigCatPublicApiConfiguration>(\"\");\n","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 @HostListener(\"blur\", [\"$event\"])\n onChange($event: Event) {\n const target = $event.target as HTMLInputElement;\n if (target.type === \"number\") {\n const value = target.value.trim() !== \"\" ? Number(target.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.toString();\n }\n }\n }\n}\n","import { Component, inject, input } from \"@angular/core\";\nimport { PublicApiService } from \"../_services/public-api.service\";\n\n@Component({\n selector: \"app-base\",\n template: \"<div></div>\",\n})\nexport class BaseComponent {\n private readonly publicApiService = inject(PublicApiService);\n\n readonly basePath = input<string | null>(null);\n readonly basicAuthUsername = input<string | null>(null);\n readonly basicAuthPassword = input<string | null>(null);\n\n protected createProductsService() {\n return this.publicApiService.createProductsService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createConfigsService() {\n return this.publicApiService.createConfigsService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createEnvironmentsService() {\n return this.publicApiService.createEnvironmentsService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createSettingsService() {\n return this.publicApiService.createSettingsService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createSettingValuesService() {\n return this.publicApiService.createSettingValuesService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createSettingValuesV2Service() {\n return this.publicApiService.createSettingValuesV2Service(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createSegmentsService() {\n return this.publicApiService.createSegmentsService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createOrganizationService() {\n return this.publicApiService.createOrganizationService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected getDashboardBasePath() {\n return this.publicApiService.getDashboardBasePath();\n }\n}\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { Router, UrlTree } from \"@angular/router\";\nimport { EvaluationVersion } from \"ng-configcat-publicapi\";\nimport { PublicApiService } from \"../../_services\";\n\nexport interface ConcurrentDeleteDialogComponentData {\n organizationId: string;\n productId: string;\n configId: string;\n environmentId: string;\n evaluationVersion: EvaluationVersion;\n}\n@Component({\n selector: \"app-concurrent-delete-dialog\",\n templateUrl: \"./concurrent-delete-dialog.component.html\",\n styleUrls: [\"./concurrent-delete-dialog.component.scss\"],\n imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, MatButton, MatDialogClose],\n})\nexport class ConcurrentDeleteDialogComponent {\n dialogRef = inject<MatDialogRef<ConcurrentDeleteDialogComponent, string>>(MatDialogRef);\n data = inject<ConcurrentDeleteDialogComponentData>(MAT_DIALOG_DATA);\n private readonly publicApiService = inject(PublicApiService);\n private readonly router = inject(Router);\n\n close() {\n this.dialogRef.close(\"ok\");\n }\n\n openHistory(): string {\n let urlTree: UrlTree;\n if (this.data.evaluationVersion === EvaluationVersion.V1) {\n urlTree = this.router.createUrlTree([\n \"/\",\n this.data.productId,\n this.data.configId,\n this.data.environmentId,\n \"history\",\n ]);\n } else {\n urlTree = this.router.createUrlTree([\n \"/v2\",\n this.data.organizationId,\n this.data.productId,\n this.data.configId,\n this.data.environmentId,\n \"history\",\n ]);\n }\n return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);\n }\n}\n","<h1 mat-dialog-title>There was a conflict while trying to save your feature flag</h1>\n<div mat-dialog-content>\n <p>Seems like the feature flag or setting was deleted by someone else while you were editing it.</p>\n <p>Here's what happened:</p>\n <ul>\n <li>The deleted feature flag was not updated, those edits are lost.</li>\n </ul>\n <p>\n See the\n <a target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"openHistory()\" [mat-dialog-close]>audit log</a>\n for more details.\n </p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"close()\">OK</button>\n</div>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { CdkTextareaAutosize } from \"@angular/cdk/text-field\";\nimport { Component, inject, OnInit } from \"@angular/core\";\nimport { FormControl, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatDialogActions, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { nonEmptyStringValidator } from \"../../_services/custom-validators\";\n\nexport interface ReasonDialogComponentResult {\n button: string;\n reason?: string;\n}\n\n@Component({\n selector: \"app-reason-dialog\",\n templateUrl: \"./reason-dialog.component.html\",\n styleUrls: [\"./reason-dialog.component.scss\"],\n imports: [\n MatDialogTitle,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n CdkScrollable,\n MatDialogContent,\n MatFormField,\n MatLabel,\n MatInput,\n CdkTextareaAutosize,\n MatError,\n MatDialogActions,\n MatButton,\n ],\n})\nexport class ReasonDialogComponent implements OnInit {\n dialogRef = inject<MatDialogRef<ReasonDialogComponent, ReasonDialogComponentResult>>(MatDialogRef);\n private readonly formBuilder = inject(NonNullableFormBuilder);\n\n formGroup = this.formBuilder.group({\n reason: new FormControl(\"\", {\n validators: [nonEmptyStringValidator, Validators.maxLength(1000)],\n nonNullable: true,\n }),\n });\n\n ngOnInit() {\n this.formGroup.reset();\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\n matInput\n formControlName=\"reason\"\n name=\"reason\"\n placeholder=\"I'm changing the values because...\"\n rows=\"3\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"></textarea>\n @if (formGroup.controls.reason.invalid) {\n <mat-error>The field is required.</mat-error>\n }\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>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Directive, DOCUMENT, ElementRef, HostListener, inject, input } from \"@angular/core\";\n\ndeclare global {\n interface Window {\n clipboardData:\n | {\n getData: (format: string) => string;\n }\n | undefined;\n }\n}\n\n@Directive({ selector: \"[appDigitOnly]\" })\nexport class DigitOnlyDirective {\n el = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n\n private hasDecimalPoint = false;\n private hasNegativeSign = false;\n private readonly navigationKeys = [\n \"Backspace\",\n \"Delete\",\n \"Tab\",\n \"Escape\",\n \"Enter\",\n \"Home\",\n \"End\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Clear\",\n \"Copy\",\n \"Paste\",\n ];\n\n readonly digitOnlyDecimal = input(false);\n readonly digitOnlyDecimalSeparator = input(\".\");\n readonly digitOnlyAllowNegatives = input(false);\n readonly digitOnlyAllowPaste = input(true);\n readonly digitOnlyNegativeSign = input(\"-\");\n inputElement: HTMLInputElement;\n digitOnlyMin = -Infinity;\n digitOnlyMax = Infinity;\n\n constructor() {\n const el = this.el;\n\n this.inputElement = el.nativeElement as HTMLInputElement;\n }\n\n @HostListener(\"beforeinput\", [\"$event\"])\n onBeforeInput(e: InputEvent): any {\n if (isNaN(Number(e.data))) {\n if (\n e.data === this.digitOnlyDecimalSeparator()\n || (e.data === this.digitOnlyNegativeSign() && this.digitOnlyAllowNegatives())\n ) {\n return; // go on\n }\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n @HostListener(\"keydown\", [\"$event\"])\n onKeyDown(e: KeyboardEvent) {\n if (\n this.navigationKeys.includes(e.key) // Allow: navigation keys: backspace, delete, arrows etc.\n || ((e.key === \"a\" || e.code === \"KeyA\") && e.ctrlKey) // Allow: Ctrl+A\n || ((e.key === \"c\" || e.code === \"KeyC\") && e.ctrlKey) // Allow: Ctrl+C\n || ((e.key === \"v\" || e.code === \"KeyV\") && e.ctrlKey) // Allow: Ctrl+V\n || ((e.key === \"x\" || e.code === \"KeyX\") && e.ctrlKey) // Allow: Ctrl+X\n || ((e.key === \"a\" || e.code === \"KeyA\") && e.metaKey) // Allow: Cmd+A (Mac)\n || ((e.key === \"c\" || e.code === \"KeyC\") && e.metaKey) // Allow: Cmd+C (Mac)\n || ((e.key === \"v\" || e.code === \"KeyV\") && e.metaKey) // Allow: Cmd+V (Mac)\n || ((e.key === \"x\" || e.code === \"KeyX\") && e.metaKey) // Allow: Cmd+X (Mac)\n ) {\n // let it happen, don't do anything\n return;\n }\n\n let newValue = \"\";\n\n const digitOnlyDecimalSeparator = this.digitOnlyDecimalSeparator();\n if (this.digitOnlyDecimal() && e.key === digitOnlyDecimalSeparator) {\n newValue = this.forecastValue(e.key);\n if (newValue.split(digitOnlyDecimalSeparator).length > 2) {\n // has two or more decimal points\n e.preventDefault();\n return;\n } else {\n this.hasDecimalPoint = newValue.includes(digitOnlyDecimalSeparator);\n return; // Allow: only one decimal point\n }\n }\n\n const digitOnlyNegativeSign = this.digitOnlyNegativeSign();\n if (e.key === digitOnlyNegativeSign && this.digitOnlyAllowNegatives()) {\n newValue = this.forecastValue(e.key);\n if (!newValue.startsWith(digitOnlyNegativeSign) || newValue.split(digitOnlyNegativeSign).length > 2) {\n e.preventDefault();\n return;\n } else {\n this.hasNegativeSign = newValue.split(digitOnlyNegativeSign).length > -1;\n return;\n }\n }\n\n // Ensure that it is a number and stop the keypress\n if (e.key === \" \" || isNaN(Number(e.key))) {\n e.preventDefault();\n return;\n }\n\n newValue = newValue || this.forecastValue(e.key);\n\n const newNumber = Number(newValue);\n if (newNumber > this.digitOnlyMax || newNumber < this.digitOnlyMin) {\n e.preventDefault();\n }\n }\n\n @HostListener(\"paste\", [\"$event\"])\n onPaste(event: ClipboardEvent): void {\n if (this.digitOnlyAllowPaste()) {\n let pastedInput = \"\";\n if (this.document.defaultView!.clipboardData) {\n // Browser is IE\n pastedInput = this.document.defaultView!.clipboardData.getData(\"text\");\n } else if (event.clipboardData?.getData) {\n // Other browsers\n pastedInput = event.clipboardData.getData(\"text/plain\");\n }\n\n this.pasteData(pastedInput);\n event.preventDefault();\n } else {\n // this prevents the paste\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n @HostListener(\"drop\", [\"$event\"])\n onDrop(event: DragEvent): void {\n const textData = event.dataTransfer?.getData(\"text\") ?? \"\";\n this.inputElement.focus();\n this.pasteData(textData);\n event.preventDefault();\n }\n\n private pasteData(pastedContent: string): void {\n const sanitizedContent = this.sanitizeInput(pastedContent);\n const digitOnlyNegativeSign = this.digitOnlyNegativeSign();\n if (\n sanitizedContent.includes(digitOnlyNegativeSign)\n && this.hasNegativeSign\n && !this.getSelection().includes(digitOnlyNegativeSign)\n ) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-deprecated, sonarjs/deprecation\n const pasted = document.execCommand(\"insertText\", false, sanitizedContent);\n if (!pasted) {\n if (this.inputElement.setRangeText) {\n const { selectionStart: start, selectionEnd: end } = this.inputElement;\n this.inputElement.setRangeText(sanitizedContent, start ?? 0, end ?? 0, \"end\");\n // Angular's Reactive Form relies on \"input\" event, but on Firefox, the setRangeText method doesn't trigger it\n // so we have to trigger it ourself.\n if (typeof (window as Record<string, any>)[\"InstallTrigger\"] !== \"undefined\") {\n this.inputElement.dispatchEvent(new Event(\"input\", { cancelable: true }));\n }\n } else {\n // Browser does not support setRangeText, e.g. IE\n this.insertAtCursor(this.inputElement, sanitizedContent);\n }\n }\n if (this.digitOnlyDecimal()) {\n this.hasDecimalPoint = this.inputElement.value.includes(this.digitOnlyDecimalSeparator());\n }\n this.hasNegativeSign = this.inputElement.value.includes(digitOnlyNegativeSign);\n }\n\n // The following 2 methods were added from the below article for browsers that do not support setRangeText\n // https://stackoverflow.com/questions/11076975/how-to-insert-text-into-the-textarea-at-the-current-cursor-position\n private insertAtCursor(myField: HTMLInputElement, myValue: string): void {\n const startPos = myField.selectionStart ?? 0;\n const endPos = myField.selectionEnd ?? 0;\n\n myField.value =\n myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);\n\n const pos = startPos + myValue.length;\n myField.focus();\n myField.setSelectionRange(pos, pos);\n\n this.triggerEvent(myField, \"input\");\n }\n\n private triggerEvent(el: HTMLInputElement, type: string): void {\n if (\"createEvent\" in document) {\n // modern browsers, IE9+\n const e = document.createEvent(\"HTMLEvents\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated, sonarjs/deprecation\n e.initEvent(type, false, true);\n el.dispatchEvent(e);\n }\n }\n // end stack overflow code\n\n private sanitizeInput(input: string): string {\n let result = \"\";\n let regex: RegExp;\n if (this.digitOnlyDecimal() && this.isValidDecimal(input)) {\n regex = new RegExp(`${this.getNegativeSignRegExp()}[^0-9${this.digitOnlyDecimalSeparator()}]`, \"g\");\n } else {\n regex = new RegExp(`${this.getNegativeSignRegExp()}[^0-9]`, \"g\");\n }\n result = input.replace(regex, \"\");\n\n const maxLength = this.inputElement.maxLength;\n if (maxLength > 0) {\n // the input element has maxLength limit\n const allowedLength =\n maxLength - this.inputElement.value.length + (result.includes(this.digitOnlyNegativeSign()) ? 1 : 0);\n result = allowedLength > 0 ? result.substring(0, allowedLength) : \"\";\n }\n return result;\n }\n\n private getNegativeSignRegExp(): string {\n const digitOnlyNegativeSign = this.digitOnlyNegativeSign();\n return this.digitOnlyAllowNegatives()\n && (!this.hasNegativeSign || this.getSelection().includes(digitOnlyNegativeSign))\n ? `(?!^${digitOnlyNegativeSign})`\n : \"\";\n }\n\n private isValidDecimal(string: string): boolean {\n if (!this.hasDecimalPoint) {\n return string.split(this.digitOnlyDecimalSeparator()).length <= 2;\n } else {\n // the input element already has a decimal separator\n const selectedText = this.getSelection();\n if (selectedText.includes(this.digitOnlyDecimalSeparator())) {\n return string.split(this.digitOnlyDecimalSeparator()).length <= 2;\n } else {\n return !string.includes(this.digitOnlyDecimalSeparator());\n }\n }\n }\n\n private getSelection(): string {\n return this.inputElement.value.substring(\n this.inputElement.selectionStart ?? 0,\n this.inputElement.selectionEnd ?? 0\n );\n }\n\n private forecastValue(key: string): string {\n const selectionStart = this.inputElement.selectionStart ?? 0;\n const selectionEnd = this.inputElement.selectionEnd ?? 0;\n const oldValue = this.inputElement.value;\n return oldValue.substring(0, selectionStart) + key + oldValue.substring(selectionEnd);\n }\n}\n","import { AfterContentInit, Directive, ElementRef, inject, input } from \"@angular/core\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[focus]\",\n})\nexport class AutofocusDirective implements AfterContentInit {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\n\n readonly isFocused = input(true);\n\n ngAfterContentInit() {\n if (this.isFocused()) {\n setTimeout(() => {\n this.host.nativeElement.focus();\n }, 200);\n }\n }\n}\n","// Unfortunately, ng-packagr couldn't find the typing by default, so we had to explicitly do it.\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path=\"../_types/ace.d.ts\" />\n\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n OnDestroy,\n OnInit,\n output,\n viewChild,\n} from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { Ace, config, edit } from \"ace-builds/src-min-noconflict/ace\";\nimport \"ace-builds/src-noconflict/mode-json\";\nimport \"ace-builds/src-noconflict/theme-tomorrow\";\nimport \"ace-builds/src-noconflict/theme-github_dark\";\nimport { ThemeService } from \"../_services/theme.service\";\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 private readonly themeService = inject(ThemeService);\n private aceEditor?: Ace.Editor;\n private onChangeDisabled = false;\n private onChangeModel?: (value: string | null) => void;\n private _value = \"\";\n\n readonly editor = viewChild<ElementRef<HTMLElement>>(\"aceEditor\");\n\n readonly value = model<string | null>(null);\n\n readonly valueSetEffect = effect(() => {\n const checked = this.transformBoundValue(this.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 readonly readOnly = input<boolean>(false);\n\n readonly valueChange = output<string>();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onChange = output<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: this.themeService.isDark() ? \"ace/theme/github_dark\" : \"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: string) {\n this.onChangeDisabled = true;\n this.aceEditor!.setValue(this.formatValue(value), -1);\n this.onChangeDisabled = false;\n }\n\n private formatValue(value: string): 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: string) {\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): unknown {\n try {\n const parsed = JSON.parse(value) as unknown;\n if (parsed === Infinity) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n }\n\n private transformBoundValue(value: string): string {\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n return value;\n }\n\n // ControlValueAccessor\n writeValue(value: string) {\n this.value.set(value);\n }\n\n // ControlValueAccessor\n registerOnChange(fn: (value: string | null) => void) {\n this.onChangeModel = fn;\n }\n\n // ControlValueAccessor\n registerOnTouched() {\n /* unused */\n }\n}\n","<div #aceEditor class=\"ace-editor-container\"></div>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { CdkTextareaAutosize } from \"@angular/cdk/text-field\";\nimport { Component, DestroyRef, inject, OnInit } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport {\n FormArray,\n FormControl,\n FormGroup,\n FormsModule,\n NonNullableFormBuilder,\n ReactiveFormsModule,\n} from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent } from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatHint } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { AutofocusDirective } from \"../../_directives/autofocus.directive\";\nimport { AceEditorComponent } from \"../../ace-editor/ace-editor.component\";\nimport { FormHelper } from \"../../bootstrap\";\n\nexport interface PopoutFormGroup {\n values: FormArray<FormControl>;\n}\n\nexport interface PopOutEditorComponentData {\n multiline?: boolean;\n control: FormControl<string | null>;\n maxValueLength: number;\n}\n\n@Component({\n selector: \"app-popout-editor\",\n templateUrl: \"./popout-editor.component.html\",\n styleUrls: [\"./popout-editor.component.scss\"],\n imports: [\n CdkScrollable,\n MatDialogContent,\n MatButtonToggleGroup,\n FormsModule,\n RxReactiveFormsModule,\n MatButtonToggle,\n MatFormField,\n MatInput,\n CdkTextareaAutosize,\n AutofocusDirective,\n ReactiveFormsModule,\n MatError,\n MatHint,\n AceEditorComponent,\n MatIconButton,\n MatTooltip,\n MatIcon,\n MatButton,\n MatDialogActions,\n MatDialogClose,\n ],\n})\nexport class PopOutEditorComponent implements OnInit {\n private readonly formBuilder = inject(NonNullableFormBuilder);\n data = inject<PopOutEditorComponentData>(MAT_DIALOG_DATA);\n private readonly destroyRef = inject(DestroyRef);\n\n formGroup!: FormGroup<PopoutFormGroup>;\n formHelper = FormHelper;\n jsonData!: string;\n format = \"text\";\n readOnly!: boolean;\n\n ngOnInit(): void {\n this.readOnly = this.data.control.disabled;\n if (this.data.multiline) {\n this.buildFormGroup();\n } else {\n this.jsonData = this.data.control.value ?? \"\";\n this.data.control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.data.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.data.control.markAsDirty();\n this.data.control.markAsTouched();\n if (this.jsonData !== value) {\n this.jsonData = value ?? \"\";\n }\n });\n }\n }\n\n onJsonChanged(value: string) {\n this.data.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.data.control.updateValueAndValidity();\n this.data.control.markAsTouched();\n }\n\n buildFormGroup() {\n const value = this.data.control.value ? this.data.control.value : \"\";\n const list = value\n .split(\",\")\n .filter(v => !!v);\n if (!list.length) {\n list.push(\"\");\n }\n this.formGroup = this.formBuilder.group({\n values: this.formBuilder.array(\n list.map(v => this.formBuilder.control({ value: v, disabled: this.data.control.disabled }))\n ),\n });\n this.formGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(formGroupValue => {\n this.data.control.setValue(formGroupValue.values?.filter(v => !!v).join(\",\") ?? \"\", {\n onlySelf: true,\n emitEvent: false,\n emitModelToViewChange: true,\n });\n this.data.control.updateValueAndValidity();\n this.data.control.markAsDirty();\n });\n }\n\n add() {\n this.formGroup.controls.values.push(this.formBuilder.control(\"\"));\n }\n\n remove(index: number) {\n this.formGroup.controls.values.removeAt(index);\n }\n}\n","<div mat-dialog-content class=\"container\">\n @if (!data.multiline) {\n <div>\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 @if (format === \"text\") {\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea\n matInput\n autofocus\n focus\n rows=\"17\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"26\"\n [formControl]=\"data.control\"></textarea>\n @if (data.control.invalid) {\n <mat-error>\n {{ formHelper.getErrorMessage(data.control) }}\n </mat-error>\n }\n @if (data.maxValueLength && data.maxValueLength - (data.control.value?.length ?? 0) > -1) {\n <mat-hint>\n Remaining characters:\n {{ data.maxValueLength - (data.control.value?.length ?? 0) }}\n </mat-hint>\n }\n </mat-form-field>\n } @else if (format === \"json\") {\n <div class=\"editor-container\">\n <app-ace-editor [readOnly]=\"readOnly\" [(value)]=\"jsonData\" (onChange)=\"onJsonChanged($event)\" />\n @if (data.control.invalid) {\n <span class=\"error mat-mdc-form-field-error\">\n {{ formHelper.getErrorMessage(data.control) }}\n </span>\n }\n </div>\n }\n </div>\n } @else {\n <div [formGroup]=\"formGroup\">\n @for (valueControl of formGroup.controls.values.controls; track $index; let i = $index) {\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\">\n <textarea\n matInput\n autofocus\n focus\n cdkTextareaAutosize\n cdkAutosizeMaxRows=\"6\"\n rows=\"1\"\n [formControl]=\"valueControl\"></textarea>\n </mat-form-field>\n @if (!readOnly) {\n <button\n class=\"action-icon-button no-density-mat-icon-button\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove item\"\n (click)=\"remove(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n }\n @if (!readOnly) {\n <button mat-stroked-button type=\"button\" (click)=\"add()\">\n <mat-icon>add</mat-icon>\n Add item\n </button>\n }\n </div>\n }\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" [mat-dialog-close]>Done</button>\n</div>\n","import { NgClass } from \"@angular/common\";\nimport { Component, inject, input } from \"@angular/core\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { FeatureFlagLimitations, SettingDataModel, SettingType } from \"ng-configcat-publicapi\";\nimport { DigitOnlyDirective } from \"../../../_directives/digit-only.directive\";\nimport { InputDisplayNormalizerDirective } from \"../../../_directives/input-display-normalizer.directive\";\nimport { FeatureFlagValueFormControl } from \"../../../_models/setting-list-form\";\nimport { PopOutEditorComponent, PopOutEditorComponentData } from \"../../../dialogs/popout-editor/popout-editor.component\";\n\n@Component({\n selector: \"app-value\",\n templateUrl: \"./value.component.html\",\n styleUrls: [\"../../../../css/slider.scss\", \"./value.component.scss\"],\n imports: [FormsModule, NgClass, ReactiveFormsModule, RxReactiveFormsModule, MatTooltip, MatIcon, DigitOnlyDirective, InputDisplayNormalizerDirective],\n})\nexport class ValueComponent {\n private readonly dialog = inject(MatDialog);\n\n readonly valueFormControl = input.required<FeatureFlagValueFormControl>();\n\n readonly setting = input.required<SettingDataModel>();\n readonly featureFlagLimitations = input.required<FeatureFlagLimitations>();\n\n SettingType = SettingType;\n\n popOut() {\n this.dialog.open<PopOutEditorComponent, PopOutEditorComponentData>(PopOutEditorComponent, {\n width: \"800px\",\n data: {\n control: this.valueFormControl() as FormControl<string | null>,\n maxValueLength: this.featureFlagLimitations().maxStringFlagValueLength,\n },\n });\n }\n}\n","<div class=\"flex\">\n <div class=\"container\">\n @switch (setting().settingType) {\n @case (SettingType.String) {\n <div class=\"with-validation\">\n @if (valueFormControl().invalid) {\n <span class=\"error\">*</span>\n }\n <input\n type=\"text\"\n placeholder=\"my value\"\n name=\"value\"\n [ngClass]=\"{ invalid: valueFormControl().invalid }\"\n [formControl]=\"valueFormControl()\" />\n <div class=\"expand\" matTooltip=\"Pop-out editor\" (click)=\"popOut()\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n }\n @case (SettingType.Int) {\n <div class=\"with-validation\">\n @if (valueFormControl().invalid) {\n <span class=\"error\">*</span>\n }\n <input\n type=\"number\"\n placeholder=\"42\"\n name=\"value\"\n appDigitOnly\n [digitOnlyAllowNegatives]=\"true\"\n [ngClass]=\"{ invalid: valueFormControl().invalid }\"\n [formControl]=\"valueFormControl()\" />\n </div>\n }\n @case (SettingType.Double) {\n <div class=\"with-validation\">\n @if (valueFormControl().invalid) {\n <span class=\"error\">*</span>\n }\n <input\n type=\"number\"\n placeholder=\"3.14\"\n name=\"value\"\n inputDisplayNormalizer\n [ngClass]=\"{ invalid: valueFormControl().invalid }\"\n [formControl]=\"valueFormControl()\" />\n </div>\n }\n @case (SettingType.Boolean) {\n <div class=\"toggle\">\n <label class=\"switch\">\n <input type=\"checkbox\" name=\"value\" [formControl]=\"valueFormControl()\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n }\n }\n </div>\n @if (setting().settingType === SettingType.Boolean) {\n <div class=\"spacer\"></div>\n }\n</div>\n","import { NgClass } from \"@angular/common\";\nimport { Component, input } from \"@angular/core\";\nimport {\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n} from \"@angular/forms\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { FeatureFlagLimitations, SettingDataModel, SettingType } from \"ng-configcat-publicapi\";\nimport { DigitOnlyDirective } from \"../../../_directives/digit-only.directive\";\nimport { FeatureFlagValueFormControl, PercentageItemFormGroup, SettingValueFormGroup } from \"../../../_models/setting-list-form\";\nimport { ValueComponent } from \"../value/value.component\";\n\n@Component({\n selector: \"app-rollout-percentage-items\",\n templateUrl: \"./rollout-percentage-items.component.html\",\n styleUrls: [\"./rollout-percentage-items.component.scss\"],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatChipSet,\n MatChip,\n DigitOnlyDirective,\n NgClass,\n MatTooltip,\n MatIcon,\n ValueComponent,\n ],\n})\nexport class RolloutPercentageItemsComponent {\n readonly settingModel = input.required<SettingDataModel>();\n readonly formGroup = input.required<FormGroup<SettingValueFormGroup>>();\n public readonly featureFlagLimitations = input.required<FeatureFlagLimitations>();\n readonly readOnly = input(false);\n SettingType = SettingType;\n\n value(rolloutPercentageItem: FormGroup<PercentageItemFormGroup>): FeatureFlagValueFormControl {\n return this.settingModel().settingType === SettingType.Boolean\n ? rolloutPercentageItem.controls.valueDisabled\n : rolloutPercentageItem.controls.value;\n }\n\n percentageChanged(index: number) {\n if (this.formGroup().controls.rolloutPercentageItems.controls[index].controls.percentage.value < 0) {\n this.formGroup().controls.rolloutPercentageItems.controls[index].controls.percentage.setValue(0);\n }\n if (this.formGroup().controls.rolloutPercentageItems.controls[index].controls.percentage.value > 100) {\n this.formGroup().controls.rolloutPercentageItems.controls[index].controls.percentage.setValue(100);\n }\n\n if (this.formGroup().controls.rolloutPercentageItems.controls.length === 2) {\n this.formGroup().controls.rolloutPercentageItems.controls[1 - index].controls.percentage.setValue(\n 100 - this.formGroup().controls.rolloutPercentageItems.controls[index].controls.percentage.value\n );\n }\n\n this.updateSum();\n }\n\n updateSum() {\n if (this.formGroup().controls.rolloutPercentageItems.controls.length === 0) {\n this.formGroup().controls.rolloutPercentageItemsSum.setValue(100);\n } else {\n this.formGroup().controls.rolloutPercentageItemsSum.setValue(\n this.formGroup()\n .controls.rolloutPercentageItems.controls.map(v => v.controls.percentage.value)\n .reduce((a, b) => a + b, 0)\n );\n }\n }\n\n removeRolloutPercentageItem(index: number) {\n this.formGroup().controls.rolloutPercentageItems.removeAt(index);\n this.formGroup().controls.rolloutPercentageItems.markAsDirty();\n this.updateSum();\n }\n\n removeAll() {\n this.formGroup().controls.rolloutPercentageItems.clear();\n this.formGroup().controls.rolloutPercentageItems.markAsDirty();\n this.updateSum();\n }\n\n}\n","<div class=\"percentage-wrapper\" [formGroup]=\"formGroup()\">\n @if (formGroup().controls.rolloutRules.controls.length > 0) {\n <div class=\"if\">\n <mat-chip-set>\n <mat-chip class=\"chip\">ELSE IF</mat-chip>\n </mat-chip-set>\n </div>\n }\n <div class=\"grow\">\n @for (rolloutPercentageItem of formGroup().controls.rolloutPercentageItems.controls; track $index; let i = $index) {\n <div class=\"percentage-row flex\">\n <div class=\"flex\">\n @if (rolloutPercentageItem.controls.percentage.invalid) {\n <span class=\"attribute-error\">*</span>\n }\n <input\n type=\"number\"\n appDigitOnly\n [ngClass]=\"{ invalid: rolloutPercentageItem.controls.percentage.invalid }\"\n [formControl]=\"rolloutPercentageItem.controls.percentage\"\n (input)=\"percentageChanged(i)\" />\n %\n <span class=\"users\">\n of\n <a href=\"https://configcat.com/docs/V1/advanced/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">\n users\n </a>\n </span>\n </div>\n @if (!readOnly() && formGroup().controls.rolloutPercentageItems.controls.length > 2) {\n <div class=\"delete-option\" matTooltip=\"Remove this % option\" (click)=\"removeRolloutPercentageItem(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </div>\n }\n @if (\n i === formGroup().controls.rolloutPercentageItems.controls.length - 1 &&\n formGroup().controls.rolloutPercentageItemsSum.invalid\n ) {\n <span matTooltipPosition=\"above\" matTooltip=\"The sum of percentages must be equal to 100.\">\n <mat-icon color=\"warn\">error_outline</mat-icon>\n </span>\n }\n <div class=\"value flex\">\n @if (settingModel().settingType !== SettingType.Boolean) {\n <span class=\"value-name\">Served value:</span>\n }\n <app-value\n class=\"served-value\"\n [valueFormControl]=\"value(rolloutPercentageItem)\"\n [setting]=\"settingModel()\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n </div>\n @if (!readOnly()) {\n <div class=\"delete\" matTooltip=\"Remove % options\" (click)=\"removeAll()\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { AfterContentInit, Directive, ElementRef, inject, input } from \"@angular/core\";\n\n@Directive({\n selector: \"[appDeselect]\",\n})\nexport class DeselectDirective implements AfterContentInit {\n private readonly host = inject<ElementRef<HTMLSelectElement>>(ElementRef<HTMLSelectElement>);\n\n readonly selectedItem = input<string>(void 0, { alias: \"appDeselect\" });\n\n ngAfterContentInit() {\n if (!this.selectedItem()) {\n this.host.nativeElement.selectedIndex = -1;\n }\n }\n}\n","import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { NgClass } from \"@angular/common\";\nimport { Component, inject, input } from \"@angular/core\";\nimport {\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n} from \"@angular/forms\";\nimport { MatAutocomplete, MatAutocompleteTrigger } from \"@angular/material/autocomplete\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { FeatureFlagLimitations, RolloutRuleComparator, SegmentComparator, SegmentListModel, SettingDataModel, SettingType } from \"ng-configcat-publicapi\";\nimport { DeselectDirective } from \"../../../_directives/deselect.directive\";\nimport { InputDisplayNormalizerDirective } from \"../../../_directives/input-display-normalizer.directive\";\nimport { RolloutRuleFormGroup, SettingValueFormGroup } from \"../../../_models/setting-list-form\";\nimport { FormHelper } from \"../../../_services/form-helper\";\nimport { SettingListFormHelper } from \"../../../_services/setting-list-form-helper\";\nimport { PopOutEditorComponent, PopOutEditorComponentData } from \"../../../dialogs/popout-editor/popout-editor.component\";\nimport { ValueComponent } from \"../value/value.component\";\n\n@Component({\n selector: \"app-rollout-rules\",\n templateUrl: \"./rollout-rules.component.html\",\n styleUrls: [\"./rollout-rules.component.scss\"],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n MatTooltip,\n MatIcon,\n MatChipSet,\n MatChip,\n MatInput,\n MatAutocompleteTrigger,\n NgClass,\n MatAutocomplete,\n MatOption,\n InputDisplayNormalizerDirective,\n DeselectDirective,\n ValueComponent,\n ],\n})\nexport class RolloutRulesComponent {\n private readonly dialog = inject(MatDialog);\n private readonly settingListFormHelper = inject(SettingListFormHelper);\n readonly featureFlagLimitations = input.required<FeatureFlagLimitations>();\n readonly formGroup = input.required<FormGroup<SettingValueFormGroup>>();\n readonly settingModel = input.required<SettingDataModel>();\n readonly readOnly = input(false);\n readonly segments = input.required<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 comparisonAttributes(): string[] {\n return this.formGroup().root.get(\"comparisonAttributes\")!.value as string[];\n }\n\n removeRule(index: number) {\n this.formGroup().controls.rolloutRules.removeAt(index);\n this.formGroup().controls.rolloutRules.markAsDirty();\n }\n\n onDrop(event: CdkDragDrop<FormGroup<RolloutRuleFormGroup>[]>) {\n const rolloutRules = this.formGroup().controls.rolloutRules.controls;\n moveItemInArray(rolloutRules, event.previousIndex, event.currentIndex);\n this.formGroup().markAsDirty();\n }\n\n attributeChanged(eventTarget: EventTarget | null, comparisonAttribute: FormControl<string>) {\n const event = (eventTarget as HTMLInputElement).value;\n if (this.defaultComparisonAttributes.includes(event)) {\n if (comparisonAttribute.value !== event) {\n comparisonAttribute.setValue(event);\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: FormGroup<RolloutRuleFormGroup>) {\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: FormGroup<RolloutRuleFormGroup>) {\n return this.settingListFormHelper.getComparisonValueType(rolloutRule.controls.comparator!.value);\n }\n\n getInfoClass(rolloutRule: FormGroup<RolloutRuleFormGroup>) {\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: FormGroup<RolloutRuleFormGroup>) {\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: FormGroup<RolloutRuleFormGroup>) {\n const validators = this.settingListFormHelper.getComparisonValueValidators(\n rolloutRule.controls.comparator!.value,\n this.featureFlagLimitations()\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(\n FormHelper.normalizeNumberStoredAsString(rolloutRule.controls.comparisonValue!.value)\n );\n if (oldValue !== rolloutRule.controls.comparisonValue!.value) {\n rolloutRule.controls.comparisonValue!.markAsTouched();\n }\n }\n rolloutRule.controls.comparisonValue!.updateValueAndValidity();\n }\n\n isListType(rolloutRule: FormGroup<RolloutRuleFormGroup>) {\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 popOut(rolloutRule: FormGroup<RolloutRuleFormGroup>) {\n this.dialog.open<PopOutEditorComponent, PopOutEditorComponentData>(PopOutEditorComponent, {\n width: \"700px\",\n data: {\n control: rolloutRule.controls.comparisonValue!,\n multiline: this.isListType(rolloutRule),\n maxValueLength: this.featureFlagLimitations().maxComparisonValueLength,\n },\n });\n }\n\n}\n","<div [formGroup]=\"formGroup()\">\n <div\n cdkDropList\n [cdkDropListDisabled]=\"readOnly()\"\n [cdkDropListData]=\"formGroup().controls.rolloutRules.controls\"\n (cdkDropListDropped)=\"onDrop($event)\">\n @for (rolloutRule of formGroup().controls.rolloutRules.controls; track $index; let i = $index) {\n <div cdkDrag>\n <div class=\"targeting-row\">\n @if (rolloutRule.controls.type.value === 0) {\n <div class=\"fields flex\">\n @if (!readOnly()) {\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n }\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\n href=\"https://configcat.com/docs/V1/advanced/user-object/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"user-link\">\n user's\n </a>\n </div>\n <select\n class=\"targeting-select attribute-select\"\n matTooltip=\"Comparison attribute\"\n matTooltipPosition=\"above\"\n [disabled]=\"readOnly()\"\n (change)=\"attributeChanged($event.target, rolloutRule.controls.comparisonAttribute!)\">\n @for (comparisonAttribute of defaultComparisonAttributes; track $index) {\n <option [selected]=\"comparisonAttribute === rolloutRule.controls.comparisonAttribute!.value\">\n {{ comparisonAttribute }}\n </option>\n }\n <option\n [selected]=\"\n defaultComparisonAttributes.indexOf(rolloutRule.controls.comparisonAttribute!.value) === -1\n \">\n Custom\n </option>\n </select>\n <span\n class=\"attribute-span\"\n matTooltipPosition=\"above\"\n matTooltip=\"Custom user attribute\"\n [hidden]=\"defaultComparisonAttributes.indexOf(rolloutRule.controls.comparisonAttribute!.value) !== -1\">\n @if (rolloutRule.controls.comparisonAttribute!.invalid) {\n <span class=\"attribute-error\">*</span>\n }\n <input\n type=\"text\"\n matInput\n class=\"attribute\"\n placeholder=\"e.g. Role, SubscriptionType\"\n [ngClass]=\"{ invalid: rolloutRule.controls.comparisonAttribute!.invalid }\"\n [matAutocomplete]=\"auto\"\n [formControl]=\"rolloutRule.controls.comparisonAttribute!\" />\n </span>\n <mat-autocomplete #auto=\"matAutocomplete\">\n @for (option of comparisonAttributes(); track $index) {\n <mat-option [value]=\"option\">\n {{ option }}\n </mat-option>\n }\n </mat-autocomplete>\n <div class=\"select-wrapper\">\n <select\n class=\"targeting-select\"\n matTooltip=\"Comparator\"\n matTooltipPosition=\"above\"\n [formControl]=\"rolloutRule.controls.comparator!\"\n (change)=\"comparatorChanged(rolloutRule)\">\n <optgroup label=\"CONFIDENTIAL TEXT\">\n @for (comparator of rolloutRuleComparators.slice(16, 18); track $index) {\n <option [ngValue]=\"comparator.value\">\n {{ comparator.label }}\n </option>\n }\n </optgroup>\n <optgroup label=\"TEXT\">\n @for (comparator of rolloutRuleComparators.slice(0, 4); track $index) {\n <option [ngValue]=\"comparator.value\">\n {{ comparator.label }}\n </option>\n }\n </optgroup>\n <optgroup label=\"SEMANTIC VERSION\">\n @for (comparator of rolloutRuleComparators.slice(4, 10); track $index) {\n <option [ngValue]=\"comparator.value\">\n {{ comparator.label }}\n </option>\n }\n </optgroup>\n <optgroup label=\"NUMBER\">\n @for (comparator of rolloutRuleComparators.slice(10, 16); track $index) {\n <option [ngValue]=\"comparator.value\">\n {{ comparator.label }}\n </option>\n }\n </optgroup>\n </select>\n <div [class]=\"getInfoClass(rolloutRule)\" [matTooltip]=\"getInfoTooltip(rolloutRule)\">\n <a\n href=\"https://configcat.com/docs/V1/advanced/targeting/#comparator\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <mat-icon class=\"icon-transform-rotate\">info</mat-icon>\n </a>\n </div>\n </div>\n <div class=\"comparison-value\">\n @if (rolloutRule.controls.comparisonValue!.invalid) {\n <span class=\"error\">*</span>\n }\n <input\n matTooltip=\"Comparison value\"\n matTooltipPosition=\"above\"\n inputDisplayNormalizer\n [ngClass]=\"{ invalid: rolloutRule.controls.comparisonValue!.invalid }\"\n [formControl]=\"rolloutRule.controls.comparisonValue!\"\n [type]=\"getComparisonValueType(rolloutRule)\"\n [placeholder]=\"getPlaceHolder(rolloutRule)\" />\n @if (getComparisonValueType(rolloutRule) === \"text\") {\n <div\n class=\"expand\"\n matTooltip=\"Pop-out editor\"\n matTooltipPosition=\"above\"\n (click)=\"popOut(rolloutRule)\">\n <mat-icon>height</mat-icon>\n </div>\n }\n </div>\n @if (!readOnly()) {\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" (click)=\"removeRule(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </div>\n }\n </div>\n }\n @if (rolloutRule.controls.type.value === 1) {\n <div class=\"fields flex\">\n @if (!readOnly()) {\n <div class=\"drag-handle\" cdkDragHandle matTooltipPosition=\"above\" matTooltip=\"Drag here to reorder\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n }\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\n href=\"https://configcat.com/docs/V1/advanced/user-object/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"user-link\">\n user\n </a>\n </div>\n <div class=\"select-wrapper\">\n <select\n class=\"targeting-select segment-comparator\"\n matTooltip=\"Segment comparator\"\n matTooltipPosition=\"above\"\n [formControl]=\"rolloutRule.controls.segmentComparator!\">\n @for (comparator of segmentComparators; track $index) {\n <option [ngValue]=\"comparator.value\">\n {{ comparator.label }}\n </option>\n }\n </select>\n </div>\n <div class=\"select-wrapper\">\n <div class=\"segment-select-more\">\n @if (rolloutRule.controls.segmentId!.invalid) {\n <span class=\"attribute-error\">*</span>\n }\n <select\n class=\"targeting-select segment-select invalid\"\n matTooltip=\"Segment\"\n matTooltipPosition=\"above\"\n [appDeselect]=\"rolloutRule.controls.segmentId!.value\"\n [formControl]=\"rolloutRule.controls.segmentId!\"\n [ngClass]=\"{ invalid: rolloutRule.controls.segmentId!.invalid }\">\n @for (segment of segments(); track $index) {\n <option [ngValue]=\"segment.segmentId\" [title]=\"segment.description\">\n {{ segment.name }}\n </option>\n } @empty {\n <option disabled>no segments available</option>\n }\n </select>\n </div>\n </div>\n @if (!readOnly()) {\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" (click)=\"removeRule(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </div>\n }\n </div>\n }\n <div class=\"value flex\">\n @if (settingModel().settingType !== SettingType.Boolean) {\n <div class=\"serve\">\n <mat-chip-set>\n <mat-chip class=\"chip\">Serve:</mat-chip>\n </mat-chip-set>\n </div>\n }\n <app-value\n class=\"served-value\"\n [valueFormControl]=\"rolloutRule.controls.value\"\n [setting]=\"settingModel()\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n </div>\n </div>\n </div>\n }\n </div>\n</div>\n","import { Component, inject, input, output } from \"@angular/core\";\nimport {\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n} from \"@angular/forms\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n FeatureFlagLimitations,\n RolloutPercentageItemModel,\n RolloutRuleComparator,\n RolloutRuleModel,\n SegmentComparator,\n SegmentListModel,\n SettingDataModel,\n SettingType,\n SettingValueModel,\n} from \"ng-configcat-publicapi\";\nimport { SettingValueFormGroup } from \"../../_models/setting-list-form\";\nimport { SettingListFormHelper } from \"../../_services/setting-list-form-helper\";\nimport { RolloutPercentageItemsComponent } from \"./rollout-percentage-items/rollout-percentage-items.component\";\nimport { RolloutRulesComponent } from \"./rollout-rules/rollout-rules.component\";\nimport { ValueComponent } from \"./value/value.component\";\n\n@Component({\n selector: \"app-setting\",\n templateUrl: \"./setting.component.html\",\n styleUrls: [\"./setting.component.scss\"],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatTooltip,\n MatIcon,\n RolloutRulesComponent,\n RolloutPercentageItemsComponent,\n MatChipSet,\n MatChip,\n ValueComponent,\n ],\n})\nexport class SettingComponent {\n private readonly formHelper = inject(SettingListFormHelper);\n\n readonly dashboardBasePath = input(\"https://app.configcat.com\");\n readonly productId = input.required<string>();\n readonly environmentId = input.required<string>();\n readonly configId = input.required<string>();\n readonly featureFlagLimitations = input.required<FeatureFlagLimitations>();\n readonly formGroup = input.required<FormGroup<SettingValueFormGroup>>();\n readonly readOnly = input(false);\n readonly canDeleteSetting = input(false);\n readonly deleteSettingText = input(\"Delete setting\");\n readonly showEnvironmentName = input(false);\n readonly segments = input.required<SegmentListModel[]>();\n readonly model = input.required<SettingValueModel>();\n\n readonly deleteSettingRequested = output<{ setting: SettingDataModel }>();\n readonly subscriptionLimitReached = output();\n\n rulesBeingRendered = false;\n\n SettingType = SettingType;\n\n addRolloutRule() {\n const featureFlagLimitations = this.featureFlagLimitations();\n if (this.formGroup().controls.rolloutRules.length >= featureFlagLimitations.maxTargetingRuleCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n\n this.formGroup().controls.rolloutRules.push(\n this.formHelper.createRolloutRuleFormGroup(\n {\n comparisonAttribute: \"Identifier\",\n comparator: RolloutRuleComparator.SensitiveIsOneOf,\n comparisonValue: \"\",\n value: this.model().setting.settingType === SettingType.Boolean ? (false as unknown) : null,\n } as RolloutRuleModel,\n this.readOnly(),\n this.model().setting.settingType,\n featureFlagLimitations\n )\n );\n this.formGroup().controls.rolloutRules.markAsDirty();\n }\n\n addSegmentRolloutRule() {\n const featureFlagLimitations = this.featureFlagLimitations();\n if (this.formGroup().controls.rolloutRules.length >= featureFlagLimitations.maxTargetingRuleCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n\n this.formGroup().controls.rolloutRules.push(\n this.formHelper.createRolloutRuleFormGroup(\n {\n segmentComparator: SegmentComparator.IsIn,\n value: this.model().setting.settingType === SettingType.Boolean ? (false as unknown) : null,\n } as RolloutRuleModel,\n this.readOnly(),\n this.model().setting.settingType,\n featureFlagLimitations\n )\n );\n this.formGroup().controls.rolloutRules.markAsDirty();\n }\n\n removeRolloutRules() {\n this.formGroup().controls.rolloutRules.clear();\n this.formGroup().controls.rolloutRules.markAsDirty();\n }\n\n addRolloutPercentageItem() {\n const featureFlagLimitations = this.featureFlagLimitations();\n if (this.formGroup().controls.rolloutPercentageItems.length >= featureFlagLimitations.maxPercentageOptionCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n\n const model = this.model();\n if (this.formGroup().controls.rolloutPercentageItems.length === 0) {\n switch (model.setting.settingType) {\n case SettingType.Boolean:\n this.formGroup().controls.rolloutPercentageItems.push(\n this.formHelper.createRolloutPercentageItemFormGroup(\n {\n percentage: 0,\n value: true as unknown,\n } as RolloutPercentageItemModel,\n this.readOnly(),\n model.setting.settingType,\n featureFlagLimitations\n )\n );\n this.formGroup().controls.rolloutPercentageItems.push(\n this.formHelper.createRolloutPercentageItemFormGroup(\n {\n percentage: 100,\n value: false as unknown,\n } as RolloutPercentageItemModel,\n this.readOnly(),\n model.setting.settingType,\n featureFlagLimitations\n )\n );\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.formGroup().controls.rolloutPercentageItems.push(\n this.formHelper.createEmptyPercentageItemFormGroup(\n 25,\n this.readOnly(),\n model.setting.settingType,\n featureFlagLimitations\n )\n );\n }\n\n break;\n }\n } else if (model.setting.settingType !== SettingType.Boolean) {\n this.formGroup().controls.rolloutPercentageItems.push(\n this.formHelper.createEmptyPercentageItemFormGroup(\n 0,\n this.readOnly(),\n model.setting.settingType,\n featureFlagLimitations\n )\n );\n }\n\n this.formGroup().controls.rolloutPercentageItems.markAsDirty();\n }\n\n removeRolloutPercentageItems() {\n this.formGroup().controls.rolloutPercentageItems.clear();\n this.formGroup().controls.rolloutPercentageItems.markAsDirty();\n }\n\n deleteSetting() {\n this.deleteSettingRequested.emit({ setting: this.model().setting });\n }\n\n getDashboardUrl() {\n return (\n this.dashboardBasePath()\n + \"/\"\n + this.productId()\n + \"/\"\n + this.configId()\n + \"/\"\n + this.environmentId()\n + \"?settingId=\"\n + this.model().setting.settingId\n );\n }\n}\n","@let settingModel = model();\n\n<div class=\"setting-container\">\n <div class=\"setting-full\" [formGroup]=\"formGroup()\">\n <div class=\"berries\">\n @if (canDeleteSetting()) {\n <div class=\"berry delete\" matTooltip=\"Delete feature flag\" data-robot=\"deleteSetting\" (click)=\"deleteSetting()\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </div>\n }\n </div>\n <div class=\"setting-header flex\">\n <div class=\"setting-name flex\">\n <div class=\"name\" data-robot=\"settingName\">\n {{ settingModel.setting.name }}\n @if (showEnvironmentName()) {\n <span class=\"environment-name\">({{ settingModel.environment.name }})</span>\n }\n </div>\n </div>\n </div>\n <div class=\"setting-content\">\n <div class=\"setting-details\">\n <div class=\"setting-key\">\n <code data-robot=\"settingKey\">{{ settingModel.setting.key }}</code>\n </div>\n @if (settingModel.setting.hint) {\n <span class=\"description\">{{ settingModel.setting.hint }}</span>\n }\n <div class=\"integrations\">\n <a target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"getDashboardUrl()\">Open in ConfigCat</a>\n </div>\n </div>\n\n <div class=\"rules-list\">\n <div class=\"rollout-rules\">\n @if (formGroup().controls.rolloutRules.controls.length !== 0) {\n <app-rollout-rules\n [formGroup]=\"formGroup()\"\n [segments]=\"segments()\"\n [readOnly]=\"readOnly()\"\n [settingModel]=\"settingModel.setting\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n }\n </div>\n\n @if (formGroup().controls.rolloutPercentageItems.controls.length !== 0) {\n <app-rollout-percentage-items\n [formGroup]=\"formGroup()\"\n [readOnly]=\"readOnly()\"\n [settingModel]=\"settingModel.setting\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n }\n\n <div class=\"all-other flex\">\n @if (\n formGroup().controls.rolloutPercentageItems.length === 0 && formGroup().controls.rolloutRules.length !== 0\n ) {\n <div\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 }\n @if (formGroup().controls.rolloutPercentageItems.length !== 0) {\n <div\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 }\n @if (\n formGroup().controls.rolloutPercentageItems.length === 0 && formGroup().controls.rolloutRules.length === 0\n ) {\n <div>\n <mat-chip-set>\n <mat-chip class=\"chip\">To all users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n }\n <app-value\n class=\"served-value\"\n [valueFormControl]=\"formGroup().controls.value\"\n [setting]=\"settingModel.setting\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n </div>\n <div class=\"buttons\">\n @if (!readOnly()) {\n <button type=\"button\" class=\"targeting-button\" (click)=\"addRolloutRule()\">\n {{ formGroup().controls.rolloutRules.length === 0 ? \"Target specific users\" : \"Add new targeting rule\" }}\n </button>\n }\n @if (!readOnly()) {\n <button type=\"button\" class=\"targeting-button\" (click)=\"addSegmentRolloutRule()\">\n {{ formGroup().controls.rolloutRules.length === 0 ? \"Target segment\" : \"Add new segment rule\" }}\n </button>\n }\n @if (!readOnly()) {\n <button\n type=\"button\"\n class=\"targeting-button\"\n [disabled]=\"\n settingModel.setting.settingType === SettingType.Boolean &&\n formGroup().controls.rolloutPercentageItems.length !== 0\n \"\n (click)=\"addRolloutPercentageItem()\">\n {{ formGroup().controls.rolloutPercentageItems.length === 0 ? \"Target % of users\" : \"Add % option\" }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { HttpErrorResponse } from \"@angular/common/http\";\nimport { Component, inject, input, OnChanges, OnDestroy, output } from \"@angular/core\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n\n EvaluationVersion,\n RolloutPercentageItemModel,\n RolloutRuleModel,\n SegmentListModel,\n SettingDataModel,\n UpdateSettingValueModel,\n} from \"ng-configcat-publicapi\";\nimport { forkJoin, Observable, Subscription } from \"rxjs\";\nimport { DeleteSettingModel, SettingValuesModel, UpdateSettingValuesModel } from \"../_models\";\nimport { SettingValuesFormGroup } from \"../_models/setting-list-form\";\nimport { SettingListFormHelper } from \"../_services/setting-list-form-helper\";\nimport { ConfirmationDialogComponent, FormHelper, MessagingService, RerouteDialogComponent } from \"../bootstrap\";\nimport { ConcurrentDeleteDialogComponent, ConcurrentDeleteDialogComponentData } from \"../dialogs/concurrent-delete-dialog/concurrent-delete-dialog.component\";\nimport { ConfirmationDialogData } from \"../dialogs/confirmation-dialog/confirmation-dialog\";\nimport { ReasonDialogComponent, ReasonDialogComponentResult } from \"../dialogs/reason-dialog/reason-dialog.component\";\nimport { SettingComponent } from \"./setting/setting.component\";\n\n@Component({\n selector: \"app-setting-list\",\n templateUrl: \"./setting-list.component.html\",\n styleUrls: [\"./setting-list.component.scss\"],\n imports: [FormsModule, ReactiveFormsModule, RxReactiveFormsModule, SettingComponent, MatButton, MatIcon],\n})\nexport class SettingListComponent implements OnChanges, OnDestroy {\n private readonly formHelper = inject(SettingListFormHelper);\n private readonly dialog = inject(MatDialog);\n private readonly messagingService = inject(MessagingService);\n\n readonly productId = input.required<string>();\n readonly environmentId = input.required<string>();\n readonly configId = input.required<string>();\n readonly dashboardBasePath = input(\"https://app.configcat.com\");\n\n readonly canDeleteSetting = input(false);\n\n readonly onSave = input.required<(value: UpdateSettingValuesModel) => Observable<SettingValuesModel>>();\n readonly loadSettingValues = input.required<() => Observable<SettingValuesModel>>();\n readonly loadSegments = input.required<() => Observable<SegmentListModel[]>>();\n readonly deleteSettingText = input(\"Delete setting\");\n readonly showEnvironmentName = input(false);\n\n readonly loadSucceeded = output<boolean>();\n readonly deleteSettingRequested = output<DeleteSettingModel>();\n readonly formValuesChanged = output();\n readonly saveFailed = output<Error>();\n\n formValuesChangedSubscription!: Subscription | null;\n\n loading = true;\n\n settingValues!: SettingValuesModel;\n segments!: SegmentListModel[];\n formGroup!: FormGroup<SettingValuesFormGroup>;\n\n submitting = false;\n showFeedBackMessage = false;\n readOnly = false;\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({\n next: 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 error: () => {\n this.messagingService.showErrorSnack(\"We could not load your Feature Flags and Settings.\", 60000);\n },\n });\n }\n\n onSubscriptionLimitReached() {\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 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 FormArray;\n }\n\n getSettingValueFormGroups() {\n return this.settingValuesFormArray().controls.map(c => c as FormGroup);\n }\n\n private buildUpdateSettingValuesModel(settingValuesVM: UpdateSettingValueModel[]) {\n return settingValuesVM.map(settingValueVM => {\n return {\n rolloutRules: settingValueVM.rolloutRules?.map(\n rolloutRuleVM =>\n ({\n comparisonAttribute: rolloutRuleVM.comparisonAttribute,\n comparator: rolloutRuleVM.comparator,\n comparisonValue:\n rolloutRuleVM.comparator && rolloutRuleVM.comparisonValue\n ? this.formHelper.normalizeComparisonValue(\n rolloutRuleVM.comparator,\n rolloutRuleVM.comparisonValue\n )\n : null,\n segmentComparator: rolloutRuleVM.segmentComparator,\n segmentId: rolloutRuleVM.segmentId,\n value: rolloutRuleVM.value,\n }) as RolloutRuleModel\n ),\n rolloutPercentageItems: settingValueVM.rolloutPercentageItems?.map(\n rolloutPercentageItemVM =>\n ({\n percentage: rolloutPercentageItemVM.percentage,\n value: rolloutPercentageItemVM.value,\n }) as RolloutPercentageItemModel\n ),\n value: settingValueVM.value,\n } as UpdateSettingValueModel;\n });\n }\n\n submit() {\n if (!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 = {\n settingValues: this.buildUpdateSettingValuesModel(this.formHelper.getRawValues(this.formGroup)),\n knownLastUpdatedAt: this.settingValues.lastUpdatedAt,\n forced: false,\n } as UpdateSettingValuesModel;\n\n if (this.settingValues.reasonRequired) {\n const dialogRef = this.dialog.open<ReasonDialogComponent, never, ReasonDialogComponentResult>(ReasonDialogComponent, {\n width: \"450px\",\n });\n dialogRef.afterClosed().subscribe(result => {\n if (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.updateSettingValues(updateSettingValuesModel);\n }\n\n updateSettingValues(updateSettingValuesModel: UpdateSettingValuesModel) {\n this.onSave()(updateSettingValuesModel).subscribe({\n next: settingValues => {\n this.settingValues = settingValues;\n this.createFormGroup();\n this.submitting = false;\n this.messagingService.showSuccessSnack(\"Settings saved successfully.\", 5000);\n },\n error: (error: Error) => {\n this.submitting = false;\n if (error instanceof HttpErrorResponse && error.status === 400 && FormHelper.getHttpErrorResponseMessage(error, \"Reason\") === \"Reason required\") {\n const dialogRef = this.dialog.open<ReasonDialogComponent, never, ReasonDialogComponentResult>(\n ReasonDialogComponent,\n {\n width: \"450px\",\n }\n );\n dialogRef.afterClosed().subscribe(result => {\n if (result?.button === \"save\" && result.reason) {\n updateSettingValuesModel.reason = result.reason;\n this.updateSettingValues(updateSettingValuesModel);\n }\n });\n return;\n }\n if (\n error instanceof HttpErrorResponse\n && error.status === 404\n ) {\n this.openConcurentDeleteDialog();\n return;\n }\n\n this.formGroup.setErrors({ internalServerError: \"Internal server error\" });\n this.showFeedBackMessage = true;\n this.saveFailed.emit(error);\n },\n });\n }\n\n revert() {\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\n data: {\n title: \"Revert to last saved state?\",\n body: \"All changes will be lost.\",\n yesButtonLabel: \"Revert\",\n cancelButtonLabel: \"No\",\n },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === \"yes\") {\n this.reloadSettingValues();\n }\n });\n }\n\n onDeleteSettingRequested(setting: { setting: SettingDataModel }) {\n this.deleteSettingRequested.emit({\n setting: setting.setting,\n environment: this.settingValues.environment,\n config: this.settingValues.config,\n });\n }\n\n openConcurentDeleteDialog() {\n const dialogRef = this.dialog.open<ConcurrentDeleteDialogComponent, ConcurrentDeleteDialogComponentData, string>(\n ConcurrentDeleteDialogComponent,\n {\n width: \"450px\",\n data: {\n organizationId: \"\",\n productId: this.productId(),\n configId: this.configId(),\n environmentId: this.environmentId(),\n evaluationVersion: EvaluationVersion.V1,\n },\n }\n );\n dialogRef.afterClosed().subscribe(() => {\n this.saveFailed.emit(new Error(\"Concurent Delete Error.\"));\n });\n }\n}\n","@if (!loading) {\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\">\n @for (settingValueFromGroup of formGroup!.controls.settingValues.controls; track $index; let i = $index) {\n <div class=\"wrapper\">\n <div class=\"size-obs\" [style.display]=\"'block'\">\n <div>\n <app-setting\n [formGroup]=\"settingValueFromGroup\"\n [readOnly]=\"readOnly\"\n [canDeleteSetting]=\"canDeleteSetting()\"\n [deleteSettingText]=\"deleteSettingText()\"\n [showEnvironmentName]=\"showEnvironmentName()\"\n [model]=\"settingValues!.settingValues[i]\"\n [segments]=\"segments\"\n [productId]=\"productId()\"\n [configId]=\"configId()\"\n [environmentId]=\"environmentId()\"\n [dashboardBasePath]=\"dashboardBasePath()\"\n [featureFlagLimitations]=\"settingValues!.featureFlagLimitations\"\n (subscriptionLimitReached)=\"onSubscriptionLimitReached()\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" />\n </div>\n </div>\n </div>\n }\n @if (!readOnly && formGroup.dirty) {\n <div class=\"save\">\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [disabled]=\"submitting\">\n <mat-icon>backup</mat-icon>\n <span>Save & publish changes</span>\n </button>\n <button type=\"button\" class=\"revert-button\" mat-stroked-button [disabled]=\"submitting\" (click)=\"revert()\">\n <span>Revert</span>\n </button>\n @if (formGroup.touched && formGroup.invalid && showFeedBackMessage) {\n <div class=\"feedback\">\n @if (formGroup.errors && formGroup.errors[\"internalServerError\"]) {\n <div class=\"error\">\n <span>\n Something went wrong and we could not save your settings. You can try again or\n <a href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact us.</a>\n </span>\n </div>\n }\n @if (!formGroup.errors || !formGroup.errors[\"internalServerError\"]) {\n <div class=\"error\">\n <span>Oh no! A feature flag has invalid or missing data.</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </form>\n}\n","import { Component, input, output } from \"@angular/core\";\nimport { SegmentListModel, SettingFormulaModel, SettingValueModel } from \"ng-configcat-publicapi\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, map } from \"rxjs/operators\";\nimport { DeleteSettingModel, SettingValuesModel, UpdateSettingValuesModel } from \"../_models\";\nimport { BaseComponent } from \"../base/base.component\";\nimport { SettingListComponent } from \"../setting-list/setting-list.component\";\n\n@Component({\n selector: \"app-setting-item\",\n templateUrl: \"./setting-item.component.html\",\n styleUrls: [\"./setting-item.component.scss\"],\n imports: [SettingListComponent],\n})\nexport class SettingItemComponent extends BaseComponent {\n readonly productId = input.required<string>();\n readonly environmentId = input.required<string>();\n readonly configId = input.required<string>();\n readonly settingId = input.required<number>();\n\n readonly canDeleteSetting = input(true);\n readonly deleteSettingText = input(\"Delete setting\");\n readonly showEnvironmentName = input(true);\n\n readonly deleteSettingRequested = output<DeleteSettingModel>();\n\n readonly loadSucceeded = output<boolean>();\n readonly loadFailed = output<Error>();\n readonly saveSucceeded = output<SettingValuesModel>();\n readonly saveFailed = output<Error>();\n\n readonly formValuesChanged = output();\n\n settingValue!: SettingValueModel;\n dashboardBasePath: string;\n\n settingFormulaModel!: SettingFormulaModel;\n\n constructor() {\n super();\n this.dashboardBasePath = this.getDashboardBasePath();\n }\n\n loadSettingValues = (): Observable<SettingValuesModel> => {\n return this.createSettingValuesService()\n .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 featureFlagLimitations: settingValue.featureFlagLimitations,\n } as SettingValuesModel;\n\n return settingValues;\n }),\n catchError((error: Error) => {\n this.loadFailed.emit(error);\n throw error;\n })\n );\n };\n\n itemLoadSucceeded() {\n this.loadSucceeded.emit(true);\n }\n\n itenSaveFailed(error: Error) {\n this.saveFailed.emit(error);\n }\n\n loadSegments = (): Observable<SegmentListModel[]> => {\n return this.createSegmentsService()\n .getSegments(this.productId())\n .pipe(\n map(segments => {\n return segments;\n }),\n catchError((error: Error) => {\n throw 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];\n\n return this.createSettingValuesService()\n .replaceSettingValue(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 featureFlagLimitations: settingValue.featureFlagLimitations,\n } as SettingValuesModel;\n\n this.saveSucceeded.emit(settingValues);\n return settingValues;\n })\n );\n };\n\n onDeleteSettingRequested(setting: DeleteSettingModel) {\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","<app-setting-list\n [canDeleteSetting]=\"canDeleteSetting()\"\n [onSave]=\"handleSave\"\n [loadSettingValues]=\"loadSettingValues\"\n [loadSegments]=\"loadSegments\"\n [deleteSettingText]=\"deleteSettingText()\"\n [showEnvironmentName]=\"showEnvironmentName()\"\n [productId]=\"productId()\"\n [configId]=\"configId()\"\n [environmentId]=\"environmentId()\"\n [dashboardBasePath]=\"dashboardBasePath\"\n (loadSucceeded)=\"itemLoadSucceeded()\"\n (saveFailed)=\"itenSaveFailed($event)\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n (formValuesChanged)=\"onFormValuesChanged()\" />\n","import { Component, inject, input, output } from \"@angular/core\";\nimport { FormControl, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatError, MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { AuthorizationModel } from \"../_models\";\nimport { PublicApiService } from \"../_services\";\nimport { FormHelper } from \"../_services/form-helper\";\n\n@Component({\n selector: \"app-authorization\",\n templateUrl: \"./authorization.component.html\",\n styleUrls: [\"./authorization.component.scss\"],\n imports: [FormsModule, ReactiveFormsModule, RxReactiveFormsModule, MatFormField, MatLabel, MatInput, MatError, MatButton],\n})\nexport class AuthorizationComponent {\n private readonly formBuilder = inject(NonNullableFormBuilder);\n private readonly publicApiService = inject(PublicApiService);\n\n readonly basePath = input(null);\n readonly integrationName = input(\"ConfigCat Feature Flags\");\n readonly authorized = output<AuthorizationModel>();\n readonly authorizationError = output();\n FormHelper = FormHelper;\n\n formGroup = this.formBuilder.group({\n basicAuthUsername: new FormControl<string>(\"\", { validators: [Validators.required], nonNullable: true }),\n basicAuthPassword: new FormControl<string>(\"\", { validators: [Validators.required], nonNullable: true }),\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\n meService.getMe().subscribe({\n next: 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 error: () => {\n this.formGroup.setErrors({ invalidAuthorization: \"Invalid Basic auth user name or password\" });\n this.authorizationError.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 credentials.\n </p>\n <ul>\n <li>\n <a target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"getPublicApiUrl()\">\n Get your Basic Auth user name and password\n </a>\n to access ConfigCat Public API.\n <br />\n <b>Note!</b>\n Your ConfigCat account's email address and password will not work here.\n </li>\n <li>Type your credentials here and click the Authorize button.</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 @if (formGroup.controls.basicAuthUsername.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.basicAuthUsername) }}\n </mat-error>\n }\n </mat-form-field>\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Basic auth password</mat-label>\n <input\n matInput\n placeholder=\"Basic auth password\"\n formControlName=\"basicAuthPassword\"\n type=\"password\"\n autocomplete=\"current-password\" />\n @if (formGroup.controls.basicAuthPassword.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.basicAuthPassword) }}\n </mat-error>\n }\n </mat-form-field>\n <div>\n <button mat-flat-button color=\"primary\" type=\"submit\" class=\"submit\">Authorize</button>\n @if (formGroup.invalid && formGroup.errors && formGroup.errors[\"invalidAuthorization\"]) {\n <mat-error>\n {{ formGroup.errors[\"invalidAuthorization\"] }}\n </mat-error>\n }\n </div>\n </div>\n </div>\n</form>\n","import { Component, input, output } from \"@angular/core\";\nimport { BaseComponent } from \"./base.component\";\n\n@Component({\n selector: \"app-base-select\",\n template: \"<div></div>\",\n})\nexport class BaseSelectComponent extends BaseComponent {\n readonly customDropdown = input<boolean>(false);\n\n readonly dropdownOpened = output<boolean>();\n\n protected openChanged(event: boolean) {\n this.dropdownOpened.emit(event);\n }\n}\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, input, linkedSignal, signal } from \"@angular/core\";\nimport { rxResource } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatFormField, MatLabel, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { tap } from \"rxjs\";\nimport { BaseSelectComponent } from \"../../base/base-select.component\";\n\n@Component({\n selector: \"app-product-select\",\n templateUrl: \"./product-select.component.html\",\n styleUrls: [\"./product-select.component.css\"],\n imports: [\n MatFormField,\n MatLabel,\n MatSelect,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatOption,\n MatTooltip,\n MatDivider,\n NgClass,\n MatIcon,\n MatInput,\n MatSuffix,\n MatIconButton,\n ],\n})\nexport class ProductSelectComponent extends BaseSelectComponent {\n readonly valueFormControl = input.required<FormControl>();\n readonly preSelectedProductId = input<string>();\n\n readonly filterText = signal(\"\");\n readonly filteredProducts = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n if (this.products.isLoading() || !this.products.hasValue()) {\n return [];\n }\n return this.products.value().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText) && !s.description?.toLocaleLowerCase().includes(filterText) })\n );\n });\n readonly hasFilteredProduct = computed(() => !!this.filteredProducts().find(f => !f.hidden));\n\n readonly products = rxResource({\n params: () => ({}),\n stream: () => {\n return this.createProductsService()\n .getProducts().pipe(tap((products) => {\n this.valueFormControl().markAsPending();\n if (products.length > 0) {\n let selectedProductId;\n if (this.preSelectedProductId() && products.find(product => product.productId === this.preSelectedProductId())) {\n selectedProductId = this.preSelectedProductId()!;\n } else {\n selectedProductId = products[0].productId;\n }\n this.valueFormControl().setValue(selectedProductId, {\n emitEvent: true,\n emitModelToViewChange: true,\n emitViewToModelChange: true,\n });\n } else {\n this.valueFormControl().setValue(\"\");\n }\n })\n );\n },\n });\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Product</mat-label>\n <mat-select\n placeholder=\"Product\"\n name=\"productValue\"\n [formControl]=\"valueFormControl()\"\n [panelClass]=\"customDropdown() ? 'custom-dropdown-below' : ''\"\n (openedChange)=\"openChanged($event)\"\n (opened)=\"clearFilter()\"\n (closed)=\"clearFilter()\">\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter products\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n @for (product of filteredProducts(); track product.productId) {\n <mat-option\n [value]=\"product.productId\"\n [ngClass]=\"{ hidden: product.hidden }\"\n [matTooltip]=\"\n product.description ? `Name: ${product.name}\\nDescription: ${product.description}` : `Name: ${product.name}`\n \"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\">\n {{ product.name }}\n </mat-option>\n } @empty {\n <mat-option disabled>No product available.</mat-option>\n }\n @if (!hasFilteredProduct()) {\n <mat-option disabled>No product found.</mat-option>\n }\n </mat-select>\n</mat-form-field>\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, forwardRef, input, linkedSignal, signal } from \"@angular/core\";\nimport { rxResource } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatFormField, MatLabel, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { tap } from \"rxjs\";\nimport { BaseSelectComponent } from \"../../base/base-select.component\";\n\n@Component({\n selector: \"app-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 imports: [\n MatFormField,\n MatLabel,\n MatSelect,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatOption,\n MatTooltip,\n MatDivider,\n NgClass,\n MatIcon,\n MatInput,\n MatSuffix,\n MatIconButton,\n ],\n})\nexport class ConfigSelectComponent extends BaseSelectComponent {\n readonly valueFormControl = input.required<FormControl<string>>();\n readonly productId = input.required<string>();\n readonly preSelectedConfigId = input<string>();\n\n readonly filterText = signal(\"\");\n readonly filteredConfigs = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n if (this.configs.isLoading() || !this.configs.hasValue()) {\n return [];\n }\n return this.configs.value().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText) && !s.description?.toLocaleLowerCase().includes(filterText) })\n );\n });\n readonly hasFilteredConfig = computed(() => !!this.filteredConfigs().find(f => !f.hidden));\n\n readonly configs = rxResource({\n params: () => ({ productId: this.productId() }),\n stream: ({ params }) => {\n this.valueFormControl().markAsPending();\n return this.createConfigsService()\n .getConfigs(params.productId).pipe(tap((configs) => {\n if (configs.length > 0) {\n if (this.preSelectedConfigId() && configs.find(config => config.configId === this.preSelectedConfigId())) {\n this.valueFormControl().setValue(this.preSelectedConfigId()!);\n } else {\n this.valueFormControl().setValue(configs[0].configId);\n }\n } else {\n this.valueFormControl().setValue(\"\");\n }\n\n })\n );\n },\n });\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n}\n","@if (configs.hasValue()) {\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Config</mat-label>\n <mat-select\n placeholder=\"Config\"\n name=\"value\"\n disableOptionCentering\n [formControl]=\"valueFormControl()\"\n [panelClass]=\"customDropdown() ? 'custom-dropdown-below' : ''\"\n (openedChange)=\"openChanged($event)\"\n (opened)=\"clearFilter()\"\n (closed)=\"clearFilter()\">\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter configs\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n\n @for (config of filteredConfigs(); track config.configId) {\n <mat-option\n [value]=\"config.configId\"\n [ngClass]=\"{ hidden: config.hidden }\"\n [matTooltip]=\"\n config.description ? `Name: ${config.name}\\nDescription: ${config.description}` : `Name: ${config.name}`\n \"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\">\n {{ config.name }}\n </mat-option>\n } @empty {\n <mat-option disabled>No config available.</mat-option>\n }\n @if (!hasFilteredConfig()) {\n <mat-option disabled>No config found.</mat-option>\n }\n </mat-select>\n </mat-form-field>\n}\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, input, linkedSignal, signal } from \"@angular/core\";\nimport { rxResource } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatFormField, MatLabel, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { tap } from \"rxjs\";\nimport { BaseSelectComponent } from \"../../base/base-select.component\";\n\n@Component({\n selector: \"app-environment-select\",\n templateUrl: \"./environment-select.component.html\",\n styleUrls: [\"./environment-select.component.css\"],\n imports: [\n MatFormField,\n MatLabel,\n MatSelect,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatOption,\n MatTooltip,\n MatDivider,\n NgClass,\n MatIcon,\n MatInput,\n MatSuffix,\n MatIconButton,\n ],\n})\nexport class EnvironmentSelectComponent extends BaseSelectComponent {\n readonly valueFormControl = input.required<FormControl>();\n readonly productId = input.required<string>();\n\n readonly filterText = signal(\"\");\n readonly filteredEnvironments = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n if (this.environments.isLoading() || !this.environments.hasValue()) {\n return [];\n }\n return this.environments.value().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText) && !s.description?.toLocaleLowerCase().includes(filterText) })\n );\n });\n readonly hasFilteredEnvironment = computed(() => !!this.filteredEnvironments().find(f => !f.hidden));\n\n readonly environments = rxResource({\n params: () => ({ productId: this.productId() }),\n stream: ({ params }) => {\n this.valueFormControl().markAsPending();\n return this.createEnvironmentsService()\n .getEnvironments(params.productId).pipe(tap((environments) => {\n if (environments.length > 0) {\n this.valueFormControl().setValue(environments[0].environmentId);\n } else {\n this.valueFormControl().setValue(\"\");\n }\n })\n );\n },\n });\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n}\n","@if (environments.hasValue()) {\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Environment</mat-label>\n <mat-select\n placeholder=\"Environment\"\n name=\"value\"\n [formControl]=\"valueFormControl()\"\n [panelClass]=\"customDropdown() ? 'custom-dropdown-below' : ''\"\n (openedChange)=\"openChanged($event)\"\n (opened)=\"clearFilter()\"\n (closed)=\"clearFilter()\">\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter environments\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n\n @for (environment of filteredEnvironments(); track environment.environmentId) {\n <mat-option\n [value]=\"environment.environmentId\"\n [ngClass]=\"{ hidden: environment.hidden }\"\n [matTooltip]=\"\n environment.description\n ? `Name: ${environment.name}\\nDescription: ${environment.description}`\n : `Name: ${environment.name}`\n \"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\">\n {{ environment.name }}\n </mat-option>\n } @empty {\n <mat-option disabled>No environment available.</mat-option>\n }\n @if (!hasFilteredEnvironment()) {\n <mat-option disabled>No environment found.</mat-option>\n }\n </mat-select>\n </mat-form-field>\n}\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, input, linkedSignal, signal } from \"@angular/core\";\nimport { rxResource } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatFormField, MatLabel, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatSelect, MatSelectTrigger } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { SettingType } from \"ng-configcat-publicapi\";\nimport { tap } from \"rxjs\";\nimport { BaseSelectComponent } from \"../../base/base-select.component\";\n\n@Component({\n selector: \"app-setting-select\",\n templateUrl: \"./setting-select.component.html\",\n styleUrls: [\"./setting-select.component.css\"],\n imports: [\n MatFormField,\n MatLabel,\n MatSelect,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatOption,\n MatTooltip,\n MatDivider,\n NgClass,\n MatIcon,\n MatInput,\n MatSuffix,\n MatIconButton,\n MatSelectTrigger,\n ],\n})\nexport class SettingSelectComponent extends BaseSelectComponent {\n readonly valueFormControl = input.required<FormControl>();\n readonly configId = input.required<string>();\n\n SettingTypeEnum = SettingType;\n\n readonly filterText = signal(\"\");\n readonly filteredSettings = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n if (this.settings.isLoading() || !this.settings.hasValue()) {\n return [];\n }\n return this.settings.value().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText)\n && !s.key?.toLocaleLowerCase().includes(filterText) && !s.hint?.toLocaleLowerCase().includes(filterText) })\n );\n });\n readonly hasFilteredSetting = computed(() => !!this.filteredSettings().find(f => !f.hidden));\n\n selectedSettingTriggerText(): string {\n if (this.valueFormControl().value && this.settings.hasValue()) {\n const selectedSetting = this.settings.value().find(setting => setting.settingId === this.valueFormControl().value);\n return selectedSetting?.name + \" (\" + selectedSetting?.key + \")\";\n }\n return \"\";\n }\n\n readonly settings = rxResource({\n params: () => ({ configId: this.configId() }),\n stream: ({ params }) => {\n this.valueFormControl().markAsPending();\n return this.createSettingsService()\n .getSettings(params.configId).pipe(tap((settings) => {\n if (settings.length > 0) {\n this.valueFormControl().setValue(settings[0].settingId);\n } else {\n this.valueFormControl().setValue(\"\");\n }\n })\n );\n },\n });\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n}\n","@if (settings.hasValue()) {\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Feature flag or setting</mat-label>\n <mat-select\n placeholder=\"Feature flag or setting\"\n name=\"value\"\n [formControl]=\"valueFormControl()\"\n [panelClass]=\"customDropdown() ? 'custom-dropdown-below' : ''\"\n (openedChange)=\"openChanged($event)\"\n (opened)=\"clearFilter()\"\n (closed)=\"clearFilter()\">\n <mat-select-trigger>\n @if (valueFormControl().value) {\n {{ this.selectedSettingTriggerText() }}\n }\n </mat-select-trigger>\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter settings\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n @for (setting of filteredSettings(); track setting.settingId) {\n <mat-option [value]=\"setting.settingId\" [ngClass]=\"{ hidden: setting.hidden }\">\n <div class=\"feature-flag-selector-item\">\n @switch (setting.settingType) {\n @case (SettingTypeEnum.Boolean) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/feature_flag.svg\"\n alt=\"feature flag\" />\n }\n @case (SettingTypeEnum.String) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/text.svg\"\n alt=\"text setting\" />\n }\n @case (SettingTypeEnum.Int) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/whole.svg\"\n alt=\"whole number setting\" />\n }\n @case (SettingTypeEnum.Double) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/decimal.svg\"\n alt=\"decimal number setting\" />\n }\n }\n <div class=\"item-text-wrapper\">\n <span [matTooltip]=\"setting.name\">{{ setting.name }}</span>\n <code class=\"highlight copyable-like small\" [matTooltip]=\"setting.key\">\n {{ setting.key }}\n </code>\n </div>\n </div>\n </mat-option>\n } @empty {\n <mat-option disabled>No setting available.</mat-option>\n }\n @if (!hasFilteredSetting()) {\n <mat-option disabled>No setting found.</mat-option>\n }\n </mat-select>\n </mat-form-field>\n}\n","import { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\n\nexport interface DeleteSettingDialogResult {\n button: string;\n}\n\nexport interface DeleteSettingDialogData {\n system: string;\n ticketType: string;\n}\n\n@Component({\n selector: \"app-delete-setting-dialog\",\n templateUrl: \"./delete-setting-dialog.component.html\",\n imports: [MatDialogTitle, MatDialogActions, MatButton],\n})\nexport class DeleteSettingDialogComponent {\n dialogRef = inject<MatDialogRef<DeleteSettingDialogComponent, DeleteSettingDialogResult>>(MatDialogRef);\n data = inject<{\n system: string;\n ticketType: string;\n }>(MAT_DIALOG_DATA);\n\n remove() {\n this.dialogRef.close({ button: \"remove\" });\n }\n\n cancel() {\n this.dialogRef.close({ button: \"cancel\" });\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-flat-button color=\"primary\" (click)=\"remove()\">Remove from {{ data.ticketType }}</button>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\">Cancel</button>\n</div>\n","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 readonly track = input<string[]>();\n // Intentionally empty class, to be easier to copy the source from the Dashboard, we had to create this directive,\n // but we do not want to track in integrations.\n}\n","import { FormArray, FormControl, FormGroup } from \"@angular/forms\";\nimport { EvaluationVersion, PredefinedVariationValueModel, SettingType } from \"ng-configcat-publicapi\";\n\nexport type FeatureFlagValueType = boolean | string | number;\n\nexport interface PredefinedVariationValueFormGroup {\n boolValue?: FormControl<boolean>;\n stringValue?: FormControl<string>;\n intValue?: FormControl<number>;\n doubleValue?: FormControl<number>;\n}\n\nexport interface PredefinedVariationFormGroup {\n name: FormControl<string | null>;\n hint: FormControl<string | null>;\n value: FormGroup<PredefinedVariationValueFormGroup>;\n valueForComparison: FormControl<string | null>;\n}\n\nexport interface InitialValueFormGroup {\n environmentName: FormControl<string>;\n environmentId: FormControl<string>;\n settingValue: FormControl<FeatureFlagValueType>;\n predefinedVariationIndex: FormControl<number>;\n}\n\nexport interface CreateSettingFormGroup {\n name: FormControl<string>;\n key: FormControl<string>;\n hint: FormControl<string>;\n settingType: FormControl<SettingType>;\n useVariations: FormControl<boolean>;\n predefinedVariations: FormArray<FormGroup<PredefinedVariationFormGroup>>;\n initialValuesPerEnvironment: FormControl<boolean>;\n initialValueForAll: FormControl<FeatureFlagValueType>;\n initialValueForAllVariationIndex: FormControl<number>;\n initialValues: FormArray<FormGroup<InitialValueFormGroup>>;\n}\n\nexport interface IntegrationCreateSettingFormGroup extends CreateSettingFormGroup {\n productId: FormControl<string>;\n environmentId: FormControl<string>;\n configId: FormControl<string>;\n}\n\nexport interface CreateConfigFormGroup {\n productId: FormControl<string>;\n name: FormControl<string>;\n description: FormControl<string>;\n evaluationVersion: FormControl<EvaluationVersion>;\n}\n\nexport interface IntegrationAddSettingFormGroup {\n productId: FormControl<string>;\n environmentId: FormControl<string>;\n configId: FormControl<string>;\n settingId: FormControl<number>;\n}\n\nexport interface PredefinedVariationUsageFormGroup {\n displayValue: FormControl<string>;\n routerLink: FormControl<string>;\n}\n\nexport interface UpdatePredefinedVariationFormGroup extends PredefinedVariationFormGroup {\n predefinedVariationId: FormControl<string | null>;\n variationId: FormControl<string | null>;\n usages: FormArray<FormGroup<PredefinedVariationUsageFormGroup>>;\n usagesInOtherEnvironments: FormControl<number>;\n usagesExpanded: FormControl<boolean>;\n}\n\nexport interface UpdatePredefinedVariationsFormGroup {\n predefinedVariations: FormArray<FormGroup<UpdatePredefinedVariationFormGroup>>;\n}\n\nexport interface ConvertToPredefinedVariationFormGroup {\n predefinedVariations: FormArray<FormGroup<PredefinedVariationFormGroup>>;\n}\n\nexport function getRawPredefinedVariationValue(formGroup: FormGroup<PredefinedVariationValueFormGroup>): PredefinedVariationValueModel {\n return {\n stringValue: formGroup.controls.stringValue ? formGroup.controls.stringValue.value : null,\n boolValue: formGroup.controls.boolValue ? formGroup.controls.boolValue.value : null,\n doubleValue: formGroup.controls.doubleValue ? formGroup.controls.doubleValue.value : null,\n intValue: formGroup.controls.intValue ? formGroup.controls.intValue.value : null,\n };\n}\n","import { HttpErrorResponse } from \"@angular/common/http\";\nimport { FormGroup } from \"@angular/forms\";\nimport { FormHelper } from \"./form-helper\";\n\nexport class ErrorHandler {\n\n public static handleErrors(formGroup: FormGroup, error: Error) {\n if (error instanceof HttpErrorResponse) {\n switch (error?.status ?? 0) {\n case 400:\n let unknownFieldName = false;\n for (const fieldName in error.error) {\n const errorMessage = FormHelper.getHttpErrorResponseMessage(error, fieldName);\n\n if (errorMessage) {\n let jsonFieldName = fieldName;\n if (jsonFieldName.length > 0) {\n jsonFieldName = jsonFieldName[0].toLowerCase() + jsonFieldName.slice(1);\n }\n\n if (Object.prototype.hasOwnProperty.call(formGroup.controls, 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 case 402:\n formGroup.setErrors({ serverSide: \"You have reached the limits of your plan.\" });\n break;\n case 403:\n formGroup.setErrors({ serverSide: \"You have no permission to execute this action.\" });\n break;\n default:\n formGroup.setErrors({ serverSide: \"Something went wrong on our side. This is not your fault. Please try again.\" });\n break;\n }\n } else {\n formGroup.setErrors({\n serverSide: \"Something went wrong on our side. This is not your fault. Please try again.\",\n });\n }\n }\n}\n","import { sha1 } from \"@configcat/sdk/lib/esm/Hash.js\";\nimport { SettingType } from \"ng-configcat-publicapi\";\nimport { FeatureFlagValueType } from \"../_models/setting-form\";\n\nexport function getVariationIdData(settingKey: string, settingType: SettingType,\n settingValue: { boolValue: boolean | null; stringValue: string | null; intValue: number | null; doubleValue: number | null }):\n { variationId: string; stringValue: string } {\n let variationId = settingKey + \"_\";\n let stringValue = \"\";\n let numberString: string;\n let numberValue: number;\n\n switch (settingType) {\n case SettingType.Boolean:\n stringValue = settingValue.boolValue!.toString();\n variationId += stringValue.toLowerCase();\n break;\n case SettingType.String:\n stringValue = settingValue.stringValue!;\n variationId += stringValue;\n break;\n case SettingType.Int:\n numberValue = settingValue.intValue!;\n numberString = \"\" + Math.trunc(numberValue);\n stringValue = numberString;\n variationId += numberString;\n\n break;\n case SettingType.Double: {\n numberValue = settingValue.doubleValue!;\n numberString = \"\" + Math.trunc(numberValue);\n const modulo = Math.abs(numberValue % 1);\n if (modulo !== 0) {\n numberString += \".\" + Math.trunc(modulo * 1000000);\n }\n stringValue = numberString;\n variationId += numberString;\n break;\n }\n }\n\n variationId = sha1(variationId).substring(0, 8);\n\n return { variationId, stringValue };\n}\n\nexport function getPredefinedVariationValueDisplayValue(\n settingType: SettingType,\n predefinedVariationValue: { boolValue: boolean | null; stringValue: string | null; intValue: number | null; doubleValue: number | null }\n): string {\n switch (settingType) {\n case (SettingType.Boolean): {\n return predefinedVariationValue.boolValue! ? \"On\" : \"Off\";\n }\n case (SettingType.String): {\n return predefinedVariationValue.stringValue!;\n }\n case (SettingType.Int): {\n return \"\" + predefinedVariationValue.intValue!;\n }\n case (SettingType.Double): {\n return \"\" + predefinedVariationValue.doubleValue!;\n }\n default: return \"\";\n }\n}\n\nexport function getPredefinedVariationFeatureFlagValue(\n settingType: SettingType,\n predefinedVariationValue: { boolValue: boolean | null; stringValue: string | null; intValue: number | null; doubleValue: number | null }\n): FeatureFlagValueType {\n switch (settingType) {\n case (SettingType.Boolean): {\n return predefinedVariationValue.boolValue!;\n }\n case (SettingType.String): {\n return predefinedVariationValue.stringValue!;\n }\n case (SettingType.Int): {\n return predefinedVariationValue.intValue!;\n }\n case (SettingType.Double): {\n return predefinedVariationValue.doubleValue!;\n }\n default: return \"\";\n }\n}\n\nexport function getPredefinedVariationColorIndex(\n settingType: SettingType,\n predefinedVariationValue: { boolValue: boolean | null; stringValue: string | null; intValue: number | null; doubleValue: number | null },\n index: number\n): FeatureFlagValueType {\n if (settingType === SettingType.Boolean) {\n return (predefinedVariationValue.boolValue ? 1 : 2);\n }\n return index % 8 + 3;\n}\n","import { Component, input, OnInit } from \"@angular/core\";\n\n@Component({\n selector: \"app-loader\",\n templateUrl: \"./loader.component.html\",\n styleUrls: [\"./loader.component.scss\"],\n imports: [],\n})\nexport class LoaderComponent implements OnInit {\n showLoader = false;\n readonly skipTimeOut = input<boolean>(false);\n\n ngOnInit() {\n if (this.skipTimeOut()) {\n this.showLoader = true;\n } else {\n setTimeout(() => this.showLoader = true, 300);\n }\n }\n}\n","@if (showLoader) {\n <div class=\"container\">\n <div class=\"bounceball\"></div>\n <div class=\"cat\"></div>\n </div>\n}\n","import { CdkCopyToClipboard } from \"@angular/cdk/clipboard\";\nimport { AfterViewInit, Component, ElementRef, inject, input, viewChild } from \"@angular/core\";\nimport { MatRipple } from \"@angular/material/core\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { MessagingService } from \"../../../bootstrap\";\n\n@Component({\n selector: \"app-copyable-value\",\n templateUrl: \"./copyable-value.component.html\",\n styleUrls: [\"./copyable-value.component.scss\"],\n imports: [MatTooltip, CdkCopyToClipboard, MatRipple, MatIcon],\n})\nexport class CopyableValueComponent implements AfterViewInit {\n private readonly messagingService = inject(MessagingService);\n\n readonly tooltip = input<string>();\n readonly tooltipClass = input<string | string[] | Set<string> | Record<string, unknown>>();\n readonly hint = input<string>();\n readonly warnHint = input<boolean>(false);\n readonly name = input<string>();\n readonly value = input.required<string>();\n readonly small = input<boolean>(false);\n readonly bold = input<boolean>(false);\n readonly borderless = input<boolean>(false);\n readonly smallest = input<boolean>(false);\n readonly dark = input<boolean>(false);\n readonly wholeControlCopyable = input<boolean>(false);\n readonly inputControl = viewChild.required<ElementRef<HTMLElement>>(\"content\");\n\n copied() {\n this.messagingService.showSuccessSnack(\"Copied.\");\n }\n\n ngAfterViewInit(): void {\n if (!this.wholeControlCopyable()) {\n this.inputControl().nativeElement.style.width = this.value().length + 1 + \"ch\";\n }\n }\n}\n","<div class=\"container themed\" [class.dark]=\"dark()\">\n @if (!!name()) {\n <div class=\"name\">{{ name() }}</div>\n }\n <div\n class=\"control\"\n [matTooltip]=\"tooltip() ?? 'Copy to clipboard'\"\n [matTooltipClass]=\"tooltipClass() ?? []\"\n [class.small]=\"small()\"\n [class.smallest]=\"smallest()\"\n [class.borderless]=\"borderless()\"\n [class.whole-copyable]=\"wholeControlCopyable()\"\n [matTooltipDisabled]=\"!wholeControlCopyable()\">\n @if (!wholeControlCopyable()) {\n <input\n #content\n class=\"value\"\n readonly\n [value]=\"value()\"\n [class.bold]=\"bold()\"\n [class.borderless]=\"borderless()\" />\n } @else {\n <div class=\"value\" [cdkCopyToClipboard]=\"value()\" (cdkCopyToClipboardCopied)=\"copied()\">\n {{ value() }}\n </div>\n }\n <div\n class=\"icon-container\"\n matRipple\n matTooltip=\"Copy to clipboard\"\n [class.borderless]=\"borderless()\"\n [class.dark]=\"dark()\"\n [cdkCopyToClipboard]=\"value()\"\n [matRippleUnbounded]=\"borderless()\"\n [matRippleCentered]=\"borderless()\"\n [matTooltipDisabled]=\"wholeControlCopyable()\"\n (cdkCopyToClipboardCopied)=\"copied()\">\n <mat-icon>file_copy</mat-icon>\n </div>\n </div>\n @if (!!hint()) {\n <div class=\"hint\" [class.hint-warn]=\"warnHint()\">{{ hint() }}</div>\n }\n</div>\n","import { Directive, HostListener, inject } from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { ConfirmationDialogComponent } from \"../bootstrap\";\nimport { ConfirmationDialogData } from \"../dialogs/confirmation-dialog/confirmation-dialog\";\n\n@Directive({\n selector: \"[appPastedDataTrimmer]\",\n standalone: true,\n})\nexport class PastedDataTrimmerDirective {\n private readonly dialog = inject(MatDialog);\n\n @HostListener(\"paste\", [\"$event\"])\n onPaste(event: ClipboardEvent): void {\n const clipboardData = event.clipboardData;\n if (!clipboardData) {\n return;\n }\n\n const pastedText = clipboardData.getData(\"text\");\n if (pastedText !== pastedText.trim()) {\n event.preventDefault();\n\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\n data: {\n title: \"Trim extra spaces?\",\n body: \"The pasted value contains extra spaces at the beginning or end.<br/>This may cause unexpected behavior, for example when comparing values.\",\n yesButtonLabel: \"Trim extra spaces\",\n cancelButtonLabel: \"Keep spaces\",\n },\n }\n );\n\n dialogRef.afterClosed().subscribe(result => {\n const trimmedText = result === \"yes\" ? pastedText.trim() : pastedText;\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n if (target) {\n const start = target.selectionStart ?? 0;\n const end = target.selectionEnd ?? 0;\n const currentValue = target.value;\n\n // Insert the trimmed text at the cursor position\n const newValue = currentValue.substring(0, start) + trimmedText + currentValue.substring(end);\n target.value = newValue;\n\n // Set the cursor position after the inserted text\n const newCursorPosition = start + trimmedText.length;\n target.setSelectionRange(newCursorPosition, newCursorPosition);\n\n // Trigger input event to ensure change detection works\n target.dispatchEvent(new Event(\"input\", { bubbles: true }));\n }\n });\n }\n }\n}\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { CdkTextareaAutosize } from \"@angular/cdk/text-field\";\nimport { Component, DestroyRef, inject, OnDestroy, OnInit } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormsModule, ReactiveFormsModule, ValidatorFn } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatHint } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { PastedDataTrimmerDirective } from \"../../../../../lib/_directives/pasted-data-trimmer.directive\";\nimport { AutofocusDirective } from \"../../../../_directives/autofocus.directive\";\nimport { AceEditorComponent } from \"../../../../ace-editor/ace-editor.component\";\nimport { FormHelper } from \"../../../../bootstrap\";\n\nexport interface PopoutTextEditorDialogData {\n value: string | null;\n readOnly: boolean;\n validators: ValidatorFn[];\n maxValueLength: number;\n description: string;\n disableJsonEditor: boolean;\n}\n\nexport interface PopoutTextEditorDialogResult {\n value: 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 imports: [\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatButtonToggleGroup,\n FormsModule,\n MatButtonToggle,\n MatFormField,\n MatInput,\n CdkTextareaAutosize,\n AutofocusDirective,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatHint,\n AceEditorComponent,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n PastedDataTrimmerDirective,\n ],\n})\nexport class PopoutTextEditorDialogComponent implements OnInit, OnDestroy {\n dialogRef = inject<MatDialogRef<PopoutTextEditorDialogComponent>>(MatDialogRef);\n data = inject<PopoutTextEditorDialogData>(MAT_DIALOG_DATA);\n private readonly destroyRef = inject(DestroyRef);\n\n jsonData: string | null = null;\n format = \"text\";\n formHelper = FormHelper;\n control!: FormControl<string | null>;\n\n ngOnInit(): void {\n this.jsonData = this.data.value;\n this.control = new FormControl<string | null>(\n { value: this.data.value, disabled: this.data.readOnly },\n { nonNullable: true, validators: [...this.data.validators] }\n );\n\n if (!this.control.valid) {\n this.control.markAsTouched();\n }\n\n this.control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).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 }\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}\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 @if (!data.disableJsonEditor) {\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\n @if (format === \"text\") {\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea\n matInput\n autofocus\n focus\n rows=\"17\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"26\"\n appPastedDataTrimmer\n [formControl]=\"control\"></textarea>\n @if (control.invalid) {\n <mat-error>\n {{ formHelper.getErrorMessage(control) }}\n </mat-error>\n }\n @if (data.maxValueLength && data.maxValueLength - (control.value?.length ?? 0) > -1) {\n <mat-hint>\n Remaining characters:\n {{ data.maxValueLength - (control.value?.length ?? 0) }}\n </mat-hint>\n }\n </mat-form-field>\n } @else if (format === \"json\") {\n <div class=\"editor-container\">\n <app-ace-editor [readOnly]=\"data.readOnly\" [(value)]=\"jsonData\" (onChange)=\"onJsonChanged($event)\" />\n @if (control.invalid) {\n <span class=\"error mat-mdc-form-field-error\">\n {{ formHelper.getErrorMessage(control) }}\n </span>\n }\n </div>\n }\n</div>\n<div mat-dialog-actions>\n @if (!data.readOnly) {\n <button\n type=\"button\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"!control.touched || !control.valid\"\n (click)=\"set()\">\n Set\n </button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]>Cancel</button>\n } @else {\n <button type=\"button\" mat-stroked-button color=\"primary\" [mat-dialog-close]>Close</button>\n }\n</div>\n","import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, DestroyRef, inject, signal } from \"@angular/core\";\nimport { rxResource, takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormGroup, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatRow, MatRowDef, MatTable, MatTableDataSource } from \"@angular/material/table\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { Router } from \"@angular/router\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { PredefinedVariationEnvironmentModel, PredefinedVariationUsageModel, PredefinedVariationValueModel, SettingType, UpdatePredefinedVariationModel } from \"ng-configcat-publicapi\";\nimport { catchError, tap, throwError } from \"rxjs\";\nimport { AutofocusDirective } from \"../../_directives/autofocus.directive\";\nimport { DigitOnlyDirective } from \"../../_directives/digit-only.directive\";\nimport { getRawPredefinedVariationValue, PredefinedVariationUsageFormGroup, PredefinedVariationValueFormGroup, UpdatePredefinedVariationFormGroup, UpdatePredefinedVariationsFormGroup } from \"../../_models/setting-form\";\nimport { FormHelper, PublicApiService, wholeNumberRegex } from \"../../_services\";\nimport { validateNumberNan, validateUniqueVariations } from \"../../_services/custom-validators\";\nimport { ErrorHandler } from \"../../_services/error-handler\";\nimport { getPredefinedVariationColorIndex, getPredefinedVariationValueDisplayValue, getVariationIdData } from \"../../_services/variation-helper.service\";\nimport { MessagingService } from \"../../bootstrap\";\nimport { LoaderComponent } from \"../../loader/loader.component\";\nimport { CopyableValueComponent } from \"../../v2/feature-flag/copyable-value/copyable-value.component\";\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData, PopoutTextEditorDialogResult } from \"../../v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component\";\n\nexport interface VariationsDialogComponentData {\n settingId: number;\n settingName: string;\n manage?: boolean;\n organizationId: string;\n productId: string;\n configId: string;\n maxStringFlagValueLength: number;\n basePath: string | null;\n basicAuthUsername: string | null;\n basicAuthPassword: string | null;\n}\n\n@Component({\n selector: \"app-variations-dialog\",\n imports: [\n LoaderComponent,\n CdkScrollable,\n MatDialogContent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatDialogTitle,\n MatFormField,\n MatInput,\n MatError,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n NgTemplateOutlet,\n MatTooltip,\n MatIcon,\n MatIconButton,\n MatTable,\n MatColumnDef,\n MatHeaderCellDef,\n MatHeaderCell,\n MatCellDef,\n MatCell,\n MatHeaderRowDef,\n MatHeaderRow,\n MatRowDef,\n MatRow,\n DigitOnlyDirective,\n MatSuffix,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n CopyableValueComponent,\n AutofocusDirective],\n templateUrl: \"./variations-dialog.component.html\",\n styleUrls: [\n \"../../../css/slider.scss\",\n \"./variations-dialog.component.scss\",\n ],\n})\nexport class VariationsDialogComponent {\n private readonly dialogRef = inject<MatDialogRef<VariationsDialogComponent>>(MatDialogRef);\n readonly data = inject<VariationsDialogComponentData>(MAT_DIALOG_DATA);\n private readonly publicApiService = inject(PublicApiService);\n readonly messagingService = inject(MessagingService);\n readonly formBuilder = inject(NonNullableFormBuilder);\n readonly destroyRef = inject(DestroyRef);\n private readonly router = inject(Router);\n private readonly dialog = inject(MatDialog);\n\n readonly submitting = signal(false);\n\n SettingType = SettingType;\n formHelper = FormHelper;\n\n formGroup!: FormGroup<UpdatePredefinedVariationsFormGroup>;\n settingType!: SettingType;\n settingKey!: string;\n\n stringValidators = [Validators.required,\n Validators.maxLength(this.data.maxStringFlagValueLength)];\n intValidators = [\n Validators.required,\n validateNumberNan,\n Validators.max(2147483647),\n Validators.min(-2147483648),\n Validators.pattern(wholeNumberRegex),\n ];\n doubleValidators = [Validators.required, validateNumberNan, Validators.min(-Number.MAX_VALUE), Validators.max(Number.MAX_VALUE)];\n\n displayedColumns: string[] = [];\n maxPredefinedVariations = 50;\n\n focusIndex = -1;\n\n readonly setting = rxResource({\n params: () => ({ settingId: this.data.settingId }),\n stream: ({ params }) => {\n return this.publicApiService.createSettingsService(\n this.data.basicAuthUsername,\n this.data.basicAuthPassword,\n this.data.basePath\n ).getPredefinedVariations(params.settingId).pipe(\n tap(setting => {\n this.settingType = setting.settingType;\n this.settingKey = setting.settingKey;\n\n this.maxPredefinedVariations = setting.maxPredefinedVariations;\n const isManage = this.data.manage && this.settingType !== SettingType.Boolean;\n this.displayedColumns = [];\n if (isManage) {\n this.displayedColumns.push(\"reorder\");\n }\n if (this.settingType !== SettingType.Boolean) {\n this.displayedColumns.push(\"color\");\n }\n this.displayedColumns.push(\"value\", \"name\", \"hint\");\n this.displayedColumns.push(\"usages\");\n if (isManage) {\n this.displayedColumns.push(\"actions\");\n }\n\n this.formGroup = this.formBuilder.group({\n predefinedVariations: this.formBuilder.array(\n setting.predefinedVariations.map(sv => this.createPredefinedVariationFormGroup(sv, setting.environments)),\n { validators: [validateUniqueVariations] }\n ),\n });\n this.formGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.formGroup.controls.predefinedVariations.controls.forEach(c => {\n const variationId = getVariationIdData(this.settingKey, this.settingType, getRawPredefinedVariationValue(c.controls.value)).variationId;\n if (c.controls.variationId.value !== variationId) {\n c.controls.variationId.setValue(variationId, { emitEvent: false, onlySelf: true });\n }\n\n const valueForComparison = getPredefinedVariationValueDisplayValue(this.settingType, getRawPredefinedVariationValue(c.controls.value));\n if (c.controls.valueForComparison.value !== valueForComparison) {\n c.controls.valueForComparison.setValue(valueForComparison);\n }\n });\n });\n this.setDataSource();\n }),\n catchError((error: Error) => {\n this.messagingService.showErrorSnack(\"Could not load predefined variations.\");\n this.dialogRef.close();\n return throwError(() => error);\n })\n );\n },\n });\n\n dataSource = new MatTableDataSource<FormGroup<UpdatePredefinedVariationFormGroup>>([]);\n\n createPredefinedVariationFormGroup(predefinedVariation: {\n predefinedVariationId: string | null; name: string | null; hint: string | null;\n value: PredefinedVariationValueModel; usages: PredefinedVariationUsageModel[]; usagesInOtherEnvironments: number;\n },\n environments: PredefinedVariationEnvironmentModel[]) {\n return this.formBuilder.group<UpdatePredefinedVariationFormGroup>(\n {\n predefinedVariationId: new FormControl<string | null>(predefinedVariation.predefinedVariationId),\n name: new FormControl<string | null>({ value: predefinedVariation.name, disabled: !this.data.manage }, { validators: [Validators.maxLength(255)] }),\n hint: new FormControl<string | null>({ value: predefinedVariation.hint, disabled: !this.data.manage }, { validators: [Validators.maxLength(1000)] }),\n value: this.createPredefinedVariationValueFormGroup(predefinedVariation.value, !this.data.manage\n || (predefinedVariation.usages.length > 0)\n || (predefinedVariation.usagesInOtherEnvironments > 0)),\n valueForComparison: new FormControl<string | null>({\n value: getPredefinedVariationValueDisplayValue(this.settingType, predefinedVariation.value),\n disabled: true,\n }),\n usages: this.formBuilder.array(\n predefinedVariation.usages.map(u => this.createPredefinedVariationUsageFormGroup(u, environments))\n .filter(u => u !== null)\n .sort((a, b) => a.environmentIndex - b.environmentIndex)\n .map(u => u.formGroup)\n ),\n usagesInOtherEnvironments: new FormControl<number>({\n value: predefinedVariation.usagesInOtherEnvironments, disabled: true,\n }, { nonNullable: true }),\n variationId: new FormControl<string | null>({\n value: getVariationIdData(this.settingKey, this.settingType, predefinedVariation.value).variationId, disabled: true,\n }),\n usagesExpanded: new FormControl<boolean>(false, { nonNullable: true }),\n }\n );\n }\n\n createPredefinedVariationValueFormGroup(predefinedVariationValue: PredefinedVariationValueModel, disabled: boolean) {\n switch (this.settingType) {\n case SettingType.Boolean:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n boolValue: new FormControl<boolean>({ value: predefinedVariationValue.boolValue!, disabled: true },\n { nonNullable: true }),\n });\n case SettingType.String:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n stringValue: new FormControl<string>({ value: predefinedVariationValue.stringValue!, disabled },\n { nonNullable: true, validators: this.stringValidators }),\n });\n case SettingType.Int:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n intValue: new FormControl<number>({ value: predefinedVariationValue.intValue!, disabled },\n { nonNullable: true, validators: this.intValidators }),\n });\n case SettingType.Double:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n doubleValue: new FormControl<number>({ value: predefinedVariationValue.doubleValue!, disabled },\n { nonNullable: true, validators: this.doubleValidators }),\n\n });\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n createPredefinedVariationUsageFormGroup(usage: PredefinedVariationUsageModel, environments: PredefinedVariationEnvironmentModel[]):\n { formGroup: FormGroup<PredefinedVariationUsageFormGroup>; environmentIndex: number } | null {\n const routerLink = this.getDashboardUrl(usage);\n const index = environments.findIndex(e => e.environmentId === usage.environmentId);\n if (index === -1) return null;\n const environment = environments[index];\n const displayValue = environment.name + (usage.settingId === this.data.settingId ? \"\" : \" (as a prerequisite)\");\n return {\n formGroup: this.formBuilder.group<PredefinedVariationUsageFormGroup>({\n routerLink: new FormControl<string>({ value: routerLink, disabled: true }, { nonNullable: true }),\n displayValue: new FormControl<string>({ value: displayValue, disabled: true }, { nonNullable: true }),\n }),\n environmentIndex: index,\n };\n }\n\n getDashboardUrl(usage: PredefinedVariationUsageModel) {\n const urlTree = this.router.createUrlTree([\n \"v2\",\n this.data.organizationId,\n this.data.productId,\n this.data.configId,\n usage.environmentId,\n usage.settingId,\n ]);\n return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);\n }\n\n setDataSource() {\n this.dataSource.data = this.formGroup.controls.predefinedVariations.controls;\n }\n\n expandText(stringValueControl: FormControl<string>) {\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: stringValueControl.value,\n readOnly: stringValueControl.disabled,\n validators: [Validators.required, Validators.maxLength(this.data.maxStringFlagValueLength)],\n maxValueLength: this.data.maxStringFlagValueLength,\n description: \"Modify the text within the editor to change the value.\",\n disableJsonEditor: true,\n } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data?.value) {\n stringValueControl.setValue(data.value);\n stringValueControl.updateValueAndValidity();\n stringValueControl.markAsTouched();\n stringValueControl.markAsDirty();\n }\n });\n }\n\n expandHint(stringValueControl: FormControl<string | null>) {\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: stringValueControl.value,\n readOnly: stringValueControl.disabled,\n validators: [Validators.maxLength(1000)],\n maxValueLength: 1000,\n description: \"Modify the text within the editor to change the hint.\",\n } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data?.value) {\n stringValueControl.setValue(data.value);\n stringValueControl.updateValueAndValidity();\n stringValueControl.markAsTouched();\n stringValueControl.markAsDirty();\n }\n });\n }\n\n addVariation() {\n const predefinedVariationFormGroup = this.createPredefinedVariationFormGroup({\n predefinedVariationId: null,\n name: null,\n hint: null,\n value: this.createEmptyPredefinedVariationValueModel(),\n usages: [],\n usagesInOtherEnvironments: 0,\n }, []);\n\n this.formGroup.controls.predefinedVariations.push(predefinedVariationFormGroup);\n this.formGroup.controls.predefinedVariations.markAsDirty();\n this.setDataSource();\n this.focusIndex = this.formGroup.controls.predefinedVariations.length - 1;\n }\n\n removeVariation(index: number) {\n this.formGroup.controls.predefinedVariations.removeAt(index);\n this.formGroup.controls.predefinedVariations.markAsDirty();\n this.setDataSource();\n }\n\n createEmptyPredefinedVariationValueModel(): PredefinedVariationValueModel {\n switch (this.settingType) {\n case (SettingType.Boolean): {\n return { boolValue: false, intValue: null, doubleValue: null, stringValue: null };\n }\n case (SettingType.String): {\n return { stringValue: \"\", intValue: null, doubleValue: null, boolValue: null };\n }\n case (SettingType.Int): {\n return { intValue: 0, boolValue: null, doubleValue: null, stringValue: null };\n }\n case (SettingType.Double): {\n return { doubleValue: 0, intValue: null, boolValue: null, stringValue: null };\n }\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n onSubmit() {\n if (!this.formGroup.valid) {\n return;\n }\n this.submitting.set(true);\n\n const predefinedVariations = this.formGroup.controls.predefinedVariations.controls.map(c => ({\n predefinedVariationId: c.controls.predefinedVariationId.value,\n name: c.controls.name.value,\n hint: c.controls.hint.value,\n value: {\n boolValue: this.settingType === SettingType.Boolean ? c.controls.value.controls.boolValue!.getRawValue() : void 0,\n stringValue: this.settingType === SettingType.String ? c.controls.value.controls.stringValue!.getRawValue() : void 0,\n intValue: this.settingType === SettingType.Int ? c.controls.value.controls.intValue!.getRawValue() : void 0,\n doubleValue: this.settingType === SettingType.Double ? c.controls.value.controls.doubleValue!.getRawValue() : void 0,\n } as PredefinedVariationValueModel,\n\n } as UpdatePredefinedVariationModel));\n\n this.publicApiService.createSettingsService(\n this.data.basicAuthUsername,\n this.data.basicAuthPassword,\n this.data.basePath\n ).updatePredefinedVariations(this.data.settingId, { predefinedVariations }).subscribe({\n next: () => {\n this.dialogRef.close(true);\n this.submitting.set(false);\n },\n error: (error: Error) => {\n ErrorHandler.handleErrors(this.formGroup, error);\n this.submitting.set(false);\n },\n });\n }\n\n dropTable(event: CdkDragDrop<MatTableDataSource<FormGroup<UpdatePredefinedVariationFormGroup>>>) {\n moveItemInArray(this.formGroup.controls.predefinedVariations.controls, event.previousIndex, event.currentIndex);\n this.formGroup.controls.predefinedVariations.markAsDirty();\n this.setDataSource();\n }\n\n getColorIndex(row: FormGroup<UpdatePredefinedVariationFormGroup>, index: number) {\n return getPredefinedVariationColorIndex(this.settingType, getRawPredefinedVariationValue(row.controls.value), index);\n }\n}\n","@if (setting.isLoading()) {\n <div mat-dialog-content class=\"content\">\n <app-loader />\n </div>\n} @else {\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n <h1 mat-dialog-title>{{ data.manage ? \"Manage predefined variations\" : \"View predefined variations\" }}</h1>\n <div class=\"content\">\n <div class=\"dialog-description\" mat-dialog-content>\n @if (data.manage) {\n <p>\n Add, delete, and update predefined variations of the\n <strong>{{ data.settingName }}</strong>\n setting.\n <br />\n The\n <strong>served value</strong>\n is sent to SDKs and received by your applications. The\n <strong>display name</strong>\n appears in the targeting UI.\n <br />\n You can update a value or delete a variation only if it is not in use. As a help, you can see where each\n variation is used.\n </p>\n } @else {\n <p>\n The\n <strong>served value</strong>\n is sent to SDKs and received by your applications. The\n <strong>display name</strong>\n appears in the targeting UI.\n </p>\n }\n </div>\n\n <div class=\"dialog-table\" mat-dialog-content>\n <table\n mat-table\n cdkDropList\n [dataSource]=\"dataSource\"\n [cdkDropListData]=\"dataSource\"\n [cdkDropListDisabled]=\"!data.manage || settingType === SettingType.Boolean\"\n (cdkDropListDropped)=\"dropTable($event)\">\n <ng-container matColumnDef=\"reorder\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div class=\"drag-handle\">\n <div cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"color\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n <span [class]=\"'variation-indicator variation-color-' + getColorIndex(row, i)\"></span>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"value\">\n <th *matHeaderCellDef mat-header-cell>Served value *</th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n @switch (settingType) {\n @case (SettingType.Boolean) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.boolValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingType.String) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.stringValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingType.Int) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.intValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingType.Double) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.doubleValue,\n setFocus: i === focusIndex,\n }\" />\n }\n }\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef mat-header-cell>Display name (optional)</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field\">\n <input\n matInput\n [formControl]=\"row.controls.name\"\n [placeholder]=\"row.controls.valueForComparison.value\" />\n @if (row.controls.name.invalid) {\n <mat-error class=\"small-error\">\n {{ formHelper.getErrorMessage(row.controls.name) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th *matHeaderCellDef mat-header-cell>Hint (optional)</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field suffixed\">\n <input matInput [formControl]=\"row.controls.hint\" />\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandHint(row.controls.hint)\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n @if (row.controls.hint.invalid) {\n <mat-error>\n {{ formHelper.getErrorMessage(row.controls.hint) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"variationId\">\n <th *matHeaderCellDef mat-header-cell>Variation ID</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <app-copyable-value [value]=\"row.controls.variationId.value\" [small]=\"true\" />\n </td>\n </ng-container>\n <ng-container matColumnDef=\"usages\">\n <th *matHeaderCellDef mat-header-cell>Usages</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <div class=\"usages\">\n <button\n type=\"button\"\n class=\"usage-button\"\n mat-icon-button\n [disabled]=\"!row.controls.usages.controls.length && !row.controls.usagesInOtherEnvironments.value\"\n (click)=\"row.controls.usagesExpanded.setValue(!row.controls.usagesExpanded.value)\">\n @if (row.controls.usagesExpanded.value) {\n <mat-icon>expand_less</mat-icon>\n } @else {\n <mat-icon>expand_more</mat-icon>\n }\n </button>\n <div>\n @if (row.controls.usagesExpanded.value) {\n @for (usage of row.controls.usages.controls; track $index) {\n <div class=\"usage\">\n <a target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"usage.controls.routerLink.value\">\n {{ usage.controls.displayValue.value }}\n </a>\n </div>\n }\n @if (row.controls.usagesInOtherEnvironments.value > 0) {\n {{ row.controls.usagesInOtherEnvironments.value }} usage{{\n row.controls.usagesInOtherEnvironments.value > 1 ? \"s\" : \"\"\n }}\n in environments you don't have access to.\n } @else if (row.controls.usages.controls.length === 0) {\n <div>no usages</div>\n }\n } @else {\n <div>\n @if (row.controls.usages.controls.length + row.controls.usagesInOtherEnvironments.value > 0) {\n {{ row.controls.usages.controls.length + row.controls.usagesInOtherEnvironments.value }}\n usage{{\n row.controls.usages.controls.length + row.controls.usagesInOtherEnvironments.value > 1\n ? \"s\"\n : \"\"\n }}\n } @else {\n <div>no usages</div>\n }\n </div>\n }\n </div>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"actions\">\n <th *matHeaderCellDef mat-header-cell>{{ dataSource.data.length }} / {{ maxPredefinedVariations }}</th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div\n class=\"delete\"\n [matTooltip]=\"\n formGroup.controls.predefinedVariations.controls.length > 2\n ? 'Cannot remove a variation that is already in use.'\n : 'At least 2 predefined variations should be set.'\n \"\n [matTooltipDisabled]=\"\n row.controls.usages.controls.length === 0 &&\n row.controls.usagesInOtherEnvironments.value === 0 &&\n formGroup.controls.predefinedVariations.controls.length > 2\n \">\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove variation\"\n [disabled]=\"\n formGroup.controls.predefinedVariations.controls.length <= 2 ||\n row.controls.usages.controls.length > 0 ||\n row.controls.usagesInOtherEnvironments.value > 0\n \"\n (click)=\"removeVariation(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row cdkDrag [cdkDragData]=\"row\"></tr>\n </table>\n @if (\n formGroup.controls.predefinedVariations.invalid &&\n formHelper.getErrorMessage(formGroup.controls.predefinedVariations)\n ) {\n <mat-error>\n {{ formHelper.getErrorMessage(formGroup.controls.predefinedVariations) }}\n </mat-error>\n }\n </div>\n @if (data.manage && settingType !== SettingType.Boolean) {\n <div class=\"add-variation\" mat-dialog-content>\n <div\n [matTooltip]=\"'Maximum ' + maxPredefinedVariations + ' variations can be added.'\"\n [matTooltipDisabled]=\"dataSource.data.length < maxPredefinedVariations\">\n <button\n type=\"button\"\n mat-stroked-button\n color=\"primary\"\n [disabled]=\"dataSource.data.length >= maxPredefinedVariations\"\n (click)=\"addVariation()\">\n <mat-icon>add</mat-icon>\n Add variation\n </button>\n </div>\n </div>\n }\n @if (formGroup.errors && formGroup.errors[\"serverSide\"]) {\n <div class=\"error\" mat-dialog-content>\n <span>{{ formGroup.errors[\"serverSide\"] }}</span>\n </div>\n }\n </div>\n\n <div mat-dialog-actions>\n @if (data.manage) {\n <button\n type=\"submit\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"submitting() || !formGroup.dirty || !formGroup.valid\">\n Save\n </button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]>Cancel</button>\n } @else {\n <button type=\"button\" color=\"primary\" mat-flat-button [mat-dialog-close]>Close</button>\n }\n </div>\n </form>\n}\n\n<ng-template #settingValueTemplate let-formControl=\"formControl\" let-setFocus=\"setFocus\">\n @switch (settingType) {\n @case (SettingType.String) {\n <mat-form-field class=\"small-form-field text suffixed\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n placeholder=\"Add text ...\"\n focus\n matTooltip=\"This variation is in use. The value cannot be changed.\"\n [matTooltipDisabled]=\"!formControl.disabled || !data.manage\"\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\" />\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandText(formControl)\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n @if (formControl.invalid) {\n <mat-error class=\"small-error\">\n {{ formHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n </mat-form-field>\n }\n @case (SettingType.Int) {\n <mat-form-field\n class=\"small-form-field\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n matTooltip=\"This variation is in use. The value cannot be changed.\"\n [matTooltipDisabled]=\"!formControl.disabled || !data.manage\">\n @if (formControl.invalid) {\n <mat-error>\n {{ formHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n <input\n matInput\n type=\"number\"\n required\n name=\"index\"\n appDigitOnly\n focus\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\"\n [digitOnlyAllowNegatives]=\"true\" />\n </mat-form-field>\n }\n @case (SettingType.Double) {\n <mat-form-field\n class=\"small-form-field\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n matTooltip=\"This variation is in use. The value cannot be changed.\"\n [matTooltipDisabled]=\"!formControl.disabled || !data.manage\">\n @if (formControl.invalid) {\n <mat-error>\n {{ formHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n <input\n matInput\n type=\"number\"\n required\n name=\"index\"\n inputDisplayNormalizer\n focus\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\" />\n </mat-form-field>\n }\n @case (SettingType.Boolean) {\n <div\n class=\"toggle\"\n matTooltip=\"This variation is in use. The value cannot be changed.\"\n [matTooltipDisabled]=\"!formControl.disabled || !data.manage\">\n <label class=\"switch\">\n <input type=\"checkbox\" name=\"index\" [formControl]=\"formControl\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n }\n }\n</ng-template>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { Router } from \"@angular/router\";\nimport { IDependeeSetting } from \"../../../_models/setting-value-formgroup\";\nimport { PublicApiService } from \"../../../_services\";\n\n@Component({\n selector: \"app-dependees-dialog\",\n templateUrl: \"./dependees-dialog.component.html\",\n imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, MatButton, MatDialogClose],\n})\nexport class DependeesDialogComponent {\n data = inject<{\n dependees: IDependeeSetting[];\n name: string;\n organizationId: string;\n productId: string;\n configId: string;\n environmentId: string;\n }>(MAT_DIALOG_DATA);\n private readonly router = inject(Router);\n private readonly publicApiService = inject(PublicApiService);\n\n getDashboardUrl(settingId: number) {\n const urlTree = this.router.createUrlTree([\n \"v2\",\n this.data.organizationId,\n this.data.productId,\n this.data.configId,\n this.data.environmentId,\n settingId,\n ]);\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>\n is the prerequisite of the following feature flags:\n </p>\n @for (dependee of data.dependees; track dependee) {\n <ul>\n <li>\n <a rel=\"noopener noreferrer\" target=\"_blank\" [href]=\"getDashboardUrl(dependee.settingId)\">\n {{ dependee.name }} ({{ dependee.key }})\n </a>\n </li>\n </ul>\n }\n</div>\n\n<div mat-dialog-actions>\n <button type=\"button\" mat-stroked-button mat-dialog-close>Close</button>\n</div>\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, inject, input, output } from \"@angular/core\";\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatOption, MatSelect, MatSelectTrigger } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { PredefinedVariationModel, PredefinedVariationValueModel } from \"ng-configcat-publicapi\";\nimport { PastedDataTrimmerDirective } from \"../../../../../lib/_directives/pasted-data-trimmer.directive\";\nimport { getPredefinedVariationColorIndex, getPredefinedVariationValueDisplayValue } from \"../../../../../lib/_services/variation-helper.service\";\nimport { DigitOnlyDirective } from \"../../../../_directives/digit-only.directive\";\nimport { InputDisplayNormalizerDirective } from \"../../../../_directives/input-display-normalizer.directive\";\nimport {\n FormHelper,\n getValidatorsForSettingType,\n IFeatureFlagLimitations,\n SettingType,\n ValueForm,\n} from \"../../../../bootstrap\";\nimport {\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult,\n} from \"../popout-text-editor-dialog/popout-text-editor-dialog.component\";\n\nexport interface IFeatureFlagValueSettingModel {\n settingId: number;\n key: string;\n name: string;\n settingType: SettingType;\n predefinedVariations: PredefinedVariationModel[];\n}\n\n@Component({\n selector: \"app-feature-flag-value\",\n templateUrl: \"./feature-flag-value.component.html\",\n styleUrls: [\"../components.scss\", \"../../../../../css/slider.scss\", \"./feature-flag-value.component.scss\"],\n imports: [\n MatFormField,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatTooltip,\n MatIconButton,\n MatSuffix,\n MatIcon,\n MatError,\n InputDisplayNormalizerDirective,\n DigitOnlyDirective,\n MatSelect,\n MatOption,\n NgClass,\n MatSelectTrigger,\n PastedDataTrimmerDirective,\n ],\n})\nexport class FeatureFlagValueComponent {\n private readonly dialog = inject(MatDialog);\n\n readonly formGroup = input.required<FormGroup<ValueForm>>();\n readonly setting = input.required<IFeatureFlagValueSettingModel>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n readonly notAvailablePredefinedVariationIds = input<string[]>([]);\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly isPrerequisite = input(false);\n readonly tooltip = input<string>();\n\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n readonly predefinedVariations = computed(() => {\n return this.setting().predefinedVariations\n .map((sv, index) => ({\n ...sv,\n isAvailable: !this.notAvailablePredefinedVariationIds().find(u => u === sv.predefinedVariationId),\n colorIndex: getPredefinedVariationColorIndex(this.setting().settingType, sv.value, index),\n }));\n });\n\n FormHelper = FormHelper;\n getPredefinedVariationValueDisplayValue = getPredefinedVariationValueDisplayValue;\n SettingType = SettingType;\n\n expandText() {\n const stringValueControl = this.formGroup().controls.stringValue!;\n\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: stringValueControl.value,\n readOnly: stringValueControl.disabled,\n validators: 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 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 } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data) {\n stringValueControl.setValue(data.value);\n stringValueControl.updateValueAndValidity();\n stringValueControl.markAsTouched();\n stringValueControl.markAsDirty();\n }\n });\n }\n\n getPredefinedVariation(predefinedVariationId: string) {\n return this.predefinedVariations().find(p => p.predefinedVariationId === predefinedVariationId);\n }\n\n getServedValueText(model: {\n boolValue?: boolean | FormControl<boolean> | null;\n stringValue?: string | FormControl<string> | null;\n intValue?: number | FormControl<number> | null;\n doubleValue?: number | FormControl<number> | null;\n } | undefined) {\n switch (this.setting().settingType) {\n case SettingType.Boolean: {\n const controlOrValue = model?.boolValue;\n return \"\" + (controlOrValue instanceof FormControl ? controlOrValue.value : !!controlOrValue);\n }\n case SettingType.Int: {\n const controlOrValue = model?.intValue;\n return \"\" + (controlOrValue instanceof FormControl ? controlOrValue.value : controlOrValue);\n }\n case SettingType.Double: {\n const controlOrValue = model?.doubleValue;\n return \"\" + (controlOrValue instanceof FormControl ? controlOrValue.value : controlOrValue);\n }\n default: {\n const controlOrValue = model?.stringValue;\n let stringValue = (controlOrValue instanceof FormControl ? controlOrValue.value : controlOrValue) ?? \"\";\n if (stringValue.length > 50) {\n stringValue = stringValue.substring(0, 23) + \"[...]\" + stringValue.substring(stringValue.length - 22);\n }\n return \"'\" + stringValue.replace(/[\\\\']/g, \"\\\\$&\") + \"'\";\n }\n }\n }\n\n getDefaultDisplayNameText(model: PredefinedVariationValueModel | undefined) {\n switch (this.setting().settingType) {\n case SettingType.Boolean:\n return model?.boolValue ? \"On\" : \"Off\";\n case SettingType.Int:\n return \"\" + model?.intValue;\n case SettingType.Double:\n return \"\" + model?.doubleValue;\n default:\n return model?.stringValue ?? \"\";\n }\n }\n}\n","@let formGroupValue = formGroup();\n\n<div class=\"feature-flag-value\">\n @if (formGroupValue.controls.predefinedVariationId) {\n <div class=\"setting-variation\" [ngClass]=\"{ prerequisite: isPrerequisite() }\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field select-suffixed\" subscriptSizing=\"dynamic\">\n @let selectedPredefinedVariation = getPredefinedVariation(formGroupValue.controls.predefinedVariationId.value);\n @let variationName = selectedPredefinedVariation?.name;\n @let variationHint = selectedPredefinedVariation?.hint;\n <mat-select\n disableOptionCentering\n [formControl]=\"formGroupValue.controls.predefinedVariationId\"\n [matTooltip]=\"\n `${tooltip()}: ${getServedValueText(selectedPredefinedVariation?.value)} (type: ${setting().settingType})` +\n `\\nName: ${variationName || getDefaultDisplayNameText(selectedPredefinedVariation?.value)}` +\n `${variationHint ? `\\nHint: ${variationHint}` : ''}`\n \"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\">\n <mat-select-trigger>\n @if (selectedPredefinedVariation) {\n <div class=\"variation-option\">\n <span [class]=\"'variation-indicator variation-color-' + selectedPredefinedVariation.colorIndex\"></span>\n @if (selectedPredefinedVariation.name) {\n <em class=\"variation-name\">\n {{ selectedPredefinedVariation.name }}\n </em>\n } @else {\n <span>\n {{\n getPredefinedVariationValueDisplayValue(setting().settingType, selectedPredefinedVariation.value)\n }}\n </span>\n }\n </div>\n }\n </mat-select-trigger>\n\n @for (predefinedVariation of predefinedVariations(); track predefinedVariation.predefinedVariationId) {\n <span\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\"\n [matTooltip]=\"\n !predefinedVariation.isAvailable\n ? 'The predefined variation is already selected in another percentage option.'\n : (predefinedVariation.hint ?? '')\n \">\n <mat-option\n [value]=\"predefinedVariation.predefinedVariationId\"\n [disabled]=\"!predefinedVariation.isAvailable\">\n <div class=\"variation-option\">\n <span [class]=\"'variation-indicator variation-color-' + predefinedVariation.colorIndex\"></span>\n @if (predefinedVariation.name) {\n <em class=\"variation-name\">\n {{ predefinedVariation.name }}\n </em>\n } @else {\n <span>\n {{ getPredefinedVariationValueDisplayValue(setting().settingType, predefinedVariation.value) }}\n </span>\n }\n </div>\n </mat-option>\n </span>\n }\n </mat-select>\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n [matTooltip]=\"canCreateOrUpdateSetting() ? 'Manage predefined variations' : 'View predefined variations'\"\n (click)=\"\n $event.stopPropagation();\n viewVariationsRequested.emit({ settingId: setting().settingId, settingName: setting().name })\n \">\n <mat-icon class=\"icon-transform-rotate-90\">call_split</mat-icon>\n </button>\n @if (formGroupValue.controls.predefinedVariationId.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroupValue.controls.predefinedVariationId) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n } @else if (formGroupValue.controls.stringValue) {\n <mat-form-field appearance=\"outline\" class=\"small-form-field suffixed\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n placeholder=\"Add text ...\"\n appPastedDataTrimmer\n [formControl]=\"formGroupValue.controls.stringValue\"\n [matTooltip]=\"`${tooltip()}: ${getServedValueText(formGroupValue.controls)} (type: ${setting().settingType})`\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\" />\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandText()\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n @if (formGroupValue.controls.stringValue.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroupValue.controls.stringValue) }}\n </mat-error>\n }\n </mat-form-field>\n } @else if (formGroupValue.controls.intValue) {\n <mat-form-field appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"number\"\n appDigitOnly\n inputDisplayNormalizer\n placeholder=\"Add number ...\"\n [formControl]=\"formGroupValue.controls.intValue\"\n [digitOnlyAllowNegatives]=\"true\"\n [matTooltip]=\"`${tooltip()}: ${getServedValueText(formGroupValue.controls)} (type: ${setting().settingType})`\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\" />\n @if (formGroupValue.controls.intValue.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroupValue.controls.intValue) }}\n </mat-error>\n }\n </mat-form-field>\n } @else if (formGroupValue.controls.doubleValue) {\n <mat-form-field appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"number\"\n inputDisplayNormalizer\n placeholder=\"Add number ...\"\n [formControl]=\"formGroupValue.controls.doubleValue\"\n [matTooltip]=\"`${tooltip()}: ${getServedValueText(formGroupValue.controls)} (type: ${setting().settingType})`\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\" />\n @if (formGroupValue.controls.doubleValue.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroupValue.controls.doubleValue) }}\n </mat-error>\n }\n </mat-form-field>\n } @else if (formGroupValue.controls.boolValue) {\n <div class=\"bool\" [class.readonly]=\"formGroupValue.controls.boolValue.disabled\">\n <label\n class=\"switch\"\n [matTooltip]=\"`${tooltip()}: ${getServedValueText(formGroupValue.controls)} (type: ${setting().settingType})`\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\">\n <input type=\"checkbox\" [formControl]=\"formGroupValue.controls.boolValue\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n }\n</div>\n","import { Component, input, OnChanges } from \"@angular/core\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\n\n@Component({\n selector: \"app-condition-chip\",\n templateUrl: \"./condition-chip.component.html\",\n styleUrl: \"../../../chips.scss\",\n imports: [MatChipSet, MatChip],\n})\nexport class ConditionChipComponent implements OnChanges {\n readonly targetingRuleIndex = input.required<number>();\n readonly conditionIndex = input.required<number>();\n chipText = \"\";\n\n ngOnChanges(): void {\n this.chipText = this.conditionIndex() > 0 ? \"AND\" : this.targetingRuleIndex() === 0 ? \"IF\" : \"ELSE IF\";\n }\n}\n","<div class=\"chip-container fixed-width\">\n @if (conditionIndex() > 0) {\n <!-- In the integrations we remove the enter sign to spare some space-->\n <!-- <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div> -->\n }\n <mat-chip-set>\n <mat-chip disabled>{{ chipText }}</mat-chip>\n </mat-chip-set>\n</div>\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, input, linkedSignal, output, signal } from \"@angular/core\";\nimport { FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatOption, MatSelect, MatSelectTrigger } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n FormHelper,\n generatePrerequisiteDefaultValue,\n generateValueFormGroup,\n IFeatureFlagLimitations,\n IPrerequisiteSetting,\n PrerequisiteComparator,\n PrerequisiteFlagConditionForm,\n SettingType,\n} from \"../../../../../../bootstrap\";\nimport { FeatureFlagValueComponent } from \"../../../feature-flag-value/feature-flag-value.component\";\nimport { ConditionChipComponent } from \"../condition-chip/condition-chip.component\";\n\n@Component({\n selector: \"app-prerequisite-flag-condition\",\n templateUrl: \"./prerequisite-flag-condition.component.html\",\n styleUrls: [\"../../../components.scss\", \"./prerequisite-flag-condition.component.scss\"],\n imports: [\n ConditionChipComponent,\n MatFormField,\n FormsModule,\n MatTooltip,\n MatSelect,\n MatOption,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n FeatureFlagValueComponent,\n MatDivider,\n NgClass,\n MatIcon,\n MatIconButton,\n MatSuffix,\n MatInput,\n MatSelectTrigger,\n ],\n})\nexport class PrerequisiteFlagConditionComponent {\n readonly targetingRuleIndex = input.required<number>();\n readonly conditionIndex = input.required<number>();\n readonly formGroup = input.required<FormGroup<PrerequisiteFlagConditionForm>>();\n readonly prerequisiteSettings = input.required<IPrerequisiteSetting[]>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n\n readonly prerequisiteConditionChanged = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n SettingType = SettingType;\n\n readonly setting = linkedSignal(() => this.getSetting());\n\n readonly filterText = signal(\"\");\n readonly filteredPrerequisiteSettings = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n return this.prerequisiteSettings().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText) && !s.key.toLocaleLowerCase().includes(filterText) })\n );\n });\n\n readonly hasFilteredSettings = computed(() => !!this.filteredPrerequisiteSettings().find(f => !f.hidden));\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 getSetting() {\n return this.prerequisiteSettings().find(\n s => s.settingId === this.formGroup().controls.prerequisiteSettingId.value\n );\n }\n\n prerequisiteSettingChanged() {\n const oldSetting = this.setting();\n const newSetting = this.getSetting();\n this.setting.update(() => newSetting);\n const changeNeeded = (oldSetting?.settingId !== newSetting?.settingId\n && (oldSetting?.predefinedVariations.length || newSetting?.predefinedVariations.length))\n || (oldSetting?.settingType !== newSetting?.settingType);\n\n const prerequisiteSettingType = newSetting?.settingType ?? SettingType.Boolean;\n const variations = newSetting?.predefinedVariations ?? [];\n if (changeNeeded) {\n this.formGroup().setControl(\n \"prerequisiteComparisonValue\",\n generateValueFormGroup(\n generatePrerequisiteDefaultValue(prerequisiteSettingType, variations),\n prerequisiteSettingType,\n variations,\n false,\n this.featureFlagLimitations()\n )\n );\n }\n this.prerequisiteConditionChanged.emit();\n }\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n\n}\n","@let settingValue = setting();\n\n<div class=\"targeting-rule-line\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex()\" [conditionIndex]=\"conditionIndex()\" />\n <div class=\"explanation\">\n <a\n href=\"https://configcat.com/docs/targeting/targeting-rule/flag-condition/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"user-link\">\n flag\n </a>\n </div>\n </div>\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field class=\"small-form-field select no-suffix\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select\n placeholder=\"Select feature flag ...\"\n matTooltip=\"Prerequisite flag key\"\n [formControl]=\"formGroup().controls.prerequisiteSettingId\"\n (selectionChange)=\"prerequisiteSettingChanged()\"\n (opened)=\"clearFilter()\"\n (closed)=\"clearFilter()\">\n <mat-select-trigger>\n @if (settingValue) {\n {{ settingValue.name }} ({{ settingValue.key }})\n }\n </mat-select-trigger>\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter feature flags\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n\n @for (prerequisiteSetting of filteredPrerequisiteSettings(); track $index) {\n <mat-option [value]=\"prerequisiteSetting.settingId\" [ngClass]=\"{ hidden: prerequisiteSetting.hidden }\">\n <div class=\"feature-flag-selector-item\">\n @switch (prerequisiteSetting.settingType) {\n @case (SettingType.Boolean) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/feature_flag.svg\"\n alt=\"feature flag\" />\n }\n @case (SettingType.String) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/text.svg\"\n alt=\"text setting\" />\n }\n @case (SettingType.Int) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/whole.svg\"\n alt=\"whole number setting\" />\n }\n @case (SettingType.Double) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/decimal.svg\"\n alt=\"decimal number setting\" />\n }\n }\n <div class=\"item-text-wrapper\">\n <span [matTooltip]=\"prerequisiteSetting.name\">{{ prerequisiteSetting.name }}</span>\n <code class=\"highlight copyable-like small\" [matTooltip]=\"prerequisiteSetting.key\">\n {{ prerequisiteSetting.key }}\n </code>\n </div>\n </div>\n </mat-option>\n }\n @if (!hasFilteredSettings()) {\n <mat-option disabled>No feature flags found.</mat-option>\n }\n </mat-select>\n @if (formGroup().controls.prerequisiteSettingId.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.prerequisiteSettingId) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n @if (\n !settingValue || (!settingValue.predefinedVariations.length && settingValue.settingType === SettingType.Boolean)\n ) {\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field class=\"small-form-field select\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select\n [matTooltip]=\"\n `Comparison value: ${!!formGroup().controls.prerequisiteComparisonValue.controls.boolValue?.value} (type: ${SettingType.Boolean})`\n \"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\"\n [formControl]=\"formGroup().controls.comparator\">\n @for (prerequisiteComparator of booleanPrerequisiteComparators; track $index) {\n <mat-option [value]=\"prerequisiteComparator.value\">\n {{ prerequisiteComparator.label }}\n </mat-option>\n }\n </mat-select>\n @if (formGroup().controls.comparator.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparator) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n } @else {\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field class=\"small-form-field select\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select matTooltip=\"Comparator\" [formControl]=\"formGroup().controls.comparator\">\n @for (prerequisiteComparator of prerequisiteComparators; track $index) {\n <mat-option [value]=\"prerequisiteComparator.value\">\n {{ prerequisiteComparator.label }}\n </mat-option>\n }\n </mat-select>\n @if (formGroup().controls.comparator.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparator) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n }\n </div>\n @if (\n !(!settingValue || (!settingValue.predefinedVariations.length && settingValue.settingType === SettingType.Boolean))\n ) {\n <app-feature-flag-value\n class=\"wrapper-group grow\"\n tooltip=\"Comparison value\"\n [setting]=\"settingValue\"\n [formGroup]=\"formGroup().controls.prerequisiteComparisonValue\"\n [isPrerequisite]=\"true\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n }\n</div>\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, input, linkedSignal, output, signal } from \"@angular/core\";\nimport { FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatOption, MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { TrackingDirective } from \"../../../../../../_services/tracking.directive\";\nimport { FormHelper, ISegment, SegmentComparator, SegmentConditionForm } from \"../../../../../../bootstrap\";\nimport { ConditionChipComponent } from \"../condition-chip/condition-chip.component\";\n\n@Component({\n selector: \"app-segment-condition\",\n templateUrl: \"./segment-condition.component.html\",\n styleUrls: [\"../../../components.scss\", \"./segment-condition.component.scss\"],\n imports: [\n ConditionChipComponent,\n MatFormField,\n FormsModule,\n MatTooltip,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatInput,\n MatIconButton,\n MatMenuTrigger,\n TrackingDirective,\n MatIcon,\n MatMenu,\n MatMenuContent,\n MatMenuItem,\n MatSelect,\n MatOption,\n MatDivider,\n NgClass,\n MatSuffix,\n ],\n})\nexport class SegmentConditionComponent {\n readonly targetingRuleIndex = input.required<number>();\n readonly conditionIndex = input.required<number>();\n readonly formGroup = input.required<FormGroup<SegmentConditionForm>>();\n readonly segments = input.required<ISegment[]>();\n readonly canManageSegments = input.required<boolean>();\n readonly createSegmentRequested = output();\n readonly manageSegmentsRequested = output();\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 readonly filterText = signal(\"\");\n readonly filteredSegments = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n return this.segments().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText) && !s.description?.toLocaleLowerCase().includes(filterText) })\n );\n });\n readonly hasFilteredSegments = computed(() => !!this.filteredSegments().find(f => !f.hidden));\n\n createSegment() {\n this.createSegmentRequested.emit();\n }\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n}\n","<div class=\"targeting-rule-line\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex()\" [conditionIndex]=\"conditionIndex()\" />\n\n <div class=\"explanation\">\n <a\n href=\"https://configcat.com/docs/targeting/targeting-rule/segment-condition/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"user-link\">\n user\n </a>\n </div>\n </div>\n\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field class=\"small-form-field select\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select matTooltip=\"Comparator\" [formControl]=\"formGroup().controls.comparator\">\n @for (comparator of segmentComparators; track $index) {\n <mat-option [value]=\"comparator.value\">\n {{ comparator.label }}\n </mat-option>\n }\n </mat-select>\n @if (formGroup().controls.comparator.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparator) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component suffixed\">\n <mat-form-field\n class=\"small-form-field\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n [class.select-suffixed]=\"canManageSegments()\">\n <mat-select\n matTooltip=\"Segment\"\n placeholder=\"Select segment ...\"\n [formControl]=\"formGroup().controls.segmentId\"\n (opened)=\"clearFilter()\"\n (closed)=\"clearFilter()\">\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter segments\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n\n @for (segment of filteredSegments(); track $index) {\n <mat-option\n [value]=\"segment.segmentId\"\n [matTooltip]=\"segment.description\"\n [ngClass]=\"{ hidden: segment.hidden }\">\n {{ segment.name }}\n </mat-option>\n } @empty {\n <mat-option disabled>No segments available.</mat-option>\n }\n @if (segments().length && !hasFilteredSegments()) {\n <mat-option disabled>No segments found.</mat-option>\n }\n </mat-select>\n @if (canManageSegments()) {\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Create and manage segments\"\n [matMenuTriggerFor]=\"segmentMenu\"\n [track]=\"['segment menu click', 'feature flags and settings']\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n }\n @if (formGroup().controls.segmentId.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.segmentId) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-menu #segmentMenu=\"matMenu\">\n <ng-template matMenuContent>\n <a\n mat-menu-item\n [track]=\"['create segment click', 'Feature flags & settings V2 page']\"\n (click)=\"createSegmentRequested.emit()\">\n <mat-icon>add</mat-icon>\n <span>Create new segment</span>\n </a>\n <a\n mat-menu-item\n [track]=\"['manage segment click', 'Feature flags & settings V2 page']\"\n (click)=\"manageSegmentsRequested.emit()\">\n <mat-icon class=\"icon-transform-rotate\">pie_chart</mat-icon>\n <span>Manage segments</span>\n </a>\n </ng-template>\n</mat-menu>\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 readonly 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 offsetDate(date: Date, offsetMins: number): Date {\n return new Date(date.getTime() + offsetMins * 60000);\n }\n}\n","import { Component, DestroyRef, forwardRef, inject, input, OnInit } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n Validators,\n} from \"@angular/forms\";\nimport { DateAdapter } from \"@angular/material/core\";\nimport { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from \"@angular/material/datepicker\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatTimepicker, MatTimepickerInput, MatTimepickerToggle } from \"@angular/material/timepicker\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { distinctUntilChanged } from \"rxjs\";\nimport { DateHelper } from \"../../../_services/date-helper\";\nimport { AppDateAdapter, FormHelper } from \"../../../bootstrap\";\n\nexport interface DateTimeForm {\n dateValue: FormControl<Date | undefined>;\n timeValue: FormControl<Date | undefined>;\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 imports: [\n MatFormField,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatTooltip,\n MatDatepicker,\n MatDatepickerToggle,\n MatDatepickerInput,\n MatSuffix,\n MatTimepicker,\n MatTimepickerInput,\n MatTimepickerToggle,\n MatError,\n ],\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor, Validator {\n FormHelper = FormHelper;\n destroyRef = inject(DestroyRef);\n formGroup: FormGroup<DateTimeForm> = new FormGroup<DateTimeForm>({\n dateValue: new FormControl<Date | undefined>(void 0, { nonNullable: true, validators: [Validators.required] }),\n timeValue: new FormControl<Date | undefined>(void 0, { nonNullable: true, validators: [Validators.required] }),\n });\n private onChangeModel?: (value: number | undefined) => void;\n private onTouchModel?: () => void;\n readonly dateTooltip = input<string>();\n readonly timeTooltip = input<string>();\n\n ngOnInit(): void {\n this.formGroup.valueChanges.pipe(\n takeUntilDestroyed(this.destroyRef),\n distinctUntilChanged((a, b) => a.dateValue === b.dateValue && a.timeValue === b.timeValue)\n ).subscribe(value => {\n if (this.onChangeModel) {\n if (!value.dateValue || !value.timeValue\n || isNaN(value.dateValue.getTime())\n || isNaN(value.timeValue.getTime())\n ) {\n this.onChangeModel(void 0);\n } else {\n let dateTimeValue = new Date(value.dateValue.getFullYear(), value.dateValue.getMonth(), value.dateValue.getDate(),\n value.timeValue.getHours(), value.timeValue.getMinutes());\n dateTimeValue = DateHelper.offsetDate(dateTimeValue, -dateTimeValue.getTimezoneOffset());\n this.onChangeModel(dateTimeValue.getTime() / 1000);\n }\n }\n if (this.onTouchModel) {\n this.onTouchModel();\n }\n });\n }\n\n writeValue(obj: number): void {\n if (!obj) {\n this.formGroup.patchValue({ dateValue: void 0, timeValue: void 0 });\n } else {\n let dateTimeValue = new Date(obj * 1000.0);\n dateTimeValue = DateHelper.offsetDate(dateTimeValue, dateTimeValue.getTimezoneOffset());\n this.formGroup.patchValue({ dateValue: dateTimeValue, timeValue: dateTimeValue }, { onlySelf: true, emitEvent: false });\n }\n }\n\n registerOnChange(fn: (value: number | undefined) => void): void {\n this.onChangeModel = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchModel = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (isDisabled) {\n this.formGroup.disable();\n } else {\n this.formGroup.enable();\n }\n }\n\n validate(): ValidationErrors | null {\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-form-field suffixed small-icon-button\">\n <input\n matInput\n [formControl]=\"formGroup.controls.dateValue\"\n [matDatepicker]=\"datepicker\"\n [matTooltip]=\"dateTooltip()\" />\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\" />\n <mat-datepicker #datepicker />\n @if (formGroup.controls.dateValue.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.dateValue) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n <div class=\"component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field suffixed small-icon-button\">\n <input\n matInput\n [matTimepicker]=\"timepicker\"\n [formControl]=\"formGroup.controls.timeValue\"\n [matTooltip]=\"timeTooltip()\" />\n <mat-timepicker #timepicker />\n\n <div matSuffix class=\"suffix\">\n <div>UTC</div>\n <mat-timepicker-toggle [for]=\"timepicker\" />\n </div>\n @if (formGroup.controls.timeValue.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.timeValue) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n</div>\n","import { CdkDrag, CdkDragHandle } from \"@angular/cdk/drag-drop\";\nimport { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { NgClass, NgTemplateOutlet } from \"@angular/common\";\nimport { Component, inject, OnInit } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatRadioButton, MatRadioGroup } from \"@angular/material/radio\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\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\nexport interface ComparatorDialogData {\n selectedComparator: UserComparator;\n readOnly: boolean;\n}\n\n@Component({\n selector: \"app-comparator-dialog\",\n templateUrl: \"./comparator-dialog.component.html\",\n styleUrls: [\"./comparator-dialog.component.scss\"],\n imports: [\n MatDialogTitle,\n CdkDrag,\n CdkDragHandle,\n MatButtonToggleGroup,\n FormsModule,\n RxReactiveFormsModule,\n MatButtonToggle,\n CdkScrollable,\n MatDialogContent,\n NgTemplateOutlet,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n MatRadioGroup,\n NgClass,\n MatRadioButton,\n MatTooltip,\n MatIcon,\n ],\n})\nexport class ComparatorDialogComponent implements OnInit {\n dialogRef = inject<MatDialogRef<ComparatorDialogComponent, UserComparator>>(MatDialogRef);\n data = inject<ComparatorDialogData>(MAT_DIALOG_DATA);\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 {\n value: UserComparator.TextEquals,\n sensitiveValue: UserComparator.SensitiveTextEquals,\n group: ComparatorGroup.Text,\n label: \"EQUALS\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK is equal to the comparison value set on the ConfigCat Dashboard\",\n },\n {\n value: UserComparator.TextDoesNotEqual,\n sensitiveValue: UserComparator.SensitiveTextDoesNotEqual,\n group: ComparatorGroup.Text,\n label: \"NOT EQUALS\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK is not equal to the comparison value\",\n },\n {\n value: UserComparator.IsOneOf,\n sensitiveValue: UserComparator.SensitiveIsOneOf,\n group: ComparatorGroup.Text,\n label: \"IS ONE OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK is equal to any of the comparison values\",\n },\n {\n value: UserComparator.IsNotOneOf,\n sensitiveValue: UserComparator.SensitiveIsNotOneOf,\n group: ComparatorGroup.Text,\n label: \"IS NOT ONE OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK is not equal to any of the comparison values\",\n },\n {\n value: UserComparator.TextStartsWithAnyOf,\n sensitiveValue: UserComparator.SensitiveTextStartsWithAnyOf,\n group: ComparatorGroup.Text,\n label: \"STARTS WITH ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK starts with any of the comparison values\",\n },\n {\n value: UserComparator.TextNotStartsWithAnyOf,\n sensitiveValue: UserComparator.SensitiveTextNotStartsWithAnyOf,\n group: ComparatorGroup.Text,\n label: \"NOT STARTS WITH ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK does not start with any of the comparison values\",\n },\n {\n value: UserComparator.TextEndsWithAnyOf,\n sensitiveValue: UserComparator.SensitiveTextEndsWithAnyOf,\n group: ComparatorGroup.Text,\n label: \"ENDS WITH ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK ends with any of the comparison values\",\n },\n {\n value: UserComparator.TextNotEndsWithAnyOf,\n sensitiveValue: UserComparator.SensitiveTextNotEndsWithAnyOf,\n group: ComparatorGroup.Text,\n label: \"NOT ENDS WITH ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK does not end with any of the comparison values\",\n },\n {\n value: UserComparator.ContainsAnyOf,\n group: ComparatorGroup.Text,\n label: \"CONTAINS ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK contains any comparison values as a substring\",\n },\n {\n value: UserComparator.DoesNotContainAnyOf,\n group: ComparatorGroup.Text,\n label: \"NOT CONTAINS ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK does not contain any comparison values as a substring\",\n },\n\n {\n value: UserComparator.NumberEquals,\n group: ComparatorGroup.Number,\n label: \"= (EQUALS)\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is equal to the comparison value\",\n },\n {\n value: UserComparator.NumberDoesNotEqual,\n group: ComparatorGroup.Number,\n label: \"!= (NOT EQUALS)\",\n description:\n \"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 },\n {\n value: UserComparator.NumberLess,\n group: ComparatorGroup.Number,\n label: \"< (LESS THAN)\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is less than the comparison value\",\n },\n {\n value: UserComparator.NumberLessOrEquals,\n group: ComparatorGroup.Number,\n label: \"<= (LESS THAN OR EQUAL)\",\n description:\n \"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 },\n {\n value: UserComparator.NumberGreater,\n group: ComparatorGroup.Number,\n label: \"> (GREATER THAN)\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is greater than the comparison value\",\n },\n {\n value: UserComparator.NumberGreaterOrEquals,\n group: ComparatorGroup.Number,\n label: \">= (GRATER THAN OR EQUAL)\",\n description:\n \"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\n {\n value: UserComparator.SemVerIsOneOf,\n group: ComparatorGroup.Semver,\n label: \"IS ONE OF\",\n description:\n \"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 },\n {\n value: UserComparator.SemVerIsNotOneOf,\n group: ComparatorGroup.Semver,\n label: \"IS NOT ONE OF\",\n description:\n \"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 },\n {\n value: UserComparator.SemVerLess,\n group: ComparatorGroup.Semver,\n label: \"< (LESS THAN)\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is less than the comparison value\",\n },\n {\n value: UserComparator.SemVerLessOrEquals,\n group: ComparatorGroup.Semver,\n label: \"<= (LESS THAN OR EQUAL)\",\n description:\n \"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 },\n {\n value: UserComparator.SemVerGreater,\n group: ComparatorGroup.Semver,\n label: \"> (GREATER THAN)\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is greater than the comparison value\",\n },\n {\n value: UserComparator.SemVerGreaterOrEquals,\n group: ComparatorGroup.Semver,\n label: \">= (GRATER THAN OR EQUAL)\",\n description:\n \"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\n {\n value: UserComparator.DateTimeBefore,\n group: ComparatorGroup.DateTime,\n label: \"BEFORE (UTC)\",\n description:\n \"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 },\n {\n value: UserComparator.DateTimeAfter,\n group: ComparatorGroup.DateTime,\n label: \"AFTER (UTC)\",\n description:\n \"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\n {\n value: UserComparator.ArrayContainsAnyOf,\n group: ComparatorGroup.Array,\n sensitiveValue: UserComparator.SensitiveArrayContainsAnyOf,\n label: \"ARRAY CONTAINS ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a string list) contains any of the comparison values\",\n },\n {\n value: UserComparator.ArrayDoesNotContainAnyOf,\n group: ComparatorGroup.Array,\n sensitiveValue: UserComparator.SensitiveArrayDoesNotContainAnyOf,\n label: \"ARRAY NOT CONTAINS ANY OF\",\n description:\n \"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\n ngOnInit(): void {\n const selected = this.comparators.find(\n c => c.value === this.data.selectedComparator || c.sensitiveValue === this.data.selectedComparator\n )!;\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(\n c => c.value === this.selectedComparator || c.sensitiveValue === this.selectedComparator\n )!;\n const result = this.isConfidential && selected.sensitiveValue ? selected.sensitiveValue : selected.value;\n this.dialogRef.close(result);\n }\n}\n","<h1 mat-dialog-title cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle class=\"draggable\">\n Comparator selector\n</h1>\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\">\n @switch (selectedGroup) {\n @case (ComparatorGroup.Text) {\n <div>\n <p>\n The following comparators expect the\n <i>comparison attribute's</i>\n value (passed to the SDK via the\n <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n ) and the\n <i>comparison value</i>\n (specified on the Dashboard) to contain string/text. The comparison performed by these comparators is\n case-sensitive.\n </p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{ group: ComparatorGroup.Text }\" />\n <ng-container [ngTemplateOutlet]=\"confidential\" />\n </div>\n }\n @case (ComparatorGroup.Number) {\n <div>\n <p>\n The following comparators expect the\n <i>comparison attribute's</i>\n value (passed to the SDK via the\n <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n ) and the\n <i>comparison value</i>\n (specified on the Dashboard) to contain numbers.\n </p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{ group: ComparatorGroup.Number }\" />\n </div>\n }\n @case (ComparatorGroup.Semver) {\n <div>\n <p>\n The following comparators expect the\n <i>comparison attribute's</i>\n value (passed to the SDK via the\n <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n ) and the\n <i>comparison value</i>\n (specified on the Dashboard) to contain semantic versions.\n </p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{ group: ComparatorGroup.Semver }\" />\n </div>\n }\n @case (ComparatorGroup.DateTime) {\n <div>\n <p>\n The following comparators expect the\n <i>comparison attribute's</i>\n value (passed to the SDK via the\n <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n ) and the\n <i>comparison value</i>\n (specified on the Dashboard) to contain datetimes.\n </p>\n <ng-container\n [ngTemplateOutlet]=\"comparators\"\n [ngTemplateOutletContext]=\"{ group: ComparatorGroup.DateTime }\" />\n </div>\n }\n @case (ComparatorGroup.Array) {\n <div>\n <p>\n The following comparators expect the\n <i>comparison attribute's</i>\n value (passed to the SDK via the\n <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n ) and the\n <i>comparison value</i>\n (specified on the Dashboard) to contain items of a string/text list. The comparison performed by these\n comparators is case-sensitive.\n </p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{ group: ComparatorGroup.Array }\" />\n <ng-container [ngTemplateOutlet]=\"confidential\" />\n </div>\n }\n }\n</div>\n<div mat-dialog-actions>\n @if (!data.readOnly) {\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button mat-dialog-close>Cancel</button>\n } @else {\n <button type=\"button\" mat-stroked-button color=\"primary\" mat-dialog-close>Close</button>\n }\n</div>\n\n<ng-template #comparators let-group=\"group\">\n <div>\n <mat-radio-group color=\"primary\" (change)=\"comparatorChange($event.value)\">\n <div class=\"comparator-container\">\n @for (comparator of listComparators(group); track $index; let i = $index) {\n <div\n class=\"item\"\n [ngClass]=\"'col-' + (i % 2)\"\n [class.selected]=\"comparator.value === selectedComparator\"\n (click)=\"comparatorChange(comparator.value)\">\n <mat-radio-button\n [value]=\"comparator.value\"\n [disabled]=\"data.readOnly\"\n [checked]=\"comparator.value === selectedComparator\"\n [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 @switch (comparator.value) {\n <!-- TEXT -->\n @case (UserComparator.TextEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob@foo.com</span>\n EQUALS\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">bob@foo.com</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextDoesNotEqual) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice@foo.com</span>\n NOT EQUALS\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">bob@foo.com</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.IsOneOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span>\n IS ONE OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [ Android, macOS,\n <span class=\"match-val\">iOS</span>\n ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.IsNotOneOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span>\n IS NOT ONE OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, Windows ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextStartsWithAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob@foo.com</span>\n STARTS WITH ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">bob</span>\n , jane ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextNotStartsWithAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice@foo.com</span>\n NOT STARTS WITH ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ bob, jane ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextEndsWithAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob@foo.com</span>\n ENDS WITH ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">@foo.com</span>\n , @bar.com ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextNotEndsWithAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob@example.com</span>\n NOT ENDS WITH ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ @foo.com, @bar.com ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.ContainsAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://test-app.foo.com</span>\n CONTAINS ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">test</span>\n , localhost ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.DoesNotContainAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://app.foo.com</span>\n NOT CONTAINS ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ test, localhost ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n <!-- NUMBER -->\n @case (UserComparator.NumberEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span>\n =\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.NumberDoesNotEqual) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span>\n !=\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">3.14</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.NumberLess) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span>\n <\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.NumberLessOrEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span>\n <=\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.NumberGreater) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span>\n >\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.NumberGreaterOrEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span>\n >=\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span>\n <span class=\"arrow\">➔</span>\n true\n }\n <!-- SEMVER -->\n @case (UserComparator.SemVerIsOneOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span>\n IS ONE OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">1.0.0</span>\n , 4.3.5 ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.SemVerIsNotOneOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2.1.0</span>\n IS NOT ONE OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ 1.0.0, 4.3.5 ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.SemVerLess) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span>\n <\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.SemVerLessOrEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span>\n <=\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.SemVerGreater) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span>\n >\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.0.0-alpha</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.SemVerGreaterOrEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.2.0</span>\n >=\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.1.0</span>\n <span class=\"arrow\">➔</span>\n true\n }\n <!-- DATETIME -->\n @case (UserComparator.DateTimeBefore) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 10:36:24</span>\n BEFORE\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.DateTimeAfter) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 15:41:06</span>\n AFTER\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span>\n <span class=\"arrow\">➔</span>\n true\n }\n <!-- ARRAY -->\n @case (UserComparator.ArrayContainsAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Writer, Reader ]</span>\n ARRAY CONTAINS ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">Writer</span>\n , Admin ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.ArrayDoesNotContainAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Guest, Reader ]</span>\n ARRAY NOT CONTAINS ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Writer, Admin ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n }\n </div>\n </div>\n </div>\n }\n </div>\n </mat-radio-group>\n </div>\n</ng-template>\n\n<ng-template #confidential>\n <p>\n Select how the\n <i>comparison values</i>\n should be persisted:\n </p>\n <div\n 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\" color=\"primary\" (change)=\"confidentialChange($event.value)\">\n <div class=\"confidential item\" (click)=\"confidentialChange(true)\">\n <mat-radio-button [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\n email addresses, names, etc).\n </div>\n </div>\n <div class=\"cleartext item\" (click)=\"confidentialChange(false)\">\n <mat-radio-button\n [value]=\"false\"\n [checked]=\"!isConfidential\"\n [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\n as plain text in the\n <i>config JSON</i>\n .\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { CdkTextareaAutosize } from \"@angular/cdk/text-field\";\nimport { SlicePipe } from \"@angular/common\";\nimport { AfterViewInit, Component, DestroyRef, effect, inject, OnInit, viewChild } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport { MatChipRow, MatChipSet } from \"@angular/material/chips\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatPaginator } from \"@angular/material/paginator\";\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable,\n MatTableDataSource,\n} from \"@angular/material/table\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { Subscription } from \"rxjs\";\nimport { AceEditorComponent } from \"../../../../../../../..//lib/ace-editor/ace-editor.component\";\nimport { AutofocusDirective } from \"../../../../../../../../lib/_directives/autofocus.directive\";\nimport { PastedDataTrimmerDirective } from \"../../../../../../../../lib/_directives/pasted-data-trimmer.directive\";\nimport {\n addComparisonValueListValueItems,\n ComparisonValueListForm,\n ComparisonValueListParseResult,\n formatValuesAndHintAsCsv,\n formatValuesAndHintAsJson,\n formatValuesAsCsv,\n FormHelper,\n generateComparisonValueFormGroup,\n IComparisonValueListModel,\n IFeatureFlagLimitations,\n parseValuesAndHintsFromCsv,\n parseValuesAndHintsFromJson,\n parseValuesFromCsv,\n UserComparator,\n} from \"../../../../../../../bootstrap\";\n\nexport interface PopoutListEditorDialogData {\n comparisonValueList: IComparisonValueListModel[];\n comparator: UserComparator;\n featureFlagLimitations: IFeatureFlagLimitations;\n readOnly: boolean;\n}\n\nexport interface PopoutListEditorDialogResult {\n comparisonValueList: IComparisonValueListModel[];\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 imports: [\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatButtonToggleGroup,\n FormsModule,\n MatButtonToggle,\n MatTooltip,\n MatFormField,\n MatLabel,\n MatInput,\n MatIconButton,\n MatIcon,\n MatTable,\n MatColumnDef,\n MatHeaderCellDef,\n MatHeaderCell,\n MatCellDef,\n MatCell,\n AutofocusDirective,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatHeaderRowDef,\n MatHeaderRow,\n MatRowDef,\n MatRow,\n MatPaginator,\n AceEditorComponent,\n CdkTextareaAutosize,\n MatChipSet,\n MatChipRow,\n MatButton,\n MatDialogActions,\n MatDialogClose,\n SlicePipe,\n PastedDataTrimmerDirective,\n ],\n})\nexport class PopoutListEditorDialogComponent implements OnInit, AfterViewInit {\n dialogRef = inject<MatDialogRef<PopoutListEditorDialogComponent, PopoutListEditorDialogResult>>(MatDialogRef);\n data = inject<PopoutListEditorDialogData>(MAT_DIALOG_DATA);\n\n destroyRef = inject(DestroyRef);\n FormHelper = FormHelper;\n VisualizationType = VisualizationType;\n\n dataSource = new MatTableDataSource<FormGroup<ComparisonValueListForm>>([]);\n plainText = \"\";\n listValueFormArray!: FormArray<FormGroup<ComparisonValueListForm>>;\n filterValue = \"\";\n valueChanged = false;\n currentlyHasHints = false;\n\n displayedColumns = [\"value\", \"hint\", \"actions\"];\n visualizationType = VisualizationType.Table;\n comparisonValueListParseResult?: ComparisonValueListParseResult;\n valueChangeSubscription?: Subscription;\n focusIndex = 0;\n\n readonly paginator = viewChild<MatPaginator>(\"paginator\");\n readonly paginatorChangeEffect = effect(() => {\n const paginator = this.paginator();\n if (paginator) {\n this.dataSource.paginator = paginator;\n }\n });\n\n ngOnInit(): void {\n const comparisonValueList = this.data.comparisonValueList;\n if (!comparisonValueList.length) {\n comparisonValueList.push({ value: \"\", hint: null });\n }\n\n this.setFormGroup(comparisonValueList);\n }\n\n setFormGroup(comparisonValueList: IComparisonValueListModel[]) {\n this.listValueFormArray = generateComparisonValueFormGroup(\n { listValue: comparisonValueList, doubleValue: null, stringValue: null },\n this.data.comparator,\n this.data.readOnly,\n this.data.featureFlagLimitations\n ).controls.listValue!;\n\n if (this.listValueFormArray.invalid) {\n this.listValueFormArray.markAllAsTouched();\n }\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n this.checkHasHints();\n this.valueChangeSubscription = this.listValueFormArray.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.checkHasHints();\n },\n });\n }\n\n checkHasHints() {\n this.currentlyHasHints = !!this.listValueFormArray.controls.find(r => !!r.value.hint);\n }\n\n setDataSource() {\n this.dataSource.data = this.listValueFormArray.controls;\n if (this.dataSource.paginator) {\n this.dataSource.paginator.length = this.dataSource.data.length;\n }\n }\n\n ngAfterViewInit(): void {\n this.dataSource = new MatTableDataSource(this.listValueFormArray.controls);\n this.dataSource.paginator = this.paginator() ?? null;\n this.dataSource.filterPredicate = (row, filter) =>\n [\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.focusIndex = -1;\n this.dataSource.filter = this.filterValue.trim().toLowerCase();\n\n if (this.dataSource.paginator) {\n this.dataSource.paginator.firstPage();\n }\n }\n\n add() {\n if (this.listValueFormArray.controls.length >= this.data.featureFlagLimitations.maxComparisonValueListLength) {\n return;\n }\n\n addComparisonValueListValueItems(\n this.data.comparator,\n this.listValueFormArray,\n [{ value: \"\", hint: null }],\n this.data.featureFlagLimitations\n );\n\n this.setDataSource();\n this.filterValue = \"\";\n this.applyFilter();\n this.focusIndex = this.listValueFormArray.controls.length - 1;\n this.dataSource.paginator?.lastPage();\n }\n\n remove(row: FormGroup<ComparisonValueListForm>) {\n const index = this.listValueFormArray.controls.findIndex(c => c.controls.index.value === row.controls.index.value);\n if (index === -1) {\n return;\n }\n this.listValueFormArray.controls.splice(index, 1);\n this.listValueFormArray.updateValueAndValidity();\n this.listValueFormArray.markAsTouched();\n this.listValueFormArray.markAsDirty();\n this.setDataSource();\n }\n\n set() {\n if (this.visualizationType !== VisualizationType.Table) {\n if (!this.comparisonValueListParseResult || this.comparisonValueListParseResult.error) {\n return;\n }\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n this.valueChanged = false;\n }\n\n if (this.listValueFormArray.invalid) {\n this.listValueFormArray.markAllAsTouched();\n return;\n }\n\n this.dialogRef.close({ comparisonValueList: this.getRawValue() });\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.listValueFormArray.value.map(v => {\n return { value: v.value, hint: v.hint ?? \"\" } as IComparisonValueListModel;\n });\n }\n\n focusInvalid() {\n if (this.visualizationType !== VisualizationType.Table) {\n this.changeVisualizationType(VisualizationType.Table);\n }\n const invalidIndex = this.listValueFormArray.controls.findIndex(c => c.invalid);\n const paginator = this.paginator();\n if (paginator && invalidIndex !== -1) {\n this.listValueFormArray.markAllAsTouched();\n this.filterValue = \"\";\n this.applyFilter();\n paginator.length = this.dataSource.data.length;\n const pageNumber = Math.floor(invalidIndex / (this.dataSource.paginator?.pageSize ?? 5));\n this.focusIndex = invalidIndex;\n paginator.pageIndex = pageNumber;\n paginator.page.emit({\n pageIndex: pageNumber,\n pageSize: paginator.pageSize,\n length: paginator.length,\n });\n }\n }\n\n changeVisualizationType(visualizationType: VisualizationType) {\n if (this.valueChanged && this.visualizationType !== VisualizationType.Table) {\n if (!this.comparisonValueListParseResult || 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 = formatValuesAndHintAsJson(this.getRawValue());\n break;\n case VisualizationType.Csv:\n this.plainText = formatValuesAndHintAsCsv(this.getRawValue());\n break;\n case VisualizationType.Csl:\n this.plainText = 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 && !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 = parseValuesAndHintsFromJson(\n this.plainText\n );\n break;\n case VisualizationType.Csv:\n this.comparisonValueListParseResult = parseValuesAndHintsFromCsv(this.plainText);\n break;\n case VisualizationType.Csl:\n this.comparisonValueListParseResult = 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: Event) {\n const files = (event.target as HTMLInputElement).files;\n if (!files || files.length === 0) {\n return;\n }\n const file = files[0];\n const fileReader = new FileReader();\n fileReader.onload = () => {\n this.plainText = fileReader.result as string;\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 <div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"visualizationType\" (ngModelChange)=\"changeVisualizationType($event)\">\n <mat-button-toggle\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [value]=\"VisualizationType.Table\"\n [disabled]=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult?.error\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Table || !comparisonValueListParseResult?.error\">\n Table\n </mat-button-toggle>\n <mat-button-toggle\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [value]=\"VisualizationType.Json\"\n [disabled]=\"visualizationType !== VisualizationType.Json && comparisonValueListParseResult?.error\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Json || !comparisonValueListParseResult?.error\">\n JSON\n </mat-button-toggle>\n <mat-button-toggle\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [value]=\"VisualizationType.Csv\"\n [disabled]=\"visualizationType !== VisualizationType.Csv && comparisonValueListParseResult?.error\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Csv || !comparisonValueListParseResult?.error\">\n CSV with hints\n </mat-button-toggle>\n <mat-button-toggle\n [value]=\"VisualizationType.Csl\"\n [disabled]=\"\n (visualizationType !== VisualizationType.Csl && comparisonValueListParseResult?.error) || currentlyHasHints\n \"\n [matTooltip]=\"\n currentlyHasHints\n ? 'There are hints set to your values so the CSV without hints view is not available'\n : 'Can not switch between views while there are errors in the current view.'\n \"\n [matTooltipDisabled]=\"\n (visualizationType === VisualizationType.Csl || !comparisonValueListParseResult?.error) && !currentlyHasHints\n \">\n CSV without hints\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"table-format\" [hidden]=\"visualizationType !== VisualizationType.Table\">\n <p class=\"description\">\n Modify the items within the list of comparison values. The hint helps you label the value for easier reference.\n </p>\n <div class=\"controls\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"small-density-form-field\" subscriptSizing=\"dynamic\">\n <mat-label>Filter</mat-label>\n <input\n matInput\n placeholder=\"Filter values and hints.\"\n [(ngModel)]=\"filterValue\"\n (ngModelChange)=\"applyFilter()\" />\n </mat-form-field>\n </div>\n <div class=\"control-button-container\">\n <div\n class=\"add-btn-container\"\n matTooltip=\"Add item\"\n [matTooltipDisabled]=\"\n listValueFormArray.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\n \">\n <div\n [matTooltip]=\"\n 'Maximum ' + data.featureFlagLimitations.maxComparisonValueListLength + ' items can be added.'\n \"\n [matTooltipDisabled]=\"\n listValueFormArray.controls.length < data.featureFlagLimitations.maxComparisonValueListLength\n \">\n @if (!data.readOnly) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"add-btn\"\n [disabled]=\"\n listValueFormArray.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\n \"\n (click)=\"add()\">\n <mat-icon>add_circle</mat-icon>\n </button>\n }\n </div>\n </div>\n\n @if (!data.readOnly) {\n <button\n type=\"button\"\n class=\"action-icon-button\"\n mat-icon-button\n matTooltip=\"Remove all\"\n (click)=\"removeAll()\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n </div>\n <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"value\">\n <th *matHeaderCellDef mat-header-cell mat-sort-header>Comparison value</th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field\">\n @if (paginator.pageIndex * paginator.pageSize + i === focusIndex) {\n <input matInput focus appPastedDataTrimmer [formControl]=\"row.controls.value\" />\n } @else {\n <input matInput appPastedDataTrimmer [formControl]=\"row.controls.value\" />\n }\n @if (row.controls.value.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(row.controls.value) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th *matHeaderCellDef mat-header-cell mat-sort-header>Hint</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field\">\n <input matInput [formControl]=\"row.controls.hint\" />\n @if (row.controls.hint.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(row.controls.hint) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"actions\">\n <th *matHeaderCellDef mat-header-cell mat-sort-header></th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n @if (!data.readOnly) {\n <button mat-icon-button type=\"button\" matTooltip=\"Remove item\" (click)=\"remove(row)\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </td>\n </ng-container>\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n </table>\n <mat-paginator #paginator showFirstLastButtons [pageSizeOptions]=\"[5, 10, 50, 100]\" />\n </div>\n\n @if (visualizationType === VisualizationType.Json) {\n <div class=\"json-format\">\n <div class=\"actions\">\n <div>Modify the items via a JSON text.</div>\n @if (!data.readOnly) {\n <div>\n <input\n #fileInput\n hidden=\"true\"\n type=\"file\"\n accept=\".txt,.json\"\n (click)=\"fileInput.value = ''\"\n (change)=\"loadFile($event)\" />\n <button\n type=\"button\"\n class=\"action-icon-button\"\n mat-icon-button\n matTooltip=\"Load from file (your values will be overwritten)\"\n (click)=\"fileInput.click()\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n }\n </div>\n <div class=\"json-editor\">\n <app-ace-editor [readOnly]=\"data.readOnly\" [(value)]=\"plainText\" (valueChange)=\"textValueChanged()\" />\n </div>\n </div>\n } @else if (visualizationType === VisualizationType.Csv) {\n <div class=\"csv-format\">\n <div class=\"actions\">\n <div>Modify the items via a CSV (values and hints) text.</div>\n @if (!data.readOnly) {\n <div>\n <input\n #fileInput\n hidden=\"true\"\n type=\"file\"\n accept=\".txt,.csv\"\n (click)=\"fileInput.value = ''\"\n (change)=\"loadFile($event)\" />\n <button\n type=\"button\"\n mat-icon-button\n class=\"action-icon-button\"\n matTooltip=\"Load from file (your values will be overwritten)\"\n (click)=\"fileInput.click()\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n }\n </div>\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea\n matInput\n autofocus\n focus\n rows=\"17\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\"\n spellcheck=\"false\"\n [readonly]=\"data.readOnly\"\n [(ngModel)]=\"plainText\"\n (ngModelChange)=\"textValueChanged()\"></textarea>\n </mat-form-field>\n </div>\n } @else if (visualizationType === VisualizationType.Csl) {\n <div class=\"csv-format\">\n <div class=\"actions\">\n <div>Modify the items via a CSV (values only) text.</div>\n @if (!data.readOnly) {\n <div>\n <input\n #fileInput\n hidden=\"true\"\n type=\"file\"\n accept=\".txt,.csv\"\n (click)=\"fileInput.value = ''\"\n (change)=\"loadFile($event)\" />\n <button\n type=\"button\"\n mat-icon-button\n class=\"action-icon-button\"\n matTooltip=\"Load from file (your values will be overwritten)\"\n (click)=\"fileInput.click()\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n }\n </div>\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea\n matInput\n autofocus\n focus\n rows=\"17\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\"\n spellcheck=\"false\"\n [readonly]=\"data.readOnly\"\n [(ngModel)]=\"plainText\"\n (ngModelChange)=\"textValueChanged()\"></textarea>\n </mat-form-field>\n </div>\n }\n\n @if (visualizationType !== VisualizationType.Table && comparisonValueListParseResult) {\n <div>\n @if (!comparisonValueListParseResult.error && comparisonValueListParseResult.comparisonValueList.length) {\n <p class=\"small-chip-input\">\n Preview ({{ comparisonValueListParseResult.comparisonValueList.length }} items)\n <mat-chip-set>\n @for (listValueItem of comparisonValueListParseResult.comparisonValueList | slice: 0 : 10; track $index) {\n <span class=\"chip-container\" [matTooltip]=\"listValueItem.hint ? listValueItem.hint : 'No hint'\">\n <mat-chip-row>\n {{ listValueItem.value }}\n </mat-chip-row>\n </span>\n }\n @if (comparisonValueListParseResult.comparisonValueList.length > 10) {\n <mat-chip-row>\n {{ comparisonValueListParseResult.comparisonValueList.length - 10 }} remaining items...\n </mat-chip-row>\n }\n </mat-chip-set>\n </p>\n }\n @if (comparisonValueListParseResult.error) {\n <mat-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 }\n </div>\n }\n @if (listValueFormArray.touched && listValueFormArray.invalid && listValueFormArray.errors) {\n <mat-error class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>{{ FormHelper.getErrorMessage(listValueFormArray) }}</span>\n </mat-error>\n }\n @if (!valueChanged && listValueFormArray.touched && listValueFormArray.invalid) {\n <mat-error class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Invalid items. </span>\n <div>\n @if (visualizationType !== VisualizationType.Table || (paginator?.getNumberOfPages() ?? 0) > 1) {\n <button type=\"button\" mat-stroked-button color=\"primary\" class=\"jump\" (click)=\"focusInvalid()\">\n Jump to fix\n </button>\n }\n </div>\n </mat-error>\n }\n</div>\n<div mat-dialog-actions>\n @if (!data.readOnly) {\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]>Cancel</button>\n } @else {\n <button type=\"button\" mat-stroked-button color=\"primary\" [mat-dialog-close]>Close</button>\n }\n</div>\n","import { Clipboard } from \"@angular/cdk/clipboard\";\nimport { COMMA, ENTER } from \"@angular/cdk/keycodes\";\nimport { KeyValuePipe, NgClass, NgTemplateOutlet, SlicePipe } from \"@angular/common\";\nimport { ChangeDetectorRef, Component, inject, input, OnChanges, viewChild } from \"@angular/core\";\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport {\n MatChipEditedEvent,\n MatChipGrid,\n MatChipInput,\n MatChipInputEvent,\n MatChipRemove,\n MatChipRow,\n} from \"@angular/material/chips\";\nimport { DateAdapter, ErrorStateMatcher, MatOptgroup, MatOption } from \"@angular/material/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatError, MatFormField, MatPrefix, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { ConfirmationDialogData } from \"projects/ng-configcat-publicapi-ui/src/lib/dialogs/confirmation-dialog/confirmation-dialog\";\nimport { InfoDialogData, InfoDialogResult } from \"projects/ng-configcat-publicapi-ui/src/lib/dialogs/info-dialog/info-dialog\";\nimport { PastedDataTrimmerDirective } from \"../../../../../../../lib/_directives/pasted-data-trimmer.directive\";\nimport { InputDisplayNormalizerDirective } from \"../../../../../../_directives/input-display-normalizer.directive\";\nimport { isClearTextComparator } from \"../../../../../../_models/user-comparator\";\nimport {\n addComparisonValueListValueItems,\n AppDateAdapter,\n ComparisonValueListForm,\n ConfirmationDialogComponent,\n formatValuesAsCsv,\n FormHelper,\n generateComparisonValueFormGroup,\n generateComparisonValueListValueArray,\n getComparisonValueSemverListItemValidators,\n getComparisonValueSemverValidators,\n getComparisonValueStringListItemValidators,\n getComparisonValueStringValidators,\n getComparisonValueType,\n IComparisonValueListModel,\n IComparisonValueModel,\n IFeatureFlagLimitations,\n InfoDialogComponent,\n MessagingService,\n parseValuesFromCsv,\n UserComparator,\n UserComparatorText,\n UserComparatorType,\n UserConditionForm,\n} from \"../../../../../../bootstrap\";\nimport { DateTimePickerComponent } from \"../../../../date-time-picker/date-time-picker.component\";\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData, PopoutTextEditorDialogResult } from \"../../../popout-text-editor-dialog/popout-text-editor-dialog.component\";\nimport { ConditionChipComponent } from \"../condition-chip/condition-chip.component\";\nimport { ComparatorDialogComponent, ComparatorDialogData } from \"./comparator-dialog/comparator-dialog.component\";\nimport {\n PopoutListEditorDialogComponent,\n PopoutListEditorDialogData,\n PopoutListEditorDialogResult,\n} from \"./popout-list-editor-dialog/popout-list-editor-dialog.component\";\n\nexport class ListValueErrorStateMatcher implements ErrorStateMatcher {\n constructor(private readonly formGroup: FormGroup<UserConditionForm>) {}\n isErrorState(): boolean {\n return (\n (this.formGroup.controls.comparisonValue.controls.listValue?.touched\n && this.formGroup.controls.comparisonValue.controls.listValue.invalid)\n ?? false\n );\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 {\n value: UserComparator.ContainsAnyOf,\n label: UserComparatorText.ContainsAnyOf,\n group: ComparatorGroup.Text,\n index: 2,\n },\n {\n value: UserComparator.DoesNotContainAnyOf,\n label: UserComparatorText.DoesNotContainAnyOf,\n group: ComparatorGroup.Text,\n index: 3,\n },\n {\n value: UserComparator.SemVerIsOneOf,\n label: UserComparatorText.SemVerIsOneOf,\n group: ComparatorGroup.SemanticVersion,\n index: 4,\n },\n {\n value: UserComparator.SemVerIsNotOneOf,\n label: UserComparatorText.SemVerIsNotOneOf,\n group: ComparatorGroup.SemanticVersion,\n index: 5,\n },\n {\n value: UserComparator.SemVerLess,\n label: UserComparatorText.SemVerLess,\n group: ComparatorGroup.SemanticVersion,\n index: 6,\n },\n {\n value: UserComparator.SemVerLessOrEquals,\n label: UserComparatorText.SemVerLessOrEquals,\n group: ComparatorGroup.SemanticVersion,\n index: 7,\n },\n {\n value: UserComparator.SemVerGreater,\n label: UserComparatorText.SemVerGreater,\n group: ComparatorGroup.SemanticVersion,\n index: 8,\n },\n {\n value: UserComparator.SemVerGreaterOrEquals,\n label: UserComparatorText.SemVerGreaterOrEquals,\n group: ComparatorGroup.SemanticVersion,\n index: 9,\n },\n {\n value: UserComparator.NumberEquals,\n label: UserComparatorText.NumberEquals,\n group: ComparatorGroup.Number,\n index: 10,\n },\n {\n value: UserComparator.NumberDoesNotEqual,\n label: UserComparatorText.NumberDoesNotEqual,\n group: ComparatorGroup.Number,\n index: 11,\n },\n { value: UserComparator.NumberLess, label: UserComparatorText.NumberLess, group: ComparatorGroup.Number, index: 12 },\n {\n value: UserComparator.NumberLessOrEquals,\n label: UserComparatorText.NumberLessOrEquals,\n group: ComparatorGroup.Number,\n index: 13,\n },\n {\n value: UserComparator.NumberGreater,\n label: UserComparatorText.NumberGreater,\n group: ComparatorGroup.Number,\n index: 14,\n },\n {\n value: UserComparator.NumberGreaterOrEquals,\n label: UserComparatorText.NumberGreaterOrEquals,\n group: ComparatorGroup.Number,\n index: 15,\n },\n {\n value: UserComparator.SensitiveIsOneOf,\n label: UserComparatorText.SensitiveIsOneOf,\n group: ComparatorGroup.ConfidentialText,\n index: 16,\n },\n {\n value: UserComparator.SensitiveIsNotOneOf,\n label: UserComparatorText.SensitiveIsNotOneOf,\n group: ComparatorGroup.ConfidentialText,\n index: 17,\n },\n {\n value: UserComparator.DateTimeBefore,\n label: UserComparatorText.DateTimeBefore,\n group: ComparatorGroup.DateTime,\n index: 18,\n },\n {\n value: UserComparator.DateTimeAfter,\n label: UserComparatorText.DateTimeAfter,\n group: ComparatorGroup.DateTime,\n index: 19,\n },\n {\n value: UserComparator.SensitiveTextEquals,\n label: UserComparatorText.SensitiveTextEquals,\n group: ComparatorGroup.ConfidentialText,\n index: 20,\n },\n {\n value: UserComparator.SensitiveTextDoesNotEqual,\n label: UserComparatorText.SensitiveTextDoesNotEqual,\n group: ComparatorGroup.ConfidentialText,\n index: 21,\n },\n {\n value: UserComparator.SensitiveTextStartsWithAnyOf,\n label: UserComparatorText.SensitiveTextStartsWithAnyOf,\n group: ComparatorGroup.ConfidentialText,\n index: 22,\n },\n {\n value: UserComparator.SensitiveTextNotStartsWithAnyOf,\n label: UserComparatorText.SensitiveTextNotStartsWithAnyOf,\n group: ComparatorGroup.ConfidentialText,\n index: 23,\n },\n {\n value: UserComparator.SensitiveTextEndsWithAnyOf,\n label: UserComparatorText.SensitiveTextEndsWithAnyOf,\n group: ComparatorGroup.ConfidentialText,\n index: 24,\n },\n {\n value: UserComparator.SensitiveTextNotEndsWithAnyOf,\n label: UserComparatorText.SensitiveTextNotEndsWithAnyOf,\n group: ComparatorGroup.ConfidentialText,\n index: 25,\n },\n {\n value: UserComparator.SensitiveArrayContainsAnyOf,\n label: UserComparatorText.SensitiveArrayContainsAnyOf,\n group: ComparatorGroup.ConfidentialArray,\n index: 26,\n },\n {\n value: UserComparator.SensitiveArrayDoesNotContainAnyOf,\n label: UserComparatorText.SensitiveArrayDoesNotContainAnyOf,\n group: ComparatorGroup.ConfidentialArray,\n index: 27,\n },\n { value: UserComparator.TextEquals, label: UserComparatorText.TextEquals, group: ComparatorGroup.Text, index: 28 },\n {\n value: UserComparator.TextDoesNotEqual,\n label: UserComparatorText.TextDoesNotEqual,\n group: ComparatorGroup.Text,\n index: 29,\n },\n {\n value: UserComparator.TextStartsWithAnyOf,\n label: UserComparatorText.TextStartsWithAnyOf,\n group: ComparatorGroup.Text,\n index: 30,\n },\n {\n value: UserComparator.TextNotStartsWithAnyOf,\n label: UserComparatorText.TextNotStartsWithAnyOf,\n group: ComparatorGroup.Text,\n index: 31,\n },\n {\n value: UserComparator.TextEndsWithAnyOf,\n label: UserComparatorText.TextEndsWithAnyOf,\n group: ComparatorGroup.Text,\n index: 32,\n },\n {\n value: UserComparator.TextNotEndsWithAnyOf,\n label: UserComparatorText.TextNotEndsWithAnyOf,\n group: ComparatorGroup.Text,\n index: 33,\n },\n {\n value: UserComparator.ArrayContainsAnyOf,\n label: UserComparatorText.ArrayContainsAnyOf,\n group: ComparatorGroup.Array,\n index: 34,\n },\n {\n value: UserComparator.ArrayDoesNotContainAnyOf,\n label: UserComparatorText.ArrayDoesNotContainAnyOf,\n group: ComparatorGroup.Array,\n index: 35,\n },\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: [\"../../../components.scss\", \"./user-condition.component.scss\"],\n providers: [{ provide: DateAdapter, useClass: AppDateAdapter }],\n imports: [\n ConditionChipComponent,\n NgClass,\n MatFormField,\n MatInput,\n MatTooltip,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatSelect,\n MatOption,\n MatOptgroup,\n MatIconButton,\n MatSuffix,\n MatIcon,\n NgTemplateOutlet,\n MatPrefix,\n MatChipGrid,\n MatChipRow,\n MatChipRemove,\n MatButton,\n MatChipInput,\n MatMenuTrigger,\n InputDisplayNormalizerDirective,\n DateTimePickerComponent,\n MatMenu,\n MatMenuItem,\n SlicePipe,\n KeyValuePipe,\n MatDivider,\n PastedDataTrimmerDirective,\n ],\n})\nexport class UserConditionComponent implements OnChanges {\n private readonly dialog = inject(MatDialog);\n private readonly clipboard = inject(Clipboard);\n private readonly messagingService = inject(MessagingService);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n FormHelper = FormHelper;\n\n readonly targetingRuleIndex = input.required<number>();\n readonly conditionIndex = input.required<number>();\n readonly readOnly = input.required<boolean>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly formGroup = input.required<FormGroup<UserConditionForm>>();\n readonly matChipGrid = viewChild<MatChipGrid>(\"chipGrid\");\n\n defaultComparisonAttributes = [\"Identifier\", \"Email\", \"Country\"];\n comparisionAttributeCustom = \"Custom\";\n\n comparatorSuggestions = new Map<ComparatorGroup, IComparatorValue[]>();\n selectedComparator!: UserComparator;\n\n keepOrder = () => 0;\n\n RolloutRuleComparatorV2Type = UserComparatorType;\n rolloutRuleComparatorType!: UserComparatorType;\n isClearTextComparator!: boolean;\n selectedAttribute!: string;\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 error state with the original component's errorState.\n fakeFormControl = new FormControl<string>(\"\");\n errorStateMatcher!: ListValueErrorStateMatcher;\n\n ngOnChanges(): void {\n this.rolloutRuleComparatorType = getComparisonValueType(\n this.formGroup().controls.comparator.value\n );\n this.isClearTextComparator = isClearTextComparator(this.formGroup().controls.comparator.value);\n this.errorStateMatcher = new ListValueErrorStateMatcher(this.formGroup());\n this.selectedComparator = this.formGroup().controls.comparator.value;\n this.selectedAttribute = !this.defaultComparisonAttributes.includes(\n this.formGroup().controls.comparisonAttribute.value\n )\n ? this.comparisionAttributeCustom\n : this.formGroup().controls.comparisonAttribute.value;\n this.calcComparators();\n }\n\n attributeChanged(value: string): void {\n const formGroup = this.formGroup();\n if (this.defaultComparisonAttributes.includes(value)) {\n const formGroup = this.formGroup();\n if (formGroup.controls.comparisonAttribute.value !== value) {\n formGroup.controls.comparisonAttribute.setValue(value);\n formGroup.markAsDirty();\n this.calcComparators(true);\n }\n } else if (formGroup.controls.comparisonAttribute.value !== \"\") {\n formGroup.controls.comparisonAttribute.setValue(\"\");\n formGroup.markAsDirty();\n this.calcComparators(true);\n }\n }\n\n comparatorChanged(value: string): 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 const comparatorValue = value as UserComparator;\n this.formGroup().controls.comparator.setValue(comparatorValue);\n this.formGroup().markAsDirty();\n this.selectedComparator = comparatorValue;\n this.isClearTextComparator = isClearTextComparator(this.formGroup().controls.comparator.value);\n\n const oldRolloutRuleComparatorType = this.rolloutRuleComparatorType;\n this.rolloutRuleComparatorType = getComparisonValueType(\n this.formGroup().controls.comparator.value\n );\n if (oldRolloutRuleComparatorType !== this.rolloutRuleComparatorType) {\n const defaultValue: IComparisonValueModel =\n this.rolloutRuleComparatorType === UserComparatorType.DateTime\n ? {\n doubleValue: new Date().getTime() / 1000.0,\n listValue: null,\n stringValue: null,\n }\n : { doubleValue: null, listValue: null, stringValue: null };\n this.formGroup().setControl(\n \"comparisonValue\",\n generateComparisonValueFormGroup(\n defaultValue,\n this.formGroup().controls.comparator.value,\n false,\n this.featureFlagLimitations()\n )\n );\n }\n }\n\n compDialog() {\n const dialogRef = this.dialog.open<ComparatorDialogComponent, ComparatorDialogData, UserComparator | undefined>(\n ComparatorDialogComponent,\n {\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\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 openCleartextInfoDialog() {\n this.dialog.open<InfoDialogComponent, InfoDialogData, InfoDialogResult>(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: () => {\n this.compDialog();\n },\n },\n });\n }\n\n add(event: MatChipInputEvent): void {\n const value = (event.value || \"\").trim();\n\n event.chipInput.clear();\n\n if (!value) {\n return;\n }\n\n if (!value.includes(\",\")) {\n addComparisonValueListValueItems(\n this.formGroup().controls.comparator.value,\n this.formGroup().controls.comparisonValue.controls.listValue!,\n [{ value, hint: null }],\n this.featureFlagLimitations()\n );\n return;\n }\n\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\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 cancelButtonLabel: \"Add as a single item\",\n },\n disableClose: true,\n }\n );\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === \"yes\") {\n const comparisonValueListParseResult = parseValuesFromCsv(value);\n if (comparisonValueListParseResult.error) {\n this.messagingService.showErrorSnack(\"Parse error\");\n } else if (comparisonValueListParseResult.comparisonValueList.length > 0) {\n addComparisonValueListValueItems(\n this.formGroup().controls.comparator.value,\n this.formGroup().controls.comparisonValue.controls.listValue!,\n comparisonValueListParseResult.comparisonValueList,\n this.featureFlagLimitations()\n );\n }\n } else {\n addComparisonValueListValueItems(\n this.formGroup().controls.comparator.value,\n this.formGroup().controls.comparisonValue.controls.listValue!,\n [{ value, hint: null }],\n this.featureFlagLimitations()\n );\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 formGroup = this.formGroup();\n if (!formGroup.controls.comparisonValue.controls.stringValue) {\n return;\n }\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: formGroup.controls.comparisonValue.controls.stringValue.value,\n readOnly: formGroup.controls.comparisonValue.controls.stringValue.disabled,\n validators:\n this.rolloutRuleComparatorType === UserComparatorType.Semver\n ? getComparisonValueSemverValidators(this.featureFlagLimitations())\n : getComparisonValueStringValidators(this.featureFlagLimitations()),\n maxValueLength: this.featureFlagLimitations().maxComparisonValueLength,\n description:\n \"Modify the text within the editor to change the comparison value. The editor supports JSON syntax highlighting.\",\n } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (\n formGroup.controls.comparisonValue.controls.stringValue\n && data\n && data.value !== formGroup.controls.comparisonValue.controls.stringValue.value\n ) {\n formGroup.controls.comparisonValue.controls.stringValue.setValue(data.value);\n formGroup.controls.comparisonValue.controls.stringValue.updateValueAndValidity();\n formGroup.controls.comparisonValue.controls.stringValue.markAsTouched();\n formGroup.controls.comparisonValue.controls.stringValue.markAsDirty();\n }\n });\n }\n\n expandList() {\n const dialogRef = this.dialog.open<\n PopoutListEditorDialogComponent,\n PopoutListEditorDialogData,\n PopoutListEditorDialogResult | undefined\n >(PopoutListEditorDialogComponent, {\n width: \"670px\",\n data: {\n comparisonValueList: this.getRawValue(),\n comparator: this.formGroup().controls.comparator.value,\n featureFlagLimitations: this.featureFlagLimitations(),\n readOnly: this.readOnly(),\n } as PopoutListEditorDialogData,\n });\n dialogRef.afterClosed().subscribe(data => {\n if (data?.comparisonValueList) {\n const oldValue = this.formGroup().controls.comparisonValue.controls.listValue!.value.map(l => {\n return { value: l.value, hint: l.hint };\n });\n const newValue = data.comparisonValueList.map(l => {\n return { value: l.value, hint: l.hint };\n });\n if (JSON.stringify(oldValue) === JSON.stringify(newValue)) {\n return;\n }\n const validators =\n getComparisonValueType(this.formGroup().controls.comparator.value) ===\n UserComparatorType.SemverList\n ? getComparisonValueSemverListItemValidators(this.featureFlagLimitations())\n : getComparisonValueStringListItemValidators(this.featureFlagLimitations());\n const formArray = generateComparisonValueListValueArray(\n data.comparisonValueList,\n this.readOnly(),\n this.featureFlagLimitations(),\n validators\n );\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 // As we are overriding the control that is used in a @for,\n // the change detection cannot detect it, so we have to call .detectChanges() on it.\n // The chips were not updated without this .detectChanges().\n // When we switch to signal forms in angular, this can be probably removed.\n this.changeDetectorRef.detectChanges();\n }\n });\n }\n\n removeAll() {\n const formGroup = this.formGroup();\n this.formGroup().controls.comparisonValue.controls.listValue!.controls.splice(\n 0,\n formGroup.controls.comparisonValue.controls.listValue!.controls.length\n );\n formGroup.controls.comparisonValue.controls.listValue!.updateValueAndValidity();\n formGroup.controls.comparisonValue.controls.listValue!.markAllAsTouched();\n formGroup.controls.comparisonValue.controls.listValue!.markAsDirty();\n }\n\n copyValuesAsCsv() {\n this.copyToClipboard(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 } else {\n this.messagingService.showErrorSnack(\"Nothing to be copied.\");\n }\n }\n\n getRawValue(): IComparisonValueListModel[] {\n return this.formGroup().controls.comparisonValue.controls.listValue!.value.map(v => {\n return { value: v.value, hint: v.hint } as IComparisonValueListModel;\n });\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>): string {\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 (\n resetVal\n && !ids.includes(selected.index)\n && this.isNullCompVal(this.formGroup().controls.comparisonValue.value)\n ) {\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(\n (entryMap, e) => entryMap.set(e.group, [...(entryMap.get(e.group) ?? []), e]),\n new Map<ComparatorGroup, IComparatorValue[]>()\n );\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 isNumberArr(val: number[]): 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(\n compVal: Partial<{\n stringValue: string | null;\n doubleValue: number | null;\n listValue: Partial<{ value: string; hint: string | null; index: number } | null>[];\n }>\n ): boolean {\n return !compVal.doubleValue && !compVal.listValue && !compVal.stringValue;\n }\n}\n","<div class=\"targeting-rule-line\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex()\" [conditionIndex]=\"conditionIndex()\" />\n\n <div class=\"explanation\">\n <a\n href=\"https://configcat.com/docs/targeting/targeting-rule/user-condition/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"user-link\">\n user's\n </a>\n </div>\n </div>\n\n <div class=\"wrapper-group\">\n <div class=\"wrapper-group\">\n <div\n class=\"targeting-rule-component pad-right\"\n [ngClass]=\"{\n small: comparisionAttributeCustom === selectedAttribute,\n }\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field select\" subscriptSizing=\"dynamic\">\n <mat-select\n matTooltip=\"Comparison attribute\"\n [disabled]=\"formGroup().controls.comparisonAttribute.disabled\"\n [(value)]=\"selectedAttribute\"\n (selectionChange)=\"attributeChanged(selectedAttribute)\">\n @for (comparisonAttribute of defaultComparisonAttributes; track $index) {\n <mat-option [value]=\"comparisonAttribute\">{{ comparisonAttribute }}</mat-option>\n }\n <mat-option value=\"Custom\">Custom</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right small\" [hidden]=\"comparisionAttributeCustom !== selectedAttribute\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n matTooltip=\"Custom comparison attribute\"\n [formControl]=\"formGroup().controls.comparisonAttribute\"\n (blur)=\"calcComparators(true)\" />\n @if (formGroup().controls.comparisonAttribute.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparisonAttribute) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"targeting-rule-component pad-right suffixed\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field select-suffixed\" subscriptSizing=\"dynamic\">\n <mat-select\n matTooltip=\"Comparator\"\n [disabled]=\"readOnly()\"\n [(value)]=\"selectedComparator\"\n (selectionChange)=\"comparatorChanged(selectedComparator)\">\n @for (group of comparatorSuggestions | keyvalue: keepOrder; track group) {\n <mat-optgroup [label]=\"group.key\">\n @for (comparator of group.value; track comparator) {\n <mat-option [value]=\"comparator.value\">\n {{ comparator.label }}\n </mat-option>\n }\n </mat-optgroup>\n }\n <mat-divider />\n <mat-option value=\"showall\">\n <mat-icon>list_alt</mat-icon>\n SHOW ALL COMPARATORS\n </mat-option>\n </mat-select>\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"All comparators\"\n (click)=\"compDialog(); $event.stopPropagation()\">\n <mat-icon>list_alt</mat-icon>\n </button>\n @if (formGroup().controls.comparator.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparator) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n @switch (rolloutRuleComparatorType) {\n @case (RolloutRuleComparatorV2Type.String) {\n <ng-container [ngTemplateOutlet]=\"textTemplate\" />\n }\n @case (RolloutRuleComparatorV2Type.Semver) {\n <ng-container [ngTemplateOutlet]=\"semverTemplate\" />\n }\n @case (RolloutRuleComparatorV2Type.StringList) {\n <ng-container [ngTemplateOutlet]=\"listTemplate\" />\n }\n @case (RolloutRuleComparatorV2Type.SemverList) {\n <ng-container [ngTemplateOutlet]=\"listTemplate\" />\n }\n @case (RolloutRuleComparatorV2Type.Number) {\n <ng-container [ngTemplateOutlet]=\"numberTemplate\" />\n }\n @case (RolloutRuleComparatorV2Type.DateTime) {\n <ng-container [ngTemplateOutlet]=\"dateTimeTemplate\" />\n }\n }\n</div>\n\n<ng-template #textTemplate>\n @if (formGroup().controls.comparisonValue.controls.stringValue) {\n <div class=\"targeting-rule-component grow\">\n <mat-form-field\n appearance=\"outline\"\n class=\"small-form-field\"\n subscriptSizing=\"dynamic\"\n [class.suffixed]=\"!isClearTextComparator\"\n [class.suffixed-prefixed]=\"isClearTextComparator\">\n <input\n matInput\n type=\"text\"\n matTooltip=\"Comparison value (text)\"\n placeholder=\"Add text ...\"\n appPastedDataTrimmer\n [formControl]=\"formGroup().controls.comparisonValue.controls.stringValue!\" />\n @if (isClearTextComparator) {\n <button\n matPrefix\n class=\"prefix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"\n (click)=\"openCleartextInfoDialog()\">\n <mat-icon>lock_open_right</mat-icon>\n </button>\n }\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandText()\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n @if (formGroup().controls.comparisonValue.controls.stringValue!.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparisonValue.controls.stringValue!) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n }\n</ng-template>\n\n<ng-template #semverTemplate>\n @if (formGroup().controls.comparisonValue.controls.stringValue) {\n <div class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n matTooltip=\"Comparison value (semantic version)\"\n placeholder=\"Add semantic version ... (1.2.3)\"\n [formControl]=\"formGroup().controls.comparisonValue.controls.stringValue!\" />\n @if (formGroup().controls.comparisonValue.controls.stringValue!.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparisonValue.controls.stringValue!) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n }\n</ng-template>\n\n<ng-template #listTemplate>\n @if (formGroup().controls.comparisonValue.controls.listValue) {\n <div class=\"targeting-rule-component grow small-chip-input top-icon-suffix\">\n <mat-form-field\n appearance=\"outline\"\n class=\"small-form-field suffixed\"\n subscriptSizing=\"dynamic\"\n [class.suffixed]=\"!isClearTextComparator\"\n [class.suffixed-prefixed]=\"isClearTextComparator\">\n <mat-chip-grid #chipGrid [formControl]=\"fakeFormControl\" [errorStateMatcher]=\"errorStateMatcher\">\n @for (\n listValueItem of formGroup().controls.comparisonValue.controls.listValue!.controls | slice: 0 : 20;\n track $index;\n let i = $index\n ) {\n <span class=\"chip-container\" [matTooltip]=\"getListValueItemTooltipMessage(listValueItem)\">\n <mat-chip-row\n class=\"chip\"\n [disabled]=\"readOnly()\"\n [removable]=\"!readOnly()\"\n [editable]=\"!readOnly()\"\n [ngClass]=\"{ invalid: isListValueItemInvalid(listValueItem) }\"\n (removed)=\"remove(i)\"\n (edited)=\"edit(i, $event)\">\n {{ listValueItem.controls.value.value }}\n @if (!readOnly()) {\n <button type=\"button\" matChipRemove>\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </button>\n }\n </mat-chip-row>\n </span>\n }\n @if (formGroup().controls.comparisonValue.controls.listValue!.controls.length > 20) {\n <button mat-stroked-button class=\"show-all\" type=\"button\" (click)=\"expandList()\">\n show all {{ formGroup().controls.comparisonValue.controls.listValue!.controls.length }} items\n </button>\n }\n <input\n matChipInputAddOnBlur\n matTooltip=\"Comparison values (list)\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"!readOnly() ? 'Add item to list ...' : ''\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"add($event)\" />\n </mat-chip-grid>\n @if (isClearTextComparator) {\n <button\n matIconPrefix\n class=\"prefix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"\n (click)=\"openCleartextInfoDialog()\">\n <mat-icon>lock_open_right</mat-icon>\n </button>\n }\n <button\n matIconSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandList()\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n <button\n matIconSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"More...\"\n [matMenuTriggerFor]=\"moreMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n @if (\n formGroup().controls.comparisonValue.controls.listValue!.invalid &&\n formGroup().controls.comparisonValue.controls.listValue!.errors\n ) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparisonValue.controls.listValue!) }}\n </mat-error>\n }\n @if (\n formGroup().controls.comparisonValue.controls.listValue!.invalid &&\n !formGroup().controls.comparisonValue.controls.listValue!.errors\n ) {\n <mat-error>Invalid items</mat-error>\n }\n </mat-form-field>\n </div>\n }\n</ng-template>\n\n<ng-template #numberTemplate>\n @if (formGroup().controls.comparisonValue.controls.doubleValue) {\n <div class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"number\"\n matTooltip=\"Comparison value (number)\"\n placeholder=\"Add number ...\"\n inputDisplayNormalizer\n [formControl]=\"formGroup().controls.comparisonValue.controls.doubleValue!\" />\n @if (formGroup().controls.comparisonValue.controls.doubleValue!.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparisonValue.controls.doubleValue!) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n }\n</ng-template>\n\n<ng-template #dateTimeTemplate>\n @if (formGroup().controls.comparisonValue.controls.doubleValue) {\n <div class=\"targeting-rule-component datetime\">\n <app-date-time-picker\n dateTooltip=\"Comparison value (date)\"\n timeTooltip=\"Comparison value (time)\"\n [formControl]=\"formGroup().controls.comparisonValue.controls.doubleValue!\" />\n </div>\n }\n</ng-template>\n\n<mat-menu #moreMenu>\n <a mat-menu-item (click)=\"expandList()\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n Open advanced editor\n </a>\n <a mat-menu-item (click)=\"copyValuesAsCsv()\">\n <mat-icon>content_copy</mat-icon>\n Copy as CSV (values only)\n </a>\n <a mat-menu-item [disabled]=\"readOnly()\" (click)=\"removeAll()\">\n <mat-icon>delete</mat-icon>\n Remove all\n </a>\n</mat-menu>\n","import { Component, input, output } from \"@angular/core\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n ConditionForm,\n generateConditionFormGroup,\n generateEmptyPrerequisiteFlagConditionFormGroup,\n generateEmptySegmentConditionFormGroup,\n IFeatureFlagLimitations,\n IFlagState,\n ISegment,\n UserComparator,\n} from \"../../../../../bootstrap\";\nimport { PrerequisiteFlagConditionComponent } from \"./prerequisite-flag-condition/prerequisite-flag-condition.component\";\nimport { SegmentConditionComponent } from \"./segment-condition/segment-condition.component\";\nimport { UserConditionComponent } from \"./user-condition/user-condition.component\";\n\n@Component({\n selector: \"app-conditions\",\n templateUrl: \"./conditions.component.html\",\n styleUrls: [\"../../components.scss\", \"./conditions.component.scss\", \"../../add-btn.scss\"],\n imports: [\n UserConditionComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n SegmentConditionComponent,\n PrerequisiteFlagConditionComponent,\n MatIconButton,\n MatTooltip,\n MatIcon,\n MatMenuTrigger,\n MatMenu,\n MatMenuItem,\n ],\n})\nexport class ConditionsComponent {\n readonly formArray = input.required<FormArray<FormGroup<ConditionForm>>>();\n readonly segments = input.required<ISegment[]>();\n readonly flagState = input.required<IFlagState>();\n readonly targetingRuleIndex = input.required<number>();\n readonly canManageSegments = input.required<boolean>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n\n readonly createSegmentRequested = output();\n readonly manageSegmentsRequested = output();\n readonly addSegmentConditionRequestedWithoutSegments = output();\n readonly lastConditionDeleted = output();\n readonly subscriptionLimitReached = output();\n readonly prerequisiteConditionChanged = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n addUserCondition() {\n if (!this.checkLimitations()) return;\n\n const f = generateConditionFormGroup(\n {\n userCondition: {\n comparisonAttribute: \"Identifier\",\n comparator: UserComparator.SensitiveTextEquals,\n comparisonValue: { stringValue: \"\", doubleValue: null, listValue: null },\n },\n prerequisiteFlagCondition: null,\n segmentCondition: null,\n },\n this.flagState().readOnly,\n this.flagState().prerequisiteSettings,\n this.featureFlagLimitations()\n );\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 = new FormGroup<ConditionForm>({\n segmentCondition: generateEmptySegmentConditionFormGroup(),\n });\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: generateEmptyPrerequisiteFlagConditionFormGroup(\n this.featureFlagLimitations()\n ),\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","@for (condition of formArray().controls; track $index; let i = $index) {\n <div class=\"condition\">\n @if (condition.controls.userCondition) {\n <app-user-condition\n class=\"grow\"\n [readOnly]=\"flagState().readOnly\"\n [formGroup]=\"condition.controls.userCondition\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [targetingRuleIndex]=\"targetingRuleIndex()\"\n [conditionIndex]=\"i\" />\n } @else if (condition.controls.segmentCondition) {\n <app-segment-condition\n class=\"grow\"\n [formGroup]=\"condition.controls.segmentCondition\"\n [segments]=\"segments()\"\n [canManageSegments]=\"canManageSegments()\"\n [targetingRuleIndex]=\"targetingRuleIndex()\"\n [conditionIndex]=\"i\"\n (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\" />\n } @else if (condition.controls.prerequisiteFlagCondition) {\n <app-prerequisite-flag-condition\n class=\"grow\"\n [formGroup]=\"condition.controls.prerequisiteFlagCondition\"\n [prerequisiteSettings]=\"flagState().prerequisiteSettings\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [targetingRuleIndex]=\"targetingRuleIndex()\"\n [conditionIndex]=\"i\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n }\n @if (formArray().controls.length > 1 && !flagState().readOnly) {\n <div class=\"delete-button\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove condition\" (click)=\"remove(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </button>\n </div>\n }\n </div>\n}\n\n@if (formArray().controls.length && !flagState().readOnly) {\n <div class=\"add-cond\">\n <!-- In the integrations we remove the enter sign to spare some space-->\n <!-- <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div> -->\n <div matTooltip=\"Add AND condition\" class=\"add-btn add-and\" [matMenuTriggerFor]=\"andmenu\">+ AND</div>\n </div>\n}\n\n<mat-menu #andmenu class=\"menu-long-text-and\">\n <a mat-menu-item (click)=\"addUserCondition()\">\n <mat-icon>track_changes</mat-icon>\n Add user condition\n </a>\n <a mat-menu-item (click)=\"addSegmentCondition()\">\n <mat-icon class=\"icon-transform-rotate\">pie_chart</mat-icon>\n Add segment condition\n </a>\n <div\n 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 [disabled]=\"!flagState().prerequisiteSettings.length\" (click)=\"addPrerequisiteFlagCondition()\">\n <mat-icon>account_tree</mat-icon>\n Add flag condition (prerequisite)\n </a>\n </div>\n</mat-menu>\n","import { Component, input, linkedSignal, output } from \"@angular/core\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { DigitOnlyDirective } from \"../../../../../_directives/digit-only.directive\";\nimport { InputDisplayNormalizerDirective } from \"../../../../../_directives/input-display-normalizer.directive\";\nimport {\n FormHelper,\n generateDefaultValue,\n generatePercentageOptionFormGroup,\n IFeatureFlagLimitations,\n IFlagState,\n PercentageOptionForm,\n SettingType,\n} from \"../../../../../bootstrap\";\nimport { FeatureFlagValueComponent } from \"../../feature-flag-value/feature-flag-value.component\";\n\n@Component({\n selector: \"app-percentage-options\",\n templateUrl: \"./percentage-options.component.html\",\n styleUrls: [\"../../components.scss\", \"./percentage-options.component.scss\", \"../../chips.scss\", \"../../add-btn.scss\"],\n imports: [\n MatFormField,\n MatInput,\n FormsModule,\n InputDisplayNormalizerDirective,\n MatTooltip,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatSuffix,\n MatError,\n MatButton,\n MatIconButton,\n MatIcon,\n FeatureFlagValueComponent,\n DigitOnlyDirective,\n ],\n})\nexport class PercentageOptionsComponent {\n readonly formArray = input.required<FormArray<FormGroup<PercentageOptionForm>>>();\n readonly flagState = input.required<IFlagState>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly percentageEvaluationAttribute = input.required<string | null>();\n readonly isPercentageOnlyTargetingRule = input.required<boolean>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n\n readonly lastPercentageOptionLeft = output();\n readonly subscriptionLimitReached = output();\n readonly changePercentageEvaluationAttributeRequested = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n readonly percentageOptionsCount = linkedSignal(() => {\n return this.formArray().controls.length;\n });\n\n SettingType = SettingType;\n FormHelper = FormHelper;\n\n addOption() {\n if (this.formArray().length >= this.featureFlagLimitations().maxPercentageOptionCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n\n const remainingPredefinedVariations = this.getRemainingPredefinedVariations();\n\n if (this.flagState().settingValue.setting.predefinedVariations.length && !remainingPredefinedVariations.length) {\n return;\n }\n\n this.formArray().push(\n generatePercentageOptionFormGroup(\n {\n percentage: 0,\n value: generateDefaultValue(this.flagState().settingValue.setting.settingType, remainingPredefinedVariations),\n },\n this.flagState().settingValue.setting.settingType,\n this.flagState().settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n )\n );\n this.formArray().markAsDirty();\n this.percentageOptionsCount.set(this.formArray().controls.length);\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 this.percentageOptionsCount.set(this.formArray().controls.length);\n }\n\n percentageChanged(index: number) {\n const formArray = this.formArray();\n\n if (formArray.controls[index].controls.percentage.value < 0) {\n formArray.controls[index].controls.percentage.setValue(0);\n }\n if (formArray.controls[index].controls.percentage.value > 100) {\n formArray.controls[index].controls.percentage.setValue(100);\n }\n\n if (formArray.controls.length === 2) {\n formArray.controls[1 - index].controls.percentage.setValue(\n 100 - formArray.controls[index].controls.percentage.value\n );\n }\n }\n\n changePercentageEvaluationAttribute() {\n this.changePercentageEvaluationAttributeRequested.emit();\n }\n\n getRemainingPredefinedVariations() {\n let remainingPredefinedVariations = this.flagState().settingValue.setting.predefinedVariations;\n if (remainingPredefinedVariations.length) {\n const existingVariations = this.formArray().controls.map(p => p.controls.value.controls.predefinedVariationId?.value);\n remainingPredefinedVariations = remainingPredefinedVariations.filter(sv => !existingVariations.includes(sv.predefinedVariationId));\n }\n return remainingPredefinedVariations;\n }\n\n getNotAvailablePredefinedVariationIds(currentIndex: number) {\n return this.formArray().controls\n .filter((sv, index) => index !== currentIndex && sv.controls.value.controls.predefinedVariationId?.value)\n .map(p => p.controls.value.controls.predefinedVariationId!.value);\n }\n}\n","@for (percentageOption of formArray().controls; track $index; let i = $index) {\n <div class=\"targeting-rule-line\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field perc-input\">\n <input\n matInput\n type=\"number\"\n min=\"0\"\n max=\"100\"\n matTooltip=\"Percentage\"\n appDigitOnly\n inputDisplayNormalizer\n [formControl]=\"percentageOption.controls.percentage\"\n (input)=\"percentageChanged(i)\" />\n <span matTextSuffix>%</span>\n @if (percentageOption.controls.percentage.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(percentageOption.controls.percentage) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n @if (!percentageEvaluationAttribute()) {\n <div class=\"attribute-wrapper flex\">\n of \n <a href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\" rel=\"noopener noreferrer\">\n users\n </a>\n </div>\n } @else {\n <div class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button\n mat-flat-button\n type=\"button\"\n class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n [disabled]=\"flagState().readOnly\"\n (click)=\"changePercentageEvaluationAttribute()\">\n {{ percentageEvaluationAttribute() }}\n </button>\n </div>\n <div>attributes</div>\n </div>\n }\n @if (!flagState().readOnly) {\n <div class=\"delete-button\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </button>\n </div>\n }\n </div>\n <app-feature-flag-value\n class=\"value\"\n tooltip=\"Served value\"\n [setting]=\"flagState().settingValue.setting\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [notAvailablePredefinedVariationIds]=\"getNotAvailablePredefinedVariationIds(i)\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n </div>\n}\n@if (formArray().invalid && !!FormHelper.getErrorMessage(formArray())) {\n <mat-error class=\"sumerror\">\n {{ FormHelper.getErrorMessage(formArray()) }}\n </mat-error>\n}\n@if (percentageEvaluationAttribute()) {\n @if (isPercentageOnlyTargetingRule()) {\n <div class=\"small small-pad-bottom\">\n If the {{ percentageEvaluationAttribute() }} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n , the percentage options are skipped and the evaluation continues with the next rule.\n </div>\n } @else {\n <div class=\"small small-pad-bottom\">\n If the {{ percentageEvaluationAttribute() }} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n , the current targeting rule is skipped and the evaluation continues with the next one.\n </div>\n }\n}\n\n@if (\n flagState().settingValue.setting.settingType !== SettingType.Boolean &&\n !flagState().readOnly &&\n (!flagState().settingValue.setting.predefinedVariations.length ||\n flagState().settingValue.setting.predefinedVariations.length > percentageOptionsCount())\n) {\n <div class=\"add-perc\">\n <!-- In the integrations we remove the enter sign to spare some space-->\n <!-- <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div> -->\n <div class=\"add-btn add-perc-btn\" (click)=\"addOption()\">+ % OPTION</div>\n </div>\n}\n","import { Component, input, output } from \"@angular/core\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n generatePercentageOptionFormGroup,\n generateValueFormGroup,\n getRawSettiongValue,\n IFeatureFlagLimitations,\n IFlagState,\n ISegment,\n isPercentageOnlyTargetingRule,\n IValueModel,\n PercentageOptionForm,\n SettingType,\n TargetingRuleForm,\n validatePercentageSum,\n} from \"../../../../bootstrap\";\nimport { FeatureFlagValueComponent } from \"../feature-flag-value/feature-flag-value.component\";\nimport { ConditionsComponent } from \"./conditions/conditions.component\";\nimport { PercentageOptionsComponent } from \"./percentage-options/percentage-options.component\";\n\n@Component({\n selector: \"app-targeting-rule\",\n templateUrl: \"./targeting-rule.component.html\",\n styleUrls: [\"./targeting-rule.component.scss\", \"../chips.scss\", \"../add-btn.scss\"],\n imports: [\n ConditionsComponent,\n MatDivider,\n MatTooltip,\n MatChipSet,\n MatChip,\n PercentageOptionsComponent,\n FeatureFlagValueComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n ],\n})\nexport class TargetingRuleComponent {\n readonly formGroup = input.required<FormGroup<TargetingRuleForm>>();\n readonly segments = input.required<ISegment[]>();\n readonly flagState = input.required<IFlagState>();\n readonly targetingRuleIndex = input.required<number>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly canManageSegments = input.required<boolean>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n readonly percentageEvaluationAttribute = input.required<string | null>();\n\n readonly createSegmentRequested = output();\n readonly manageSegmentsRequested = output();\n readonly addSegmentConditionRequestedWithoutSegments = output();\n readonly removedAllRules = output();\n readonly subscriptionLimitReached = output();\n readonly changePercentageEvaluationAttributeRequested = output();\n readonly prerequisiteConditionChanged = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n convertToPercentage() {\n const formGroup = this.formGroup();\n if (!formGroup.controls.value || formGroup.controls.value.disabled) {\n return;\n }\n\n const currentValue: IValueModel = getRawSettiongValue(formGroup.controls.value);\n\n const flagState = this.flagState();\n if (flagState.settingValue.setting.predefinedVariations.length) {\n const nextPredefinedVariationId = flagState.settingValue.setting.predefinedVariations\n .find(sv => sv.predefinedVariationId !== currentValue.predefinedVariationId)?.predefinedVariationId;\n if (!nextPredefinedVariationId) {\n return;\n }\n formGroup.setControl(\n \"percentageOptions\",\n new FormArray<FormGroup<PercentageOptionForm>>(\n [\n generatePercentageOptionFormGroup(\n {\n percentage: 100,\n value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: currentValue.predefinedVariationId },\n },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n generatePercentageOptionFormGroup(\n {\n percentage: 0,\n value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: nextPredefinedVariationId },\n },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n ],\n [validatePercentageSum]\n )\n );\n formGroup.removeControl(\"value\");\n formGroup.markAsDirty();\n return;\n }\n switch (flagState.settingValue.setting.settingType) {\n case SettingType.Boolean: {\n formGroup.setControl(\n \"percentageOptions\",\n new FormArray<FormGroup<PercentageOptionForm>>(\n [\n generatePercentageOptionFormGroup(\n {\n percentage: currentValue.boolValue ? 100 : 0,\n value: { boolValue: true, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null },\n },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n generatePercentageOptionFormGroup(\n {\n percentage: currentValue.boolValue ? 0 : 100,\n value: { boolValue: false, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null },\n },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n ],\n [validatePercentageSum]\n )\n );\n formGroup.removeControl(\"value\");\n formGroup.markAsDirty();\n break;\n }\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double: {\n formGroup.setControl(\n \"percentageOptions\",\n new FormArray<FormGroup<PercentageOptionForm>>(\n [\n generatePercentageOptionFormGroup(\n { percentage: 100, value: currentValue },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n generatePercentageOptionFormGroup(\n { percentage: 0, value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null } },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n ],\n [validatePercentageSum]\n )\n );\n formGroup.removeControl(\"value\");\n formGroup.markAsDirty();\n break;\n }\n\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n isPercentageOnly(): boolean {\n return 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 && this.isPercentageOnly() ? \"OTHERWISE\" : \"THEN\";\n }\n\n getChipTooltip(): string {\n return this.targetingRuleIndex() !== 0 && 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 const formGroup = this.formGroup();\n if (formGroup.controls.conditions.length === 0) {\n this.removedAllRules.emit();\n return;\n }\n const lastValue = getRawSettiongValue(formGroup.controls.percentageOptions!.controls[0].controls.value);\n formGroup.setControl(\n \"value\",\n generateValueFormGroup(\n lastValue,\n this.flagState().settingValue.setting.settingType,\n this.flagState().settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n )\n );\n formGroup.removeControl(\"percentageOptions\");\n 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","@let formGroupValue = formGroup();\n\n@if (formGroupValue.controls.conditions.length) {\n <div class=\"side-padd conditions\">\n <app-conditions\n [formArray]=\"formGroupValue.controls.conditions\"\n [segments]=\"segments()\"\n [flagState]=\"flagState()\"\n [targetingRuleIndex]=\"targetingRuleIndex()\"\n [canManageSegments]=\"canManageSegments()\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (lastConditionDeleted)=\"lastConditionDeleted()\"\n (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n </div>\n}\n\n@if (formGroupValue.controls.conditions.length) {\n <mat-divider />\n}\n\n<div class=\"served-value\">\n <div class=\"flex side-padd\">\n @if (showBadge()) {\n <div class=\"chip-container fixed-width\" [matTooltip]=\"getChipTooltip()\">\n <mat-chip-set>\n <mat-chip disabled>{{ getChipText() }}</mat-chip>\n </mat-chip-set>\n </div>\n }\n\n @if (formGroupValue.controls.percentageOptions && formGroupValue.controls.percentageOptions.length) {\n <app-percentage-options\n class=\"grow\"\n [formArray]=\"formGroupValue.controls.percentageOptions\"\n [flagState]=\"flagState()\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [isPercentageOnlyTargetingRule]=\"isPercentageOnly()\"\n [percentageEvaluationAttribute]=\"percentageEvaluationAttribute()\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (lastPercentageOptionLeft)=\"lastPercentageOptionLeft()\"\n (subscriptionLimitReached)=\"subscriptionLimitReached.emit()\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n }\n @if (formGroupValue.controls.value) {\n <app-feature-flag-value\n class=\"grow\"\n tooltip=\"Served value\"\n [setting]=\"flagState().settingValue.setting\"\n [formGroup]=\"formGroupValue.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n }\n </div>\n\n @if (formGroupValue.controls.value && !flagState().readOnly) {\n <div class=\"add-perc flex side-padd bot-padd\">\n <!-- In the integrations we remove the enter sign to spare some space-->\n <!-- <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div> -->\n <div\n matTooltip=\"Target a percentage of users to whom this rule applies\"\n class=\"add-btn add-perc-btn\"\n (click)=\"convertToPercentage()\">\n + % OPTION\n </div>\n </div>\n }\n</div>\n","import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { NgClass } from \"@angular/common\";\nimport { Component, input, output } from \"@angular/core\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { generateConditionFormGroup, generateDefaultValueFormGroup, generateEmptyPrerequisiteFlagConditionFormGroup, generateEmptySegmentConditionFormGroup, generateTargetingRuleWithEmptyPercentageOptions, isPercentageOnlyTargetingRule } from \"../../../_services\";\nimport {\n ConditionForm,\n IFeatureFlagLimitations,\n IFlagState,\n IPrerequisiteChanged,\n ISegment,\n TargetingRuleForm,\n UpdateSettingValueForm,\n UserComparator,\n} from \"../../../bootstrap\";\nimport { FeatureFlagValueComponent } from \"./feature-flag-value/feature-flag-value.component\";\nimport { TargetingRuleComponent } from \"./targeting-rule/targeting-rule.component\";\n\n@Component({\n selector: \"app-evaluation-formula\",\n templateUrl: \"./evaluation-formula.component.html\",\n styleUrls: [\"./evaluation-formula.component.scss\", \"./chips.scss\", \"./add-btn.scss\"],\n imports: [\n MatTooltip,\n MatMenuTrigger,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n MatIcon,\n TargetingRuleComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatIconButton,\n MatChipSet,\n MatChip,\n NgClass,\n FeatureFlagValueComponent,\n MatMenu,\n MatMenuItem,\n ],\n})\nexport class EvaluationFormulaComponent {\n readonly formGroup = input.required<FormGroup<UpdateSettingValueForm>>();\n readonly segments = input.required<ISegment[]>();\n readonly flagState = input.required<IFlagState>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly canManageSegments = input.required<boolean>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n\n readonly createSegmentRequested = output();\n readonly manageSegmentsRequested = output();\n readonly addSegmentConditionRequestedWithoutSegments = output();\n readonly changePercentageEvaluationAttributeRequested = output();\n\n readonly subscriptionLimitReached = output();\n readonly prerequisiteConditionChanged = output<IPrerequisiteChanged>();\n readonly recalcAddButtons = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\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 generateConditionFormGroup(\n {\n userCondition: {\n comparisonAttribute: \"Identifier\",\n comparator: UserComparator.SensitiveTextEquals,\n comparisonValue: { stringValue: \"\", doubleValue: null, listValue: null },\n },\n prerequisiteFlagCondition: null,\n segmentCondition: null,\n },\n this.flagState().readOnly,\n this.flagState().prerequisiteSettings,\n this.featureFlagLimitations()\n ),\n ]),\n value: generateDefaultValueFormGroup(\n this.flagState().settingValue.setting.settingType,\n this.flagState().settingValue.setting.predefinedVariations,\n this.flagState().readOnly,\n this.featureFlagLimitations()\n ),\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 new FormGroup<ConditionForm>({\n segmentCondition: generateEmptySegmentConditionFormGroup(),\n }),\n ]),\n value: generateDefaultValueFormGroup(\n this.flagState().settingValue.setting.settingType,\n this.flagState().settingValue.setting.predefinedVariations,\n this.flagState().readOnly,\n this.featureFlagLimitations()\n ),\n });\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: generateEmptyPrerequisiteFlagConditionFormGroup(\n this.featureFlagLimitations()\n ),\n }),\n ]),\n value: generateDefaultValueFormGroup(\n this.flagState().settingValue.setting.settingType,\n this.flagState().settingValue.setting.predefinedVariations,\n this.flagState().readOnly,\n this.featureFlagLimitations()\n ),\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addPercentageOptions() {\n const flagState = this.flagState();\n if (flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return false;\n }\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = generateTargetingRuleWithEmptyPercentageOptions(\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n flagState.readOnly,\n flagState.prerequisiteSettings,\n 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(\n this.formGroup().controls.targetingRules.controls.length - 1,\n formGroup\n );\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 onDrop(event: CdkDragDrop<FormGroup<TargetingRuleForm>[]>) {\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 || 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 (\n index < this.formGroup().controls.targetingRules.controls.length - 1\n || !isPercentageOnlyTargetingRule(this.formGroup().controls.targetingRules.controls[index])\n );\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 formGroup = this.formGroup();\n const shouldEmitPrerequisiteChanged = formGroup.controls.targetingRules.controls[\n index\n ].controls.conditions.controls.some(c => c.controls.prerequisiteFlagCondition);\n formGroup.controls.targetingRules.removeAt(index);\n 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: number[] = [];\n for (const rule of this.formGroup().controls.targetingRules.controls) {\n for (const condition of rule.controls.conditions.controls) {\n if (condition.controls.prerequisiteFlagCondition?.controls.prerequisiteSettingId.value) {\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","@if (flagState().addButtonRenderState.renderTopAddButtons && !flagState().readOnly) {\n <div class=\"targeting-rule-outer\">\n <div class=\"grow vertical-center add-box pad-bottom left-align\">\n <div class=\"add-btn add-if\" matTooltip=\"Add targeting rule\" [matMenuTriggerFor]=\"ormenu\">+ IF</div>\n @if (!flagState().addButtonRenderState.hasPercentageOnlyRule) {\n <div class=\"add-btn add-if pad-left\" matTooltip=\"Target a percentage of users\" (click)=\"addPercentageOptions()\">\n + %\n </div>\n }\n </div>\n </div>\n}\n\n<div\n cdkDropList\n [cdkDropListDisabled]=\"flagState().readOnly\"\n [cdkDropListSortPredicate]=\"sortPredicate()\"\n [cdkDropListData]=\"formGroup().controls.targetingRules.controls\"\n (cdkDropListDropped)=\"onDrop($event)\">\n @for (targetingRule of formGroup().controls.targetingRules.controls; track $index; let i = $index) {\n <div>\n <div\n class=\"targeting-rule-outer grow\"\n cdkDrag\n [cdkDragDisabled]=\"isDragDisabled(targetingRule)\"\n [cdkDragData]=\"targetingRule\">\n <div class=\"drag-handle\">\n @if (!isDragDisabled(targetingRule)) {\n <div cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n }\n </div>\n <div class=\"white-box grow\">\n <app-targeting-rule\n class=\"grow\"\n [formGroup]=\"targetingRule\"\n [segments]=\"segments()\"\n [flagState]=\"flagState()\"\n [targetingRuleIndex]=\"i\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canManageSegments]=\"canManageSegments()\"\n [percentageEvaluationAttribute]=\"formGroup().controls.percentageEvaluationAttribute.value\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (removedAllRules)=\"remove(i)\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisiteReferences()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n <div class=\"delete\">\n @if (!flagState().readOnly) {\n <button type=\"button\" mat-icon-button matTooltip=\"Remove targeting rule\" (click)=\"remove(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </button>\n }\n </div>\n </div>\n </div>\n @if (flagState().addButtonRenderState.addRuleButtonTracker[i].showAddRuleButtons && !flagState().readOnly) {\n <div class=\"targeting-rule-outer\">\n <div class=\"grow vertical-center add-box pad-bottom pad-top center-shift\">\n @if (!flagState().readOnly) {\n <div class=\"add-btn add-if\" matTooltip=\"Add targeting rule\" [matMenuTriggerFor]=\"ormenu\">+ OR</div>\n }\n @if (!flagState().addButtonRenderState.hasPercentageOnlyRule) {\n <div\n class=\"add-btn add-if pad-left\"\n matTooltip=\"Target a percentage of users\"\n (click)=\"addPercentageOptions()\">\n + %\n </div>\n }\n </div>\n </div>\n }\n @if (flagState().addButtonRenderState.addRuleButtonTracker[i].showOrChip) {\n <div class=\"or-chip\">\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 }\n @if (flagState().addButtonRenderState.addRuleButtonTracker[i].renderSeparationArea) {\n <div class=\"or-chip\"></div>\n }\n </div>\n }\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\n class=\"chip-container fixed-width\"\n [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\n class=\"value grow\"\n tooltip=\"Served value\"\n [setting]=\"flagState().settingValue.setting\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n [formGroup]=\"formGroup().controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n </div>\n</div>\n\n<mat-menu #ormenu>\n <a mat-menu-item (click)=\"addUserCondition()\">\n <mat-icon>track_changes</mat-icon>\n Target users\n </a>\n <a mat-menu-item (click)=\"addSegmentCondition()\">\n <mat-icon class=\"icon-transform-rotate\">pie_chart</mat-icon>\n Target a segment\n </a>\n <div\n 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 [disabled]=\"!flagState().prerequisiteSettings.length\" (click)=\"addPrerequisiteFlagCondition()\">\n <mat-icon>account_tree</mat-icon>\n Add prerequisite\n </a>\n </div>\n</mat-menu>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { Component, inject, OnInit } from \"@angular/core\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatHint, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatOption, MatSelect } from \"@angular/material/select\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { generatePercentageEvaluationAttributeFormControl } from \"../../../_services\";\nimport { FormHelper } from \"../../../bootstrap\";\n\nexport interface PercentageEvaluationAttributeDialogComponentData {\n percentageEvaluationAttribute: string | null;\n readOnly: boolean;\n}\n\nexport interface PercentageEvaluationAttributeDialogComponentResult {\n percentageEvaluationAttribute: string | null;\n}\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 imports: [\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatFormField,\n MatLabel,\n MatHint,\n MatInput,\n MatSelect,\n MatOption,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n ],\n})\nexport class PercentageEvaluationAttributeDialogComponent implements OnInit {\n dialogRef =\n inject<\n MatDialogRef<PercentageEvaluationAttributeDialogComponent, PercentageEvaluationAttributeDialogComponentResult>\n >(MatDialogRef);\n data = inject<PercentageEvaluationAttributeDialogComponentData>(MAT_DIALOG_DATA);\n\n FormHelper = FormHelper;\n defaultComparisonAttributes = [\"Identifier\", \"Email\", \"Country\"];\n comparisionAttributeCustom = \"Custom\";\n\n formControl!: FormControl<string | null>;\n selectedValue!: string;\n\n ngOnInit(): void {\n this.formControl = generatePercentageEvaluationAttributeFormControl(\n this.data.percentageEvaluationAttribute,\n this.data.readOnly\n );\n this.selectedValue = !this.formControl.value\n ? this.defaultComparisonAttributes[0]\n : !this.isDefault(this.formControl.value)\n ? this.comparisionAttributeCustom\n : this.formControl.value;\n }\n\n attributeChanged(value: string): void {\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 isCustom(): boolean {\n return this.comparisionAttributeCustom === this.selectedValue;\n }\n\n isDefault(attribute: string | null): boolean {\n return attribute === null || this.defaultComparisonAttributes.includes(attribute);\n }\n\n set() {\n if (this.formControl.invalid) {\n this.formControl.markAsTouched();\n return;\n }\n const percentageEvaluationAttributeFilter = this.formControl.value === this.defaultComparisonAttributes[0] ? null : this.formControl.value;\n this.dialogRef.close({ percentageEvaluationAttribute: percentageEvaluationAttributeFilter });\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.\n </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 <mat-select\n [disabled]=\"formControl.disabled\"\n [(value)]=\"selectedValue\"\n (selectionChange)=\"attributeChanged(selectedValue)\">\n @for (comparisonAttribute of defaultComparisonAttributes; track $index) {\n <mat-option [value]=\"comparisonAttribute\">{{ comparisonAttribute }}</mat-option>\n }\n <mat-option value=\"Custom\">Custom</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"!isCustom()\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\" />\n @if (formControl.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\">\n <a\n href=\"https://configcat.com/docs/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n Read more\n </a>\n about percentage-based targeting in the docs.\n </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 [mat-dialog-close]>Cancel</button>\n</div>\n","import { Clipboard } from \"@angular/cdk/clipboard\";\nimport { NgClass } from \"@angular/common\";\nimport { Component, inject, input, output } from \"@angular/core\";\nimport { FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { Router } from \"@angular/router\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { SettingDataModel } from \"ng-configcat-publicapi\";\nimport { getRawPredefinedVariationValue } from \"../../_models/setting-form\";\nimport { isPercentageOnlyTargetingRule, PublicApiService } from \"../../_services\";\nimport { TrackingDirective } from \"../../_services/tracking.directive\";\nimport {\n IFeatureFlagLimitations,\n IFlagState,\n IPrerequisiteChanged,\n ISegment,\n MessagingService,\n SettingType,\n UpdateSettingValueForm,\n} from \"../../bootstrap\";\nimport { CopyableValueComponent } from \"./copyable-value/copyable-value.component\";\nimport { DependeesDialogComponent } from \"./dependees-dialog/dependees-dialog.component\";\nimport { EvaluationFormulaComponent } from \"./evaluation-formula/evaluation-formula.component\";\nimport { FeatureFlagValueComponent } from \"./evaluation-formula/feature-flag-value/feature-flag-value.component\";\nimport { PercentageEvaluationAttributeDialogComponent, PercentageEvaluationAttributeDialogComponentData, PercentageEvaluationAttributeDialogComponentResult } from \"./percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-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: [\"./feature-flag.component.scss\"],\n imports: [\n NgClass,\n MatTooltip,\n MatIcon,\n MatIconButton,\n TrackingDirective,\n MatMenuTrigger,\n FeatureFlagValueComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n EvaluationFormulaComponent,\n MatMenu,\n MatMenuItem,\n MatDivider,\n CopyableValueComponent,\n ],\n})\nexport class FeatureFlagComponent {\n private readonly dialog = inject(MatDialog);\n private readonly messagingService = inject(MessagingService);\n private readonly router = inject(Router);\n private readonly publicApiService = inject(PublicApiService);\n private readonly clipboard = inject(Clipboard);\n\n readonly formGroup = input.required<FormGroup<UpdateSettingValueForm>>();\n readonly flagState = input.required<IFlagState>();\n readonly segments = input.required<ISegment[]>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly hasOtherEnvironment = input.required<boolean>();\n readonly environmentName = input(\"\");\n readonly showEnvironmentName = input(false);\n readonly deleteSettingText = input(\"Delete setting\");\n readonly canDeleteSetting = input(false);\n readonly predefinedVariationsEnabled = input.required<boolean>();\n\n readonly addSegmentConditionRequestedWithoutSegments = output();\n\n readonly expandedChanged = output<boolean>();\n readonly deleteSettingRequested = output<{ setting: SettingDataModel }>();\n readonly subscriptionLimitReached = output();\n readonly prerequisiteConditionChanged = output<IPrerequisiteChanged>();\n readonly recalcAddButtons = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n SettingType = SettingType;\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 subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n\n changePercentageEvaluationAttribute() {\n const flagState = this.flagState();\n if (flagState.readOnly) {\n return;\n }\n\n const dialogRef = this.dialog.open<\n PercentageEvaluationAttributeDialogComponent,\n PercentageEvaluationAttributeDialogComponentData,\n PercentageEvaluationAttributeDialogComponentResult | undefined\n >(PercentageEvaluationAttributeDialogComponent, {\n width: \"500px\",\n data: {\n percentageEvaluationAttribute: this.formGroup().controls.percentageEvaluationAttribute.value,\n readOnly: flagState.readOnly,\n },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n const formGroup = this.formGroup();\n if (\n result\n && result.percentageEvaluationAttribute !== formGroup.controls.percentageEvaluationAttribute.value\n ) {\n formGroup.controls.percentageEvaluationAttribute.setValue(result.percentageEvaluationAttribute);\n formGroup.controls.percentageEvaluationAttribute.updateValueAndValidity();\n formGroup.controls.percentageEvaluationAttribute.markAsDirty();\n formGroup.controls.percentageEvaluationAttribute.markAsTouched();\n }\n });\n }\n\n getGlance(): IGlance | undefined {\n const flagState = this.flagState();\n const formGroup = this.formGroup();\n if (formGroup.controls.targetingRules.length === 0 || flagState.panelExpanded) {\n return;\n }\n\n const glance: IGlance = { ruleText: this.getRuleText(), percentageText: \"\", class: \"default\" };\n\n const defaultPredefinedVariation = flagState.settingValue.setting.predefinedVariations.length\n ? flagState.settingValue.setting.predefinedVariations.find(v => v.predefinedVariationId === formGroup.controls.defaultValue.value.predefinedVariationId)\n : void 0;\n\n const hasTrueRule = formGroup.controls.targetingRules.controls.some(\n r => r.controls.value?.controls.boolValue?.value\n || flagState.settingValue.setting.predefinedVariations\n .find(v => v.predefinedVariationId === r.controls.value?.controls.predefinedVariationId?.value)?.value?.boolValue\n );\n const lastFormulaTerm =\n formGroup.controls.targetingRules.controls[formGroup.controls.targetingRules.controls.length - 1];\n if (isPercentageOnlyTargetingRule(lastFormulaTerm)) {\n if (flagState.settingValue.setting.settingType === SettingType.Boolean) {\n const boolRule = lastFormulaTerm.controls.percentageOptions!.controls.find(\n p => p.controls.value.controls.boolValue?.value\n || flagState.settingValue.setting.predefinedVariations\n .find(v => v.predefinedVariationId === p.controls.value.value.predefinedVariationId)?.value.boolValue\n );\n if (boolRule && boolRule.controls.percentage.value > 0) {\n glance.percentageText = \"ON for \" + boolRule.controls.percentage.value + \"%\";\n glance.class = \"on\";\n } else {\n glance.percentageText = \"OFF (%)\";\n glance.class = hasTrueRule ? \"on\" : \"off\";\n }\n } else {\n glance.percentageText = lastFormulaTerm.controls\n .percentageOptions!.controls.map(p => p.controls.percentage.value + \"%\")\n .join(\" / \");\n glance.class = \"other\";\n }\n } else {\n glance.percentageText = defaultPredefinedVariation\n ? defaultPredefinedVariation?.name ?? this.getValueText(flagState.settingValue.setting.settingType, defaultPredefinedVariation.value)\n : this.getValueText(flagState.settingValue.setting.settingType, getRawPredefinedVariationValue(formGroup.controls.defaultValue));\n\n if (flagState.settingValue.setting.settingType === SettingType.Boolean) {\n glance.class = defaultPredefinedVariation?.value.boolValue || formGroup.controls.defaultValue.value.boolValue || hasTrueRule ? \"on\" : \"off\";\n } else {\n glance.class = \"other\";\n }\n }\n\n return glance;\n }\n\n getValueText(settingType: SettingType,\n value: { boolValue: boolean | null; stringValue: string | null; intValue: number | null; doubleValue: number | null }) {\n switch (settingType) {\n case SettingType.Double:\n return value.doubleValue?.toString() ?? \"\";\n case SettingType.Int:\n return value.intValue?.toString() ?? \"\";\n case SettingType.Boolean:\n return value.boolValue ? \"ON\" : \"OFF\";\n case SettingType.String:\n default:\n return value.stringValue ?? \"\";\n }\n }\n\n getRuleText(): string {\n const count = this.formGroup().controls.targetingRules.controls.filter(\n tr => !isPercentageOnlyTargetingRule(tr)\n ).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([\n \"v2\",\n this.flagState().settingValue.config.product.organization.organizationId,\n this.flagState().settingValue.config.product.productId,\n this.flagState().settingValue.config.configId,\n this.flagState().settingValue.environment.environmentId,\n this.flagState().settingValue.setting.settingId,\n ]);\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","@let flagStateValue = flagState();\n\n<div class=\"outer\">\n <div class=\"wrapper\">\n <div class=\"mat-elevation-z0 feature-flag\" [ngClass]=\"{ invalid: formGroup().touched && formGroup().invalid }\">\n <div class=\"expandcollapse\">\n @if (flagStateValue.panelExpanded) {\n <div matTooltip=\"Collapse\" class=\"btn\" (click)=\"setExpanded(!flagStateValue.panelExpanded)\">\n <mat-icon>arrow_drop_up</mat-icon>\n </div>\n } @else {\n <div matTooltip=\"Expand\" class=\"btn\" (click)=\"setExpanded(!flagStateValue.panelExpanded)\">\n <mat-icon>arrow_drop_down</mat-icon>\n </div>\n }\n </div>\n <div class=\"header\">\n <div class=\"top\">\n <div class=\"left\">\n <div class=\"name-key\">\n <span class=\"name\" [matTooltip]=\"flagStateValue.settingValue.setting.name\">\n {{ flagStateValue.settingValue.setting.name }}\n </span>\n @if (showEnvironmentName()) {\n <span class=\"environment-name\" [matTooltip]=\"environmentName()\">({{ environmentName() }})</span>\n }\n <div class=\"key\">\n <app-copyable-value\n [tooltip]=\"\n `Copy key to clipboard\\n(Setting type: ${flagStateValue.settingValue.setting.settingType})`\n \"\n [tooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\"\n [value]=\"flagStateValue.settingValue.setting.key\"\n [smallest]=\"true\"\n [dark]=\"true\"\n [wholeControlCopyable]=\"true\" />\n </div>\n </div>\n </div>\n\n <div class=\"right\">\n <div class=\"line\">\n @if (flagStateValue.dependeeSettings && flagStateValue.dependeeSettings.length) {\n <button\n type=\"button\"\n class=\"prereq-button\"\n mat-icon-button\n [track]=\"['prerequisite button click', 'Feature flags & settings V2 page']\"\n [matTooltip]=\"'Prerequisite of ' + flagStateValue.dependeeSettings.length + ' other flag(s).'\"\n (click)=\"openDependeesDialog()\">\n <mat-icon>account_tree</mat-icon>\n </button>\n }\n <button\n type=\"button\"\n class=\"more-button\"\n mat-icon-button\n matTooltip=\"More\"\n [matMenuTriggerFor]=\"moreMenu\"\n [track]=\"['more menu button click', 'Feature flags & settings V2 page']\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"description-container\">\n <div class=\"description-tags\">\n @if (flagStateValue.settingValue.setting.hint) {\n <div class=\"hint\" [class.crop]=\"!flagStateValue.panelExpanded\">\n {{ flagStateValue.settingValue.setting.hint }}\n </div>\n }\n\n @if (!flagStateValue.panelExpanded && !formGroup().controls.targetingRules.length) {\n <app-feature-flag-value\n class=\"glance\"\n tooltip=\"Served value\"\n [class.text-glance]=\"flagStateValue.settingValue.setting.settingType !== 'boolean'\"\n [setting]=\"flagStateValue.settingValue.setting\"\n [formGroup]=\"formGroup().controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canCreateOrUpdateSetting]=\"true\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n }\n\n @if (getGlance(); as glance) {\n <div class=\"quick-glance\" (click)=\"setExpanded(!flagStateValue.panelExpanded)\">\n <div class=\"container\" [ngClass]=\"glance.class\">\n @if (glance.percentageText) {\n <div class=\"quick-glance-item\">{{ glance.percentageText }}</div>\n }\n @if (glance.ruleText) {\n <div class=\"quick-glance-item\">{{ glance.ruleText }}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (flagStateValue.panelExpanded) {\n <div class=\"eval-formula-wrapper\">\n <app-evaluation-formula\n [formGroup]=\"formGroup()\"\n [flagState]=\"flagStateValue\"\n [segments]=\"segments()\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canManageSegments]=\"false\"\n [canCreateOrUpdateSetting]=\"true\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttribute()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit($event)\"\n (recalcAddButtons)=\"recalcAddButtons.emit()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n </div>\n }\n </div>\n </div>\n</div>\n<mat-menu #moreMenu=\"matMenu\">\n <div\n mat-menu-item\n data-robot=\"history\"\n [track]=\"['change percentage attribute click', 'Feature flags & settings V2 page']\"\n [disabled]=\"flagStateValue.readOnly\"\n (click)=\"changePercentageEvaluationAttribute()\">\n <mat-icon>percent</mat-icon>\n <span>Change percentage attribute</span>\n </div>\n <a target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"getDashboardUrl()\">\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\n mat-menu-item\n data-robot=\"renameSetting\"\n [track]=\"['copy direct link click', 'Feature flags & settings V2 page']\"\n (click)=\"copyDirectLink()\">\n <mat-icon>content_copy</mat-icon>\n <span>Copy direct link</span>\n </div>\n @if (canDeleteSetting()) {\n <div>\n <mat-divider />\n <div\n mat-menu-item\n data-robot=\"deleteSetting\"\n [track]=\"['delete feature flag click', 'Feature flags & settings V2 page']\"\n (click)=\"deleteSetting()\">\n <mat-icon>delete_outline</mat-icon>\n <span>{{ deleteSettingText() }}</span>\n </div>\n </div>\n }\n @if (predefinedVariationsEnabled()) {\n @if (flagStateValue.settingValue.setting.predefinedVariations.length) {\n <mat-divider />\n <div\n mat-menu-item\n [track]=\"['view/manage variations click', 'Feature flags & settings V2 page']\"\n (click)=\"\n viewVariationsRequested.emit({\n settingId: flagStateValue.settingValue.setting.settingId,\n settingName: flagStateValue.settingValue.setting.name,\n })\n \">\n <mat-icon class=\"rotated-icon\">call_split</mat-icon>\n <span>Manage predefined variations</span>\n <!-- @if (permissions().canCreateOrUpdateSetting) {\n <span>Manage predefined variations</span>\n } @else {\n <span>View predefined variations</span>\n } -->\n </div>\n }\n }\n</mat-menu>\n","import { NgClass } from \"@angular/common\";\nimport { HttpErrorResponse } from \"@angular/common/http\";\nimport { Component, inject, input, OnDestroy, OnInit, output } from \"@angular/core\";\nimport { FormArray, FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n EvaluationVersion,\n SegmentListModel,\n SettingDataModel,\n SettingFormulaModel,\n SettingModel,\n UpdateEvaluationFormulaModel,\n} from \"ng-configcat-publicapi\";\nimport { forkJoin, Subscription } from \"rxjs\";\nimport { DeleteSettingModel } from \"../_models\";\nimport { IFlagState } from \"../_models/flag-state\";\nimport { IPrerequisiteSetting, TargetingRuleForm, UpdateSettingValueForm } from \"../_models/setting-value-formgroup\";\nimport { TrackingDirective } from \"../_services/tracking.directive\";\nimport { BaseComponent } from \"../base/base.component\";\nimport {\n FormHelper,\n generateSettingValuesFormGroup,\n generateTargetingRuleFormGroup,\n generateValueFormGroup,\n getRawValue,\n isPercentageOnlyTargetingRule,\n MessagingService,\n RerouteDialogComponent,\n} from \"../bootstrap\";\nimport { ConcurrentDeleteDialogComponent, ConcurrentDeleteDialogComponentData } from \"../dialogs/concurrent-delete-dialog/concurrent-delete-dialog.component\";\nimport { ConfirmationDialogComponent, ConfirmationDialogData } from \"../dialogs/confirmation-dialog/confirmation-dialog\";\nimport { ReasonDialogComponent, ReasonDialogComponentResult } from \"../dialogs/reason-dialog/reason-dialog.component\";\nimport { VariationsDialogComponent, VariationsDialogComponentData } from \"../dialogs/variations-dialog/variations-dialog.component\";\nimport { FeatureFlagComponent } from \"./feature-flag/feature-flag.component\";\n\n@Component({\n selector: \"app-feature-flag-item\",\n templateUrl: \"./feature-flag-item.component.html\",\n styleUrls: [\"./feature-flag-item.component.scss\"],\n imports: [FormsModule, ReactiveFormsModule, RxReactiveFormsModule, NgClass, FeatureFlagComponent, MatButton, TrackingDirective, MatIcon],\n})\nexport class FeatureFlagItemComponent extends BaseComponent implements OnInit, OnDestroy {\n private readonly dialog = inject(MatDialog);\n private readonly messagingService = inject(MessagingService);\n\n readonly productId = input.required<string>();\n readonly environmentId = input.required<string>();\n readonly configId = input.required<string>();\n readonly settingId = input.required<number>();\n\n readonly canDeleteSetting = input(true);\n readonly deleteSettingText = input(\"Delete setting\");\n readonly showEnvironmentName = input(true);\n\n readonly deleteSettingRequested = output<DeleteSettingModel>();\n\n readonly loadSucceeded = output();\n readonly loadFailed = output<Error>();\n readonly saveSucceeded = output();\n readonly saveFailed = output();\n readonly expandedStateChanged = output();\n readonly formValuesChanged = output();\n\n segments!: SegmentListModel[];\n dashboardBasePath: string;\n loading = true;\n submitting = false;\n\n formGroup!: FormGroup<UpdateSettingValueForm>;\n formValueChangesSubscription!: Subscription | null;\n\n settings!: SettingModel[];\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 super();\n this.dashboardBasePath = this.getDashboardBasePath();\n }\n\n ngOnInit() {\n this.reloadSettingValues();\n }\n\n ngOnDestroy(): void {\n this.unsubscribeFormValueChangesSubscription();\n }\n\n reloadSettingValues() {\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({\n next: 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 predefinedVariations: sv.predefinedVariations,\n };\n });\n this.segments = result.segments;\n this.handleFetchedSettingValues(result.settingFormula);\n this.loading = false;\n this.loadSucceeded.emit();\n },\n error: (error: Error) => {\n this.loadFailed.emit(error);\n throw error;\n },\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 = generateSettingValuesFormGroup(\n model,\n model.readOnly,\n this.prerequisiteSettings,\n model.featureFlagLimitations\n );\n }\n\n getAvailablePrerequisiteSettings(settingId: number) {\n return this.prerequisiteSettings.filter(ds => ds.settingId !== settingId);\n }\n\n revert() {\n this.openDiscardDialog(\n \"Revert to last saved state?\",\n \"All changes will be lost.\",\n \"Revert\",\n \"No\"\n ).subscribe(result => {\n if (result === \"yes\") {\n this.revertDirtyValuesFromState();\n }\n });\n }\n\n revertDirtyValuesFromState() {\n this.formGroup.setControl(\n \"defaultValue\",\n generateValueFormGroup(\n this.settingFormula.defaultValue,\n this.settingFormula.setting.settingType,\n this.settingFormula.setting.predefinedVariations,\n this.settingFormula.readOnly,\n this.settingFormula.featureFlagLimitations\n )\n );\n this.formGroup.setControl(\n \"percentageEvaluationAttribute\",\n new FormControl(\n { value: this.settingFormula.percentageEvaluationAttribute, disabled: this.settingFormula.readOnly },\n { validators: [Validators.max(1000)], nonNullable: true }\n )\n );\n this.formGroup.setControl(\n \"targetingRules\",\n new FormArray<FormGroup<TargetingRuleForm>>(\n this.settingFormula.targetingRules.map(ft =>\n generateTargetingRuleFormGroup(\n ft,\n this.settingFormula.setting.settingType,\n this.settingFormula.setting.predefinedVariations,\n this.settingFormula.readOnly,\n this.prerequisiteSettings,\n this.settingFormula.featureFlagLimitations\n )\n )\n )\n );\n this.recalcAddButtons();\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 ...getRawValue(this.formGroup),\n };\n\n this.updateSettingValues(value);\n }\n\n updateSettingValues(updateModel: UpdateEvaluationFormulaModel, reason?: string) {\n this.submitting = true;\n this.createSettingValuesV2Service()\n .replaceSettingValueV2(this.environmentId(), this.settingId(), updateModel, reason)\n .subscribe({\n next: settingValues => {\n this.handleFetchedSettingValues(settingValues);\n this.messagingService.showSuccessSnack(\"Settings saved successfully.\", 5000);\n this.submitting = false;\n this.saveSucceeded.emit();\n },\n error: (error: Error) => {\n this.submitting = false;\n if (\n error instanceof HttpErrorResponse\n && error.status === 400\n && FormHelper.getHttpErrorResponseMessage(error, \"Reason\") === \"Reason required.\"\n ) {\n const dialogRef = this.dialog.open<ReasonDialogComponent, never, ReasonDialogComponentResult>(\n ReasonDialogComponent,\n {\n width: \"450px\",\n }\n );\n dialogRef.afterClosed().subscribe(result => {\n if (result?.button === \"save\" && result.reason) {\n this.updateSettingValues(updateModel, result.reason);\n }\n });\n return;\n }\n\n if (\n error instanceof HttpErrorResponse\n && error.status === 400\n && FormHelper.getHttpErrorResponseMessage(error, \"SegmentCondition\") === \"Segment not found.\"\n ) {\n this.openDiscardDialog(\n \"Cannot save feature flags\",\n \"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 \"Reload\",\n \"\",\n true,\n \"450px\"\n ).subscribe(() => {\n this.reloadSettingValues();\n });\n return;\n }\n\n if (\n error instanceof HttpErrorResponse\n && error.status === 400\n && FormHelper.getHttpErrorResponseMessage(error, \"PrerequisiteFlagCondition\") === \"Prerequisite setting not found.\"\n ) {\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\n width: \"450px\",\n data: {\n title: \"Cannot save feature flags\",\n body: \"A feature flag referenced in a prerequisite condition has been deleted. Reload the config to see its latest state, apply your changes and try the save again.\",\n yesButtonLabel: \"Reload\",\n hideCancelButton: true,\n },\n }\n );\n dialogRef.afterClosed().subscribe(() => {\n this.reloadSettingValues();\n });\n return;\n }\n\n if (\n error instanceof HttpErrorResponse\n && error.status === 400\n && (FormHelper.getHttpErrorResponseMessage(error, \"DefaultValue\")?.includes(\"Variation could not be found.\")\n || FormHelper.getHttpErrorResponseMessage(error, \"Value\")?.includes(\"Variation could not be found.\")\n || FormHelper.getHttpErrorResponseMessage(error, \"PrerequisiteComparisonValue\")?.includes(\"Variation could not be found.\")\n || FormHelper.getHttpErrorResponseMessage(error, \"PredefinedVariationId\")?.includes(\"Could not find Variation.\"))\n ) {\n this.openDiscardDialog(\n \"Cannot save feature flags\",\n \"A predefined variation 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 \"Reload\",\n \"\",\n true,\n \"450px\"\n ).subscribe(() => {\n this.reloadSettingValues();\n });\n return;\n }\n\n if (\n error instanceof HttpErrorResponse\n && error.status === 400\n && error.error && (\"\" + error.error).startsWith(\"Circular dependency detected.\")) {\n const errorMessage = (\"\" + error.error).slice(\"Circular dependency detected.\".length + 1);\n this.openDiscardDialog(\n \"Cannot save feature flags\",\n \"Circular dependency detected between the following feature flags:<p>\"\n + errorMessage\n + \"</p>Please <strong>eliminate the circular dependency</strong> before saving your feature flags.\",\n \"I understand\",\n \"\",\n true,\n \"450px\"\n );\n return;\n }\n\n if (\n error instanceof HttpErrorResponse\n && error.status === 404\n ) {\n this.openConcurentDeleteDialog();\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: { setting: SettingDataModel }) {\n if (!this.canDeactivate()) {\n this.openDiscardDialog(\n \"Discard changes?\",\n \"You have unsaved feature flag changes. If you continue, unsaved changes will be lost.\",\n \"Discard changes\",\n \"No\"\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: { setting: SettingDataModel }) {\n this.deleteSettingRequested.emit({\n config: this.settingFormula.config,\n environment: this.settingFormula.environment,\n setting: setting.setting,\n } as DeleteSettingModel);\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): number {\n return index;\n }\n\n recalcPrerequisites(): void {\n const settingValue = this.settingFormula;\n this.flagState.dependeeSettings = this.settings\n .filter(s => settingValue.settingIdsWherePrerequisite?.includes(s.settingId))\n .map(s => {\n return { key: s.key, name: s.name, settingId: s.settingId };\n });\n return;\n }\n\n recalcAddButtons(): void {\n const state = this.flagState;\n const group = this.formGroup;\n\n state.addButtonRenderState.renderTopAddButtons =\n !group.controls.targetingRules.controls.length || 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 =\n group.controls.targetingRules.controls.length > 0\n && isPercentageOnlyTargetingRule(\n group.controls.targetingRules.controls[group.controls.targetingRules.controls.length - 1]\n ));\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:\n isPercentageOnlyTargetingRule(item)\n || (this.settingFormula.readOnly && (isLastRule || (hasPercOnly && isBeforeLast))),\n };\n });\n }\n }\n\n hasOnlyPercentageRule(group: FormGroup<UpdateSettingValueForm>): boolean {\n return (\n group.controls.targetingRules.controls.length === 1\n && isPercentageOnlyTargetingRule(group.controls.targetingRules.controls[0])\n );\n }\n\n expandedChanged(expandedState: boolean): void {\n this.flagState.panelExpanded = expandedState;\n this.expandedStateChanged.emit();\n }\n\n private openDiscardDialog(title: string, body: string, yesButtonLabel?: string, cancelButtonLabel?: string, hideCancelButton?: boolean, width?: string) {\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\n width: width,\n data: {\n title: title,\n body: body,\n yesButtonLabel: yesButtonLabel,\n cancelButtonLabel: cancelButtonLabel,\n hideCancelButton: hideCancelButton,\n },\n }\n );\n\n return dialogRef.afterClosed();\n }\n\n canDeactivate(): boolean {\n return !this.formGroup?.dirty;\n }\n\n viewVariations(event: { settingId: number; settingName: string }) {\n if (!this.canDeactivate()) {\n this.openDiscardDialog(\n \"Manage predefined variations for the feature flag\",\n \"You have unsaved changes. Before changing the predefined variations, please save or discard your current changes.\",\n \"Discard changes\",\n \"No\"\n ).subscribe(result => {\n if (result === \"yes\") {\n this.revertDirtyValuesFromState();\n this.openVariationsDialog(event);\n }\n });\n } else {\n this.openVariationsDialog(event);\n }\n }\n\n openConcurentDeleteDialog() {\n this.createProductsService().getProduct(this.productId()).subscribe({\n next: product => {\n const dialogRef = this.dialog.open<ConcurrentDeleteDialogComponent, ConcurrentDeleteDialogComponentData, string>(\n ConcurrentDeleteDialogComponent,\n {\n width: \"450px\",\n data: {\n organizationId: product.organization.organizationId,\n productId: this.productId(),\n configId: this.configId(),\n environmentId: this.environmentId(),\n evaluationVersion: EvaluationVersion.V2,\n },\n }\n );\n dialogRef.afterClosed().subscribe(() => {\n this.saveFailed.emit();\n });\n },\n error: (error: Error) => {\n console.log(error);\n this.messagingService.showErrorSnack(\"Something went wrong on our side. This is not your fault. Please try again.\");\n },\n });\n }\n\n openVariationsDialog(event: { settingId: number; settingName: string }) {\n this.createProductsService().getProduct(this.productId()).subscribe({\n next: product => {\n const dialogRef = this.dialog.open<\n VariationsDialogComponent,\n VariationsDialogComponentData,\n boolean\n >(VariationsDialogComponent, {\n data: {\n settingId: event.settingId,\n settingName: event.settingName,\n manage: true,\n organizationId: product.organization.organizationId,\n productId: this.productId(),\n configId: this.configId(),\n maxStringFlagValueLength: this.settingFormula.featureFlagLimitations.maxStringFlagValueLength,\n basePath: this.basePath(),\n basicAuthUsername: this.basicAuthUsername(),\n basicAuthPassword: this.basicAuthPassword(),\n },\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.reloadSettingValues();\n }\n });\n },\n error: (error: Error) => {\n console.log(error);\n this.messagingService.showErrorSnack(\"Could not load predefined variations dialog.\");\n },\n });\n }\n}\n","<div class=\"container\">\n @if (!loading) {\n <form id=\"feature-flag-form\" [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\">\n <div [ngClass]=\"{ 'invalid-flag': formGroup.invalid }\">\n <app-feature-flag\n [formGroup]=\"formGroup\"\n [flagState]=\"flagState\"\n [segments]=\"segments\"\n [featureFlagLimitations]=\"settingFormula.featureFlagLimitations\"\n [hasOtherEnvironment]=\"false\"\n [showEnvironmentName]=\"showEnvironmentName()\"\n [environmentName]=\"settingFormula.environment.name\"\n [deleteSettingText]=\"deleteSettingText()\"\n [canDeleteSetting]=\"canDeleteSetting()\"\n [predefinedVariationsEnabled]=\"true\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisites()\"\n (recalcAddButtons)=\"recalcAddButtons()\"\n (expandedChanged)=\"expandedChanged($event)\"\n (viewVariationsRequested)=\"viewVariations($event)\" />\n </div>\n @if (!settingFormula.readOnly && formGroup!.dirty) {\n <div class=\"save\">\n <button\n class=\"save-button\"\n mat-flat-button\n color=\"warn\"\n type=\"submit\"\n [class.animate]=\"formGroup.dirty\"\n [disabled]=\"submitting\"\n [track]=\"['save & publish click', 'feature flags and settings']\">\n <mat-icon>backup</mat-icon>\n <span>Save & publish changes</span>\n </button>\n <button\n type=\"button\"\n class=\"revert-button\"\n mat-stroked-button\n [disabled]=\"submitting\"\n [track]=\"['revert click', 'feature flags and settings']\"\n (click)=\"revert()\">\n <span>Revert</span>\n </button>\n @if (formGroup.touched && formGroup.invalid && showFeedBackMessage) {\n <div class=\"feedback\">\n @if (formGroup.errors && formGroup.errors[\"internalServerError\"]) {\n <div class=\"error\">\n <span>\n Something went wrong and we could not save your settings. You can try again or\n <a href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact us.</a>\n </span>\n </div>\n }\n @if (!formGroup.errors || !formGroup.errors[\"internalServerError\"]) {\n <div class=\"error\">\n <span>Oh no! A feature flag has invalid or missing data. </span>\n </div>\n }\n </div>\n }\n </div>\n }\n </form>\n }\n</div>\n","import { Component, inject, input, OnDestroy, OnInit, output, signal } from \"@angular/core\";\nimport { FormControl, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { Subscription } from \"rxjs\";\nimport { ConfigSelectComponent, EnvironmentSelectComponent, ProductSelectComponent, SettingSelectComponent } from \"../../public-api\";\nimport { AuthorizationParameters } from \"../_models/authorization-parameters\";\nimport { LinkFeatureFlagParameters } from \"../_models/link-feature-flag-parameters\";\nimport { IntegrationAddSettingFormGroup } from \"../_models/setting-form\";\n\n@Component({\n selector: \"app-link-feature-flag\",\n templateUrl: \"./link-feature-flag.component.html\",\n styleUrl: \"./link-feature-flag.component.scss\",\n imports: [\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatButton,\n ProductSelectComponent,\n ConfigSelectComponent,\n EnvironmentSelectComponent,\n SettingSelectComponent,\n ],\n})\nexport class LinkFeatureFlagComponent implements OnInit, OnDestroy {\n\n readonly authorizationParameters = input<AuthorizationParameters | null>();\n readonly hideCancelButton = input(true);\n readonly addButtonLabel = input();\n readonly cancelButtonLabel = input();\n\n readonly linkInitiated = output<LinkFeatureFlagParameters>();\n readonly resizeRequested = output();\n readonly cancelInitiated = output();\n readonly selectDropdownPanelChangedReqested = output<boolean>();\n\n private readonly formBuilder = inject(NonNullableFormBuilder);\n\n formGroup = this.formBuilder.group<IntegrationAddSettingFormGroup>({\n productId: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n environmentId: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n configId: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n settingId: new FormControl<number>(0, {\n nonNullable: true,\n validators: [Validators.required],\n }),\n });\n\n subscription!: Subscription | null;\n\n readonly submitting = signal(false);\n\n ngOnInit(): void {\n this.formGroup.reset();\n this.subscription = this.formGroup.statusChanges.subscribe(() => {\n this.resizeRequested.emit();\n });\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n this.subscription = null;\n }\n }\n\n add() {\n if (!this.formGroup.valid) {\n return;\n }\n this.submitting.set(true);\n\n this.linkInitiated.emit({\n environmentId: this.formGroup.controls.environmentId.value,\n settingId: this.formGroup.controls.settingId.value,\n callback: () => this.linkingFinished(),\n });\n }\n\n linkingFinished() {\n this.submitting.set(false);\n }\n\n cancel() {\n this.cancelInitiated.emit();\n }\n\n selectDropdownPanelChanged(useSelector: boolean) {\n this.selectDropdownPanelChangedReqested.emit(useSelector);\n }\n\n}\n","<div class=\"container\">\n <form class=\"form\" [formGroup]=\"formGroup\" (ngSubmit)=\"add()\">\n <div>\n <app-product-select\n name=\"productId\"\n [basicAuthUsername]=\"authorizationParameters()!.basicAuthUsername\"\n [basicAuthPassword]=\"authorizationParameters()!.basicAuthPassword\"\n [valueFormControl]=\"formGroup.controls.productId\"\n [customDropdown]=\"true\" />\n @if (formGroup.controls.productId.value) {\n <app-config-select\n [basicAuthUsername]=\"authorizationParameters()!.basicAuthUsername\"\n [basicAuthPassword]=\"authorizationParameters()!.basicAuthPassword\"\n [customDropdown]=\"true\"\n [productId]=\"formGroup.controls.productId.value\"\n [valueFormControl]=\"formGroup.controls.configId\"\n (dropdownOpened)=\"selectDropdownPanelChanged($event)\" />\n }\n @if (formGroup.controls.productId.value) {\n <app-environment-select\n [basicAuthUsername]=\"authorizationParameters()!.basicAuthUsername\"\n [productId]=\"formGroup.controls.productId.value\"\n [basicAuthPassword]=\"authorizationParameters()!.basicAuthPassword\"\n [valueFormControl]=\"formGroup.controls.environmentId\"\n [customDropdown]=\"true\"\n (dropdownOpened)=\"selectDropdownPanelChanged($event)\" />\n }\n @if (formGroup.controls.configId.value) {\n <app-setting-select\n [basicAuthUsername]=\"authorizationParameters()!.basicAuthUsername\"\n [configId]=\"formGroup.controls.configId.value\"\n [basicAuthPassword]=\"authorizationParameters()!.basicAuthPassword\"\n [valueFormControl]=\"formGroup.controls.settingId\"\n [customDropdown]=\"true\"\n (dropdownOpened)=\"selectDropdownPanelChanged($event)\" />\n }\n </div>\n <div class=\"buttons\">\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"submitting() || !formGroup.valid\">\n {{ addButtonLabel() ? addButtonLabel() : \"Add\" }}\n </button>\n @if (!hideCancelButton()) {\n <button mat-stroked-button type=\"button\" (click)=\"cancel()\">\n {{ cancelButtonLabel() ? cancelButtonLabel() : \"Cancel\" }}\n </button>\n }\n </div>\n </form>\n</div>\n","import { Component, input, ViewEncapsulation } from \"@angular/core\";\n\n@Component({\n selector: \"app-box\",\n templateUrl: \"./box.component.html\",\n styleUrls: [\"./box.component.scss\"],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BoxComponent {\n readonly type = input.required<string>();\n readonly title = input<string>();\n}\n","<div [class.info-box]=\"type() === 'info'\" [class.warn-box]=\"type() === 'warn'\" [class.error-box]=\"type() === 'error'\">\n <div class=\"box-container\" [class.titleless]=\"!title()\">\n @if (title()) {\n <div class=\"box-header\">\n <div class=\"box-icon\"></div>\n <div class=\"box-title\">{{ title() }}</div>\n </div>\n } @else {\n <div class=\"box-icon\"></div>\n }\n <div class=\"box-content\">\n <ng-content />\n </div>\n </div>\n</div>\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, computed, DestroyRef, inject, input, OnInit, output, signal } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { FormArray, FormControl, FormGroup, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatHint, MatLabel, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatOption, MatSelect } from \"@angular/material/select\";\nimport { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatRow, MatRowDef, MatTable, MatTableDataSource } from \"@angular/material/table\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { CreatePredefinedVariationModel, EnvironmentModel, EvaluationVersion, PredefinedVariationValueModel, SettingType } from \"ng-configcat-publicapi\";\nimport { ConfigSelectComponent, EnvironmentSelectComponent, featureFlagKeyRegex, FormHelper, ProductSelectComponent, wholeNumberRegex } from \"../../public-api\";\nimport { AutofocusDirective } from \"../_directives/autofocus.directive\";\nimport { DigitOnlyDirective } from \"../_directives/digit-only.directive\";\nimport { LinkFeatureFlagParameters } from \"../_models/link-feature-flag-parameters\";\nimport { getRawPredefinedVariationValue, InitialValueFormGroup, IntegrationCreateSettingFormGroup, PredefinedVariationFormGroup, PredefinedVariationValueFormGroup } from \"../_models/setting-form\";\nimport { validateNumberNan, validateUniqueVariations } from \"../_services/custom-validators\";\nimport { ErrorHandler } from \"../_services/error-handler\";\nimport { getPredefinedVariationColorIndex, getPredefinedVariationFeatureFlagValue, getPredefinedVariationValueDisplayValue } from \"../_services/variation-helper.service\";\nimport { BaseComponent } from \"../base/base.component\";\nimport { BoxComponent } from \"../box/box.component\";\nimport { LoaderComponent } from \"../loader/loader.component\";\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData, PopoutTextEditorDialogResult } from \"../v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component\";\n\nexport interface PresetProductAndConfig {\n productId: string;\n configId: string;\n productName: string;\n configName: string;\n}\n\n@Component({\n selector: \"app-create-feature-flag\",\n templateUrl: \"./create-feature-flag.component.html\",\n styleUrls: [\n \"./create-feature-flag.component.scss\",\n \"../../css/slider.scss\",\n ],\n imports: [\n AutofocusDirective,\n DigitOnlyDirective,\n ProductSelectComponent,\n ConfigSelectComponent,\n EnvironmentSelectComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatSelect,\n MatOption,\n NgTemplateOutlet,\n MatTooltip,\n MatIcon,\n MatInput,\n MatHint,\n MatError,\n MatButton,\n MatTable,\n MatColumnDef,\n MatHeaderCellDef,\n MatHeaderCell,\n MatCellDef,\n MatCell,\n MatHeaderRowDef,\n MatHeaderRow,\n MatRowDef,\n MatRow,\n MatSuffix,\n MatIconButton,\n LoaderComponent,\n BoxComponent,\n ],\n})\nexport class CreateFeatureFlagComponent extends BaseComponent implements OnInit {\n private readonly formBuilder = inject(NonNullableFormBuilder);\n private readonly destroyRef = inject(DestroyRef);\n private readonly dialog = inject(MatDialog);\n\n readonly hideCancelButton = input(true);\n readonly createButtonLabel = input<string>();\n readonly cancelButtonLabel = input<string>();\n readonly targetSectionHeader = input<string>();\n readonly targetSectionDescription = input<string>();\n readonly flagSectionHeader = input<string>();\n readonly flagSectionDescription = input<string>();\n readonly linkSectionHeader = input<string>();\n readonly linkSectionDescription = input<string>();\n readonly hideLinkSection = input(false);\n\n readonly presetProductAndConfig = input<PresetProductAndConfig>();\n\n readonly createInitiated = output<LinkFeatureFlagParameters>();\n readonly resizeRequested = output();\n readonly cancelInitiated = output();\n readonly selectDropdownPanelChangedReqested = output<boolean>();\n\n SettingTypeEnum = SettingType;\n\n FormHelper = FormHelper;\n EvaluationVersion = EvaluationVersion;\n\n private readonly loadingProduct = signal(false);\n private readonly loadingEnviroments = signal(false);\n private readonly loadinOrganizationLimitations = signal(false);\n private readonly loadingConfigurations = signal(false);\n private readonly loading = signal(false);\n readonly loadingComputed = computed(() => this.loading() || this.loadingProduct() || this.loadingEnviroments()\n || this.loadinOrganizationLimitations() || this.loadingConfigurations());\n readonly submitting = signal(false);\n readonly reasonRequired = signal(false);\n\n dataSource = new MatTableDataSource<FormGroup<PredefinedVariationFormGroup>>([]);\n formGroup!: FormGroup<IntegrationCreateSettingFormGroup>;\n configEvaluationVersion = EvaluationVersion.V2;\n\n maxPredefinedVariations = 50;\n maxStringFlagValueLength = 100000;\n selectedProductOrganiaztionId = \"0\";\n\n focusIndex = -1;\n settingTypeText = \"\";\n displayedColumns: string[] = [];\n\n private selectedProductEnviroment!: EnvironmentModel[];\n private stringValidators = [Validators.required,\n Validators.maxLength(this.maxStringFlagValueLength)];\n private readonly intValidators = [\n Validators.required,\n validateNumberNan,\n Validators.max(2147483647),\n Validators.min(-2147483648),\n Validators.pattern(wholeNumberRegex),\n ];\n private readonly doubleValidators = [Validators.required, validateNumberNan, Validators.min(-Number.MAX_VALUE), Validators.max(Number.MAX_VALUE)];\n\n ngOnInit(): void {\n this.loading.set(true);\n this.formGroup = this.formBuilder.group<IntegrationCreateSettingFormGroup>({\n productId: new FormControl<string>(this.presetProductAndConfig()?.productId ? this.presetProductAndConfig()!.productId : \"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n environmentId: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n configId: new FormControl<string>(this.presetProductAndConfig()?.configId ? this.presetProductAndConfig()!.configId : \"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n name: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required, Validators.maxLength(255)],\n }),\n key: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required, Validators.maxLength(255), Validators.pattern(featureFlagKeyRegex)],\n }),\n hint: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.maxLength(255)],\n }),\n settingType: new FormControl<SettingType>(SettingType.Boolean, {\n nonNullable: true,\n validators: [Validators.required],\n }),\n useVariations: new FormControl(false, { nonNullable: true }),\n predefinedVariations: new FormArray<FormGroup<PredefinedVariationFormGroup>>([], { validators: [validateUniqueVariations] }),\n\n initialValuesPerEnvironment: new FormControl(false, { nonNullable: true }),\n\n initialValueForAll: this.initialValueForAllFormControlFunction(SettingType.Boolean),\n initialValueForAllVariationIndex: new FormControl(0, { nonNullable: true }),\n initialValues: new FormArray([\n this.formBuilder.group<InitialValueFormGroup>({\n environmentName: new FormControl(\"\", { nonNullable: true }),\n environmentId: new FormControl(\"\", { nonNullable: true }),\n settingValue: this.initialValueForAllFormControlFunction(SettingType.Boolean),\n predefinedVariationIndex: new FormControl(0, { nonNullable: true }),\n }),\n ]),\n });\n\n this.settingTypeChanges(SettingType.Boolean);\n\n //SettingType valueChanges\n this.formGroup.controls.settingType.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.settingTypeChanges(value);\n });\n\n //Product valueChanges\n this.formGroup.controls.productId.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.loadingProduct.set(true);\n this.createProductsService().getProduct(value).subscribe(product => {\n this.reasonRequired.set(product.reasonRequired);\n const hintValidators = product.reasonRequired ? [Validators.required, Validators.maxLength(255)] : [Validators.maxLength(255)];\n this.formGroup.controls.hint.clearValidators();\n this.formGroup.controls.hint.addValidators(hintValidators);\n this.loadingEnviroments.set(true);\n this.createEnvironmentsService().getEnvironments(product.productId).subscribe(enviroments => {\n this.selectedProductEnviroment = enviroments;\n this.formGroup.controls.initialValues = new FormArray(\n enviroments.map(env =>\n this.formBuilder.group<InitialValueFormGroup>({\n environmentName: new FormControl(env.name, { nonNullable: true }),\n environmentId: new FormControl(env.environmentId, { nonNullable: true }),\n settingValue: this.initialValueForAllFormControlFunction(this.formGroup.controls.settingType.value),\n predefinedVariationIndex: new FormControl(0, { nonNullable: true }),\n }))\n );\n this.loadingEnviroments.set(false);\n });\n\n if (this.selectedProductOrganiaztionId !== product.organization.organizationId) {\n this.loadinOrganizationLimitations.set(true);\n this.selectedProductOrganiaztionId = product.organization.organizationId;\n this.createOrganizationService().getOrganizationLimitations(this.selectedProductOrganiaztionId).subscribe(organizationLimitations => {\n this.maxStringFlagValueLength = organizationLimitations.maxStringFlagValueLength;\n this.maxPredefinedVariations = organizationLimitations.maxPredefinedVariations;\n this.stringValidators = [Validators.required, Validators.maxLength(this.maxStringFlagValueLength)];\n this.loadinOrganizationLimitations.set(false);\n });\n }\n this.loadingProduct.set(false);\n });\n });\n\n //Config valueChanges\n this.formGroup.controls.configId.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.loadingConfigurations.set(true);\n this.createConfigsService().getConfig(value).subscribe(config => {\n this.configEvaluationVersion = config.evaluationVersion;\n this.loadingConfigurations.set(false);\n });\n });\n\n //InitialValuesPerEnvironment valueChanges\n this.formGroup.controls.initialValuesPerEnvironment.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n if (value) {\n this.formGroup.controls.initialValues.enable();\n this.formGroup.controls.initialValueForAll.disable();\n this.formGroup.controls.initialValueForAllVariationIndex.disable();\n } else {\n this.formGroup.controls.initialValues.disable();\n this.formGroup.controls.initialValueForAll.enable();\n this.formGroup.controls.initialValueForAllVariationIndex.enable();\n }\n this.formGroup.updateValueAndValidity();\n });\n\n //UseVariations valueChanges\n this.formGroup.controls.useVariations.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n if (value) {\n this.formGroup.controls.predefinedVariations.enable();\n } else {\n this.formGroup.controls.predefinedVariations.disable();\n }\n this.formGroup.updateValueAndValidity();\n });\n\n //InitialValueForAll valueChanges\n this.formGroup.controls.initialValueForAll.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.formGroup.controls.initialValues.controls.forEach(c => c.controls.settingValue.patchValue(value, { emitEvent: false }));\n });\n\n //PredefinedVariations valueChanges\n this.formGroup.controls.predefinedVariations.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.formGroup.controls.predefinedVariations.controls.forEach(c => {\n const valueForComparison = getPredefinedVariationValueDisplayValue(\n this.formGroup.controls.settingType.value, getRawPredefinedVariationValue(c.controls.value)\n );\n if (c.controls.valueForComparison.value !== valueForComparison) {\n c.controls.valueForComparison.setValue(valueForComparison);\n }\n }\n );\n });\n\n this.setDataSource();\n\n if (this.hideLinkSection()) {\n this.formGroup.controls.environmentId.setValidators(null);\n this.formGroup.controls.environmentId.updateValueAndValidity();\n }\n\n this.formGroup.statusChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.resizeRequested.emit();\n });\n\n this.loading.set(false);\n }\n\n initialValueForAllFormControlFunction(settingType: SettingType) {\n switch (settingType) {\n case SettingType.Boolean:\n return new FormControl(false, { nonNullable: true });\n case SettingType.String:\n return new FormControl(\"initial placeholder text\", { validators: this.stringValidators, nonNullable: true });\n case SettingType.Int:\n return new FormControl(42, { validators: this.intValidators, nonNullable: true });\n case SettingType.Double:\n return new FormControl(3.14, { validators: this.doubleValidators, nonNullable: true });\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n settingTypeChanges(newSettingType: SettingType) {\n this.settingTypeText = newSettingType === SettingType.Boolean ? \"flag\" : \"setting\";\n this.displayedColumns = newSettingType === SettingType.Boolean ? [\"value\", \"name\", \"hint\"] : [\"color\", \"value\", \"name\", \"hint\", \"actions\"];\n this.formGroup.controls.predefinedVariations.clear();\n\n switch (newSettingType) {\n case SettingType.Boolean:\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, false));\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, true));\n break;\n case SettingType.String:\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, void 0, \"Variation A\"));\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, void 0, \"Variation B\"));\n break;\n case SettingType.Int:\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, void 0, void 0, 1));\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, void 0, void 0, 2));\n break;\n case SettingType.Double:\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, false, void 0, void 0, 3.14));\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, false, void 0, void 0, 1.618));\n break;\n }\n\n this.formGroup.controls.initialValueForAll.clearValidators();\n this.formGroup.setControl(\"initialValueForAll\", this.initialValueForAllFormControlFunction(newSettingType));\n\n //InitialValueForAll valueChanges set again after setControl\n this.formGroup.controls.initialValueForAll.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.formGroup.controls.initialValues.controls.forEach(c => {\n c.controls.settingValue.patchValue(value, { emitEvent: false });\n });\n });\n\n this.formGroup.controls.initialValues.controls.forEach(initValueForEnv => {\n initValueForEnv.setControl(\"settingValue\", this.initialValueForAllFormControlFunction(newSettingType));\n });\n\n this.formGroup.updateValueAndValidity();\n\n this.setDataSource();\n }\n\n setDataSource() {\n this.dataSource.data = this.formGroup.controls.predefinedVariations.controls;\n }\n\n create() {\n if (!this.formGroup.valid) {\n return;\n }\n this.submitting.set(true);\n const newSettingType = this.formGroup.controls.settingType.value;\n\n const predefinedVariations = this.formGroup.controls.useVariations.value\n ? this.formGroup.controls.predefinedVariations.controls.map(c => (\n {\n name: c.controls.name.value,\n hint: c.controls.hint.value,\n value: {\n boolValue: newSettingType === SettingType.Boolean ? c.controls.value.controls.boolValue!.getRawValue() : void 0,\n stringValue: newSettingType === SettingType.String ? c.controls.value.controls.stringValue!.value : void 0,\n intValue: newSettingType === SettingType.Int ? c.controls.value.controls.intValue!.value : void 0,\n doubleValue: newSettingType === SettingType.Double ? c.controls.value.controls.doubleValue!.value : void 0,\n } as PredefinedVariationValueModel,\n } as CreatePredefinedVariationModel\n ))\n : void 0;\n\n const initialValues = this.formGroup.controls.initialValuesPerEnvironment.value\n ? this.formGroup.controls.initialValues.controls.map(initialValue => {\n return {\n environmentId: initialValue.controls.environmentId.value,\n value: this.formGroup.controls.useVariations.value\n ? getPredefinedVariationFeatureFlagValue(newSettingType,\n getRawPredefinedVariationValue(\n this.formGroup.controls.predefinedVariations.controls[initialValue.controls.predefinedVariationIndex.value].controls.value))\n : initialValue.controls.settingValue.value,\n };\n })\n : this.selectedProductEnviroment.map(env => ({\n environmentId: env.environmentId,\n value: this.formGroup.controls.useVariations.value\n ? getPredefinedVariationFeatureFlagValue(newSettingType,\n getRawPredefinedVariationValue(\n this.formGroup.controls.predefinedVariations.controls[this.formGroup.controls.initialValueForAllVariationIndex.value].controls.value))\n : this.formGroup.controls.initialValueForAll.value,\n }));\n\n this.createSettingsService()\n .createSetting(this.formGroup.controls.configId.value,\n {\n key: this.formGroup.controls.key.value,\n settingType: newSettingType,\n name: this.formGroup.controls.name.value,\n hint: this.formGroup.controls.hint.value,\n initialValues: initialValues,\n predefinedVariations: predefinedVariations,\n })\n .subscribe({\n next: setting => {\n this.submitting.set(false);\n this.createInitiated.emit({\n environmentId: this.formGroup.controls.environmentId.value,\n settingId: setting.settingId,\n callback: () => this.linkingFinished(),\n });\n },\n error: (error: Error) => {\n this.submitting.set(false);\n ErrorHandler.handleErrors(this.formGroup, error);\n console.log(error);\n },\n });\n\n }\n\n linkingFinished() {\n this.submitting.set(false);\n }\n\n cancel() {\n this.cancelInitiated.emit();\n }\n\n selectDropdownPanelChanged(useSelector: boolean) {\n this.selectDropdownPanelChangedReqested.emit(useSelector);\n }\n\n createEmptyVariationFormGroup(settingType: SettingType, boolValue = false, stringValue = \"\", intValue = 0, doubleValue = 0) {\n return this.formBuilder.group<PredefinedVariationFormGroup>(\n {\n name: new FormControl<string | null>(null),\n hint: new FormControl<string | null>(null),\n value: this.createEmptyVariationValueFormGroup(settingType, boolValue, stringValue, intValue, doubleValue),\n valueForComparison: new FormControl<string | null>({\n value: getPredefinedVariationValueDisplayValue(settingType, { boolValue, stringValue, intValue, doubleValue }),\n disabled: true,\n }),\n }\n );\n }\n\n createEmptyVariationValueFormGroup(settingType: SettingType, boolValue = false, stringValue = \"\", intValue = 0, doubleValue = 0) {\n switch (settingType) {\n case SettingType.Boolean:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n boolValue: new FormControl<boolean>({ value: boolValue, disabled: true }, { nonNullable: true }),\n });\n case SettingType.String:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n stringValue: new FormControl<string>(stringValue, { nonNullable: true, validators: this.stringValidators }),\n });\n case SettingType.Int:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n intValue: new FormControl<number>(intValue, { nonNullable: true, validators: this.intValidators }),\n });\n case SettingType.Double:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n doubleValue: new FormControl<number>(doubleValue,\n { nonNullable: true, validators: this.doubleValidators }),\n });\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n addVariation() {\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(this.formGroup.controls.settingType.value));\n this.formGroup.controls.predefinedVariations.markAsDirty();\n this.setDataSource();\n this.focusIndex = this.formGroup.controls.predefinedVariations.length - 1;\n }\n\n removeVariation(index: number) {\n this.formGroup.controls.predefinedVariations.removeAt(index);\n this.formGroup.controls.predefinedVariations.markAsDirty();\n this.fixupVariationIndex(index, this.formGroup.controls.initialValueForAllVariationIndex);\n this.formGroup.controls.initialValues.controls.forEach(c => this.fixupVariationIndex(index, c.controls.predefinedVariationIndex));\n this.setDataSource();\n }\n\n fixupVariationIndex(removedIndex: number, formControl: FormControl<number>) {\n if (formControl.value === removedIndex) {\n formControl.patchValue(0, { emitEvent: false });\n } else if (formControl.value > removedIndex) {\n formControl.patchValue(formControl.value - 1, { emitEvent: false });\n }\n }\n\n expandText(stringValueControl: FormControl<string>) {\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: stringValueControl.value,\n readOnly: stringValueControl.disabled,\n validators: [\n Validators.required,\n Validators.maxLength(this.maxStringFlagValueLength),\n ],\n maxValueLength: this.maxStringFlagValueLength,\n description: \"Modify the text within the editor to change the initial value.\",\n } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data?.value) {\n stringValueControl.setValue(data.value);\n stringValueControl.updateValueAndValidity();\n stringValueControl.markAsTouched();\n stringValueControl.markAsDirty();\n }\n });\n }\n\n expandHint(stringValueControl: FormControl<string | null>) {\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: stringValueControl.value,\n readOnly: stringValueControl.disabled,\n validators: [Validators.maxLength(1000)],\n maxValueLength: 1000,\n description: \"Modify the text within the editor to change the hint.\",\n disableJsonEditor: true,\n } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data?.value) {\n stringValueControl.setValue(data.value);\n stringValueControl.updateValueAndValidity();\n stringValueControl.markAsTouched();\n stringValueControl.markAsDirty();\n }\n });\n }\n\n getColorIndex(row: FormGroup<PredefinedVariationFormGroup>, index: number) {\n return getPredefinedVariationColorIndex(this.formGroup.controls.settingType.value, getRawPredefinedVariationValue(row.controls.value), index);\n }\n}\n","<div class=\"container\">\n <form class=\"form\" [formGroup]=\"formGroup\" (ngSubmit)=\"create()\">\n <div>\n <div class=\"header\">1. {{ targetSectionHeader() ? targetSectionHeader() : \"Select Product and Config\" }}</div>\n @if (targetSectionDescription()) {\n <p>{{ targetSectionDescription() }}</p>\n }\n @if (this.presetProductAndConfig()) {\n <p>\n Pre selected product\n <b>{{ this.presetProductAndConfig()!.productName }}</b>\n </p>\n <p>\n Pre selected config\n <b>{{ this.presetProductAndConfig()!.configName }}</b>\n </p>\n }\n <app-product-select\n name=\"productId\"\n [hidden]=\"this.presetProductAndConfig()\"\n [basicAuthUsername]=\"basicAuthUsername()\"\n [basicAuthPassword]=\"basicAuthPassword()\"\n [preSelectedProductId]=\"this.presetProductAndConfig()?.productId\"\n [valueFormControl]=\"formGroup.controls.productId\"\n [customDropdown]=\"true\" />\n @if (formGroup.controls.productId.value) {\n <app-config-select\n [hidden]=\"this.presetProductAndConfig()\"\n [basicAuthUsername]=\"basicAuthUsername()\"\n [basicAuthPassword]=\"basicAuthPassword()\"\n [preSelectedConfigId]=\"this.presetProductAndConfig()?.configId\"\n [productId]=\"formGroup.controls.productId.value\"\n [valueFormControl]=\"formGroup.controls.configId\"\n [customDropdown]=\"true\" />\n }\n\n <div class=\"header\">2. {{ flagSectionHeader() ? flagSectionHeader() : \"Setup Feature Flag\" }}</div>\n @if (flagSectionDescription()) {\n <p>{{ flagSectionDescription() }}</p>\n }\n @if (loadingComputed()) {\n <app-loader />\n } @else {\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Type</mat-label>\n <mat-select placeholder=\"Type\" formControlName=\"settingType\" panelClass=\"'custom-dropdown-below'\">\n <mat-option [value]=\"SettingTypeEnum.Boolean\">Feature Flag (bool)</mat-option>\n <mat-option [value]=\"SettingTypeEnum.String\">Text (string)</mat-option>\n <mat-option [value]=\"SettingTypeEnum.Int\">Whole Number (integer)</mat-option>\n <mat-option [value]=\"SettingTypeEnum.Double\">Decimal Number (double)</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"form-field name\" appearance=\"outline\">\n <mat-label>Name for humans</mat-label>\n <input matInput placeholder=\"My awesome feature\" formControlName=\"name\" />\n <mat-hint>A friendly name that best describes your setting.</mat-hint>\n @if (formGroup.controls.name.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.name) }}\n </mat-error>\n }\n </mat-form-field>\n <mat-form-field class=\"form-field key\" appearance=\"outline\">\n <mat-label>Key for programs</mat-label>\n <input matInput placeholder=\"isMyAwesomeFeatureEnabled\" formControlName=\"key\" />\n <mat-hint>Your applications will access your setting via this key.</mat-hint>\n @if (formGroup.controls.key.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.key) }}\n </mat-error>\n }\n </mat-form-field>\n <mat-form-field class=\"form-field hint\" appearance=\"outline\">\n @if (!reasonRequired()) {\n <mat-label>Hint (Optional)</mat-label>\n } @else {\n <mat-label>Hint</mat-label>\n }\n <textarea matInput placeholder=\"Hint or description (Optional)\" formControlName=\"hint\"></textarea>\n <mat-hint>A description to help you remember the purpose of your setting.</mat-hint>\n @if (formGroup.controls.hint.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.hint) }}\n </mat-error>\n }\n </mat-form-field>\n\n <div class=\"init-value-section\">\n @if (configEvaluationVersion === EvaluationVersion.V2) {\n <h3>How do you want to set values?</h3>\n <div class=\"value-mode-question\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field value-mode-select\" subscriptSizing=\"dynamic\">\n <mat-select formControlName=\"useVariations\" class=\"choose\">\n <mat-option [value]=\"false\">\n {{\n formGroup.controls.settingType.value === SettingTypeEnum.Boolean\n ? \"use an ON/OFF toggle\"\n : \"enter free-form values\"\n }}\n </mat-option>\n <mat-option [value]=\"true\">choose from predefined variations</mat-option>\n </mat-select>\n </mat-form-field>\n <a href=\"https://configcat.com/docs/advanced/predefined-variations\" class=\"readmore\" target=\"_blank\">\n <mat-icon color=\"primary\" matTooltip=\"Click to read more about value-modes.\">info</mat-icon>\n </a>\n </div>\n @if (formGroup.controls.useVariations.value) {\n <div class=\"header small\">Variations</div>\n <div class=\"variations\">\n <div class=\"predef-var-table-scroll\">\n <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"color\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row\">\n <span [class]=\"'variation-indicator variation-color-' + getColorIndex(row, i)\"></span>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"value\">\n <th *matHeaderCellDef mat-header-cell>Served value *</th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n @switch (formGroup.controls.settingType.value) {\n @case (SettingTypeEnum.Boolean) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.boolValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingTypeEnum.String) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.stringValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingTypeEnum.Int) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.intValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingTypeEnum.Double) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.doubleValue,\n setFocus: i === focusIndex,\n }\" />\n }\n }\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef mat-header-cell>Display name (optional)</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field\">\n <input\n matInput\n [formControl]=\"row.controls.name\"\n [placeholder]=\"row.controls.valueForComparison.value\" />\n @if (row.controls.name.invalid) {\n <mat-error class=\"small-error\">\n {{ FormHelper.getErrorMessage(row.controls.name) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th *matHeaderCellDef mat-header-cell>Hint (optional)</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"small-form-field suffixed\">\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandHint(row.controls.hint)\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n <input matInput [formControl]=\"row.controls.hint\" />\n @if (row.controls.hint.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(row.controls.hint) }}\n </mat-error>\n }\n </mat-form-field>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"actions\">\n <th *matHeaderCellDef mat-header-cell>\n {{ dataSource.data.length }} / {{ maxPredefinedVariations }}\n </th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div\n [matTooltip]=\"\n formGroup.controls.predefinedVariations.controls.length > 2\n ? 'Remove item'\n : 'At least 2 predefined variations should be set.'\n \">\n <button\n mat-icon-button\n type=\"button\"\n [disabled]=\"formGroup.controls.predefinedVariations.controls.length <= 2\"\n (click)=\"removeVariation(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n </table>\n </div>\n\n @if (\n formGroup.controls.predefinedVariations.invalid &&\n !!FormHelper.getErrorMessage(formGroup.controls.predefinedVariations)\n ) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.predefinedVariations) }}\n </mat-error>\n }\n <div class=\"add-variation\">\n @if (this.formGroup.controls.settingType.value !== SettingTypeEnum.Boolean) {\n <div\n [matTooltip]=\"'Maximum ' + maxPredefinedVariations + ' predefined variations can be added.'\"\n [matTooltipDisabled]=\"dataSource.data.length < maxPredefinedVariations\">\n <button\n type=\"button\"\n mat-stroked-button\n color=\"primary\"\n [disabled]=\"dataSource.data.length >= maxPredefinedVariations\"\n (click)=\"addVariation()\">\n <mat-icon>add</mat-icon>\n Add variation\n </button>\n </div>\n } @else {\n <app-box type=\"info\" class=\"bool-variation-info\">\n For more variations, create a flag of another type.\n <a\n href=\"https://configcat.com/docs/main-concepts/#about-setting-types\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n Read more\n </a>\n about setting types.\n </app-box>\n }\n </div>\n </div>\n }\n }\n\n <div class=\"header small\">Initial values</div>\n <div class=\"initial-value-first-line\">\n The initial value\n <mat-form-field\n appearance=\"outline\"\n class=\"small-form-field initial-value-environment-type\"\n subscriptSizing=\"dynamic\">\n <mat-select formControlName=\"initialValuesPerEnvironment\">\n <mat-option [value]=\"false\">in all environments</mat-option>\n <mat-option [value]=\"true\">per environment</mat-option>\n </mat-select>\n </mat-form-field>\n will be set to\n </div>\n @if (!formGroup.controls.initialValuesPerEnvironment.value) {\n @if (formGroup.controls.useVariations.value) {\n <div class=\"value-field all\">\n <ng-container\n [ngTemplateOutlet]=\"predefinedVariationTemplate\"\n [ngTemplateOutletContext]=\"{ formControl: formGroup.controls.initialValueForAllVariationIndex }\" />\n </div>\n } @else {\n <div class=\"value-field all\">\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{ formControl: formGroup.controls.initialValueForAll }\" />\n </div>\n }\n }\n\n @if (formGroup.controls.initialValuesPerEnvironment.value) {\n @for (initialValue of formGroup.controls.initialValues.controls; track $index; let index = $index) {\n <div formArrayName=\"initialValues\">\n <div class=\"value-field\" [formGroupName]=\"index\">\n @if (formGroup.controls.useVariations.value) {\n <ng-container\n [ngTemplateOutlet]=\"predefinedVariationTemplate\"\n [ngTemplateOutletContext]=\"{ formControl: initialValue.controls.predefinedVariationIndex }\" />\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{ formControl: initialValue.controls.settingValue }\" />\n }\n <div class=\"environment\">\n in\n <strong [matTooltip]=\"initialValue.controls.environmentName.value\">\n {{ initialValue.controls.environmentName.value }}\n </strong>\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n\n @if (!hideLinkSection()) {\n <div class=\"header\">\n 3. {{ linkSectionHeader() ? linkSectionHeader() : \"Select which environment should we link to this card\" }}\n </div>\n @if (linkSectionDescription()) {\n <p>{{ linkSectionDescription() }}</p>\n }\n @if (formGroup.controls.productId.value) {\n <app-environment-select\n [basicAuthUsername]=\"basicAuthUsername()\"\n [productId]=\"formGroup.controls.productId.value\"\n [basicAuthPassword]=\"basicAuthPassword()\"\n [valueFormControl]=\"formGroup.controls.environmentId\"\n [customDropdown]=\"true\" />\n }\n }\n </div>\n @if (formGroup.errors && formGroup.errors[\"serverSide\"]) {\n <div class=\"error\">\n <span>{{ formGroup.errors[\"serverSide\"] }}</span>\n </div>\n }\n <div class=\"buttons\">\n <button\n mat-raised-button\n color=\"primary\"\n type=\"submit\"\n [disabled]=\"submitting() || loadingComputed() || !formGroup.valid\">\n {{ createButtonLabel() ? createButtonLabel() : \"Create\" }}\n </button>\n @if (!hideCancelButton()) {\n <button mat-stroked-button type=\"button\" (click)=\"cancel()\">\n {{ cancelButtonLabel() ? cancelButtonLabel() : \"Cancel\" }}\n </button>\n }\n </div>\n </form>\n</div>\n\n<ng-template #settingValueTemplate let-formControl=\"formControl\" let-setFocus=\"setFocus\">\n @switch (formGroup.controls.settingType.value) {\n @case (SettingTypeEnum.String) {\n <mat-form-field class=\"small-form-field text suffixed\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n placeholder=\"Add text ...\"\n focus\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\" />\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandText(formControl)\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n @if (formControl.invalid) {\n <mat-error class=\"small-error\">\n {{ FormHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n </mat-form-field>\n }\n @case (SettingTypeEnum.Int) {\n <mat-form-field class=\"small-form-field\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n @if (formControl.invalid) {\n <mat-error class=\"small-error\">\n {{ FormHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n <input\n matInput\n type=\"number\"\n required\n name=\"index\"\n appDigitOnly\n focus\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\"\n [digitOnlyAllowNegatives]=\"true\" />\n </mat-form-field>\n }\n @case (SettingTypeEnum.Double) {\n <mat-form-field class=\"small-form-field\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n @if (formControl.invalid) {\n <mat-error class=\"small-error\">\n {{ FormHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n <input\n matInput\n type=\"number\"\n required\n name=\"index\"\n inputDisplayNormalizer\n focus\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\" />\n </mat-form-field>\n }\n @case (SettingTypeEnum.Boolean) {\n <div class=\"toggle\">\n <label class=\"switch\">\n <input type=\"checkbox\" name=\"index\" [formControl]=\"formControl\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n }\n }\n</ng-template>\n\n<ng-template #predefinedVariationTemplate let-formControl=\"formControl\">\n <mat-form-field class=\"small-form-field\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select [formControl]=\"formControl\">\n @for (predefinedVariation of formGroup.controls.predefinedVariations.controls; let idx = $index; track $index) {\n <mat-option [value]=\"idx\">\n @if (predefinedVariation.controls.name.value) {\n {{ predefinedVariation.controls.name.value }}\n } @else {\n {{ predefinedVariation.controls.valueForComparison.value }}\n }\n </mat-option>\n }\n </mat-select>\n @if (formControl.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n </mat-form-field>\n</ng-template>\n","import { Component, inject, input, OnInit, output, signal } from \"@angular/core\";\nimport { FormControl, FormGroup, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatError, MatFormField, MatHint, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { EnvironmentModel, EvaluationVersion, SettingType } from \"ng-configcat-publicapi\";\nimport { FormHelper, ProductSelectComponent } from \"../../public-api\";\nimport { CreateConfigFormGroup } from \"../_models/setting-form\";\nimport { ErrorHandler } from \"../_services/error-handler\";\nimport { BaseComponent } from \"../base/base.component\";\nimport { LoaderComponent } from \"../loader/loader.component\";\n\nexport interface PresetProduct {\n productId: string;\n productName: string;\n}\n\n@Component({\n selector: \"app-create-config\",\n templateUrl: \"./create-config.component.html\",\n styleUrls: [\n \"./create-config.component.scss\",\n ],\n imports: [\n ProductSelectComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatInput,\n MatHint,\n MatError,\n MatButton,\n LoaderComponent,\n ],\n})\nexport class CreateConfigComponent extends BaseComponent implements OnInit {\n private readonly formBuilder = inject(NonNullableFormBuilder);\n\n readonly hideCancelButton = input(true);\n readonly createButtonLabel = input<string>();\n readonly cancelButtonLabel = input<string>();\n readonly targetSectionHeader = input<string>();\n readonly targetSectionDescription = input<string>();\n readonly configSectionHeader = input<string>();\n readonly configSectionDescription = input<string>();\n\n readonly presetProduct = input<PresetProduct>();\n\n readonly createInitiated = output<string>();\n readonly resizeRequested = output();\n readonly cancelInitiated = output();\n readonly selectDropdownPanelChangedReqested = output<boolean>();\n\n readonly loading = signal(true);\n readonly submitting = signal(false);\n\n SettingTypeEnum = SettingType;\n\n FormHelper = FormHelper;\n EvaluationVersion = EvaluationVersion;\n\n formGroup!: FormGroup<CreateConfigFormGroup>;\n\n maxPredefinedVariations = 50;\n maxStringFlagValueLength = 100000;\n selectedProductOrganiaztionId = \"0\";\n selectedProductEnviroment!: EnvironmentModel[];\n\n focusIndex = -1;\n settingTypeText = \"\";\n displayedColumns: string[] = [];\n\n ngOnInit(): void {\n this.loading.set(true);\n this.formGroup = this.formBuilder.group<CreateConfigFormGroup>({\n productId: new FormControl<string>(this.presetProduct()?.productId ? this.presetProduct()!.productId : \"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n name: new FormControl<string>(\"Main Config\", {\n nonNullable: true,\n validators: [Validators.required, Validators.maxLength(255)],\n }),\n description: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.maxLength(1000)],\n }),\n evaluationVersion: new FormControl<EvaluationVersion>(EvaluationVersion.V2, {\n nonNullable: true,\n validators: [Validators.required],\n }),\n });\n this.loading.set(false);\n }\n\n create() {\n if (!this.formGroup.valid) {\n return;\n }\n this.submitting.set(true);\n\n this.createConfigsService()\n .createConfig(\n this.formGroup.controls.productId.value,\n {\n name: this.formGroup.controls.name.value,\n description: this.formGroup.controls.description.value,\n evaluationVersion: this.formGroup.controls.evaluationVersion.value,\n })\n .subscribe({\n next: config => {\n this.submitting.set(false);\n this.createInitiated.emit(config.configId);\n },\n error: (error: Error) => {\n this.submitting.set(false);\n ErrorHandler.handleErrors(this.formGroup, error);\n console.log(error);\n },\n });\n\n }\n\n cancel() {\n this.cancelInitiated.emit();\n }\n\n selectDropdownPanelChanged(useSelector: boolean) {\n this.selectDropdownPanelChangedReqested.emit(useSelector);\n }\n\n}\n","<div class=\"container\">\n <form class=\"form\" [formGroup]=\"formGroup\" (ngSubmit)=\"create()\">\n <div>\n <div class=\"header\">1. {{ targetSectionHeader() ? targetSectionHeader() : \"Select Product and Config\" }}</div>\n @if (targetSectionDescription()) {\n <p>{{ targetSectionDescription() }}</p>\n }\n @if (this.presetProduct()) {\n <p>\n Pre selected product\n <b>{{ this.presetProduct()!.productName }}</b>\n </p>\n }\n <app-product-select\n name=\"productId\"\n [hidden]=\"this.presetProduct()\"\n [basicAuthUsername]=\"basicAuthUsername()\"\n [basicAuthPassword]=\"basicAuthPassword()\"\n [preSelectedProductId]=\"this.presetProduct()?.productId\"\n [valueFormControl]=\"formGroup.controls.productId\"\n [customDropdown]=\"true\" />\n\n <div class=\"header\">2. {{ configSectionHeader() ? configSectionHeader() : \"Setup Feature Flag\" }}</div>\n @if (configSectionDescription()) {\n <p>{{ configSectionDescription() }}</p>\n }\n @if (loading()) {\n <app-loader />\n } @else {\n <mat-form-field class=\"form-field name\" appearance=\"outline\">\n <mat-label>Name</mat-label>\n <input matInput placeholder=\"Config's name\" formControlName=\"name\" />\n <mat-hint>A friendly name that best describes your config.</mat-hint>\n @if (formGroup.controls.name.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.name) }}\n </mat-error>\n }\n </mat-form-field>\n <mat-form-field class=\"form-field hint\" appearance=\"outline\">\n <mat-label>Config description (Optional)</mat-label>\n <textarea matInput placeholder=\"This config is responsible for...\" formControlName=\"description\"></textarea>\n <mat-hint>A description to help you remember the purpose of your config.</mat-hint>\n @if (formGroup.controls.description.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.description) }}\n </mat-error>\n }\n </mat-form-field>\n }\n </div>\n @if (formGroup.errors && formGroup.errors[\"serverSide\"]) {\n <div class=\"error\">\n <span>{{ formGroup.errors[\"serverSide\"] }}</span>\n </div>\n }\n <div class=\"buttons\">\n <button\n mat-raised-button\n color=\"primary\"\n type=\"submit\"\n [disabled]=\"submitting() || loading() || !formGroup.valid\">\n {{ createButtonLabel() ? createButtonLabel() : \"Create\" }}\n </button>\n @if (!hideCancelButton()) {\n <button mat-stroked-button type=\"button\" (click)=\"cancel()\">\n {{ cancelButtonLabel() ? cancelButtonLabel() : \"Cancel\" }}\n </button>\n }\n </div>\n </form>\n</div>\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/_models\";\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\";\nexport * from \"./lib/link-feature-flag/link-feature-flag.component\";\nexport * from \"./lib/create-feature-flag/create-feature-flag.component\";\nexport * from \"./lib/create-config/create-config.component\";\nexport * from \"./lib/loader/loader.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PublicApiConfiguration","catchError","MatOption","ComparatorGroup"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-configcat-publicapi-ui.mjs","sources":["../../../projects/ng-configcat-publicapi-ui/src/lib/_services/public-api.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_models/user-comparator.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/dialogs/notification-snack/notification-snack.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/notification-snack/notification-snack.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/messaging.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/comparison-value-list-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/custom-validators.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-generator.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/theme.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/setting-list-form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/ng-configcat-publicapi-ui.module.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_directives/input-display-normalizer.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/base/base.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/concurrent-delete-dialog/concurrent-delete-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/concurrent-delete-dialog/concurrent-delete-dialog.component.html","../../../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/_directives/digit-only.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_directives/autofocus.directive.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/dialogs/popout-editor/popout-editor.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/popout-editor/popout-editor.component.html","../../../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/_directives/deselect.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/rollout-rules/rollout-rules.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/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/authorization/authorization.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/authorization/authorization.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/base/base-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/product-select/product-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/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/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/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/_services/tracking.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_models/setting-form.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/error-handler.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/variation-helper.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/loader/loader.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/loader/loader.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/copyable-value/copyable-value.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/copyable-value/copyable-value.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_directives/pasted-data-trimmer.directive.ts","../../../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/dialogs/variations-dialog/variations-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/variations-dialog/variations-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/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/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/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/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/_services/date-helper.ts","../../../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/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/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/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/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/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/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/link-feature-flag/link-feature-flag.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/link-feature-flag/link-feature-flag.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/box/box.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/box/box.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/create-feature-flag/create-feature-flag.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/create-feature-flag/create-feature-flag.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/create-config/create-config.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/create-config/create-config.component.html","../../../projects/ng-configcat-publicapi-ui/src/public-api.ts","../../../projects/ng-configcat-publicapi-ui/src/ng-configcat-publicapi-ui.ts"],"sourcesContent":["import { HttpClient } from \"@angular/common/http\";\nimport { inject, Injectable } from \"@angular/core\";\nimport {\n ConfigsService,\n EnvironmentsService,\n FeatureFlagSettingValuesService,\n FeatureFlagSettingValuesV2Service,\n FeatureFlagsSettingsService,\n IntegrationLinksService,\n MeService,\n OrganizationsService,\n ProductsService,\n Configuration as PublicApiConfiguration,\n SegmentsService,\n} from \"ng-configcat-publicapi\";\nimport { CONFIGCAT_PUBLICAPI_UI_CONFIGURATION } from \"../ng-configcat-publicapi-ui.module\";\n\nconst defaultPublicApiBasePath = \"https://api.configcat.com\";\nconst defaultDashboardBasePath = \"https://app.configcat.com\";\n\n@Injectable()\nexport class PublicApiService {\n private readonly httpClient = inject(HttpClient);\n private readonly configuration = inject(CONFIGCAT_PUBLICAPI_UI_CONFIGURATION, { optional: true });\n\n createMeService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new MeService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createProductsService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new ProductsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createConfigsService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new ConfigsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createEnvironmentsService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new EnvironmentsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createSettingsService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new FeatureFlagsSettingsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createSettingValuesV2Service(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new FeatureFlagSettingValuesV2Service(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createSettingValuesService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new FeatureFlagSettingValuesService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createIntegrationLinksService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new IntegrationLinksService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createSegmentsService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new SegmentsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n createOrganizationService(\n basicAuthUsername: string | null = null,\n basicAuthPassword: string | null = null,\n basePath: string | null = null\n ) {\n return new OrganizationsService(\n this.httpClient,\n basePath ?? this.configuration?.basePath ?? defaultPublicApiBasePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword,\n })\n );\n }\n\n getDashboardBasePath() {\n return this.configuration?.dashboardBasePath ?? defaultDashboardBasePath;\n }\n}\n","import { HttpErrorResponse } from \"@angular/common/http\";\nimport { FormArray, FormControl, FormGroup } from \"@angular/forms\";\n\nexport const percentageRegex = \"^[0-9]*$\";\nexport const wholeNumberRegex = \"^[-+]?[0-9]\\\\d*$\";\nexport const featureFlagKeyRegex = \"^[a-zA-Z]+[a-zA-Z0-9_-]*$\";\n\nexport const defaultErrorMessageTypes = [\n \"email\",\n \"compare\",\n \"password\",\n \"minLength\",\n \"maxLength\",\n \"ascii\",\n \"unique\",\n \"url\",\n \"certificate\",\n];\n\nexport class FormHelper {\n\n public static handleErrors(formGroup: FormGroup, error: Error) {\n if (error instanceof HttpErrorResponse) {\n switch (error.status) {\n case 400: {\n let unknownFieldName = false;\n\n for (const fieldName in error.error) {\n const errorMessage = this.getHttpErrorResponseMessage(error, fieldName);\n\n if (errorMessage) {\n let jsonFieldName = fieldName;\n if (jsonFieldName.length > 0) {\n jsonFieldName = jsonFieldName[0].toLowerCase() + jsonFieldName.slice(1);\n }\n\n if (Object.prototype.hasOwnProperty.call(formGroup.controls, 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 }\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({\n serverSide: \"Something went wrong on our side. This is not your fault. Please try again.\",\n });\n }\n }\n\n public static getHttpErrorResponseMessage(error: HttpErrorResponse, fieldName: string): string | undefined {\n if (!error.error || !Object.prototype.hasOwnProperty.call(error.error, fieldName)) {\n return;\n }\n\n const errorObjectValue = error.error as Record<string, { Errors: { ErrorMessage: string }[] }>;\n if (\n Object.prototype.hasOwnProperty.call(errorObjectValue, fieldName)\n && Object.prototype.hasOwnProperty.call(errorObjectValue[fieldName], \"Errors\")\n && errorObjectValue[fieldName].Errors.length > 0\n ) {\n return errorObjectValue[fieldName].Errors.map(e => e.ErrorMessage).join(\", \");\n }\n\n const errorStringValue = error.error as Record<string, string | string[]>;\n const errorValue = errorStringValue[fieldName];\n if (!errorValue) {\n return;\n }\n if (Array.isArray(errorValue)) {\n return errorValue[0];\n }\n return errorValue;\n }\n\n public static getErrorMessage(control: FormControl | FormGroup | FormArray, hint = \"\"): string {\n if (control.valid) {\n return \"\";\n }\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(\"matTimepickerParse\")) {\n return \"Invalid time value.\";\n }\n\n for (const defaultErrorMessageType of defaultErrorMessageTypes) {\n if (control.hasError(defaultErrorMessageType)) {\n const errorMessage = (control.errors![defaultErrorMessageType] as { message: string }).message;\n if (errorMessage) {\n return errorMessage;\n }\n }\n }\n\n if (control.hasError(\"required\")) {\n if (control instanceof FormArray) {\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(\"validateUniqueVariationsByValue\")) {\n return \"Each served value must be unique.\";\n } else if (control.hasError(\"validateUniqueVariationsByNameAndValue\")) {\n return \"The combination of the name and value must be unique.\";\n }\n\n if (control.hasError(\"emails\")) {\n return control.errors![\"emails\"] as string;\n }\n\n if (control.hasError(\"minlength\")) {\n if (control instanceof FormArray) {\n return (\n \"The list must contain min \"\n + (control.errors![\"minlength\"] as { requiredLength: number }).requiredLength\n + \" items.\"\n );\n } else {\n return (\n \"The field must be at least \"\n + (control.errors![\"minlength\"] as { requiredLength: number }).requiredLength\n + \" characters long.\"\n );\n }\n }\n\n if (control.hasError(\"maxlength\")) {\n if (control instanceof FormArray) {\n return (\n \"The list must contain max \"\n + (control.errors![\"maxlength\"] as { requiredLength: number }).requiredLength\n + \" items.\"\n );\n } else {\n return (\n \"The field must be at max \"\n + (control.errors![\"maxlength\"] as { requiredLength: number }).requiredLength\n + \" characters long.\"\n );\n }\n }\n\n if (control.hasError(\"whitespace\")) {\n return \"Can not contain whitespaces.\";\n }\n\n if (control.hasError(\"serverSide\")) {\n return control.errors![\"serverSide\"] as string;\n }\n\n if (control.hasError(\"pattern\")) {\n const patternError = control.errors![\"pattern\"] as { requiredPattern: string | RegExp };\n if (patternError.requiredPattern === percentageRegex) {\n return \"The percentage value must be a whole number.\";\n }\n\n if (patternError.requiredPattern === wholeNumberRegex) {\n return \"Please enter a whole number e.g. 42.\";\n }\n\n if (patternError.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\n if (control.hasError(\"alreadyExists\")) {\n return control.errors![\"alreadyExists\"] as string;\n }\n\n if (control.hasError(\"validateSemVer\") || control.hasError(\"validateSemVerList\")) {\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\"] as { min: number }).min - 1) + \".\";\n }\n\n if (control.hasError(\"max\")) {\n return \"The value must be less than \" + ((control.errors![\"max\"] as { max: number }).max + 1) + \".\";\n }\n\n return \"\";\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: string | number | bigint): 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: string): string {\n const numberValue = FormHelper.normalizeNumber(value);\n // NOTE: `NaN` is not considered finite.\n return isFinite(numberValue) ? numberValue + \"\" : \"\";\n }\n\n}\n","import { UserComparator } from \"ng-configcat-publicapi\";\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 function 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:\n return true;\n default:\n return false;\n }\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 { DatePipe } from \"@angular/common\";\nimport { inject, Injectable } from \"@angular/core\";\nimport { NativeDateAdapter } from \"@angular/material/core\";\n\n@Injectable()\nexport class AppDateAdapter extends NativeDateAdapter {\n private readonly datepipe = inject(DatePipe);\n\n override format(date: Date, displayFormat: Record<string, string>): string {\n if (!displayFormat?.[\"hour\"]) {\n return this.datepipe.transform(date, \"yyyy. MM. dd\") ?? \"\";\n } else if (!displayFormat?.[\"year\"]) {\n return this.datepipe.transform(date, \"HH:mm\") ?? \"\";\n } else {\n return this.datepipe.transform(date, \"yyyy. MM. dd HH:mm\") ?? \"\";\n }\n }\n}\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\n\nexport interface ConfirmationDialogData {\n title: string;\n body: string;\n yesButtonLabel?: string;\n cancelButtonLabel?: string;\n yesButtonColor?: string;\n hideCancelButton?: boolean;\n}\n\n@Component({\n selector: \"app-confirmation-dialog\",\n templateUrl: \"./confirmation-dialog.html\",\n imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, MatButton],\n})\nexport class ConfirmationDialogComponent {\n dialogRef = inject<MatDialogRef<ConfirmationDialogComponent, string>>(MatDialogRef);\n data = inject<ConfirmationDialogData>(MAT_DIALOG_DATA);\n\n yes() {\n this.dialogRef.close(\"yes\");\n }\n\n cancel() {\n this.dialogRef.close(\"cancel\");\n }\n}\n","<h1 mat-dialog-title>{{ data.title }}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<div mat-dialog-actions>\n <button\n type=\"button\"\n mat-flat-button\n data-robot=\"dialogYes\"\n [color]=\"data.yesButtonColor ? data.yesButtonColor : 'primary'\"\n (click)=\"yes()\">\n {{ data.yesButtonLabel ? data.yesButtonLabel : \"Yes\" }}\n </button>\n @if (!data.hideCancelButton) {\n <button type=\"button\" mat-stroked-button data-robot=\"dialogNo\" (click)=\"cancel()\">\n {{ data.cancelButtonLabel ? data.cancelButtonLabel : \"Cancel\" }}\n </button>\n }\n</div>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\n\n@Component({\n selector: \"app-reroute-dialog\",\n templateUrl: \"./reroute-dialog.html\",\n styleUrls: [\"./reroute-dialog.scss\"],\n imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, MatButton],\n})\nexport class RerouteDialogComponent {\n dialogRef = inject<MatDialogRef<RerouteDialogComponent, string>>(MatDialogRef);\n data = inject<DialogData>(MAT_DIALOG_DATA);\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}\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 class=\"hidden-link\" target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"data.yesButtonLink\">\n <button\n type=\"button\"\n style=\"margin-right: 10px\"\n mat-flat-button\n data-robot=\"dialogYes\"\n [color]=\"data.buttonColor ? data.buttonColor : 'primary'\"\n (click)=\"yes()\">\n {{ data.yesButtonLabel ? data.yesButtonLabel : \"Yes\" }}\n </button>\n </a>\n @if (!data.hideNoButton) {\n <button type=\"button\" mat-stroked-button data-robot=\"dialogNo\" (click)=\"cancel()\">\n {{ data.noButtonLabel ? data.noButtonLabel : \"Cancel\" }}\n </button>\n }\n</div>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { NgClass } from \"@angular/common\";\nimport { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\n\nexport interface InfoDialogData {\n title: string;\n iconName?: string;\n iconColor?: string;\n body: string;\n primaryButtonLabel?: string;\n secondaryButtonLabel?: string;\n secondaryButtonAction?: () => void;\n}\n\nexport type InfoDialogResult = \"ok\" | \"nok\";\n\n@Component({\n selector: \"app-info-dialog\",\n templateUrl: \"./info-dialog.html\",\n styleUrls: [\"./info-dialog.scss\"],\n imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatIcon, MatDialogActions, MatButton, NgClass],\n})\nexport class InfoDialogComponent {\n dialogRef = inject<MatDialogRef<InfoDialogComponent, InfoDialogResult>>(MatDialogRef);\n data = inject<InfoDialogData>(MAT_DIALOG_DATA);\n\n readonly iconCssClass?: string;\n\n constructor() {\n const data = this.data;\n\n if (data.iconName) {\n this.iconCssClass = \"icon-\" + data.iconName.replace(\"_\", \"-\");\n }\n }\n\n ok() {\n this.dialogRef.close(\"ok\");\n }\n\n secondaryButtonAction() {\n this.data.secondaryButtonAction?.();\n this.dialogRef.close(\"nok\");\n }\n}\n","<h1 mat-dialog-title>{{ data.title }}</h1>\n<div mat-dialog-content [class.content-with-icon]=\"!!data.iconName\">\n @if (!!data.iconName) {\n <mat-icon class=\"icon\" [ngClass]=\"iconCssClass\" [style.color]=\"data.iconColor\">{{ data.iconName }}</mat-icon>\n }\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"ok()\">{{ data.primaryButtonLabel ?? \"OK\" }}</button>\n @if (data.secondaryButtonLabel) {\n <button type=\"button\" mat-stroked-button (click)=\"secondaryButtonAction()\">{{ data.secondaryButtonLabel }}</button>\n }\n</div>\n","import { Component, DestroyRef, ElementRef, inject, viewChild } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MAT_SNACK_BAR_DATA, MatSnackBarAction, MatSnackBarActions, MatSnackBarLabel, MatSnackBarRef } from \"@angular/material/snack-bar\";\nimport { timer } from \"rxjs\";\n\nexport enum NotificationSnackColor {\n Green,\n Yellow,\n Red,\n Blue,\n}\n\nexport interface NotificationSnackData {\n color: NotificationSnackColor;\n message: string;\n}\n\n@Component({\n selector: \"app-notification-snack\",\n templateUrl: \"./notification-snack.component.html\",\n styleUrls: [\"./notification-snack.component.scss\"],\n imports: [MatIconButton, MatSnackBarAction, MatSnackBarActions, MatSnackBarLabel, MatIcon],\n})\nexport class NotificationSnackComponent {\n snackBarRef = inject<MatSnackBarRef<NotificationSnackComponent>>(MatSnackBarRef);\n data = inject<NotificationSnackData>(MAT_SNACK_BAR_DATA);\n\n NotificationSnackColor = NotificationSnackColor;\n readonly progressBar = viewChild.required<ElementRef<HTMLElement>>(\"progressBar\");\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n this.snackBarRef.afterOpened().pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n const duration = this.snackBarRef.containerInstance.snackBarConfig.duration ?? 0;\n if (duration > 0) {\n const tick = 500;\n let step = duration;\n timer(0, tick)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n step -= tick;\n const progress = ((step / duration) * 100);\n if (progress < 0) {\n this.progressBar().nativeElement.style.width = \"0%\";\n return;\n }\n this.progressBar().nativeElement.style.width = `${progress}%`;\n });\n }\n });\n }\n}\n","<div\n class=\"snack-container\"\n [class.green]=\"data.color === NotificationSnackColor.Green\"\n [class.yellow]=\"data.color === NotificationSnackColor.Yellow\"\n [class.red]=\"data.color === NotificationSnackColor.Red\"\n [class.blue]=\"data.color === NotificationSnackColor.Blue\">\n <div\n class=\"content\"\n matSnackBarLabel\n [class.error]=\"data.color === NotificationSnackColor.Red\"\n [class.warn]=\"data.color === NotificationSnackColor.Yellow\"\n [class.success]=\"data.color === NotificationSnackColor.Green\"\n [class.info]=\"data.color === NotificationSnackColor.Blue\">\n <div [innerHTML]=\"data.message\"></div>\n </div>\n\n <span matSnackBarActions>\n <button\n type=\"button\"\n class=\"dismiss\"\n mat-icon-button\n matSnackBarAction\n [class.green]=\"data.color === NotificationSnackColor.Green\"\n [class.yellow]=\"data.color === NotificationSnackColor.Yellow\"\n [class.red]=\"data.color === NotificationSnackColor.Red\"\n [class.blue]=\"data.color === NotificationSnackColor.Blue\"\n (click)=\"snackBarRef.dismissWithAction()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n\n <div class=\"progress-container\">\n <div\n #progressBar\n class=\"progress-bar\"\n [class.green]=\"data.color === NotificationSnackColor.Green\"\n [class.yellow]=\"data.color === NotificationSnackColor.Yellow\"\n [class.red]=\"data.color === NotificationSnackColor.Red\"\n [class.blue]=\"data.color === NotificationSnackColor.Blue\"></div>\n </div>\n</div>\n","import { inject, Injectable } from \"@angular/core\";\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\nimport { NotificationSnackColor, NotificationSnackComponent } from \"../dialogs/notification-snack/notification-snack.component\";\n\n@Injectable()\nexport class MessagingService {\n private readonly snackBar = inject(MatSnackBar);\n\n showErrorSnack(message = \"Something went wrong.\", durationMs = 60000) {\n this.snackBar.openFromComponent(NotificationSnackComponent, {\n duration: durationMs,\n data: {\n color: NotificationSnackColor.Red,\n message: `Ooops. ${message} Please try again or contact us.`,\n },\n });\n }\n\n showSuccessSnack(message = \"Success.\", durationMs = 2500) {\n this.snackBar.openFromComponent(NotificationSnackComponent, {\n duration: durationMs,\n data: {\n color: NotificationSnackColor.Green,\n message: message,\n },\n });\n }\n\n showWarningSnack(message = \"Success.\", durationMs = 5000) {\n this.snackBar.openFromComponent(NotificationSnackComponent, {\n duration: durationMs,\n data: {\n color: NotificationSnackColor.Yellow,\n message: message,\n },\n });\n }\n\n dismissCurrentSnack() {\n this.snackBar.dismiss();\n }\n}\n","import Papa from \"papaparse\";\nimport { IComparisonValueListModel } from \"../bootstrap\";\n\nexport interface ComparisonValueListParseResult {\n error?: string;\n comparisonValueList: IComparisonValueListModel[];\n}\n\nexport function formatValuesAndHintAsJson(comparisonValueList: IComparisonValueListModel[]): string {\n return JSON.stringify(comparisonValueList, null, 2);\n}\n\nexport function formatValuesAndHintAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueListItem => {\n return [\n formatCsvStringValue(comparisonValueListItem.value),\n formatCsvStringValue(comparisonValueListItem.hint ?? \"\"),\n ].join(\",\");\n });\n return data.join(\"\\r\\n\");\n}\n\nexport function formatValuesAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueList =>\n formatCsvStringValue(comparisonValueList.value)\n );\n return data.join(\",\");\n}\n\nexport function formatCsvStringValue(value: string): string {\n if (!value) {\n return \"\";\n }\n const escaped = value.replaceAll('\"', '\"\"');\n return '\"' + escaped + '\"';\n}\n\nexport function parseValuesAndHintsFromJson(value: string): ComparisonValueListParseResult {\n if (value === \"\") {\n return { comparisonValueList: [] };\n }\n try {\n const parsed: IComparisonValueListModel[] = JSON.parse(value) as IComparisonValueListModel[];\n return { comparisonValueList: parsed.filter(v => !!v.value) };\n } catch {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n}\n\nexport function 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) {\n return { comparisonValueList: [] };\n }\n return {\n comparisonValueList: parseResult.data\n .map(p => ({ value: p[0], hint: p[1] }) as IComparisonValueListModel)\n .filter(v => !!v.value),\n };\n}\n\nexport function 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) {\n return { comparisonValueList: [] };\n }\n return {\n comparisonValueList: parseResult.data\n .flat()\n .map(p => ({ value: p }) as IComparisonValueListModel)\n .filter(v => !!v.value),\n };\n}\n","import { AbstractControl, FormArray, FormControl, FormGroup, ValidationErrors, Validators } from \"@angular/forms\";\nimport { valid } from \"semver\";\nimport { PredefinedVariationFormGroup } from \"../_models/setting-form\";\n\nexport function validateSemVer(c: FormControl<string>): ValidationErrors | null {\n if (valid(c.value) === null) {\n return {\n validateSemVer: {\n valid: false,\n },\n };\n }\n return null;\n}\n\nexport function validateSemVerList(c: FormControl<string>): ValidationErrors | null {\n if (!c.value) {\n return {\n validateSemVerList: {\n valid: false,\n },\n };\n }\n\n const semvers = c.value.split(\",\").map(s => s.trim());\n if (semvers.find(s => s && s !== \"\" && valid(s) === null)) {\n return {\n validateSemVerList: {\n valid: false,\n },\n };\n }\n\n return null;\n}\n\nexport function validateNumberNan(c: AbstractControl): ValidationErrors | null {\n const numberControl = c as FormControl<number | null> | null;\n if (numberControl && (numberControl.value === null || isNaN(numberControl.value))) {\n return {\n validateNumberNan: {\n valid: false,\n },\n };\n }\n return null;\n}\n\nexport function validateEmptyString(c: AbstractControl): ValidationErrors | null {\n const stringControl = c as FormControl<string> | null;\n if (stringControl?.value === \"\") {\n return {\n required: true,\n };\n }\n return null;\n}\n\nexport function noWhitespaceValidator(c: AbstractControl): ValidationErrors | null {\n return typeof c.value !== \"string\" || !c.value.match(/\\s/g) ? null : { whitespace: true };\n}\n\nexport function nonEmptyStringValidator(c: AbstractControl): ValidationErrors | null {\n let errors = Validators.required(c);\n if (!errors && typeof c.value === \"string\" && /^\\s*$/.test(c.value)) {\n errors = { required: true };\n }\n return errors;\n}\n\n// eslint-disable-next-line sonarjs/no-invariant-returns\nexport function validateUniqueVariations(c: AbstractControl): ValidationErrors | null {\n const control = c as FormArray<FormGroup<PredefinedVariationFormGroup>>;\n if (!control) {\n return null;\n }\n\n control.controls.forEach(current => {\n if (control.controls.filter(c => c.controls.valueForComparison.value === current.controls.valueForComparison.value).length > 1) {\n addError(getValueControl(current), \"validateUniqueVariationsByValue\");\n } else {\n removeError(getValueControl(current), \"validateUniqueVariationsByValue\");\n }\n\n if (control.controls.filter(c =>\n (c.controls.name.value ? c.controls.name.value : c.controls.valueForComparison.value) ===\n (current.controls.name.value ? current.controls.name.value : current.controls.valueForComparison.value)).length > 1) {\n if (current.controls.name.value) {\n addError(current.controls.name, \"validateUniqueVariationsByNameAndValue\");\n } else {\n addError(getValueControl(current), \"validateUniqueVariationsByNameAndValue\");\n }\n } else {\n removeError(current.controls.name, \"validateUniqueVariationsByNameAndValue\");\n removeError(getValueControl(current), \"validateUniqueVariationsByNameAndValue\");\n }\n });\n\n return null;\n}\n\nfunction addError(control: FormControl<boolean> | FormControl<string> | FormControl<string | null> | FormControl<number> | undefined, error: string) {\n if (!control) return;\n if (!control.hasError(error)) {\n const errors = { ...control.errors };\n errors[error] = { valid: false };\n control.setErrors(errors);\n control.markAsTouched();\n }\n}\n\nfunction removeError(control: FormControl<boolean> | FormControl<string> | FormControl<string | null> | FormControl<number> | undefined, error: string) {\n if (!control) return;\n if (control.hasError(error)) {\n const errors = { ...control.errors };\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete errors[error];\n control.setErrors(Object.keys(errors).length ? errors : null);\n }\n}\n\nfunction getValueControl(control: FormGroup<PredefinedVariationFormGroup>) {\n return control.controls.value.controls.boolValue\n ?? control.controls.value.controls.stringValue\n ?? control.controls.value.controls.intValue\n ?? control.controls.value.controls.doubleValue;\n}\n","import { AbstractControl, FormArray, FormControl, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\nimport { PredefinedVariationModel, SegmentComparator, UpdateEvaluationFormulaModel, ValueModel } from \"ng-configcat-publicapi\";\nimport { percentageRegex, wholeNumberRegex } from \"../_services/form-helper\";\nimport {\n ComparisonValueForm,\n ComparisonValueListForm,\n ConditionForm,\n IComparisonValueListModel,\n IComparisonValueModel,\n IConditionModel,\n IFeatureFlagLimitations,\n IPercentageOptionModel,\n IPrerequisiteFlagConditionModel,\n IPrerequisiteSetting,\n ISegmentConditionModel,\n ISettingValueModel,\n ITargetingRuleModel,\n IUserConditionModel,\n IValueModel,\n PercentageOptionForm,\n PrerequisiteComparator,\n PrerequisiteFlagConditionForm,\n SegmentConditionForm,\n SettingType,\n TargetingRuleForm,\n UpdateSettingValueForm,\n UserComparator,\n UserComparatorType,\n UserConditionForm,\n ValueForm,\n} from \"../bootstrap\";\nimport { validateEmptyString, validateNumberNan, validateSemVer } from \"./custom-validators\";\n\nexport function generateSettingValuesFormGroup(\n model: ISettingValueModel,\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<UpdateSettingValueForm> {\n return new FormGroup<UpdateSettingValueForm>({\n defaultValue: generateValueFormGroup(\n model.defaultValue,\n model.setting.settingType,\n model.setting.predefinedVariations,\n readOnly,\n featureFlagLimitations\n ),\n percentageEvaluationAttribute: generatePercentageEvaluationAttributeFormControl(\n model.percentageEvaluationAttribute,\n readOnly\n ),\n targetingRules: new FormArray<FormGroup<TargetingRuleForm>>(\n model.targetingRules.map(ft =>\n generateTargetingRuleFormGroup(\n ft,\n model.setting.settingType,\n model.setting.predefinedVariations,\n readOnly,\n settings,\n featureFlagLimitations\n )\n )\n ),\n });\n}\n\nexport function generatePercentageEvaluationAttributeFormControl(percentageEvaluationAttribute: string | null, readOnly: boolean) {\n return new FormControl<string | null>(\n { value: percentageEvaluationAttribute, disabled: readOnly },\n { validators: [validateEmptyString, Validators.maxLength(1000)], nonNullable: true }\n );\n}\n\nexport function generateTargetingRuleFormGroup(\n model: ITargetingRuleModel,\n settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<TargetingRuleForm> {\n const conditions = new FormArray<FormGroup<ConditionForm>>(\n model.conditions.map(tr => 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 =>\n generatePercentageOptionFormGroup(pr, settingType, predefinedVariations, readOnly, featureFlagLimitations)\n ),\n [validatePercentageSum]\n ),\n });\n } else if (model.value) {\n return new FormGroup<TargetingRuleForm>({\n conditions,\n value: generateValueFormGroup(model.value, settingType, predefinedVariations, readOnly, featureFlagLimitations),\n });\n }\n\n throw Error(\"Invalid model\");\n}\n\nexport function generateTargetingRuleWithEmptyPercentageOptions(\n settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<TargetingRuleForm> {\n return generateTargetingRuleFormGroup(\n {\n conditions: [],\n percentageOptions: getEmptyPercentageOptions(settingType, predefinedVariations, featureFlagLimitations),\n value: null,\n },\n settingType,\n predefinedVariations,\n readOnly,\n settings,\n featureFlagLimitations\n );\n}\n\nexport function getEmptyPercentageOptions(settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n featureFlagLimitations: IFeatureFlagLimitations\n): IPercentageOptionModel[] {\n if (predefinedVariations.length) {\n const predefinedVariationsToAdd = predefinedVariations.slice(0, Math.min(predefinedVariations.length, featureFlagLimitations.maxPercentageOptionCount));\n const percentage = Math.trunc(100 / predefinedVariationsToAdd.length);\n const firstPercentage = 100 - percentage * (predefinedVariationsToAdd.length - 1);\n return predefinedVariationsToAdd\n .map((v, index) =>\n ({\n percentage: index === 0 ? firstPercentage : percentage,\n value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: v.predefinedVariationId },\n })\n );\n }\n switch (settingType) {\n case SettingType.Boolean:\n return [\n { percentage: 50, value: { boolValue: true, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null } },\n { percentage: 50, value: { boolValue: false, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null } },\n ];\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return [\n { percentage: 50, value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null } },\n { percentage: 50, value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null } },\n ];\n default:\n throw new Error(\"Invalid SettingType\");\n }\n}\n\nexport function generatePercentageOptionFormGroup(\n model: IPercentageOptionModel,\n settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<PercentageOptionForm> {\n return new FormGroup<PercentageOptionForm>({\n percentage: new FormControl<number>(\n { value: model.percentage, disabled: readOnly },\n {\n nonNullable: true,\n validators: [\n validateNumberNan,\n Validators.required,\n Validators.min(0),\n Validators.max(100),\n Validators.pattern(percentageRegex),\n ],\n }\n ),\n value: generateValueFormGroup(\n model.value,\n settingType,\n predefinedVariations,\n readOnly || settingType === SettingType.Boolean,\n featureFlagLimitations\n ),\n });\n}\n\nexport function generateConditionFormGroup(\n model: IConditionModel,\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<ConditionForm> {\n if (model.userCondition) {\n return new FormGroup<ConditionForm>({\n userCondition: generateUserConditionFormGroup(model.userCondition, readOnly, featureFlagLimitations),\n });\n } else if (model.segmentCondition) {\n return new FormGroup<ConditionForm>({\n segmentCondition: generateSegmentConditionFormGroup(model.segmentCondition, readOnly),\n });\n } else if (model.prerequisiteFlagCondition) {\n return new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: generatePrerequisiteFlagConditionFormGroup(\n model.prerequisiteFlagCondition,\n readOnly,\n settings,\n featureFlagLimitations\n ),\n });\n } else {\n throw new Error(\"\");\n }\n}\n\nexport function generateUserConditionFormGroup(\n value: IUserConditionModel,\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<UserConditionForm> {\n return new FormGroup<UserConditionForm>({\n comparisonAttribute: new FormControl(\n { value: value.comparisonAttribute, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required, Validators.maxLength(1000)] }\n ),\n comparator: new FormControl(\n { value: value.comparator, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n comparisonValue: generateComparisonValueFormGroup(\n value.comparisonValue,\n value.comparator,\n readOnly,\n featureFlagLimitations\n ),\n });\n}\n\nexport function generateSegmentConditionFormGroup(\n value: ISegmentConditionModel,\n readOnly: boolean\n): FormGroup<SegmentConditionForm> {\n return new FormGroup<SegmentConditionForm>({\n segmentId: new FormControl(\n { value: value.segmentId, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n comparator: new FormControl(\n { value: value.comparator, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n });\n}\n\nexport function generatePrerequisiteFlagConditionFormGroup(\n value: IPrerequisiteFlagConditionModel,\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<PrerequisiteFlagConditionForm> {\n const setting = settings.find(s => s.settingId === value.prerequisiteSettingId);\n if (!setting) {\n throw new Error(\"Could not find prerequisite setting\");\n }\n if (!setting.predefinedVariations.length && 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.boolValue) {\n // If the prerequisiteComparisonValue is false somehow (e.g. Public Management API), we should negate the comparator.\n comparator =\n comparator === PrerequisiteComparator.Equals\n ? PrerequisiteComparator.DoesNotEqual\n : PrerequisiteComparator.Equals;\n }\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl(\n { value: value.prerequisiteSettingId, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n comparator: new FormControl(\n { value: comparator, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n prerequisiteComparisonValue: generateValueFormGroup(\n { boolValue: true, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null },\n setting.settingType,\n setting.predefinedVariations,\n readOnly,\n featureFlagLimitations\n ),\n });\n } else {\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl(\n { value: value.prerequisiteSettingId, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n comparator: new FormControl(\n { value: value.comparator, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n prerequisiteComparisonValue: generateValueFormGroup(\n value.prerequisiteComparisonValue,\n setting.settingType,\n setting.predefinedVariations,\n readOnly,\n featureFlagLimitations\n ),\n });\n }\n}\n\nexport function generateEmptySegmentConditionFormGroup(\n): FormGroup<SegmentConditionForm> {\n return new FormGroup<SegmentConditionForm>({\n segmentId: new FormControl<string | null>(\n null,\n { nonNullable: true, validators: [Validators.required] }\n ),\n comparator: new FormControl<SegmentComparator>(\n SegmentComparator.IsIn,\n { nonNullable: true, validators: [Validators.required] }\n ),\n });\n}\n\nexport function generateEmptyPrerequisiteFlagConditionFormGroup(\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<PrerequisiteFlagConditionForm> {\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl<number | null>(null, {\n nonNullable: true,\n validators: [Validators.required],\n }),\n comparator: new FormControl(PrerequisiteComparator.Equals, {\n nonNullable: true,\n validators: [Validators.required],\n }),\n prerequisiteComparisonValue: generateValueFormGroup(\n { boolValue: true, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null },\n SettingType.Boolean,\n [],\n false,\n featureFlagLimitations\n ),\n });\n}\n\nexport function 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\nexport function generateComparisonValueListFormGroup(\n listValue: IComparisonValueListModel,\n readOnly: boolean,\n validators: ValidatorFn[],\n index: number\n) {\n return new FormGroup<ComparisonValueListForm>({\n value: new FormControl({ value: listValue.value, disabled: readOnly }, { nonNullable: true, validators }),\n hint: new FormControl(\n { value: listValue.hint, disabled: readOnly },\n { validators: [Validators.maxLength(1500)], nonNullable: true }\n ),\n // The index column is generated on the first generation by default or by the getNextIndex() if a value is added\n // to the listvalue. It is required so we can delete the rows on the popout editor.\n index: new FormControl({ value: index, disabled: true }, { nonNullable: true }),\n });\n}\n\nexport function generateComparisonValueFormGroup(\n value: IComparisonValueModel,\n comparator: UserComparator,\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<ComparisonValueForm> {\n switch (getComparisonValueType(comparator)) {\n case UserComparatorType.String:\n return new FormGroup<ComparisonValueForm>({\n stringValue: new FormControl(\n { value: value.stringValue ?? \"\", disabled: readOnly },\n { nonNullable: true, validators: getComparisonValueStringValidators(featureFlagLimitations) }\n ),\n });\n case UserComparatorType.StringList:\n return new FormGroup<ComparisonValueForm>({\n listValue: generateComparisonValueListValueArray(\n value.listValue ?? [],\n readOnly,\n featureFlagLimitations,\n getComparisonValueStringListItemValidators(featureFlagLimitations)\n ),\n });\n\n case UserComparatorType.Number:\n return new FormGroup<ComparisonValueForm>({\n doubleValue: new FormControl(\n { value: value.doubleValue ?? 0, disabled: readOnly },\n\n {\n nonNullable: true,\n validators: [\n validateNumberNan,\n Validators.required,\n Validators.min(-Number.MAX_VALUE),\n Validators.max(Number.MAX_VALUE),\n ],\n }\n ),\n });\n\n case UserComparatorType.Semver:\n return new FormGroup<ComparisonValueForm>({\n stringValue: new FormControl(\n { value: value.stringValue ?? \"\", disabled: readOnly },\n { nonNullable: true, validators: getComparisonValueSemverValidators(featureFlagLimitations) }\n ),\n });\n case UserComparatorType.SemverList:\n return new FormGroup<ComparisonValueForm>({\n listValue: generateComparisonValueListValueArray(\n value.listValue ?? [],\n readOnly,\n featureFlagLimitations,\n getComparisonValueSemverListItemValidators(featureFlagLimitations)\n ),\n });\n\n case UserComparatorType.DateTime:\n return new FormGroup<ComparisonValueForm>({\n doubleValue: new FormControl(\n { value: value.doubleValue ?? 0, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n });\n\n default:\n throw new Error(\"Invalid comparator\");\n }\n}\n\nexport function generateComparisonValueListValueArray(\n listValue: IComparisonValueListModel[],\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations,\n itemValidators: ValidatorFn[]\n) {\n return new FormArray<FormGroup<ComparisonValueListForm>>(\n listValue.map((lv, index) => {\n return generateComparisonValueListFormGroup(lv, readOnly, itemValidators, index);\n }),\n [\n Validators.required,\n Validators.minLength(1),\n Validators.maxLength(featureFlagLimitations.maxComparisonValueListLength),\n ]\n );\n}\n\nexport function getComparisonValueStringValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength)];\n}\n\nexport function getComparisonValueStringListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength)];\n}\n\nexport function getComparisonValueSemverValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength), validateSemVer];\n}\n\nexport function getComparisonValueSemverListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [\n Validators.required,\n Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength),\n validateSemVer,\n ];\n}\n\nexport function generateDefaultValue(settingType: SettingType, predefinedVariations: PredefinedVariationModel[]): IValueModel {\n if (predefinedVariations.length) {\n return { boolValue: null, intValue: null, stringValue: null, doubleValue: null, predefinedVariationId: predefinedVariations[0].predefinedVariationId };\n }\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: false, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null };\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null };\n default:\n throw new Error(\"Invalid SettingType\");\n }\n}\n\nexport function generatePrerequisiteDefaultValue(settingType: SettingType, predefinedVariations: PredefinedVariationModel[]): IValueModel {\n if (predefinedVariations.length) {\n return generateDefaultValue(settingType, predefinedVariations);\n }\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: true, intValue: null, stringValue: null, doubleValue: null, predefinedVariationId: null };\n case SettingType.String:\n return { boolValue: null, intValue: null, stringValue: \"\", doubleValue: null, predefinedVariationId: null };\n case SettingType.Int:\n return { boolValue: null, intValue: 0, stringValue: null, doubleValue: null, predefinedVariationId: null };\n case SettingType.Double:\n return { boolValue: null, intValue: null, stringValue: null, doubleValue: 0, predefinedVariationId: null };\n default:\n throw new Error(\"Invalid SettingType\");\n }\n}\n\nexport function generateDefaultValueFormGroup(\n settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<ValueForm> {\n return generateValueFormGroup(\n generateDefaultValue(settingType, predefinedVariations),\n settingType,\n predefinedVariations,\n readOnly,\n featureFlagLimitations\n );\n}\n\nexport function generateValueFormGroup(\n value: IValueModel,\n settingType: SettingType,\n predefinedVariations: PredefinedVariationModel[],\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n): FormGroup<ValueForm> {\n if (predefinedVariations.length) {\n return new FormGroup<ValueForm>({\n predefinedVariationId: new FormControl(\n { value: value.predefinedVariationId ?? predefinedVariations[0].predefinedVariationId, disabled: readOnly },\n { nonNullable: true, validators: [Validators.required] }\n ),\n });\n }\n switch (settingType) {\n case SettingType.Boolean:\n return new FormGroup<ValueForm>({\n boolValue: new FormControl(\n { value: value.boolValue ?? false, disabled: readOnly },\n { nonNullable: true, validators: getValidatorsForSettingType(settingType, featureFlagLimitations) }\n ),\n });\n\n case SettingType.String:\n return new FormGroup<ValueForm>({\n stringValue: new FormControl(\n { value: value.stringValue ?? \"\", disabled: readOnly },\n { nonNullable: true, validators: getValidatorsForSettingType(settingType, featureFlagLimitations) }\n ),\n });\n\n case SettingType.Int:\n return new FormGroup<ValueForm>({\n intValue: new FormControl(\n { value: value.intValue ?? 0, disabled: readOnly },\n { nonNullable: true, validators: getValidatorsForSettingType(settingType, featureFlagLimitations) }\n ),\n });\n\n case SettingType.Double:\n return new FormGroup<ValueForm>({\n doubleValue: new FormControl(\n { value: value.doubleValue ?? 0, disabled: readOnly },\n { nonNullable: true, validators: getValidatorsForSettingType(settingType, featureFlagLimitations) }\n ),\n });\n\n default:\n throw new Error(\"Invalid SettingType\");\n }\n}\n\nexport function getComparisonValueType(comparator: UserComparator): UserComparatorType {\n switch (comparator) {\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\nexport function getValidatorsForSettingType(\n settingType: SettingType,\n featureFlagLimitations: IFeatureFlagLimitations\n): ValidatorFn[] {\n switch (settingType) {\n case SettingType.Int:\n return [\n validateNumberNan,\n Validators.required,\n Validators.min(-2147483648),\n Validators.max(2147483647),\n Validators.pattern(wholeNumberRegex),\n ];\n case SettingType.Double:\n return [\n validateNumberNan,\n Validators.required,\n Validators.min(-Number.MAX_VALUE),\n Validators.max(Number.MAX_VALUE),\n ];\n case SettingType.String:\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxStringFlagValueLength)];\n case SettingType.Boolean:\n return [Validators.required];\n default:\n return [];\n }\n}\n\nexport function isPercentageOnlyTargetingRule(formGroup: FormGroup<TargetingRuleForm>): boolean {\n return (\n !formGroup.controls.value\n && !formGroup.controls.conditions.length\n && !!formGroup.controls.percentageOptions?.length\n );\n}\n\nexport function addComparisonValueListValueItems(\n userComparator: UserComparator,\n listValueFormArray: FormArray<FormGroup<ComparisonValueListForm>>,\n comparisonValueList: IComparisonValueListModel[],\n featureFlagLimitations: IFeatureFlagLimitations\n) {\n const validators =\n getComparisonValueType(userComparator) === UserComparatorType.SemverList\n ? getComparisonValueSemverListItemValidators(featureFlagLimitations)\n : getComparisonValueStringListItemValidators(featureFlagLimitations);\n\n const maxIndex = getNextIndex(listValueFormArray);\n\n comparisonValueList.forEach((comparisonValueListItem, index) => {\n const formGroup = generateComparisonValueListFormGroup(\n comparisonValueListItem,\n false,\n validators,\n maxIndex + index\n );\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\nexport function validatePercentageSum(c: AbstractControl) {\n const formArray = c as FormArray<FormGroup<PercentageOptionForm>>;\n if (\n formArray.controls\n .map(i => i.controls.percentage.value)\n .reduce((a, b) => {\n return a + b;\n }, 0) !== 100\n ) {\n return {\n validatePercentageSum: {\n valid: false,\n },\n };\n }\n return null;\n}\n\nexport function getRawValue(formGroup: FormGroup<UpdateSettingValueForm>): UpdateEvaluationFormulaModel {\n return {\n defaultValue: getRawSettiongValue(formGroup.controls.defaultValue),\n percentageEvaluationAttribute: formGroup.controls.percentageEvaluationAttribute.value,\n targetingRules: formGroup.controls.targetingRules.controls.map(t => ({\n value: t.controls.value ? getRawSettiongValue(t.controls.value) : null,\n percentageOptions: t.controls.percentageOptions\n ? t.controls.percentageOptions.controls.map(p => ({\n percentage: p.controls.percentage.value,\n value: getRawSettiongValue(p.controls.value),\n }))\n : [],\n conditions: t.controls.conditions.controls.map(c => ({\n userCondition: c.controls.userCondition\n ? {\n comparisonAttribute: c.controls.userCondition.controls.comparisonAttribute.value,\n comparator: c.controls.userCondition.controls.comparator.value,\n comparisonValue: {\n doubleValue: c.controls.userCondition.controls.comparisonValue.controls.doubleValue\n ? c.controls.userCondition.controls.comparisonValue.controls.doubleValue.value\n : null,\n stringValue: c.controls.userCondition.controls.comparisonValue.controls.stringValue\n ? c.controls.userCondition.controls.comparisonValue.controls.stringValue.value\n : null,\n listValue: c.controls.userCondition.controls.comparisonValue.controls.listValue\n ? c.controls.userCondition.controls.comparisonValue.controls.listValue.controls.map(l => ({\n value: l.controls.value.value,\n hint: l.controls.hint.value,\n index: l.controls.index.value,\n }))\n : null,\n },\n }\n : null,\n segmentCondition: c.controls.segmentCondition\n ? {\n segmentId: c.controls.segmentCondition.controls.segmentId.value!,\n comparator: c.controls.segmentCondition.controls.comparator.value,\n }\n : null,\n prerequisiteFlagCondition: c.controls.prerequisiteFlagCondition\n ? {\n comparator: c.controls.prerequisiteFlagCondition.controls.comparator.value,\n prerequisiteSettingId: c.controls.prerequisiteFlagCondition.controls.prerequisiteSettingId.value!,\n prerequisiteComparisonValue: getRawSettiongValue(\n c.controls.prerequisiteFlagCondition.controls.prerequisiteComparisonValue\n ),\n }\n : null,\n })),\n })),\n };\n}\n\nexport function getRawSettiongValue(formGroup: FormGroup<ValueForm>): ValueModel {\n return {\n stringValue: formGroup.controls.stringValue ? formGroup.controls.stringValue.value : null,\n boolValue: formGroup.controls.boolValue ? formGroup.controls.boolValue.value : null,\n doubleValue: formGroup.controls.doubleValue ? formGroup.controls.doubleValue.value : null,\n intValue: formGroup.controls.intValue ? formGroup.controls.intValue.value : null,\n predefinedVariationId: formGroup.controls.predefinedVariationId ? formGroup.controls.predefinedVariationId.value : null,\n };\n}\n","import { DOCUMENT, inject, Injectable } from \"@angular/core\";\nimport { Observable, Subject } from \"rxjs\";\n\nexport enum Theme {\n Light = \"light\",\n Dark = \"dark\",\n}\n\n@Injectable()\nexport class ThemeService {\n private readonly document = inject(DOCUMENT);\n\n private currentTheme = Theme.Light;\n private readonly themeSubject = new Subject<boolean>();\n\n initialize(): void {\n //init with Theme.Light.\n this.currentTheme = Theme.Light;\n this.setThemeAttributeAndNotify();\n }\n\n isDark(): boolean {\n return this.currentTheme === Theme.Dark;\n }\n\n setTheme(theme: Theme): void {\n this.currentTheme = theme;\n this.setThemeAttributeAndNotify();\n }\n\n asObservable(): Observable<boolean> {\n return this.themeSubject.asObservable();\n }\n\n private setThemeAttributeAndNotify() {\n this.setThemeAttribute();\n this.themeSubject.next(this.isDark());\n }\n\n private setThemeAttribute(): void {\n if (this.isDark()) {\n this.document.body.setAttribute(\"data-theme\", Theme.Dark);\n } else {\n this.document.body.removeAttribute(\"data-theme\");\n }\n }\n}\n","import { inject, Injectable } from \"@angular/core\";\nimport { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\nimport {\n FeatureFlagLimitations,\n RolloutPercentageItemModel,\n RolloutRuleComparator,\n RolloutRuleModel,\n SettingType,\n SettingValueModel,\n SettingValueType,\n} from \"ng-configcat-publicapi\";\nimport { PercentageItemFormGroup, RolloutRuleFormGroup, SettingValueFormGroup, SettingValuesFormGroup } from \"../_models/setting-list-form\";\nimport { SettingValuesModel } from \"../_models/settingValuesModel\";\nimport { validateSemVer, validateSemVerList } from \"./custom-validators\";\nimport { FormHelper, percentageRegex, wholeNumberRegex } from \"./form-helper\";\n\n@Injectable()\nexport class SettingListFormHelper {\n private readonly formBuilder = inject(FormBuilder);\n\n createSettingValuesFormGroup(settingValuesModel: SettingValuesModel): FormGroup<SettingValuesFormGroup> {\n const rolloutRules = this.getAllRolloutRules(settingValuesModel.settingValues);\n const comparisonAttributes = this.getComparisonAttributes(rolloutRules);\n const formGroup = this.formBuilder.group<SettingValuesFormGroup>({\n settingValues: this.formBuilder.array(\n settingValuesModel.settingValues.map(sv => this.createSettingValueFormGroup(sv, settingValuesModel.readOnly, sv.featureFlagLimitations))\n ),\n comparisonAttributes: this.formBuilder.array<FormControl<string>>(\n comparisonAttributes.map(a => new FormControl(a, { nonNullable: true }))\n ),\n });\n return formGroup;\n }\n\n createSettingValueFormGroup(\n settingValueModel: SettingValueModel,\n readOnly: boolean,\n featureFlagLimitations: FeatureFlagLimitations\n ): FormGroup<SettingValueFormGroup> {\n return this.formBuilder.group({\n value: new FormControl<SettingValueType | null>(\n { value: settingValueModel.value, disabled: readOnly },\n {\n validators: this.getValidatorsForSettingType(settingValueModel.setting.settingType, featureFlagLimitations),\n nonNullable: true,\n }\n ),\n rolloutPercentageItems: this.formBuilder.array(\n settingValueModel.rolloutPercentageItems.map(p => {\n return this.createRolloutPercentageItemFormGroup(\n p,\n readOnly,\n settingValueModel.setting.settingType,\n featureFlagLimitations\n );\n })\n ),\n rolloutRules: this.formBuilder.array(\n settingValueModel.rolloutRules.map(r => {\n return this.createRolloutRuleFormGroup(\n r,\n readOnly,\n settingValueModel.setting.settingType,\n featureFlagLimitations\n );\n })\n ),\n\n rolloutPercentageItemsSum: new FormControl(\n { value: 100, disabled: false },\n { validators: [Validators.min(100), Validators.max(100)], nonNullable: true }\n ),\n });\n }\n\n createRolloutPercentageItemFormGroup(\n p: RolloutPercentageItemModel,\n readOnly: boolean,\n settingType: SettingType,\n featureFlagLimitations: FeatureFlagLimitations\n ): FormGroup<PercentageItemFormGroup> {\n return this.formBuilder.group({\n percentage: new FormControl(\n { value: p.percentage, disabled: readOnly },\n {\n nonNullable: true,\n validators: [\n Validators.required,\n Validators.min(0),\n Validators.max(100),\n Validators.pattern(percentageRegex),\n ],\n }\n ),\n value: new FormControl<SettingValueType | null>(\n { value: p.value, disabled: readOnly },\n {\n validators: [Validators.required, ...this.getValidatorsForSettingType(settingType, featureFlagLimitations)],\n nonNullable: true,\n }\n ),\n valueDisabled: new FormControl<SettingValueType | null>(\n { value: p.value, disabled: true }, // For percentage item value\n { nonNullable: true }\n ),\n });\n }\n\n createEmptyPercentageItemFormGroup(\n percentage: number,\n readOnly: boolean,\n settingType: SettingType,\n featureFlagLimitations: FeatureFlagLimitations\n ): FormGroup<PercentageItemFormGroup> {\n return this.formBuilder.group({\n percentage: new FormControl(\n { value: percentage, disabled: readOnly },\n {\n nonNullable: true,\n validators: [\n Validators.required,\n Validators.min(0),\n Validators.max(100),\n Validators.pattern(percentageRegex),\n ],\n }\n ),\n value: new FormControl<SettingValueType | null>(\n { value: null, disabled: readOnly },\n {\n validators: [Validators.required, ...this.getValidatorsForSettingType(settingType, featureFlagLimitations)],\n nonNullable: true,\n }\n ),\n valueDisabled: new FormControl<SettingValueType | null>(\n { value: null, disabled: true }, // For percentage item value\n { nonNullable: true }\n ),\n });\n }\n\n createRolloutRuleFormGroup(\n r: RolloutRuleModel,\n readOnly: boolean,\n settingType: SettingType,\n featureFlagLimitations: FeatureFlagLimitations\n ): FormGroup<RolloutRuleFormGroup> {\n if (r.comparator) {\n return this.formBuilder.group<RolloutRuleFormGroup>({\n type: new FormControl({ value: 0, disabled: true }, { nonNullable: true }),\n comparisonAttribute: new FormControl(\n { value: r.comparisonAttribute!, disabled: readOnly },\n { validators: [Validators.required, Validators.maxLength(1000)], nonNullable: true }\n ),\n comparator: new FormControl(\n { value: r.comparator, disabled: readOnly },\n { validators: [Validators.required], nonNullable: true }\n ),\n comparisonValue: new FormControl(\n { value: r.comparisonValue!, disabled: readOnly },\n { validators: this.getComparisonValueValidators(r.comparator, featureFlagLimitations), nonNullable: true }\n ),\n value: new FormControl(\n { value: r.value, disabled: readOnly },\n { validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations), nonNullable: true }\n ),\n });\n } else if (r.segmentComparator) {\n return this.formBuilder.group<RolloutRuleFormGroup>({\n type: new FormControl({ value: 1, disabled: true }, { nonNullable: true }),\n segmentComparator: new FormControl(\n { value: r.segmentComparator, disabled: readOnly },\n { validators: [Validators.required], nonNullable: true }\n ),\n segmentId: new FormControl(\n { value: r.segmentId!, disabled: readOnly },\n { validators: [Validators.required], nonNullable: true }\n ),\n value: new FormControl(\n { value: r.value, disabled: readOnly },\n { validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations), nonNullable: true }\n ),\n });\n } else {\n throw new Error(\"Invalid rollout rule\");\n }\n }\n\n getValidatorsForSettingType(settingType: SettingType, featureFlagLimitations: FeatureFlagLimitations): ValidatorFn[] {\n switch (settingType) {\n case SettingType.Int:\n return [\n Validators.required,\n Validators.min(-2147483648),\n Validators.max(2147483647),\n Validators.pattern(wholeNumberRegex),\n ];\n case SettingType.Double:\n return [Validators.required, Validators.min(-Number.MAX_VALUE), Validators.max(Number.MAX_VALUE)];\n case SettingType.String:\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxStringFlagValueLength)];\n case SettingType.Boolean:\n return [Validators.required];\n default:\n return [];\n }\n }\n\n getComparisonValueValidators(\n comparator: RolloutRuleComparator,\n featureFlagLimitations: FeatureFlagLimitations\n ): ValidatorFn[] {\n switch (comparator) {\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 return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength)];\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n return [\n Validators.required,\n validateSemVerList,\n Validators.maxLength(featureFlagLimitations.maxComparisonValueLength),\n ];\n case RolloutRuleComparator.SemVerLessOrEquals:\n case RolloutRuleComparator.SemVerLess:\n case RolloutRuleComparator.SemVerGreater:\n case RolloutRuleComparator.SemVerGreaterOrEquals:\n return [\n Validators.required,\n validateSemVer,\n Validators.maxLength(featureFlagLimitations.maxComparisonValueLength),\n ];\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 [Validators.required, Validators.min(-Number.MAX_VALUE), Validators.max(Number.MAX_VALUE)];\n default:\n return [Validators.required];\n }\n }\n\n private getAllRolloutRules(settingValues: SettingValueModel[]): RolloutRuleModel[] {\n const rolloutRules = settingValues.map(cv => cv.rolloutRules);\n return rolloutRules.length === 0 ? [] : rolloutRules.reduce((a, b) => a.concat(b), []);\n }\n\n private getComparisonAttributes(rolloutRules: RolloutRuleModel[]): string[] {\n if (rolloutRules.length > 0) {\n const currentComparisonAttributes = rolloutRules\n .filter(r => r.comparisonAttribute)\n .map(r => r.comparisonAttribute) as string[];\n\n const defaultComparisonAttributes = [\"Identifier\", \"Email\", \"Country\"];\n const comparisonAttributes = currentComparisonAttributes.filter(c => !defaultComparisonAttributes.includes(c));\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, comparisonValue: string) {\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 getRawValues(formGroup: FormGroup<SettingValuesFormGroup>) {\n return formGroup.controls.settingValues.controls.map(v => this.getRawValue(v));\n }\n\n getRawValue(formGroup: FormGroup<SettingValueFormGroup>) {\n return {\n value: formGroup.controls.value.value!,\n rolloutPercentageItems: formGroup.controls.rolloutPercentageItems?.controls.map(i => ({\n percentage: i.controls.percentage.value,\n value: i.controls.value.value! })),\n rolloutRules: formGroup.controls.rolloutRules?.controls.map(r => ({\n comparisonAttribute: r.controls.comparisonAttribute?.value,\n comparator: r.controls.comparator?.value,\n comparisonValue: r.controls.comparisonValue?.value,\n segmentId: r.controls.segmentId?.value,\n segmentComparator: r.controls.segmentComparator?.value,\n value: r.controls.value.value!,\n })),\n };\n }\n}\n","import { CloseScrollStrategy, Overlay, OVERLAY_DEFAULT_CONFIG } from \"@angular/cdk/overlay\";\nimport { DatePipe } from \"@angular/common\";\nimport { InjectionToken, Provider } from \"@angular/core\";\nimport { MAT_AUTOCOMPLETE_SCROLL_STRATEGY } from \"@angular/material/autocomplete\";\nimport { MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS } from \"@angular/material/button-toggle\";\nimport { MAT_DATEPICKER_SCROLL_STRATEGY } from \"@angular/material/datepicker\";\nimport { MatDialogRef } from \"@angular/material/dialog\";\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from \"@angular/material/form-field\";\nimport { MAT_MENU_SCROLL_STRATEGY } from \"@angular/material/menu\";\nimport { MAT_SELECT_CONFIG, MAT_SELECT_SCROLL_STRATEGY } from \"@angular/material/select\";\nimport { MAT_TIMEPICKER_SCROLL_STRATEGY } from \"@angular/material/timepicker\";\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MAT_TOOLTIP_SCROLL_STRATEGY } from \"@angular/material/tooltip\";\nimport { PublicApiService } from \"./_services\";\nimport { MessagingService } from \"./_services/messaging.service\";\nimport { SettingListFormHelper } from \"./_services/setting-list-form-helper\";\nimport { ThemeService } from \"./_services/theme.service\";\nimport { AppDateAdapter } from \"./bootstrap\";\nimport { IConfigCatPublicApiConfiguration } from \"./configuration\";\n\nconst closeScrollStrategyFactory = (overlay: Overlay): (() => CloseScrollStrategy) => {\n return () => overlay.scrollStrategies.close();\n};\n\nexport function provideConfigCatPublicApiUi(): Provider[] {\n return [\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: { floatLabel: \"always\" },\n },\n {\n provide: MAT_SELECT_CONFIG,\n useValue: {\n overlayPanelClass: \"select-overlay-panel\",\n },\n },\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: { disableTooltipInteractivity: true },\n },\n {\n // There are weird issues with tooltips. If the tooltip is on a mat select, and the you open the mat select\n // and move your mouse outside the browser, and come back, the overlay popover causes the tooltip to be shown everywhere.\n // Weird. Turning off the usePopover fixes the issue.\n provide: OVERLAY_DEFAULT_CONFIG,\n useValue: { usePopover: false },\n },\n { provide: MAT_TOOLTIP_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MAT_MENU_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MAT_SELECT_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MAT_DATEPICKER_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MAT_TIMEPICKER_SCROLL_STRATEGY, useFactory: closeScrollStrategyFactory, deps: [Overlay] },\n { provide: MatDialogRef, useValue: {} },\n {\n provide: MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS,\n useValue: { hideSingleSelectionIndicator: true, hideMultipleSelectionIndicator: true },\n },\n { provide: DatePipe },\n AppDateAdapter,\n MessagingService,\n ThemeService,\n PublicApiService,\n SettingListFormHelper,\n ];\n}\n\nexport const CONFIGCAT_PUBLICAPI_UI_CONFIGURATION = new InjectionToken<IConfigCatPublicApiConfiguration>(\"\");\n","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 @HostListener(\"blur\", [\"$event\"])\n onChange($event: Event) {\n const target = $event.target as HTMLInputElement;\n if (target.type === \"number\") {\n const value = target.value.trim() !== \"\" ? Number(target.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.toString();\n }\n }\n }\n}\n","import { Component, inject, input } from \"@angular/core\";\nimport { PublicApiService } from \"../_services/public-api.service\";\n\n@Component({\n selector: \"app-base\",\n template: \"<div></div>\",\n})\nexport class BaseComponent {\n private readonly publicApiService = inject(PublicApiService);\n\n readonly basePath = input<string | null>(null);\n readonly basicAuthUsername = input<string | null>(null);\n readonly basicAuthPassword = input<string | null>(null);\n\n protected createProductsService() {\n return this.publicApiService.createProductsService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createConfigsService() {\n return this.publicApiService.createConfigsService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createEnvironmentsService() {\n return this.publicApiService.createEnvironmentsService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createSettingsService() {\n return this.publicApiService.createSettingsService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createSettingValuesService() {\n return this.publicApiService.createSettingValuesService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createSettingValuesV2Service() {\n return this.publicApiService.createSettingValuesV2Service(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createSegmentsService() {\n return this.publicApiService.createSegmentsService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected createOrganizationService() {\n return this.publicApiService.createOrganizationService(\n this.basicAuthUsername(),\n this.basicAuthPassword(),\n this.basePath()\n );\n }\n\n protected getDashboardBasePath() {\n return this.publicApiService.getDashboardBasePath();\n }\n}\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { Router, UrlTree } from \"@angular/router\";\nimport { EvaluationVersion } from \"ng-configcat-publicapi\";\nimport { PublicApiService } from \"../../_services\";\n\nexport interface ConcurrentDeleteDialogComponentData {\n organizationId: string;\n productId: string;\n configId: string;\n environmentId: string;\n evaluationVersion: EvaluationVersion;\n}\n@Component({\n selector: \"app-concurrent-delete-dialog\",\n templateUrl: \"./concurrent-delete-dialog.component.html\",\n styleUrls: [\"./concurrent-delete-dialog.component.scss\"],\n imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, MatButton, MatDialogClose],\n})\nexport class ConcurrentDeleteDialogComponent {\n dialogRef = inject<MatDialogRef<ConcurrentDeleteDialogComponent, string>>(MatDialogRef);\n data = inject<ConcurrentDeleteDialogComponentData>(MAT_DIALOG_DATA);\n private readonly publicApiService = inject(PublicApiService);\n private readonly router = inject(Router);\n\n close() {\n this.dialogRef.close(\"ok\");\n }\n\n openHistory(): string {\n let urlTree: UrlTree;\n if (this.data.evaluationVersion === EvaluationVersion.V1) {\n urlTree = this.router.createUrlTree([\n \"/\",\n this.data.productId,\n this.data.configId,\n this.data.environmentId,\n \"history\",\n ]);\n } else {\n urlTree = this.router.createUrlTree([\n \"/v2\",\n this.data.organizationId,\n this.data.productId,\n this.data.configId,\n this.data.environmentId,\n \"history\",\n ]);\n }\n return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);\n }\n}\n","<h1 mat-dialog-title>There was a conflict while trying to save your feature flag</h1>\n<div mat-dialog-content>\n <p>Seems like the feature flag or setting was deleted by someone else while you were editing it.</p>\n <p>Here's what happened:</p>\n <ul>\n <li>The deleted feature flag was not updated, those edits are lost.</li>\n </ul>\n <p>\n See the\n <a target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"openHistory()\" [mat-dialog-close]>audit log</a>\n for more details.\n </p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"close()\">OK</button>\n</div>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { CdkTextareaAutosize } from \"@angular/cdk/text-field\";\nimport { Component, inject, OnInit } from \"@angular/core\";\nimport { FormControl, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatDialogActions, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { nonEmptyStringValidator } from \"../../_services/custom-validators\";\n\nexport interface ReasonDialogComponentResult {\n button: string;\n reason?: string;\n}\n\n@Component({\n selector: \"app-reason-dialog\",\n templateUrl: \"./reason-dialog.component.html\",\n styleUrls: [\"./reason-dialog.component.scss\"],\n imports: [\n MatDialogTitle,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n CdkScrollable,\n MatDialogContent,\n MatFormField,\n MatLabel,\n MatInput,\n CdkTextareaAutosize,\n MatError,\n MatDialogActions,\n MatButton,\n ],\n})\nexport class ReasonDialogComponent implements OnInit {\n dialogRef = inject<MatDialogRef<ReasonDialogComponent, ReasonDialogComponentResult>>(MatDialogRef);\n private readonly formBuilder = inject(NonNullableFormBuilder);\n\n formGroup = this.formBuilder.group({\n reason: new FormControl(\"\", {\n validators: [nonEmptyStringValidator, Validators.maxLength(1000)],\n nonNullable: true,\n }),\n });\n\n ngOnInit() {\n this.formGroup.reset();\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\n matInput\n formControlName=\"reason\"\n name=\"reason\"\n placeholder=\"I'm changing the values because...\"\n rows=\"3\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"></textarea>\n @if (formGroup.controls.reason.invalid) {\n <mat-error>The field is required.</mat-error>\n }\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>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Directive, DOCUMENT, ElementRef, HostListener, inject, input } from \"@angular/core\";\n\ndeclare global {\n interface Window {\n clipboardData:\n | {\n getData: (format: string) => string;\n }\n | undefined;\n }\n}\n\n@Directive({ selector: \"[appDigitOnly]\" })\nexport class DigitOnlyDirective {\n el = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n\n private hasDecimalPoint = false;\n private hasNegativeSign = false;\n private readonly navigationKeys = [\n \"Backspace\",\n \"Delete\",\n \"Tab\",\n \"Escape\",\n \"Enter\",\n \"Home\",\n \"End\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Clear\",\n \"Copy\",\n \"Paste\",\n ];\n\n readonly digitOnlyDecimal = input(false);\n readonly digitOnlyDecimalSeparator = input(\".\");\n readonly digitOnlyAllowNegatives = input(false);\n readonly digitOnlyAllowPaste = input(true);\n readonly digitOnlyNegativeSign = input(\"-\");\n inputElement: HTMLInputElement;\n digitOnlyMin = -Infinity;\n digitOnlyMax = Infinity;\n\n constructor() {\n const el = this.el;\n\n this.inputElement = el.nativeElement as HTMLInputElement;\n }\n\n @HostListener(\"beforeinput\", [\"$event\"])\n onBeforeInput(e: InputEvent): any {\n if (isNaN(Number(e.data))) {\n if (\n e.data === this.digitOnlyDecimalSeparator()\n || (e.data === this.digitOnlyNegativeSign() && this.digitOnlyAllowNegatives())\n ) {\n return; // go on\n }\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n @HostListener(\"keydown\", [\"$event\"])\n onKeyDown(e: KeyboardEvent) {\n if (\n this.navigationKeys.includes(e.key) // Allow: navigation keys: backspace, delete, arrows etc.\n || ((e.key === \"a\" || e.code === \"KeyA\") && e.ctrlKey) // Allow: Ctrl+A\n || ((e.key === \"c\" || e.code === \"KeyC\") && e.ctrlKey) // Allow: Ctrl+C\n || ((e.key === \"v\" || e.code === \"KeyV\") && e.ctrlKey) // Allow: Ctrl+V\n || ((e.key === \"x\" || e.code === \"KeyX\") && e.ctrlKey) // Allow: Ctrl+X\n || ((e.key === \"a\" || e.code === \"KeyA\") && e.metaKey) // Allow: Cmd+A (Mac)\n || ((e.key === \"c\" || e.code === \"KeyC\") && e.metaKey) // Allow: Cmd+C (Mac)\n || ((e.key === \"v\" || e.code === \"KeyV\") && e.metaKey) // Allow: Cmd+V (Mac)\n || ((e.key === \"x\" || e.code === \"KeyX\") && e.metaKey) // Allow: Cmd+X (Mac)\n ) {\n // let it happen, don't do anything\n return;\n }\n\n let newValue = \"\";\n\n const digitOnlyDecimalSeparator = this.digitOnlyDecimalSeparator();\n if (this.digitOnlyDecimal() && e.key === digitOnlyDecimalSeparator) {\n newValue = this.forecastValue(e.key);\n if (newValue.split(digitOnlyDecimalSeparator).length > 2) {\n // has two or more decimal points\n e.preventDefault();\n return;\n } else {\n this.hasDecimalPoint = newValue.includes(digitOnlyDecimalSeparator);\n return; // Allow: only one decimal point\n }\n }\n\n const digitOnlyNegativeSign = this.digitOnlyNegativeSign();\n if (e.key === digitOnlyNegativeSign && this.digitOnlyAllowNegatives()) {\n newValue = this.forecastValue(e.key);\n if (!newValue.startsWith(digitOnlyNegativeSign) || newValue.split(digitOnlyNegativeSign).length > 2) {\n e.preventDefault();\n return;\n } else {\n this.hasNegativeSign = newValue.split(digitOnlyNegativeSign).length > -1;\n return;\n }\n }\n\n // Ensure that it is a number and stop the keypress\n if (e.key === \" \" || isNaN(Number(e.key))) {\n e.preventDefault();\n return;\n }\n\n newValue = newValue || this.forecastValue(e.key);\n\n const newNumber = Number(newValue);\n if (newNumber > this.digitOnlyMax || newNumber < this.digitOnlyMin) {\n e.preventDefault();\n }\n }\n\n @HostListener(\"paste\", [\"$event\"])\n onPaste(event: ClipboardEvent): void {\n if (this.digitOnlyAllowPaste()) {\n let pastedInput = \"\";\n if (this.document.defaultView!.clipboardData) {\n // Browser is IE\n pastedInput = this.document.defaultView!.clipboardData.getData(\"text\");\n } else if (event.clipboardData?.getData) {\n // Other browsers\n pastedInput = event.clipboardData.getData(\"text/plain\");\n }\n\n this.pasteData(pastedInput);\n event.preventDefault();\n } else {\n // this prevents the paste\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n @HostListener(\"drop\", [\"$event\"])\n onDrop(event: DragEvent): void {\n const textData = event.dataTransfer?.getData(\"text\") ?? \"\";\n this.inputElement.focus();\n this.pasteData(textData);\n event.preventDefault();\n }\n\n private pasteData(pastedContent: string): void {\n const sanitizedContent = this.sanitizeInput(pastedContent);\n const digitOnlyNegativeSign = this.digitOnlyNegativeSign();\n if (\n sanitizedContent.includes(digitOnlyNegativeSign)\n && this.hasNegativeSign\n && !this.getSelection().includes(digitOnlyNegativeSign)\n ) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-deprecated, sonarjs/deprecation\n const pasted = document.execCommand(\"insertText\", false, sanitizedContent);\n if (!pasted) {\n if (this.inputElement.setRangeText) {\n const { selectionStart: start, selectionEnd: end } = this.inputElement;\n this.inputElement.setRangeText(sanitizedContent, start ?? 0, end ?? 0, \"end\");\n // Angular's Reactive Form relies on \"input\" event, but on Firefox, the setRangeText method doesn't trigger it\n // so we have to trigger it ourself.\n if (typeof (window as Record<string, any>)[\"InstallTrigger\"] !== \"undefined\") {\n this.inputElement.dispatchEvent(new Event(\"input\", { cancelable: true }));\n }\n } else {\n // Browser does not support setRangeText, e.g. IE\n this.insertAtCursor(this.inputElement, sanitizedContent);\n }\n }\n if (this.digitOnlyDecimal()) {\n this.hasDecimalPoint = this.inputElement.value.includes(this.digitOnlyDecimalSeparator());\n }\n this.hasNegativeSign = this.inputElement.value.includes(digitOnlyNegativeSign);\n }\n\n // The following 2 methods were added from the below article for browsers that do not support setRangeText\n // https://stackoverflow.com/questions/11076975/how-to-insert-text-into-the-textarea-at-the-current-cursor-position\n private insertAtCursor(myField: HTMLInputElement, myValue: string): void {\n const startPos = myField.selectionStart ?? 0;\n const endPos = myField.selectionEnd ?? 0;\n\n myField.value =\n myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);\n\n const pos = startPos + myValue.length;\n myField.focus();\n myField.setSelectionRange(pos, pos);\n\n this.triggerEvent(myField, \"input\");\n }\n\n private triggerEvent(el: HTMLInputElement, type: string): void {\n if (\"createEvent\" in document) {\n // modern browsers, IE9+\n const e = document.createEvent(\"HTMLEvents\");\n // eslint-disable-next-line @typescript-eslint/no-deprecated, sonarjs/deprecation\n e.initEvent(type, false, true);\n el.dispatchEvent(e);\n }\n }\n // end stack overflow code\n\n private sanitizeInput(input: string): string {\n let result = \"\";\n let regex: RegExp;\n if (this.digitOnlyDecimal() && this.isValidDecimal(input)) {\n regex = new RegExp(`${this.getNegativeSignRegExp()}[^0-9${this.digitOnlyDecimalSeparator()}]`, \"g\");\n } else {\n regex = new RegExp(`${this.getNegativeSignRegExp()}[^0-9]`, \"g\");\n }\n result = input.replace(regex, \"\");\n\n const maxLength = this.inputElement.maxLength;\n if (maxLength > 0) {\n // the input element has maxLength limit\n const allowedLength =\n maxLength - this.inputElement.value.length + (result.includes(this.digitOnlyNegativeSign()) ? 1 : 0);\n result = allowedLength > 0 ? result.substring(0, allowedLength) : \"\";\n }\n return result;\n }\n\n private getNegativeSignRegExp(): string {\n const digitOnlyNegativeSign = this.digitOnlyNegativeSign();\n return this.digitOnlyAllowNegatives()\n && (!this.hasNegativeSign || this.getSelection().includes(digitOnlyNegativeSign))\n ? `(?!^${digitOnlyNegativeSign})`\n : \"\";\n }\n\n private isValidDecimal(string: string): boolean {\n if (!this.hasDecimalPoint) {\n return string.split(this.digitOnlyDecimalSeparator()).length <= 2;\n } else {\n // the input element already has a decimal separator\n const selectedText = this.getSelection();\n if (selectedText.includes(this.digitOnlyDecimalSeparator())) {\n return string.split(this.digitOnlyDecimalSeparator()).length <= 2;\n } else {\n return !string.includes(this.digitOnlyDecimalSeparator());\n }\n }\n }\n\n private getSelection(): string {\n return this.inputElement.value.substring(\n this.inputElement.selectionStart ?? 0,\n this.inputElement.selectionEnd ?? 0\n );\n }\n\n private forecastValue(key: string): string {\n const selectionStart = this.inputElement.selectionStart ?? 0;\n const selectionEnd = this.inputElement.selectionEnd ?? 0;\n const oldValue = this.inputElement.value;\n return oldValue.substring(0, selectionStart) + key + oldValue.substring(selectionEnd);\n }\n}\n","import { AfterContentInit, Directive, ElementRef, inject, input } from \"@angular/core\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[focus]\",\n})\nexport class AutofocusDirective implements AfterContentInit {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\n\n readonly isFocused = input(true);\n\n ngAfterContentInit() {\n if (this.isFocused()) {\n setTimeout(() => {\n this.host.nativeElement.focus();\n }, 200);\n }\n }\n}\n","// Unfortunately, ng-packagr couldn't find the typing by default, so we had to explicitly do it.\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path=\"../_types/ace.d.ts\" />\n\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n OnDestroy,\n OnInit,\n output,\n viewChild,\n} from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { Ace, config, edit } from \"ace-builds/src-min-noconflict/ace\";\nimport \"ace-builds/src-noconflict/mode-json\";\nimport \"ace-builds/src-noconflict/theme-tomorrow\";\nimport \"ace-builds/src-noconflict/theme-github_dark\";\nimport { ThemeService } from \"../_services/theme.service\";\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 private readonly themeService = inject(ThemeService);\n private aceEditor?: Ace.Editor;\n private onChangeDisabled = false;\n private onChangeModel?: (value: string | null) => void;\n private _value = \"\";\n\n readonly editor = viewChild<ElementRef<HTMLElement>>(\"aceEditor\");\n\n readonly value = model<string | null>(null);\n\n readonly valueSetEffect = effect(() => {\n const checked = this.transformBoundValue(this.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 readonly readOnly = input<boolean>(false);\n\n readonly valueChange = output<string>();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onChange = output<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: this.themeService.isDark() ? \"ace/theme/github_dark\" : \"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: string) {\n this.onChangeDisabled = true;\n this.aceEditor!.setValue(this.formatValue(value), -1);\n this.onChangeDisabled = false;\n }\n\n private formatValue(value: string): 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: string) {\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): unknown {\n try {\n const parsed = JSON.parse(value) as unknown;\n if (parsed === Infinity) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n }\n\n private transformBoundValue(value: string): string {\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n return value;\n }\n\n // ControlValueAccessor\n writeValue(value: string) {\n this.value.set(value);\n }\n\n // ControlValueAccessor\n registerOnChange(fn: (value: string | null) => void) {\n this.onChangeModel = fn;\n }\n\n // ControlValueAccessor\n registerOnTouched() {\n /* unused */\n }\n}\n","<div #aceEditor class=\"ace-editor-container\"></div>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { CdkTextareaAutosize } from \"@angular/cdk/text-field\";\nimport { Component, DestroyRef, inject, OnInit } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport {\n FormArray,\n FormControl,\n FormGroup,\n FormsModule,\n NonNullableFormBuilder,\n ReactiveFormsModule,\n} from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent } from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatHint } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { AutofocusDirective } from \"../../_directives/autofocus.directive\";\nimport { AceEditorComponent } from \"../../ace-editor/ace-editor.component\";\nimport { FormHelper } from \"../../bootstrap\";\n\nexport interface PopoutFormGroup {\n values: FormArray<FormControl>;\n}\n\nexport interface PopOutEditorComponentData {\n multiline?: boolean;\n control: FormControl<string | null>;\n maxValueLength: number;\n}\n\n@Component({\n selector: \"app-popout-editor\",\n templateUrl: \"./popout-editor.component.html\",\n styleUrls: [\"./popout-editor.component.scss\"],\n imports: [\n CdkScrollable,\n MatDialogContent,\n MatButtonToggleGroup,\n FormsModule,\n RxReactiveFormsModule,\n MatButtonToggle,\n MatFormField,\n MatInput,\n CdkTextareaAutosize,\n AutofocusDirective,\n ReactiveFormsModule,\n MatError,\n MatHint,\n AceEditorComponent,\n MatIconButton,\n MatTooltip,\n MatIcon,\n MatButton,\n MatDialogActions,\n MatDialogClose,\n ],\n})\nexport class PopOutEditorComponent implements OnInit {\n private readonly formBuilder = inject(NonNullableFormBuilder);\n data = inject<PopOutEditorComponentData>(MAT_DIALOG_DATA);\n private readonly destroyRef = inject(DestroyRef);\n\n formGroup!: FormGroup<PopoutFormGroup>;\n formHelper = FormHelper;\n jsonData!: string;\n format = \"text\";\n readOnly!: boolean;\n\n ngOnInit(): void {\n this.readOnly = this.data.control.disabled;\n if (this.data.multiline) {\n this.buildFormGroup();\n } else {\n this.jsonData = this.data.control.value ?? \"\";\n this.data.control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.data.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.data.control.markAsDirty();\n this.data.control.markAsTouched();\n if (this.jsonData !== value) {\n this.jsonData = value ?? \"\";\n }\n });\n }\n }\n\n onJsonChanged(value: string) {\n this.data.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.data.control.updateValueAndValidity();\n this.data.control.markAsTouched();\n }\n\n buildFormGroup() {\n const value = this.data.control.value ? this.data.control.value : \"\";\n const list = value\n .split(\",\")\n .filter(v => !!v);\n if (!list.length) {\n list.push(\"\");\n }\n this.formGroup = this.formBuilder.group({\n values: this.formBuilder.array(\n list.map(v => this.formBuilder.control({ value: v, disabled: this.data.control.disabled }))\n ),\n });\n this.formGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(formGroupValue => {\n this.data.control.setValue(formGroupValue.values?.filter(v => !!v).join(\",\") ?? \"\", {\n onlySelf: true,\n emitEvent: false,\n emitModelToViewChange: true,\n });\n this.data.control.updateValueAndValidity();\n this.data.control.markAsDirty();\n });\n }\n\n add() {\n this.formGroup.controls.values.push(this.formBuilder.control(\"\"));\n }\n\n remove(index: number) {\n this.formGroup.controls.values.removeAt(index);\n }\n}\n","<div mat-dialog-content class=\"container\">\n @if (!data.multiline) {\n <div>\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 @if (format === \"text\") {\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea\n matInput\n autofocus\n focus\n rows=\"17\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"26\"\n [formControl]=\"data.control\"></textarea>\n @if (data.control.invalid) {\n <mat-error>\n {{ formHelper.getErrorMessage(data.control) }}\n </mat-error>\n }\n @if (data.maxValueLength && data.maxValueLength - (data.control.value?.length ?? 0) > -1) {\n <mat-hint>\n Remaining characters:\n {{ data.maxValueLength - (data.control.value?.length ?? 0) }}\n </mat-hint>\n }\n </mat-form-field>\n } @else if (format === \"json\") {\n <div class=\"editor-container\">\n <app-ace-editor [readOnly]=\"readOnly\" [(value)]=\"jsonData\" (onChange)=\"onJsonChanged($event)\" />\n @if (data.control.invalid) {\n <span class=\"error mat-mdc-form-field-error\">\n {{ formHelper.getErrorMessage(data.control) }}\n </span>\n }\n </div>\n }\n </div>\n } @else {\n <div [formGroup]=\"formGroup\">\n @for (valueControl of formGroup.controls.values.controls; track $index; let i = $index) {\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\">\n <textarea\n matInput\n autofocus\n focus\n cdkTextareaAutosize\n cdkAutosizeMaxRows=\"6\"\n rows=\"1\"\n [formControl]=\"valueControl\"></textarea>\n </mat-form-field>\n @if (!readOnly) {\n <button\n class=\"action-icon-button no-density-mat-icon-button\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove item\"\n (click)=\"remove(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n }\n @if (!readOnly) {\n <button mat-stroked-button type=\"button\" (click)=\"add()\">\n <mat-icon>add</mat-icon>\n Add item\n </button>\n }\n </div>\n }\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" [mat-dialog-close]>Done</button>\n</div>\n","import { NgClass } from \"@angular/common\";\nimport { Component, inject, input } from \"@angular/core\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { FeatureFlagLimitations, SettingDataModel, SettingType } from \"ng-configcat-publicapi\";\nimport { DigitOnlyDirective } from \"../../../_directives/digit-only.directive\";\nimport { InputDisplayNormalizerDirective } from \"../../../_directives/input-display-normalizer.directive\";\nimport { FeatureFlagValueFormControl } from \"../../../_models/setting-list-form\";\nimport { PopOutEditorComponent, PopOutEditorComponentData } from \"../../../dialogs/popout-editor/popout-editor.component\";\n\n@Component({\n selector: \"app-value\",\n templateUrl: \"./value.component.html\",\n styleUrls: [\"../../../../css/slider.scss\", \"./value.component.scss\"],\n imports: [FormsModule, NgClass, ReactiveFormsModule, RxReactiveFormsModule, MatTooltip, MatIcon, DigitOnlyDirective, InputDisplayNormalizerDirective],\n})\nexport class ValueComponent {\n private readonly dialog = inject(MatDialog);\n\n readonly valueFormControl = input.required<FeatureFlagValueFormControl>();\n\n readonly setting = input.required<SettingDataModel>();\n readonly featureFlagLimitations = input.required<FeatureFlagLimitations>();\n\n SettingType = SettingType;\n\n popOut() {\n this.dialog.open<PopOutEditorComponent, PopOutEditorComponentData>(PopOutEditorComponent, {\n width: \"800px\",\n data: {\n control: this.valueFormControl() as FormControl<string | null>,\n maxValueLength: this.featureFlagLimitations().maxStringFlagValueLength,\n },\n });\n }\n}\n","<div class=\"flex\">\n <div class=\"container\">\n @switch (setting().settingType) {\n @case (SettingType.String) {\n <div class=\"with-validation\">\n @if (valueFormControl().invalid) {\n <span class=\"error\">*</span>\n }\n <input\n type=\"text\"\n placeholder=\"my value\"\n name=\"value\"\n [ngClass]=\"{ invalid: valueFormControl().invalid }\"\n [formControl]=\"valueFormControl()\" />\n <div class=\"expand\" matTooltip=\"Pop-out editor\" (click)=\"popOut()\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n }\n @case (SettingType.Int) {\n <div class=\"with-validation\">\n @if (valueFormControl().invalid) {\n <span class=\"error\">*</span>\n }\n <input\n type=\"number\"\n placeholder=\"42\"\n name=\"value\"\n appDigitOnly\n [digitOnlyAllowNegatives]=\"true\"\n [ngClass]=\"{ invalid: valueFormControl().invalid }\"\n [formControl]=\"valueFormControl()\" />\n </div>\n }\n @case (SettingType.Double) {\n <div class=\"with-validation\">\n @if (valueFormControl().invalid) {\n <span class=\"error\">*</span>\n }\n <input\n type=\"number\"\n placeholder=\"3.14\"\n name=\"value\"\n inputDisplayNormalizer\n [ngClass]=\"{ invalid: valueFormControl().invalid }\"\n [formControl]=\"valueFormControl()\" />\n </div>\n }\n @case (SettingType.Boolean) {\n <div class=\"toggle\">\n <label class=\"switch\">\n <input type=\"checkbox\" name=\"value\" [formControl]=\"valueFormControl()\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n }\n }\n </div>\n @if (setting().settingType === SettingType.Boolean) {\n <div class=\"spacer\"></div>\n }\n</div>\n","import { NgClass } from \"@angular/common\";\nimport { Component, input } from \"@angular/core\";\nimport {\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n} from \"@angular/forms\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { FeatureFlagLimitations, SettingDataModel, SettingType } from \"ng-configcat-publicapi\";\nimport { DigitOnlyDirective } from \"../../../_directives/digit-only.directive\";\nimport { FeatureFlagValueFormControl, PercentageItemFormGroup, SettingValueFormGroup } from \"../../../_models/setting-list-form\";\nimport { ValueComponent } from \"../value/value.component\";\n\n@Component({\n selector: \"app-rollout-percentage-items\",\n templateUrl: \"./rollout-percentage-items.component.html\",\n styleUrls: [\"./rollout-percentage-items.component.scss\"],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatChipSet,\n MatChip,\n DigitOnlyDirective,\n NgClass,\n MatTooltip,\n MatIcon,\n ValueComponent,\n ],\n})\nexport class RolloutPercentageItemsComponent {\n readonly settingModel = input.required<SettingDataModel>();\n readonly formGroup = input.required<FormGroup<SettingValueFormGroup>>();\n public readonly featureFlagLimitations = input.required<FeatureFlagLimitations>();\n readonly readOnly = input(false);\n SettingType = SettingType;\n\n value(rolloutPercentageItem: FormGroup<PercentageItemFormGroup>): FeatureFlagValueFormControl {\n return this.settingModel().settingType === SettingType.Boolean\n ? rolloutPercentageItem.controls.valueDisabled\n : rolloutPercentageItem.controls.value;\n }\n\n percentageChanged(index: number) {\n if (this.formGroup().controls.rolloutPercentageItems.controls[index].controls.percentage.value < 0) {\n this.formGroup().controls.rolloutPercentageItems.controls[index].controls.percentage.setValue(0);\n }\n if (this.formGroup().controls.rolloutPercentageItems.controls[index].controls.percentage.value > 100) {\n this.formGroup().controls.rolloutPercentageItems.controls[index].controls.percentage.setValue(100);\n }\n\n if (this.formGroup().controls.rolloutPercentageItems.controls.length === 2) {\n this.formGroup().controls.rolloutPercentageItems.controls[1 - index].controls.percentage.setValue(\n 100 - this.formGroup().controls.rolloutPercentageItems.controls[index].controls.percentage.value\n );\n }\n\n this.updateSum();\n }\n\n updateSum() {\n if (this.formGroup().controls.rolloutPercentageItems.controls.length === 0) {\n this.formGroup().controls.rolloutPercentageItemsSum.setValue(100);\n } else {\n this.formGroup().controls.rolloutPercentageItemsSum.setValue(\n this.formGroup()\n .controls.rolloutPercentageItems.controls.map(v => v.controls.percentage.value)\n .reduce((a, b) => a + b, 0)\n );\n }\n }\n\n removeRolloutPercentageItem(index: number) {\n this.formGroup().controls.rolloutPercentageItems.removeAt(index);\n this.formGroup().controls.rolloutPercentageItems.markAsDirty();\n this.updateSum();\n }\n\n removeAll() {\n this.formGroup().controls.rolloutPercentageItems.clear();\n this.formGroup().controls.rolloutPercentageItems.markAsDirty();\n this.updateSum();\n }\n\n}\n","<div class=\"percentage-wrapper\" [formGroup]=\"formGroup()\">\n @if (formGroup().controls.rolloutRules.controls.length > 0) {\n <div class=\"if\">\n <mat-chip-set>\n <mat-chip class=\"chip\">ELSE IF</mat-chip>\n </mat-chip-set>\n </div>\n }\n <div class=\"grow\">\n @for (rolloutPercentageItem of formGroup().controls.rolloutPercentageItems.controls; track $index; let i = $index) {\n <div class=\"percentage-row flex\">\n <div class=\"flex\">\n @if (rolloutPercentageItem.controls.percentage.invalid) {\n <span class=\"attribute-error\">*</span>\n }\n <input\n type=\"number\"\n appDigitOnly\n [ngClass]=\"{ invalid: rolloutPercentageItem.controls.percentage.invalid }\"\n [formControl]=\"rolloutPercentageItem.controls.percentage\"\n (input)=\"percentageChanged(i)\" />\n %\n <span class=\"users\">\n of\n <a href=\"https://configcat.com/docs/V1/advanced/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">\n users\n </a>\n </span>\n </div>\n @if (!readOnly() && formGroup().controls.rolloutPercentageItems.controls.length > 2) {\n <div class=\"delete-option\" matTooltip=\"Remove this % option\" (click)=\"removeRolloutPercentageItem(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </div>\n }\n @if (\n i === formGroup().controls.rolloutPercentageItems.controls.length - 1 &&\n formGroup().controls.rolloutPercentageItemsSum.invalid\n ) {\n <span matTooltipPosition=\"above\" matTooltip=\"The sum of percentages must be equal to 100.\">\n <mat-icon color=\"warn\">error_outline</mat-icon>\n </span>\n }\n <div class=\"value flex\">\n @if (settingModel().settingType !== SettingType.Boolean) {\n <span class=\"value-name\">Served value:</span>\n }\n <app-value\n class=\"served-value\"\n [valueFormControl]=\"value(rolloutPercentageItem)\"\n [setting]=\"settingModel()\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n </div>\n @if (!readOnly()) {\n <div class=\"delete\" matTooltip=\"Remove % options\" (click)=\"removeAll()\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { AfterContentInit, Directive, ElementRef, inject, input } from \"@angular/core\";\n\n@Directive({\n selector: \"[appDeselect]\",\n})\nexport class DeselectDirective implements AfterContentInit {\n private readonly host = inject<ElementRef<HTMLSelectElement>>(ElementRef<HTMLSelectElement>);\n\n readonly selectedItem = input<string>(void 0, { alias: \"appDeselect\" });\n\n ngAfterContentInit() {\n if (!this.selectedItem()) {\n this.host.nativeElement.selectedIndex = -1;\n }\n }\n}\n","import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { NgClass } from \"@angular/common\";\nimport { Component, inject, input } from \"@angular/core\";\nimport {\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n} from \"@angular/forms\";\nimport { MatAutocomplete, MatAutocompleteTrigger } from \"@angular/material/autocomplete\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { FeatureFlagLimitations, RolloutRuleComparator, SegmentComparator, SegmentListModel, SettingDataModel, SettingType } from \"ng-configcat-publicapi\";\nimport { DeselectDirective } from \"../../../_directives/deselect.directive\";\nimport { InputDisplayNormalizerDirective } from \"../../../_directives/input-display-normalizer.directive\";\nimport { RolloutRuleFormGroup, SettingValueFormGroup } from \"../../../_models/setting-list-form\";\nimport { FormHelper } from \"../../../_services/form-helper\";\nimport { SettingListFormHelper } from \"../../../_services/setting-list-form-helper\";\nimport { PopOutEditorComponent, PopOutEditorComponentData } from \"../../../dialogs/popout-editor/popout-editor.component\";\nimport { ValueComponent } from \"../value/value.component\";\n\n@Component({\n selector: \"app-rollout-rules\",\n templateUrl: \"./rollout-rules.component.html\",\n styleUrls: [\"./rollout-rules.component.scss\"],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n MatTooltip,\n MatIcon,\n MatChipSet,\n MatChip,\n MatInput,\n MatAutocompleteTrigger,\n NgClass,\n MatAutocomplete,\n MatOption,\n InputDisplayNormalizerDirective,\n DeselectDirective,\n ValueComponent,\n ],\n})\nexport class RolloutRulesComponent {\n private readonly dialog = inject(MatDialog);\n private readonly settingListFormHelper = inject(SettingListFormHelper);\n readonly featureFlagLimitations = input.required<FeatureFlagLimitations>();\n readonly formGroup = input.required<FormGroup<SettingValueFormGroup>>();\n readonly settingModel = input.required<SettingDataModel>();\n readonly readOnly = input(false);\n readonly segments = input.required<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 comparisonAttributes(): string[] {\n return this.formGroup().root.get(\"comparisonAttributes\")!.value as string[];\n }\n\n removeRule(index: number) {\n this.formGroup().controls.rolloutRules.removeAt(index);\n this.formGroup().controls.rolloutRules.markAsDirty();\n }\n\n onDrop(event: CdkDragDrop<FormGroup<RolloutRuleFormGroup>[]>) {\n const rolloutRules = this.formGroup().controls.rolloutRules.controls;\n moveItemInArray(rolloutRules, event.previousIndex, event.currentIndex);\n this.formGroup().markAsDirty();\n }\n\n attributeChanged(eventTarget: EventTarget | null, comparisonAttribute: FormControl<string>) {\n const event = (eventTarget as HTMLInputElement).value;\n if (this.defaultComparisonAttributes.includes(event)) {\n if (comparisonAttribute.value !== event) {\n comparisonAttribute.setValue(event);\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: FormGroup<RolloutRuleFormGroup>) {\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: FormGroup<RolloutRuleFormGroup>) {\n return this.settingListFormHelper.getComparisonValueType(rolloutRule.controls.comparator!.value);\n }\n\n getInfoClass(rolloutRule: FormGroup<RolloutRuleFormGroup>) {\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: FormGroup<RolloutRuleFormGroup>) {\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: FormGroup<RolloutRuleFormGroup>) {\n const validators = this.settingListFormHelper.getComparisonValueValidators(\n rolloutRule.controls.comparator!.value,\n this.featureFlagLimitations()\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(\n FormHelper.normalizeNumberStoredAsString(rolloutRule.controls.comparisonValue!.value)\n );\n if (oldValue !== rolloutRule.controls.comparisonValue!.value) {\n rolloutRule.controls.comparisonValue!.markAsTouched();\n }\n }\n rolloutRule.controls.comparisonValue!.updateValueAndValidity();\n }\n\n isListType(rolloutRule: FormGroup<RolloutRuleFormGroup>) {\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 popOut(rolloutRule: FormGroup<RolloutRuleFormGroup>) {\n this.dialog.open<PopOutEditorComponent, PopOutEditorComponentData>(PopOutEditorComponent, {\n width: \"700px\",\n data: {\n control: rolloutRule.controls.comparisonValue!,\n multiline: this.isListType(rolloutRule),\n maxValueLength: this.featureFlagLimitations().maxComparisonValueLength,\n },\n });\n }\n\n}\n","<div [formGroup]=\"formGroup()\">\n <div\n cdkDropList\n [cdkDropListDisabled]=\"readOnly()\"\n [cdkDropListData]=\"formGroup().controls.rolloutRules.controls\"\n (cdkDropListDropped)=\"onDrop($event)\">\n @for (rolloutRule of formGroup().controls.rolloutRules.controls; track $index; let i = $index) {\n <div cdkDrag>\n <div class=\"targeting-row\">\n @if (rolloutRule.controls.type.value === 0) {\n <div class=\"fields flex\">\n @if (!readOnly()) {\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n }\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\n href=\"https://configcat.com/docs/V1/advanced/user-object/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"user-link\">\n user's\n </a>\n </div>\n <select\n class=\"targeting-select attribute-select\"\n matTooltip=\"Comparison attribute\"\n matTooltipPosition=\"above\"\n [disabled]=\"readOnly()\"\n (change)=\"attributeChanged($event.target, rolloutRule.controls.comparisonAttribute!)\">\n @for (comparisonAttribute of defaultComparisonAttributes; track $index) {\n <option [selected]=\"comparisonAttribute === rolloutRule.controls.comparisonAttribute!.value\">\n {{ comparisonAttribute }}\n </option>\n }\n <option\n [selected]=\"\n defaultComparisonAttributes.indexOf(rolloutRule.controls.comparisonAttribute!.value) === -1\n \">\n Custom\n </option>\n </select>\n <span\n class=\"attribute-span\"\n matTooltipPosition=\"above\"\n matTooltip=\"Custom user attribute\"\n [hidden]=\"defaultComparisonAttributes.indexOf(rolloutRule.controls.comparisonAttribute!.value) !== -1\">\n @if (rolloutRule.controls.comparisonAttribute!.invalid) {\n <span class=\"attribute-error\">*</span>\n }\n <input\n type=\"text\"\n matInput\n class=\"attribute\"\n placeholder=\"e.g. Role, SubscriptionType\"\n [ngClass]=\"{ invalid: rolloutRule.controls.comparisonAttribute!.invalid }\"\n [matAutocomplete]=\"auto\"\n [formControl]=\"rolloutRule.controls.comparisonAttribute!\" />\n </span>\n <mat-autocomplete #auto=\"matAutocomplete\">\n @for (option of comparisonAttributes(); track $index) {\n <mat-option [value]=\"option\">\n {{ option }}\n </mat-option>\n }\n </mat-autocomplete>\n <div class=\"select-wrapper\">\n <select\n class=\"targeting-select\"\n matTooltip=\"Comparator\"\n matTooltipPosition=\"above\"\n [formControl]=\"rolloutRule.controls.comparator!\"\n (change)=\"comparatorChanged(rolloutRule)\">\n <optgroup label=\"CONFIDENTIAL TEXT\">\n @for (comparator of rolloutRuleComparators.slice(16, 18); track $index) {\n <option [ngValue]=\"comparator.value\">\n {{ comparator.label }}\n </option>\n }\n </optgroup>\n <optgroup label=\"TEXT\">\n @for (comparator of rolloutRuleComparators.slice(0, 4); track $index) {\n <option [ngValue]=\"comparator.value\">\n {{ comparator.label }}\n </option>\n }\n </optgroup>\n <optgroup label=\"SEMANTIC VERSION\">\n @for (comparator of rolloutRuleComparators.slice(4, 10); track $index) {\n <option [ngValue]=\"comparator.value\">\n {{ comparator.label }}\n </option>\n }\n </optgroup>\n <optgroup label=\"NUMBER\">\n @for (comparator of rolloutRuleComparators.slice(10, 16); track $index) {\n <option [ngValue]=\"comparator.value\">\n {{ comparator.label }}\n </option>\n }\n </optgroup>\n </select>\n <div [class]=\"getInfoClass(rolloutRule)\" [matTooltip]=\"getInfoTooltip(rolloutRule)\">\n <a\n href=\"https://configcat.com/docs/V1/advanced/targeting/#comparator\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <mat-icon class=\"icon-transform-rotate\">info</mat-icon>\n </a>\n </div>\n </div>\n <div class=\"comparison-value\">\n @if (rolloutRule.controls.comparisonValue!.invalid) {\n <span class=\"error\">*</span>\n }\n <input\n matTooltip=\"Comparison value\"\n matTooltipPosition=\"above\"\n inputDisplayNormalizer\n [ngClass]=\"{ invalid: rolloutRule.controls.comparisonValue!.invalid }\"\n [formControl]=\"rolloutRule.controls.comparisonValue!\"\n [type]=\"getComparisonValueType(rolloutRule)\"\n [placeholder]=\"getPlaceHolder(rolloutRule)\" />\n @if (getComparisonValueType(rolloutRule) === \"text\") {\n <div\n class=\"expand\"\n matTooltip=\"Pop-out editor\"\n matTooltipPosition=\"above\"\n (click)=\"popOut(rolloutRule)\">\n <mat-icon>height</mat-icon>\n </div>\n }\n </div>\n @if (!readOnly()) {\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" (click)=\"removeRule(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </div>\n }\n </div>\n }\n @if (rolloutRule.controls.type.value === 1) {\n <div class=\"fields flex\">\n @if (!readOnly()) {\n <div class=\"drag-handle\" cdkDragHandle matTooltipPosition=\"above\" matTooltip=\"Drag here to reorder\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n }\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\n href=\"https://configcat.com/docs/V1/advanced/user-object/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"user-link\">\n user\n </a>\n </div>\n <div class=\"select-wrapper\">\n <select\n class=\"targeting-select segment-comparator\"\n matTooltip=\"Segment comparator\"\n matTooltipPosition=\"above\"\n [formControl]=\"rolloutRule.controls.segmentComparator!\">\n @for (comparator of segmentComparators; track $index) {\n <option [ngValue]=\"comparator.value\">\n {{ comparator.label }}\n </option>\n }\n </select>\n </div>\n <div class=\"select-wrapper\">\n <div class=\"segment-select-more\">\n @if (rolloutRule.controls.segmentId!.invalid) {\n <span class=\"attribute-error\">*</span>\n }\n <select\n class=\"targeting-select segment-select invalid\"\n matTooltip=\"Segment\"\n matTooltipPosition=\"above\"\n [appDeselect]=\"rolloutRule.controls.segmentId!.value\"\n [formControl]=\"rolloutRule.controls.segmentId!\"\n [ngClass]=\"{ invalid: rolloutRule.controls.segmentId!.invalid }\">\n @for (segment of segments(); track $index) {\n <option [ngValue]=\"segment.segmentId\" [title]=\"segment.description\">\n {{ segment.name }}\n </option>\n } @empty {\n <option disabled>no segments available</option>\n }\n </select>\n </div>\n </div>\n @if (!readOnly()) {\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" (click)=\"removeRule(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </div>\n }\n </div>\n }\n <div class=\"value flex\">\n @if (settingModel().settingType !== SettingType.Boolean) {\n <div class=\"serve\">\n <mat-chip-set>\n <mat-chip class=\"chip\">Serve:</mat-chip>\n </mat-chip-set>\n </div>\n }\n <app-value\n class=\"served-value\"\n [valueFormControl]=\"rolloutRule.controls.value\"\n [setting]=\"settingModel()\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n </div>\n </div>\n </div>\n }\n </div>\n</div>\n","import { Component, inject, input, output } from \"@angular/core\";\nimport {\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n} from \"@angular/forms\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n FeatureFlagLimitations,\n RolloutPercentageItemModel,\n RolloutRuleComparator,\n RolloutRuleModel,\n SegmentComparator,\n SegmentListModel,\n SettingDataModel,\n SettingType,\n SettingValueModel,\n} from \"ng-configcat-publicapi\";\nimport { SettingValueFormGroup } from \"../../_models/setting-list-form\";\nimport { SettingListFormHelper } from \"../../_services/setting-list-form-helper\";\nimport { RolloutPercentageItemsComponent } from \"./rollout-percentage-items/rollout-percentage-items.component\";\nimport { RolloutRulesComponent } from \"./rollout-rules/rollout-rules.component\";\nimport { ValueComponent } from \"./value/value.component\";\n\n@Component({\n selector: \"app-setting\",\n templateUrl: \"./setting.component.html\",\n styleUrls: [\"./setting.component.scss\"],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatTooltip,\n MatIcon,\n RolloutRulesComponent,\n RolloutPercentageItemsComponent,\n MatChipSet,\n MatChip,\n ValueComponent,\n ],\n})\nexport class SettingComponent {\n private readonly formHelper = inject(SettingListFormHelper);\n\n readonly dashboardBasePath = input(\"https://app.configcat.com\");\n readonly productId = input.required<string>();\n readonly environmentId = input.required<string>();\n readonly configId = input.required<string>();\n readonly featureFlagLimitations = input.required<FeatureFlagLimitations>();\n readonly formGroup = input.required<FormGroup<SettingValueFormGroup>>();\n readonly readOnly = input(false);\n readonly canDeleteSetting = input(false);\n readonly deleteSettingText = input(\"Delete setting\");\n readonly showEnvironmentName = input(false);\n readonly segments = input.required<SegmentListModel[]>();\n readonly model = input.required<SettingValueModel>();\n\n readonly deleteSettingRequested = output<{ setting: SettingDataModel }>();\n readonly subscriptionLimitReached = output();\n\n rulesBeingRendered = false;\n\n SettingType = SettingType;\n\n addRolloutRule() {\n const featureFlagLimitations = this.featureFlagLimitations();\n if (this.formGroup().controls.rolloutRules.length >= featureFlagLimitations.maxTargetingRuleCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n\n this.formGroup().controls.rolloutRules.push(\n this.formHelper.createRolloutRuleFormGroup(\n {\n comparisonAttribute: \"Identifier\",\n comparator: RolloutRuleComparator.SensitiveIsOneOf,\n comparisonValue: \"\",\n value: this.model().setting.settingType === SettingType.Boolean ? (false as unknown) : null,\n } as RolloutRuleModel,\n this.readOnly(),\n this.model().setting.settingType,\n featureFlagLimitations\n )\n );\n this.formGroup().controls.rolloutRules.markAsDirty();\n }\n\n addSegmentRolloutRule() {\n const featureFlagLimitations = this.featureFlagLimitations();\n if (this.formGroup().controls.rolloutRules.length >= featureFlagLimitations.maxTargetingRuleCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n\n this.formGroup().controls.rolloutRules.push(\n this.formHelper.createRolloutRuleFormGroup(\n {\n segmentComparator: SegmentComparator.IsIn,\n value: this.model().setting.settingType === SettingType.Boolean ? (false as unknown) : null,\n } as RolloutRuleModel,\n this.readOnly(),\n this.model().setting.settingType,\n featureFlagLimitations\n )\n );\n this.formGroup().controls.rolloutRules.markAsDirty();\n }\n\n removeRolloutRules() {\n this.formGroup().controls.rolloutRules.clear();\n this.formGroup().controls.rolloutRules.markAsDirty();\n }\n\n addRolloutPercentageItem() {\n const featureFlagLimitations = this.featureFlagLimitations();\n if (this.formGroup().controls.rolloutPercentageItems.length >= featureFlagLimitations.maxPercentageOptionCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n\n const model = this.model();\n if (this.formGroup().controls.rolloutPercentageItems.length === 0) {\n switch (model.setting.settingType) {\n case SettingType.Boolean:\n this.formGroup().controls.rolloutPercentageItems.push(\n this.formHelper.createRolloutPercentageItemFormGroup(\n {\n percentage: 0,\n value: true as unknown,\n } as RolloutPercentageItemModel,\n this.readOnly(),\n model.setting.settingType,\n featureFlagLimitations\n )\n );\n this.formGroup().controls.rolloutPercentageItems.push(\n this.formHelper.createRolloutPercentageItemFormGroup(\n {\n percentage: 100,\n value: false as unknown,\n } as RolloutPercentageItemModel,\n this.readOnly(),\n model.setting.settingType,\n featureFlagLimitations\n )\n );\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.formGroup().controls.rolloutPercentageItems.push(\n this.formHelper.createEmptyPercentageItemFormGroup(\n 25,\n this.readOnly(),\n model.setting.settingType,\n featureFlagLimitations\n )\n );\n }\n\n break;\n }\n } else if (model.setting.settingType !== SettingType.Boolean) {\n this.formGroup().controls.rolloutPercentageItems.push(\n this.formHelper.createEmptyPercentageItemFormGroup(\n 0,\n this.readOnly(),\n model.setting.settingType,\n featureFlagLimitations\n )\n );\n }\n\n this.formGroup().controls.rolloutPercentageItems.markAsDirty();\n }\n\n removeRolloutPercentageItems() {\n this.formGroup().controls.rolloutPercentageItems.clear();\n this.formGroup().controls.rolloutPercentageItems.markAsDirty();\n }\n\n deleteSetting() {\n this.deleteSettingRequested.emit({ setting: this.model().setting });\n }\n\n getDashboardUrl() {\n return (\n this.dashboardBasePath()\n + \"/\"\n + this.productId()\n + \"/\"\n + this.configId()\n + \"/\"\n + this.environmentId()\n + \"?settingId=\"\n + this.model().setting.settingId\n );\n }\n}\n","@let settingModel = model();\n\n<div class=\"setting-container\">\n <div class=\"setting-full\" [formGroup]=\"formGroup()\">\n <div class=\"berries\">\n @if (canDeleteSetting()) {\n <div class=\"berry delete\" matTooltip=\"Delete feature flag\" data-robot=\"deleteSetting\" (click)=\"deleteSetting()\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </div>\n }\n </div>\n <div class=\"setting-header flex\">\n <div class=\"setting-name flex\">\n <div class=\"name\" data-robot=\"settingName\">\n {{ settingModel.setting.name }}\n @if (showEnvironmentName()) {\n <span class=\"environment-name\">({{ settingModel.environment.name }})</span>\n }\n </div>\n </div>\n </div>\n <div class=\"setting-content\">\n <div class=\"setting-details\">\n <div class=\"setting-key\">\n <code data-robot=\"settingKey\">{{ settingModel.setting.key }}</code>\n </div>\n @if (settingModel.setting.hint) {\n <span class=\"description\">{{ settingModel.setting.hint }}</span>\n }\n <div class=\"integrations\">\n <a target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"getDashboardUrl()\">Open in ConfigCat</a>\n </div>\n </div>\n\n <div class=\"rules-list\">\n <div class=\"rollout-rules\">\n @if (formGroup().controls.rolloutRules.controls.length !== 0) {\n <app-rollout-rules\n [formGroup]=\"formGroup()\"\n [segments]=\"segments()\"\n [readOnly]=\"readOnly()\"\n [settingModel]=\"settingModel.setting\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n }\n </div>\n\n @if (formGroup().controls.rolloutPercentageItems.controls.length !== 0) {\n <app-rollout-percentage-items\n [formGroup]=\"formGroup()\"\n [readOnly]=\"readOnly()\"\n [settingModel]=\"settingModel.setting\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n }\n\n <div class=\"all-other flex\">\n @if (\n formGroup().controls.rolloutPercentageItems.length === 0 && formGroup().controls.rolloutRules.length !== 0\n ) {\n <div\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 }\n @if (formGroup().controls.rolloutPercentageItems.length !== 0) {\n <div\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 }\n @if (\n formGroup().controls.rolloutPercentageItems.length === 0 && formGroup().controls.rolloutRules.length === 0\n ) {\n <div>\n <mat-chip-set>\n <mat-chip class=\"chip\">To all users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n }\n <app-value\n class=\"served-value\"\n [valueFormControl]=\"formGroup().controls.value\"\n [setting]=\"settingModel.setting\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n </div>\n <div class=\"buttons\">\n @if (!readOnly()) {\n <button type=\"button\" class=\"targeting-button\" (click)=\"addRolloutRule()\">\n {{ formGroup().controls.rolloutRules.length === 0 ? \"Target specific users\" : \"Add new targeting rule\" }}\n </button>\n }\n @if (!readOnly()) {\n <button type=\"button\" class=\"targeting-button\" (click)=\"addSegmentRolloutRule()\">\n {{ formGroup().controls.rolloutRules.length === 0 ? \"Target segment\" : \"Add new segment rule\" }}\n </button>\n }\n @if (!readOnly()) {\n <button\n type=\"button\"\n class=\"targeting-button\"\n [disabled]=\"\n settingModel.setting.settingType === SettingType.Boolean &&\n formGroup().controls.rolloutPercentageItems.length !== 0\n \"\n (click)=\"addRolloutPercentageItem()\">\n {{ formGroup().controls.rolloutPercentageItems.length === 0 ? \"Target % of users\" : \"Add % option\" }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { HttpErrorResponse } from \"@angular/common/http\";\nimport { Component, inject, input, OnChanges, OnDestroy, output } from \"@angular/core\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n\n EvaluationVersion,\n RolloutPercentageItemModel,\n RolloutRuleModel,\n SegmentListModel,\n SettingDataModel,\n UpdateSettingValueModel,\n} from \"ng-configcat-publicapi\";\nimport { forkJoin, Observable, Subscription } from \"rxjs\";\nimport { DeleteSettingModel, SettingValuesModel, UpdateSettingValuesModel } from \"../_models\";\nimport { SettingValuesFormGroup } from \"../_models/setting-list-form\";\nimport { SettingListFormHelper } from \"../_services/setting-list-form-helper\";\nimport { ConfirmationDialogComponent, FormHelper, MessagingService, RerouteDialogComponent } from \"../bootstrap\";\nimport { ConcurrentDeleteDialogComponent, ConcurrentDeleteDialogComponentData } from \"../dialogs/concurrent-delete-dialog/concurrent-delete-dialog.component\";\nimport { ConfirmationDialogData } from \"../dialogs/confirmation-dialog/confirmation-dialog\";\nimport { ReasonDialogComponent, ReasonDialogComponentResult } from \"../dialogs/reason-dialog/reason-dialog.component\";\nimport { SettingComponent } from \"./setting/setting.component\";\n\n@Component({\n selector: \"app-setting-list\",\n templateUrl: \"./setting-list.component.html\",\n styleUrls: [\"./setting-list.component.scss\"],\n imports: [FormsModule, ReactiveFormsModule, RxReactiveFormsModule, SettingComponent, MatButton, MatIcon],\n})\nexport class SettingListComponent implements OnChanges, OnDestroy {\n private readonly formHelper = inject(SettingListFormHelper);\n private readonly dialog = inject(MatDialog);\n private readonly messagingService = inject(MessagingService);\n\n readonly productId = input.required<string>();\n readonly environmentId = input.required<string>();\n readonly configId = input.required<string>();\n readonly dashboardBasePath = input(\"https://app.configcat.com\");\n\n readonly canDeleteSetting = input(false);\n\n readonly onSave = input.required<(value: UpdateSettingValuesModel) => Observable<SettingValuesModel>>();\n readonly loadSettingValues = input.required<() => Observable<SettingValuesModel>>();\n readonly loadSegments = input.required<() => Observable<SegmentListModel[]>>();\n readonly deleteSettingText = input(\"Delete setting\");\n readonly showEnvironmentName = input(false);\n\n readonly loadSucceeded = output<boolean>();\n readonly deleteSettingRequested = output<DeleteSettingModel>();\n readonly formValuesChanged = output();\n readonly saveFailed = output<Error>();\n\n formValuesChangedSubscription!: Subscription | null;\n\n loading = true;\n\n settingValues!: SettingValuesModel;\n segments!: SegmentListModel[];\n formGroup!: FormGroup<SettingValuesFormGroup>;\n\n submitting = false;\n showFeedBackMessage = false;\n readOnly = false;\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({\n next: 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 error: () => {\n this.messagingService.showErrorSnack(\"We could not load your Feature Flags and Settings.\", 60000);\n },\n });\n }\n\n onSubscriptionLimitReached() {\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 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 FormArray;\n }\n\n getSettingValueFormGroups() {\n return this.settingValuesFormArray().controls.map(c => c as FormGroup);\n }\n\n private buildUpdateSettingValuesModel(settingValuesVM: UpdateSettingValueModel[]) {\n return settingValuesVM.map(settingValueVM => {\n return {\n rolloutRules: settingValueVM.rolloutRules?.map(\n rolloutRuleVM =>\n ({\n comparisonAttribute: rolloutRuleVM.comparisonAttribute,\n comparator: rolloutRuleVM.comparator,\n comparisonValue:\n rolloutRuleVM.comparator && rolloutRuleVM.comparisonValue\n ? this.formHelper.normalizeComparisonValue(\n rolloutRuleVM.comparator,\n rolloutRuleVM.comparisonValue\n )\n : null,\n segmentComparator: rolloutRuleVM.segmentComparator,\n segmentId: rolloutRuleVM.segmentId,\n value: rolloutRuleVM.value,\n }) as RolloutRuleModel\n ),\n rolloutPercentageItems: settingValueVM.rolloutPercentageItems?.map(\n rolloutPercentageItemVM =>\n ({\n percentage: rolloutPercentageItemVM.percentage,\n value: rolloutPercentageItemVM.value,\n }) as RolloutPercentageItemModel\n ),\n value: settingValueVM.value,\n } as UpdateSettingValueModel;\n });\n }\n\n submit() {\n if (!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 = {\n settingValues: this.buildUpdateSettingValuesModel(this.formHelper.getRawValues(this.formGroup)),\n knownLastUpdatedAt: this.settingValues.lastUpdatedAt,\n forced: false,\n } as UpdateSettingValuesModel;\n\n if (this.settingValues.reasonRequired) {\n const dialogRef = this.dialog.open<ReasonDialogComponent, never, ReasonDialogComponentResult>(ReasonDialogComponent, {\n width: \"450px\",\n });\n dialogRef.afterClosed().subscribe(result => {\n if (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.updateSettingValues(updateSettingValuesModel);\n }\n\n updateSettingValues(updateSettingValuesModel: UpdateSettingValuesModel) {\n this.onSave()(updateSettingValuesModel).subscribe({\n next: settingValues => {\n this.settingValues = settingValues;\n this.createFormGroup();\n this.submitting = false;\n this.messagingService.showSuccessSnack(\"Settings saved successfully.\", 5000);\n },\n error: (error: Error) => {\n this.submitting = false;\n if (error instanceof HttpErrorResponse && error.status === 400 && FormHelper.getHttpErrorResponseMessage(error, \"Reason\") === \"Reason required\") {\n const dialogRef = this.dialog.open<ReasonDialogComponent, never, ReasonDialogComponentResult>(\n ReasonDialogComponent,\n {\n width: \"450px\",\n }\n );\n dialogRef.afterClosed().subscribe(result => {\n if (result?.button === \"save\" && result.reason) {\n updateSettingValuesModel.reason = result.reason;\n this.updateSettingValues(updateSettingValuesModel);\n }\n });\n return;\n }\n if (\n error instanceof HttpErrorResponse\n && error.status === 404\n ) {\n this.openConcurentDeleteDialog();\n return;\n }\n\n this.formGroup.setErrors({ internalServerError: \"Internal server error\" });\n this.showFeedBackMessage = true;\n this.saveFailed.emit(error);\n },\n });\n }\n\n revert() {\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\n data: {\n title: \"Revert to last saved state?\",\n body: \"All changes will be lost.\",\n yesButtonLabel: \"Revert\",\n cancelButtonLabel: \"No\",\n },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === \"yes\") {\n this.reloadSettingValues();\n }\n });\n }\n\n onDeleteSettingRequested(setting: { setting: SettingDataModel }) {\n this.deleteSettingRequested.emit({\n setting: setting.setting,\n environment: this.settingValues.environment,\n config: this.settingValues.config,\n });\n }\n\n openConcurentDeleteDialog() {\n const dialogRef = this.dialog.open<ConcurrentDeleteDialogComponent, ConcurrentDeleteDialogComponentData, string>(\n ConcurrentDeleteDialogComponent,\n {\n width: \"450px\",\n data: {\n organizationId: \"\",\n productId: this.productId(),\n configId: this.configId(),\n environmentId: this.environmentId(),\n evaluationVersion: EvaluationVersion.V1,\n },\n }\n );\n dialogRef.afterClosed().subscribe(() => {\n this.saveFailed.emit(new Error(\"Concurent Delete Error.\"));\n });\n }\n}\n","@if (!loading) {\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\">\n @for (settingValueFromGroup of formGroup!.controls.settingValues.controls; track $index; let i = $index) {\n <div class=\"wrapper\">\n <div class=\"size-obs\" [style.display]=\"'block'\">\n <div>\n <app-setting\n [formGroup]=\"settingValueFromGroup\"\n [readOnly]=\"readOnly\"\n [canDeleteSetting]=\"canDeleteSetting()\"\n [deleteSettingText]=\"deleteSettingText()\"\n [showEnvironmentName]=\"showEnvironmentName()\"\n [model]=\"settingValues!.settingValues[i]\"\n [segments]=\"segments\"\n [productId]=\"productId()\"\n [configId]=\"configId()\"\n [environmentId]=\"environmentId()\"\n [dashboardBasePath]=\"dashboardBasePath()\"\n [featureFlagLimitations]=\"settingValues!.featureFlagLimitations\"\n (subscriptionLimitReached)=\"onSubscriptionLimitReached()\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" />\n </div>\n </div>\n </div>\n }\n @if (!readOnly && formGroup.dirty) {\n <div class=\"save\">\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [disabled]=\"submitting\">\n <mat-icon>backup</mat-icon>\n <span>Save & publish changes</span>\n </button>\n <button type=\"button\" class=\"revert-button\" mat-stroked-button [disabled]=\"submitting\" (click)=\"revert()\">\n <span>Revert</span>\n </button>\n @if (formGroup.touched && formGroup.invalid && showFeedBackMessage) {\n <div class=\"feedback\">\n @if (formGroup.errors && formGroup.errors[\"internalServerError\"]) {\n <div class=\"error\">\n <span>\n Something went wrong and we could not save your settings. You can try again or\n <a href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact us.</a>\n </span>\n </div>\n }\n @if (!formGroup.errors || !formGroup.errors[\"internalServerError\"]) {\n <div class=\"error\">\n <span>Oh no! A feature flag has invalid or missing data.</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </form>\n}\n","import { Component, input, output } from \"@angular/core\";\nimport { SegmentListModel, SettingFormulaModel, SettingValueModel } from \"ng-configcat-publicapi\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, map } from \"rxjs/operators\";\nimport { DeleteSettingModel, SettingValuesModel, UpdateSettingValuesModel } from \"../_models\";\nimport { BaseComponent } from \"../base/base.component\";\nimport { SettingListComponent } from \"../setting-list/setting-list.component\";\n\n@Component({\n selector: \"app-setting-item\",\n templateUrl: \"./setting-item.component.html\",\n styleUrls: [\"./setting-item.component.scss\"],\n imports: [SettingListComponent],\n})\nexport class SettingItemComponent extends BaseComponent {\n readonly productId = input.required<string>();\n readonly environmentId = input.required<string>();\n readonly configId = input.required<string>();\n readonly settingId = input.required<number>();\n\n readonly canDeleteSetting = input(true);\n readonly deleteSettingText = input(\"Delete setting\");\n readonly showEnvironmentName = input(true);\n\n readonly deleteSettingRequested = output<DeleteSettingModel>();\n\n readonly loadSucceeded = output<boolean>();\n readonly loadFailed = output<Error>();\n readonly saveSucceeded = output<SettingValuesModel>();\n readonly saveFailed = output<Error>();\n\n readonly formValuesChanged = output();\n\n settingValue!: SettingValueModel;\n dashboardBasePath: string;\n\n settingFormulaModel!: SettingFormulaModel;\n\n constructor() {\n super();\n this.dashboardBasePath = this.getDashboardBasePath();\n }\n\n loadSettingValues = (): Observable<SettingValuesModel> => {\n return this.createSettingValuesService()\n .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 featureFlagLimitations: settingValue.featureFlagLimitations,\n } as SettingValuesModel;\n\n return settingValues;\n }),\n catchError((error: Error) => {\n this.loadFailed.emit(error);\n throw error;\n })\n );\n };\n\n itemLoadSucceeded() {\n this.loadSucceeded.emit(true);\n }\n\n itenSaveFailed(error: Error) {\n this.saveFailed.emit(error);\n }\n\n loadSegments = (): Observable<SegmentListModel[]> => {\n return this.createSegmentsService()\n .getSegments(this.productId())\n .pipe(\n map(segments => {\n return segments;\n }),\n catchError((error: Error) => {\n throw 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];\n\n return this.createSettingValuesService()\n .replaceSettingValue(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 featureFlagLimitations: settingValue.featureFlagLimitations,\n } as SettingValuesModel;\n\n this.saveSucceeded.emit(settingValues);\n return settingValues;\n })\n );\n };\n\n onDeleteSettingRequested(setting: DeleteSettingModel) {\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","<app-setting-list\n [canDeleteSetting]=\"canDeleteSetting()\"\n [onSave]=\"handleSave\"\n [loadSettingValues]=\"loadSettingValues\"\n [loadSegments]=\"loadSegments\"\n [deleteSettingText]=\"deleteSettingText()\"\n [showEnvironmentName]=\"showEnvironmentName()\"\n [productId]=\"productId()\"\n [configId]=\"configId()\"\n [environmentId]=\"environmentId()\"\n [dashboardBasePath]=\"dashboardBasePath\"\n (loadSucceeded)=\"itemLoadSucceeded()\"\n (saveFailed)=\"itenSaveFailed($event)\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n (formValuesChanged)=\"onFormValuesChanged()\" />\n","import { Component, inject, input, output } from \"@angular/core\";\nimport { FormControl, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatError, MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { AuthorizationModel } from \"../_models\";\nimport { PublicApiService } from \"../_services\";\nimport { FormHelper } from \"../_services/form-helper\";\n\n@Component({\n selector: \"app-authorization\",\n templateUrl: \"./authorization.component.html\",\n styleUrls: [\"./authorization.component.scss\"],\n imports: [FormsModule, ReactiveFormsModule, RxReactiveFormsModule, MatFormField, MatLabel, MatInput, MatError, MatButton],\n})\nexport class AuthorizationComponent {\n private readonly formBuilder = inject(NonNullableFormBuilder);\n private readonly publicApiService = inject(PublicApiService);\n\n readonly basePath = input(null);\n readonly integrationName = input(\"ConfigCat Feature Flags\");\n readonly authorized = output<AuthorizationModel>();\n readonly authorizationError = output();\n FormHelper = FormHelper;\n\n formGroup = this.formBuilder.group({\n basicAuthUsername: new FormControl<string>(\"\", { validators: [Validators.required], nonNullable: true }),\n basicAuthPassword: new FormControl<string>(\"\", { validators: [Validators.required], nonNullable: true }),\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\n meService.getMe().subscribe({\n next: 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 error: () => {\n this.formGroup.setErrors({ invalidAuthorization: \"Invalid Basic auth user name or password\" });\n this.authorizationError.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 credentials.\n </p>\n <ul>\n <li>\n <a target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"getPublicApiUrl()\">\n Get your Basic Auth user name and password\n </a>\n to access ConfigCat Public API.\n <br />\n <b>Note!</b>\n Your ConfigCat account's email address and password will not work here.\n </li>\n <li>Type your credentials here and click the Authorize button.</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 @if (formGroup.controls.basicAuthUsername.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.basicAuthUsername) }}\n </mat-error>\n }\n </mat-form-field>\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Basic auth password</mat-label>\n <input\n matInput\n placeholder=\"Basic auth password\"\n formControlName=\"basicAuthPassword\"\n type=\"password\"\n autocomplete=\"current-password\" />\n @if (formGroup.controls.basicAuthPassword.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.basicAuthPassword) }}\n </mat-error>\n }\n </mat-form-field>\n <div>\n <button mat-flat-button color=\"primary\" type=\"submit\" class=\"submit\">Authorize</button>\n @if (formGroup.invalid && formGroup.errors && formGroup.errors[\"invalidAuthorization\"]) {\n <mat-error>\n {{ formGroup.errors[\"invalidAuthorization\"] }}\n </mat-error>\n }\n </div>\n </div>\n </div>\n</form>\n","import { Component, input, output } from \"@angular/core\";\nimport { BaseComponent } from \"./base.component\";\n\n@Component({\n selector: \"app-base-select\",\n template: \"<div></div>\",\n})\nexport class BaseSelectComponent extends BaseComponent {\n readonly customDropdown = input<boolean>(false);\n\n readonly dropdownOpened = output<boolean>();\n\n protected openChanged(event: boolean) {\n this.dropdownOpened.emit(event);\n }\n}\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, input, linkedSignal, signal, viewChildren } from \"@angular/core\";\nimport { rxResource } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatFormField, MatLabel, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { tap } from \"rxjs\";\nimport { BaseSelectComponent } from \"../../base/base-select.component\";\n\n@Component({\n selector: \"app-product-select\",\n templateUrl: \"./product-select.component.html\",\n styleUrls: [\"./product-select.component.css\"],\n imports: [\n MatFormField,\n MatLabel,\n MatSelect,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatOption,\n MatTooltip,\n MatDivider,\n NgClass,\n MatIcon,\n MatInput,\n MatSuffix,\n MatIconButton,\n ],\n})\nexport class ProductSelectComponent extends BaseSelectComponent {\n readonly valueFormControl = input.required<FormControl>();\n readonly preSelectedProductId = input<string>();\n\n readonly filterText = signal(\"\");\n readonly tooltips = viewChildren(MatTooltip);\n readonly filteredProducts = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n if (this.products.isLoading() || !this.products.hasValue()) {\n return [];\n }\n return this.products.value().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText) && !s.description?.toLocaleLowerCase().includes(filterText) })\n );\n });\n readonly hasFilteredProduct = computed(() => !!this.filteredProducts().find(f => !f.hidden));\n\n readonly products = rxResource({\n params: () => ({}),\n stream: () => {\n return this.createProductsService()\n .getProducts().pipe(tap((products) => {\n this.valueFormControl().markAsPending();\n if (products.length > 0) {\n let selectedProductId;\n if (this.preSelectedProductId() && products.find(product => product.productId === this.preSelectedProductId())) {\n selectedProductId = this.preSelectedProductId()!;\n } else {\n selectedProductId = products[0].productId;\n }\n this.valueFormControl().setValue(selectedProductId, {\n emitEvent: true,\n emitModelToViewChange: true,\n emitViewToModelChange: true,\n });\n } else {\n this.valueFormControl().setValue(\"\");\n }\n })\n );\n },\n });\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n\n onSelectOpenedChange(opened: boolean) {\n this.openChanged(opened);\n this.clearFilter();\n if (!opened) {\n this.tooltips().forEach(t => t.hide(0));\n }\n }\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Product</mat-label>\n <mat-select\n #productSelect=\"matSelect\"\n placeholder=\"Product\"\n name=\"productValue\"\n [formControl]=\"valueFormControl()\"\n [panelClass]=\"customDropdown() ? 'custom-dropdown-below' : ''\"\n (openedChange)=\"onSelectOpenedChange($event)\">\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter products\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n @for (product of filteredProducts(); track product.productId) {\n <mat-option\n [value]=\"product.productId\"\n [ngClass]=\"{ hidden: product.hidden }\"\n [matTooltip]=\"\n product.description ? `Name: ${product.name}\\nDescription: ${product.description}` : `Name: ${product.name}`\n \"\n [matTooltipDisabled]=\"!productSelect.panelOpen\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\">\n {{ product.name }}\n </mat-option>\n } @empty {\n <mat-option disabled>No product available.</mat-option>\n }\n @if (!hasFilteredProduct()) {\n <mat-option disabled>No product found.</mat-option>\n }\n </mat-select>\n</mat-form-field>\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, forwardRef, input, linkedSignal, signal, viewChildren } from \"@angular/core\";\nimport { rxResource } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatFormField, MatLabel, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { tap } from \"rxjs\";\nimport { BaseSelectComponent } from \"../../base/base-select.component\";\n\n@Component({\n selector: \"app-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 imports: [\n MatFormField,\n MatLabel,\n MatSelect,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatOption,\n MatTooltip,\n MatDivider,\n NgClass,\n MatIcon,\n MatInput,\n MatSuffix,\n MatIconButton,\n ],\n})\nexport class ConfigSelectComponent extends BaseSelectComponent {\n readonly valueFormControl = input.required<FormControl<string>>();\n readonly productId = input.required<string>();\n readonly preSelectedConfigId = input<string>();\n\n readonly filterText = signal(\"\");\n readonly tooltips = viewChildren(MatTooltip);\n readonly filteredConfigs = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n if (this.configs.isLoading() || !this.configs.hasValue()) {\n return [];\n }\n return this.configs.value().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText) && !s.description?.toLocaleLowerCase().includes(filterText) })\n );\n });\n readonly hasFilteredConfig = computed(() => !!this.filteredConfigs().find(f => !f.hidden));\n\n readonly configs = rxResource({\n params: () => ({ productId: this.productId() }),\n stream: ({ params }) => {\n this.valueFormControl().markAsPending();\n return this.createConfigsService()\n .getConfigs(params.productId).pipe(tap((configs) => {\n if (configs.length > 0) {\n if (this.preSelectedConfigId() && configs.find(config => config.configId === this.preSelectedConfigId())) {\n this.valueFormControl().setValue(this.preSelectedConfigId()!);\n } else {\n this.valueFormControl().setValue(configs[0].configId);\n }\n } else {\n this.valueFormControl().setValue(\"\");\n }\n\n })\n );\n },\n });\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n\n onSelectOpenedChange(opened: boolean) {\n this.openChanged(opened);\n this.clearFilter();\n if (!opened) {\n this.tooltips().forEach(t => t.hide(0));\n }\n }\n}\n","@if (configs.hasValue()) {\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Config</mat-label>\n <mat-select\n #configSelect=\"matSelect\"\n placeholder=\"Config\"\n name=\"value\"\n disableOptionCentering\n [formControl]=\"valueFormControl()\"\n [panelClass]=\"customDropdown() ? 'custom-dropdown-below' : ''\"\n (openedChange)=\"onSelectOpenedChange($event)\">\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter configs\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n\n @for (config of filteredConfigs(); track config.configId) {\n <mat-option\n [value]=\"config.configId\"\n [ngClass]=\"{ hidden: config.hidden }\"\n [matTooltip]=\"\n config.description ? `Name: ${config.name}\\nDescription: ${config.description}` : `Name: ${config.name}`\n \"\n [matTooltipDisabled]=\"!configSelect.panelOpen\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\">\n {{ config.name }}\n </mat-option>\n } @empty {\n <mat-option disabled>No config available.</mat-option>\n }\n @if (!hasFilteredConfig()) {\n <mat-option disabled>No config found.</mat-option>\n }\n </mat-select>\n </mat-form-field>\n}\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, input, linkedSignal, signal, viewChildren } from \"@angular/core\";\nimport { rxResource } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatFormField, MatLabel, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { tap } from \"rxjs\";\nimport { BaseSelectComponent } from \"../../base/base-select.component\";\n\n@Component({\n selector: \"app-environment-select\",\n templateUrl: \"./environment-select.component.html\",\n styleUrls: [\"./environment-select.component.css\"],\n imports: [\n MatFormField,\n MatLabel,\n MatSelect,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatOption,\n MatTooltip,\n MatDivider,\n NgClass,\n MatIcon,\n MatInput,\n MatSuffix,\n MatIconButton,\n ],\n})\nexport class EnvironmentSelectComponent extends BaseSelectComponent {\n readonly valueFormControl = input.required<FormControl>();\n readonly productId = input.required<string>();\n\n readonly filterText = signal(\"\");\n readonly tooltips = viewChildren(MatTooltip);\n readonly filteredEnvironments = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n if (this.environments.isLoading() || !this.environments.hasValue()) {\n return [];\n }\n return this.environments.value().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText) && !s.description?.toLocaleLowerCase().includes(filterText) })\n );\n });\n readonly hasFilteredEnvironment = computed(() => !!this.filteredEnvironments().find(f => !f.hidden));\n\n readonly environments = rxResource({\n params: () => ({ productId: this.productId() }),\n stream: ({ params }) => {\n this.valueFormControl().markAsPending();\n return this.createEnvironmentsService()\n .getEnvironments(params.productId).pipe(tap((environments) => {\n if (environments.length > 0) {\n this.valueFormControl().setValue(environments[0].environmentId);\n } else {\n this.valueFormControl().setValue(\"\");\n }\n })\n );\n },\n });\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n\n onSelectOpenedChange(opened: boolean) {\n this.openChanged(opened);\n this.clearFilter();\n if (!opened) {\n this.tooltips().forEach(t => t.hide(0));\n }\n }\n}\n","@if (environments.hasValue()) {\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Environment</mat-label>\n <mat-select\n #environmentSelect=\"matSelect\"\n placeholder=\"Environment\"\n name=\"value\"\n [formControl]=\"valueFormControl()\"\n [panelClass]=\"customDropdown() ? 'custom-dropdown-below' : ''\"\n (openedChange)=\"onSelectOpenedChange($event)\">\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter environments\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n\n @for (environment of filteredEnvironments(); track environment.environmentId) {\n <mat-option\n [value]=\"environment.environmentId\"\n [ngClass]=\"{ hidden: environment.hidden }\"\n [matTooltip]=\"\n environment.description\n ? `Name: ${environment.name}\\nDescription: ${environment.description}`\n : `Name: ${environment.name}`\n \"\n [matTooltipDisabled]=\"!environmentSelect.panelOpen\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\">\n {{ environment.name }}\n </mat-option>\n } @empty {\n <mat-option disabled>No environment available.</mat-option>\n }\n @if (!hasFilteredEnvironment()) {\n <mat-option disabled>No environment found.</mat-option>\n }\n </mat-select>\n </mat-form-field>\n}\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, input, linkedSignal, signal, viewChildren } from \"@angular/core\";\nimport { rxResource } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatFormField, MatLabel, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatSelect, MatSelectTrigger } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { SettingType } from \"ng-configcat-publicapi\";\nimport { tap } from \"rxjs\";\nimport { BaseSelectComponent } from \"../../base/base-select.component\";\n\n@Component({\n selector: \"app-setting-select\",\n templateUrl: \"./setting-select.component.html\",\n styleUrls: [\"./setting-select.component.css\"],\n imports: [\n MatFormField,\n MatLabel,\n MatSelect,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatOption,\n MatTooltip,\n MatDivider,\n NgClass,\n MatIcon,\n MatInput,\n MatSuffix,\n MatIconButton,\n MatSelectTrigger,\n ],\n})\nexport class SettingSelectComponent extends BaseSelectComponent {\n readonly valueFormControl = input.required<FormControl>();\n readonly configId = input.required<string>();\n\n SettingTypeEnum = SettingType;\n\n readonly filterText = signal(\"\");\n readonly tooltips = viewChildren(MatTooltip);\n readonly filteredSettings = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n if (this.settings.isLoading() || !this.settings.hasValue()) {\n return [];\n }\n return this.settings.value().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText)\n && !s.key?.toLocaleLowerCase().includes(filterText) && !s.hint?.toLocaleLowerCase().includes(filterText) })\n );\n });\n readonly hasFilteredSetting = computed(() => !!this.filteredSettings().find(f => !f.hidden));\n\n selectedSettingTriggerText(): string {\n if (this.valueFormControl().value && this.settings.hasValue()) {\n const selectedSetting = this.settings.value().find(setting => setting.settingId === this.valueFormControl().value);\n return selectedSetting?.name + \" (\" + selectedSetting?.key + \")\";\n }\n return \"\";\n }\n\n readonly settings = rxResource({\n params: () => ({ configId: this.configId() }),\n stream: ({ params }) => {\n this.valueFormControl().markAsPending();\n return this.createSettingsService()\n .getSettings(params.configId).pipe(tap((settings) => {\n if (settings.length > 0) {\n this.valueFormControl().setValue(settings[0].settingId);\n } else {\n this.valueFormControl().setValue(\"\");\n }\n })\n );\n },\n });\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n\n onSelectOpenedChange(opened: boolean) {\n this.openChanged(opened);\n this.clearFilter();\n if (!opened) {\n this.tooltips().forEach(t => t.hide(0));\n }\n }\n}\n","@if (settings.hasValue()) {\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Feature flag or setting</mat-label>\n <mat-select\n #settingSelect=\"matSelect\"\n placeholder=\"Feature flag or setting\"\n name=\"value\"\n [formControl]=\"valueFormControl()\"\n [panelClass]=\"customDropdown() ? 'custom-dropdown-below' : ''\"\n (openedChange)=\"onSelectOpenedChange($event)\">\n <mat-select-trigger>\n @if (valueFormControl().value) {\n {{ this.selectedSettingTriggerText() }}\n }\n </mat-select-trigger>\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter settings\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n @for (setting of filteredSettings(); track setting.settingId) {\n <mat-option [value]=\"setting.settingId\" [ngClass]=\"{ hidden: setting.hidden }\">\n <div class=\"feature-flag-selector-item\">\n @switch (setting.settingType) {\n @case (SettingTypeEnum.Boolean) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/feature_flag.svg\"\n alt=\"feature flag\" />\n }\n @case (SettingTypeEnum.String) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/text.svg\"\n alt=\"text setting\" />\n }\n @case (SettingTypeEnum.Int) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/whole.svg\"\n alt=\"whole number setting\" />\n }\n @case (SettingTypeEnum.Double) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/decimal.svg\"\n alt=\"decimal number setting\" />\n }\n }\n <div class=\"item-text-wrapper\">\n <span [matTooltip]=\"setting.name\" [matTooltipDisabled]=\"!settingSelect.panelOpen || !setting.name\">\n {{ setting.name }}\n </span>\n <code\n class=\"highlight copyable-like small\"\n [matTooltip]=\"setting.key\"\n [matTooltipDisabled]=\"!settingSelect.panelOpen || !setting.key\">\n {{ setting.key }}\n </code>\n </div>\n </div>\n </mat-option>\n } @empty {\n <mat-option disabled>No setting available.</mat-option>\n }\n @if (!hasFilteredSetting()) {\n <mat-option disabled>No setting found.</mat-option>\n }\n </mat-select>\n </mat-form-field>\n}\n","import { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\n\nexport interface DeleteSettingDialogResult {\n button: string;\n}\n\nexport interface DeleteSettingDialogData {\n system: string;\n ticketType: string;\n}\n\n@Component({\n selector: \"app-delete-setting-dialog\",\n templateUrl: \"./delete-setting-dialog.component.html\",\n imports: [MatDialogTitle, MatDialogActions, MatButton],\n})\nexport class DeleteSettingDialogComponent {\n dialogRef = inject<MatDialogRef<DeleteSettingDialogComponent, DeleteSettingDialogResult>>(MatDialogRef);\n data = inject<{\n system: string;\n ticketType: string;\n }>(MAT_DIALOG_DATA);\n\n remove() {\n this.dialogRef.close({ button: \"remove\" });\n }\n\n cancel() {\n this.dialogRef.close({ button: \"cancel\" });\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-flat-button color=\"primary\" (click)=\"remove()\">Remove from {{ data.ticketType }}</button>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\">Cancel</button>\n</div>\n","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 readonly track = input<string[]>();\n // Intentionally empty class, to be easier to copy the source from the Dashboard, we had to create this directive,\n // but we do not want to track in integrations.\n}\n","import { FormArray, FormControl, FormGroup } from \"@angular/forms\";\nimport { EvaluationVersion, PredefinedVariationValueModel, SettingType } from \"ng-configcat-publicapi\";\n\nexport type FeatureFlagValueType = boolean | string | number;\n\nexport interface PredefinedVariationValueFormGroup {\n boolValue?: FormControl<boolean>;\n stringValue?: FormControl<string>;\n intValue?: FormControl<number>;\n doubleValue?: FormControl<number>;\n}\n\nexport interface PredefinedVariationFormGroup {\n name: FormControl<string | null>;\n hint: FormControl<string | null>;\n value: FormGroup<PredefinedVariationValueFormGroup>;\n valueForComparison: FormControl<string | null>;\n}\n\nexport interface InitialValueFormGroup {\n environmentName: FormControl<string>;\n environmentId: FormControl<string>;\n settingValue: FormControl<FeatureFlagValueType>;\n predefinedVariationIndex: FormControl<number>;\n}\n\nexport interface CreateSettingFormGroup {\n name: FormControl<string>;\n key: FormControl<string>;\n hint: FormControl<string>;\n settingType: FormControl<SettingType>;\n useVariations: FormControl<boolean>;\n predefinedVariations: FormArray<FormGroup<PredefinedVariationFormGroup>>;\n initialValuesPerEnvironment: FormControl<boolean>;\n initialValueForAll: FormControl<FeatureFlagValueType>;\n initialValueForAllVariationIndex: FormControl<number>;\n initialValues: FormArray<FormGroup<InitialValueFormGroup>>;\n}\n\nexport interface IntegrationCreateSettingFormGroup extends CreateSettingFormGroup {\n productId: FormControl<string>;\n environmentId: FormControl<string>;\n configId: FormControl<string>;\n}\n\nexport interface CreateConfigFormGroup {\n productId: FormControl<string>;\n name: FormControl<string>;\n description: FormControl<string>;\n evaluationVersion: FormControl<EvaluationVersion>;\n}\n\nexport interface IntegrationAddSettingFormGroup {\n productId: FormControl<string>;\n environmentId: FormControl<string>;\n configId: FormControl<string>;\n settingId: FormControl<number>;\n}\n\nexport interface PredefinedVariationUsageFormGroup {\n displayValue: FormControl<string>;\n routerLink: FormControl<string>;\n}\n\nexport interface UpdatePredefinedVariationFormGroup extends PredefinedVariationFormGroup {\n predefinedVariationId: FormControl<string | null>;\n variationId: FormControl<string | null>;\n usages: FormArray<FormGroup<PredefinedVariationUsageFormGroup>>;\n usagesInOtherEnvironments: FormControl<number>;\n usagesExpanded: FormControl<boolean>;\n}\n\nexport interface UpdatePredefinedVariationsFormGroup {\n predefinedVariations: FormArray<FormGroup<UpdatePredefinedVariationFormGroup>>;\n}\n\nexport interface ConvertToPredefinedVariationFormGroup {\n predefinedVariations: FormArray<FormGroup<PredefinedVariationFormGroup>>;\n}\n\nexport function getRawPredefinedVariationValue(formGroup: FormGroup<PredefinedVariationValueFormGroup>): PredefinedVariationValueModel {\n return {\n stringValue: formGroup.controls.stringValue ? formGroup.controls.stringValue.value : null,\n boolValue: formGroup.controls.boolValue ? formGroup.controls.boolValue.value : null,\n doubleValue: formGroup.controls.doubleValue ? formGroup.controls.doubleValue.value : null,\n intValue: formGroup.controls.intValue ? formGroup.controls.intValue.value : null,\n };\n}\n","import { HttpErrorResponse } from \"@angular/common/http\";\nimport { FormGroup } from \"@angular/forms\";\nimport { FormHelper } from \"./form-helper\";\n\nexport class ErrorHandler {\n\n public static handleErrors(formGroup: FormGroup, error: Error) {\n if (error instanceof HttpErrorResponse) {\n switch (error?.status ?? 0) {\n case 400:\n let unknownFieldName = false;\n for (const fieldName in error.error) {\n const errorMessage = FormHelper.getHttpErrorResponseMessage(error, fieldName);\n\n if (errorMessage) {\n let jsonFieldName = fieldName;\n if (jsonFieldName.length > 0) {\n jsonFieldName = jsonFieldName[0].toLowerCase() + jsonFieldName.slice(1);\n }\n\n if (Object.prototype.hasOwnProperty.call(formGroup.controls, 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 case 402:\n formGroup.setErrors({ serverSide: \"You have reached the limits of your plan.\" });\n break;\n case 403:\n formGroup.setErrors({ serverSide: \"You have no permission to execute this action.\" });\n break;\n default:\n formGroup.setErrors({ serverSide: \"Something went wrong on our side. This is not your fault. Please try again.\" });\n break;\n }\n } else {\n formGroup.setErrors({\n serverSide: \"Something went wrong on our side. This is not your fault. Please try again.\",\n });\n }\n }\n}\n","import { sha1 } from \"@configcat/sdk/lib/esm/Hash.js\";\nimport { SettingType } from \"ng-configcat-publicapi\";\nimport { FeatureFlagValueType } from \"../_models/setting-form\";\n\nexport function getVariationIdData(settingKey: string, settingType: SettingType,\n settingValue: { boolValue: boolean | null; stringValue: string | null; intValue: number | null; doubleValue: number | null }):\n { variationId: string; stringValue: string } {\n let variationId = settingKey + \"_\";\n let stringValue = \"\";\n let numberString: string;\n let numberValue: number;\n\n switch (settingType) {\n case SettingType.Boolean:\n stringValue = settingValue.boolValue!.toString();\n variationId += stringValue.toLowerCase();\n break;\n case SettingType.String:\n stringValue = settingValue.stringValue!;\n variationId += stringValue;\n break;\n case SettingType.Int:\n numberValue = settingValue.intValue!;\n numberString = \"\" + Math.trunc(numberValue);\n stringValue = numberString;\n variationId += numberString;\n\n break;\n case SettingType.Double: {\n numberValue = settingValue.doubleValue!;\n numberString = \"\" + Math.trunc(numberValue);\n const modulo = Math.abs(numberValue % 1);\n if (modulo !== 0) {\n numberString += \".\" + Math.trunc(modulo * 1000000);\n }\n stringValue = numberString;\n variationId += numberString;\n break;\n }\n }\n\n variationId = sha1(variationId).substring(0, 8);\n\n return { variationId, stringValue };\n}\n\nexport function getPredefinedVariationValueDisplayValue(\n settingType: SettingType,\n predefinedVariationValue: { boolValue: boolean | null; stringValue: string | null; intValue: number | null; doubleValue: number | null }\n): string {\n switch (settingType) {\n case (SettingType.Boolean): {\n return predefinedVariationValue.boolValue! ? \"On\" : \"Off\";\n }\n case (SettingType.String): {\n return predefinedVariationValue.stringValue!;\n }\n case (SettingType.Int): {\n return \"\" + predefinedVariationValue.intValue!;\n }\n case (SettingType.Double): {\n return \"\" + predefinedVariationValue.doubleValue!;\n }\n default: return \"\";\n }\n}\n\nexport function getPredefinedVariationFeatureFlagValue(\n settingType: SettingType,\n predefinedVariationValue: { boolValue: boolean | null; stringValue: string | null; intValue: number | null; doubleValue: number | null }\n): FeatureFlagValueType {\n switch (settingType) {\n case (SettingType.Boolean): {\n return predefinedVariationValue.boolValue!;\n }\n case (SettingType.String): {\n return predefinedVariationValue.stringValue!;\n }\n case (SettingType.Int): {\n return predefinedVariationValue.intValue!;\n }\n case (SettingType.Double): {\n return predefinedVariationValue.doubleValue!;\n }\n default: return \"\";\n }\n}\n\nexport function getPredefinedVariationColorIndex(\n settingType: SettingType,\n predefinedVariationValue: { boolValue: boolean | null; stringValue: string | null; intValue: number | null; doubleValue: number | null },\n index: number\n): FeatureFlagValueType {\n if (settingType === SettingType.Boolean) {\n return (predefinedVariationValue.boolValue ? 1 : 2);\n }\n return index % 8 + 3;\n}\n","import { Component, input, OnInit } from \"@angular/core\";\n\n@Component({\n selector: \"app-loader\",\n templateUrl: \"./loader.component.html\",\n styleUrls: [\"./loader.component.scss\"],\n imports: [],\n})\nexport class LoaderComponent implements OnInit {\n showLoader = false;\n readonly skipTimeOut = input<boolean>(false);\n\n ngOnInit() {\n if (this.skipTimeOut()) {\n this.showLoader = true;\n } else {\n setTimeout(() => this.showLoader = true, 300);\n }\n }\n}\n","@if (showLoader) {\n <div class=\"container\">\n <div class=\"bounceball\"></div>\n <div class=\"cat\"></div>\n </div>\n}\n","import { CdkCopyToClipboard } from \"@angular/cdk/clipboard\";\nimport { AfterViewInit, Component, ElementRef, inject, input, viewChild } from \"@angular/core\";\nimport { MatRipple } from \"@angular/material/core\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { MessagingService } from \"../../../bootstrap\";\n\n@Component({\n selector: \"app-copyable-value\",\n templateUrl: \"./copyable-value.component.html\",\n styleUrls: [\"./copyable-value.component.scss\"],\n imports: [MatTooltip, CdkCopyToClipboard, MatRipple, MatIcon],\n})\nexport class CopyableValueComponent implements AfterViewInit {\n private readonly messagingService = inject(MessagingService);\n\n readonly tooltip = input<string>();\n readonly tooltipClass = input<string | string[] | Set<string> | Record<string, unknown>>();\n readonly hint = input<string>();\n readonly warnHint = input<boolean>(false);\n readonly name = input<string>();\n readonly value = input.required<string>();\n readonly small = input<boolean>(false);\n readonly bold = input<boolean>(false);\n readonly borderless = input<boolean>(false);\n readonly smallest = input<boolean>(false);\n readonly dark = input<boolean>(false);\n readonly wholeControlCopyable = input<boolean>(false);\n readonly inputControl = viewChild.required<ElementRef<HTMLElement>>(\"content\");\n\n copied() {\n this.messagingService.showSuccessSnack(\"Copied.\");\n }\n\n ngAfterViewInit(): void {\n if (!this.wholeControlCopyable()) {\n this.inputControl().nativeElement.style.width = this.value().length + 1 + \"ch\";\n }\n }\n}\n","<div class=\"container themed\" [class.dark]=\"dark()\">\n @if (!!name()) {\n <div class=\"name\">{{ name() }}</div>\n }\n <div\n class=\"control\"\n [matTooltip]=\"tooltip() ?? 'Copy to clipboard'\"\n [matTooltipClass]=\"tooltipClass() ?? []\"\n [class.small]=\"small()\"\n [class.smallest]=\"smallest()\"\n [class.borderless]=\"borderless()\"\n [class.whole-copyable]=\"wholeControlCopyable()\"\n [matTooltipDisabled]=\"!wholeControlCopyable()\">\n @if (!wholeControlCopyable()) {\n <input\n #content\n class=\"value\"\n readonly\n [value]=\"value()\"\n [class.bold]=\"bold()\"\n [class.borderless]=\"borderless()\" />\n } @else {\n <div class=\"value\" [cdkCopyToClipboard]=\"value()\" (cdkCopyToClipboardCopied)=\"copied()\">\n {{ value() }}\n </div>\n }\n <div\n class=\"icon-container\"\n matRipple\n matTooltip=\"Copy to clipboard\"\n [class.borderless]=\"borderless()\"\n [class.dark]=\"dark()\"\n [cdkCopyToClipboard]=\"value()\"\n [matRippleUnbounded]=\"borderless()\"\n [matRippleCentered]=\"borderless()\"\n [matTooltipDisabled]=\"wholeControlCopyable()\"\n (cdkCopyToClipboardCopied)=\"copied()\">\n <mat-icon>file_copy</mat-icon>\n </div>\n </div>\n @if (!!hint()) {\n <div class=\"hint\" [class.hint-warn]=\"warnHint()\">{{ hint() }}</div>\n }\n</div>\n","import { Directive, HostListener, inject } from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { ConfirmationDialogComponent } from \"../bootstrap\";\nimport { ConfirmationDialogData } from \"../dialogs/confirmation-dialog/confirmation-dialog\";\n\n@Directive({\n selector: \"[appPastedDataTrimmer]\",\n standalone: true,\n})\nexport class PastedDataTrimmerDirective {\n private readonly dialog = inject(MatDialog);\n\n @HostListener(\"paste\", [\"$event\"])\n onPaste(event: ClipboardEvent): void {\n const clipboardData = event.clipboardData;\n if (!clipboardData) {\n return;\n }\n\n const pastedText = clipboardData.getData(\"text\");\n if (pastedText !== pastedText.trim()) {\n event.preventDefault();\n\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\n data: {\n title: \"Trim extra spaces?\",\n body: \"The pasted value contains extra spaces at the beginning or end.<br/>This may cause unexpected behavior, for example when comparing values.\",\n yesButtonLabel: \"Trim extra spaces\",\n cancelButtonLabel: \"Keep spaces\",\n },\n }\n );\n\n dialogRef.afterClosed().subscribe(result => {\n const trimmedText = result === \"yes\" ? pastedText.trim() : pastedText;\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n if (target) {\n const start = target.selectionStart ?? 0;\n const end = target.selectionEnd ?? 0;\n const currentValue = target.value;\n\n // Insert the trimmed text at the cursor position\n const newValue = currentValue.substring(0, start) + trimmedText + currentValue.substring(end);\n target.value = newValue;\n\n // Set the cursor position after the inserted text\n const newCursorPosition = start + trimmedText.length;\n target.setSelectionRange(newCursorPosition, newCursorPosition);\n\n // Trigger input event to ensure change detection works\n target.dispatchEvent(new Event(\"input\", { bubbles: true }));\n }\n });\n }\n }\n}\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { CdkTextareaAutosize } from \"@angular/cdk/text-field\";\nimport { Component, DestroyRef, inject, OnDestroy, OnInit } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormsModule, ReactiveFormsModule, ValidatorFn } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatHint } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { PastedDataTrimmerDirective } from \"../../../../../lib/_directives/pasted-data-trimmer.directive\";\nimport { AutofocusDirective } from \"../../../../_directives/autofocus.directive\";\nimport { AceEditorComponent } from \"../../../../ace-editor/ace-editor.component\";\nimport { FormHelper } from \"../../../../bootstrap\";\n\nexport interface PopoutTextEditorDialogData {\n value: string | null;\n readOnly: boolean;\n validators: ValidatorFn[];\n maxValueLength: number;\n description: string;\n disableJsonEditor: boolean;\n}\n\nexport interface PopoutTextEditorDialogResult {\n value: 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 imports: [\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatButtonToggleGroup,\n FormsModule,\n MatButtonToggle,\n MatFormField,\n MatInput,\n CdkTextareaAutosize,\n AutofocusDirective,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatHint,\n AceEditorComponent,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n PastedDataTrimmerDirective,\n ],\n})\nexport class PopoutTextEditorDialogComponent implements OnInit, OnDestroy {\n dialogRef = inject<MatDialogRef<PopoutTextEditorDialogComponent>>(MatDialogRef);\n data = inject<PopoutTextEditorDialogData>(MAT_DIALOG_DATA);\n private readonly destroyRef = inject(DestroyRef);\n\n jsonData: string | null = null;\n format = \"text\";\n formHelper = FormHelper;\n control!: FormControl<string | null>;\n\n ngOnInit(): void {\n this.jsonData = this.data.value;\n this.control = new FormControl<string | null>(\n { value: this.data.value, disabled: this.data.readOnly },\n { nonNullable: true, validators: [...this.data.validators] }\n );\n\n if (!this.control.valid) {\n this.control.markAsTouched();\n }\n\n this.control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).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 }\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}\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 @if (!data.disableJsonEditor) {\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\n @if (format === \"text\") {\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea\n matInput\n autofocus\n focus\n rows=\"17\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"26\"\n appPastedDataTrimmer\n [formControl]=\"control\"></textarea>\n @if (control.invalid) {\n <mat-error>\n {{ formHelper.getErrorMessage(control) }}\n </mat-error>\n }\n @if (data.maxValueLength && data.maxValueLength - (control.value?.length ?? 0) > -1) {\n <mat-hint>\n Remaining characters:\n {{ data.maxValueLength - (control.value?.length ?? 0) }}\n </mat-hint>\n }\n </mat-form-field>\n } @else if (format === \"json\") {\n <div class=\"editor-container\">\n <app-ace-editor [readOnly]=\"data.readOnly\" [(value)]=\"jsonData\" (onChange)=\"onJsonChanged($event)\" />\n @if (control.invalid) {\n <span class=\"error mat-mdc-form-field-error\">\n {{ formHelper.getErrorMessage(control) }}\n </span>\n }\n </div>\n }\n</div>\n<div mat-dialog-actions>\n @if (!data.readOnly) {\n <button\n type=\"button\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"!control.touched || !control.valid\"\n (click)=\"set()\">\n Set\n </button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]>Cancel</button>\n } @else {\n <button type=\"button\" mat-stroked-button color=\"primary\" [mat-dialog-close]>Close</button>\n }\n</div>\n","import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, DestroyRef, inject, signal } from \"@angular/core\";\nimport { rxResource, takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { FormControl, FormGroup, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatRow, MatRowDef, MatTable, MatTableDataSource } from \"@angular/material/table\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { Router } from \"@angular/router\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { PredefinedVariationEnvironmentModel, PredefinedVariationUsageModel, PredefinedVariationValueModel, SettingType, UpdatePredefinedVariationModel } from \"ng-configcat-publicapi\";\nimport { catchError, tap, throwError } from \"rxjs\";\nimport { AutofocusDirective } from \"../../_directives/autofocus.directive\";\nimport { DigitOnlyDirective } from \"../../_directives/digit-only.directive\";\nimport { getRawPredefinedVariationValue, PredefinedVariationUsageFormGroup, PredefinedVariationValueFormGroup, UpdatePredefinedVariationFormGroup, UpdatePredefinedVariationsFormGroup } from \"../../_models/setting-form\";\nimport { FormHelper, PublicApiService, wholeNumberRegex } from \"../../_services\";\nimport { validateNumberNan, validateUniqueVariations } from \"../../_services/custom-validators\";\nimport { ErrorHandler } from \"../../_services/error-handler\";\nimport { getPredefinedVariationColorIndex, getPredefinedVariationValueDisplayValue, getVariationIdData } from \"../../_services/variation-helper.service\";\nimport { MessagingService } from \"../../bootstrap\";\nimport { LoaderComponent } from \"../../loader/loader.component\";\nimport { CopyableValueComponent } from \"../../v2/feature-flag/copyable-value/copyable-value.component\";\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData, PopoutTextEditorDialogResult } from \"../../v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component\";\n\nexport interface VariationsDialogComponentData {\n settingId: number;\n settingName: string;\n manage?: boolean;\n organizationId: string;\n productId: string;\n configId: string;\n maxStringFlagValueLength: number;\n basePath: string | null;\n basicAuthUsername: string | null;\n basicAuthPassword: string | null;\n}\n\n@Component({\n selector: \"app-variations-dialog\",\n imports: [\n LoaderComponent,\n CdkScrollable,\n MatDialogContent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatDialogTitle,\n MatFormField,\n MatInput,\n MatError,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n NgTemplateOutlet,\n MatTooltip,\n MatIcon,\n MatIconButton,\n MatTable,\n MatColumnDef,\n MatHeaderCellDef,\n MatHeaderCell,\n MatCellDef,\n MatCell,\n MatHeaderRowDef,\n MatHeaderRow,\n MatRowDef,\n MatRow,\n DigitOnlyDirective,\n MatSuffix,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n CopyableValueComponent,\n AutofocusDirective],\n templateUrl: \"./variations-dialog.component.html\",\n styleUrls: [\n \"../../../css/slider.scss\",\n \"./variations-dialog.component.scss\",\n ],\n})\nexport class VariationsDialogComponent {\n private readonly dialogRef = inject<MatDialogRef<VariationsDialogComponent>>(MatDialogRef);\n readonly data = inject<VariationsDialogComponentData>(MAT_DIALOG_DATA);\n private readonly publicApiService = inject(PublicApiService);\n readonly messagingService = inject(MessagingService);\n readonly formBuilder = inject(NonNullableFormBuilder);\n readonly destroyRef = inject(DestroyRef);\n private readonly router = inject(Router);\n private readonly dialog = inject(MatDialog);\n\n readonly submitting = signal(false);\n\n SettingType = SettingType;\n formHelper = FormHelper;\n\n formGroup!: FormGroup<UpdatePredefinedVariationsFormGroup>;\n settingType!: SettingType;\n settingKey!: string;\n\n stringValidators = [Validators.required,\n Validators.maxLength(this.data.maxStringFlagValueLength)];\n intValidators = [\n Validators.required,\n validateNumberNan,\n Validators.max(2147483647),\n Validators.min(-2147483648),\n Validators.pattern(wholeNumberRegex),\n ];\n doubleValidators = [Validators.required, validateNumberNan, Validators.min(-Number.MAX_VALUE), Validators.max(Number.MAX_VALUE)];\n\n displayedColumns: string[] = [];\n maxPredefinedVariations = 50;\n\n focusIndex = -1;\n\n readonly setting = rxResource({\n params: () => ({ settingId: this.data.settingId }),\n stream: ({ params }) => {\n return this.publicApiService.createSettingsService(\n this.data.basicAuthUsername,\n this.data.basicAuthPassword,\n this.data.basePath\n ).getPredefinedVariations(params.settingId).pipe(\n tap(setting => {\n this.settingType = setting.settingType;\n this.settingKey = setting.settingKey;\n\n this.maxPredefinedVariations = setting.maxPredefinedVariations;\n const isManage = this.data.manage && this.settingType !== SettingType.Boolean;\n this.displayedColumns = [];\n if (isManage) {\n this.displayedColumns.push(\"reorder\");\n }\n if (this.settingType !== SettingType.Boolean) {\n this.displayedColumns.push(\"color\");\n }\n this.displayedColumns.push(\"value\", \"name\", \"hint\");\n this.displayedColumns.push(\"usages\");\n if (isManage) {\n this.displayedColumns.push(\"actions\");\n }\n\n this.formGroup = this.formBuilder.group({\n predefinedVariations: this.formBuilder.array(\n setting.predefinedVariations.map(sv => this.createPredefinedVariationFormGroup(sv, setting.environments)),\n { validators: [validateUniqueVariations] }\n ),\n });\n this.formGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.formGroup.controls.predefinedVariations.controls.forEach(c => {\n const variationId = getVariationIdData(this.settingKey, this.settingType, getRawPredefinedVariationValue(c.controls.value)).variationId;\n if (c.controls.variationId.value !== variationId) {\n c.controls.variationId.setValue(variationId, { emitEvent: false, onlySelf: true });\n }\n\n const valueForComparison = getPredefinedVariationValueDisplayValue(this.settingType, getRawPredefinedVariationValue(c.controls.value));\n if (c.controls.valueForComparison.value !== valueForComparison) {\n c.controls.valueForComparison.setValue(valueForComparison);\n }\n });\n });\n this.setDataSource();\n }),\n catchError((error: Error) => {\n this.messagingService.showErrorSnack(\"Could not load predefined variations.\");\n this.dialogRef.close();\n return throwError(() => error);\n })\n );\n },\n });\n\n dataSource = new MatTableDataSource<FormGroup<UpdatePredefinedVariationFormGroup>>([]);\n\n createPredefinedVariationFormGroup(predefinedVariation: {\n predefinedVariationId: string | null; name: string | null; hint: string | null;\n value: PredefinedVariationValueModel; usages: PredefinedVariationUsageModel[]; usagesInOtherEnvironments: number;\n },\n environments: PredefinedVariationEnvironmentModel[]) {\n return this.formBuilder.group<UpdatePredefinedVariationFormGroup>(\n {\n predefinedVariationId: new FormControl<string | null>(predefinedVariation.predefinedVariationId),\n name: new FormControl<string | null>({ value: predefinedVariation.name, disabled: !this.data.manage }, { validators: [Validators.maxLength(255)] }),\n hint: new FormControl<string | null>({ value: predefinedVariation.hint, disabled: !this.data.manage }, { validators: [Validators.maxLength(1000)] }),\n value: this.createPredefinedVariationValueFormGroup(predefinedVariation.value, !this.data.manage\n || (predefinedVariation.usages.length > 0)\n || (predefinedVariation.usagesInOtherEnvironments > 0)),\n valueForComparison: new FormControl<string | null>({\n value: getPredefinedVariationValueDisplayValue(this.settingType, predefinedVariation.value),\n disabled: true,\n }),\n usages: this.formBuilder.array(\n predefinedVariation.usages.map(u => this.createPredefinedVariationUsageFormGroup(u, environments))\n .filter(u => u !== null)\n .sort((a, b) => a.environmentIndex - b.environmentIndex)\n .map(u => u.formGroup)\n ),\n usagesInOtherEnvironments: new FormControl<number>({\n value: predefinedVariation.usagesInOtherEnvironments, disabled: true,\n }, { nonNullable: true }),\n variationId: new FormControl<string | null>({\n value: getVariationIdData(this.settingKey, this.settingType, predefinedVariation.value).variationId, disabled: true,\n }),\n usagesExpanded: new FormControl<boolean>(false, { nonNullable: true }),\n }\n );\n }\n\n createPredefinedVariationValueFormGroup(predefinedVariationValue: PredefinedVariationValueModel, disabled: boolean) {\n switch (this.settingType) {\n case SettingType.Boolean:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n boolValue: new FormControl<boolean>({ value: predefinedVariationValue.boolValue!, disabled: true },\n { nonNullable: true }),\n });\n case SettingType.String:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n stringValue: new FormControl<string>({ value: predefinedVariationValue.stringValue!, disabled },\n { nonNullable: true, validators: this.stringValidators }),\n });\n case SettingType.Int:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n intValue: new FormControl<number>({ value: predefinedVariationValue.intValue!, disabled },\n { nonNullable: true, validators: this.intValidators }),\n });\n case SettingType.Double:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n doubleValue: new FormControl<number>({ value: predefinedVariationValue.doubleValue!, disabled },\n { nonNullable: true, validators: this.doubleValidators }),\n\n });\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n createPredefinedVariationUsageFormGroup(usage: PredefinedVariationUsageModel, environments: PredefinedVariationEnvironmentModel[]):\n { formGroup: FormGroup<PredefinedVariationUsageFormGroup>; environmentIndex: number } | null {\n const routerLink = this.getDashboardUrl(usage);\n const index = environments.findIndex(e => e.environmentId === usage.environmentId);\n if (index === -1) return null;\n const environment = environments[index];\n const displayValue = environment.name + (usage.settingId === this.data.settingId ? \"\" : \" (as a prerequisite)\");\n return {\n formGroup: this.formBuilder.group<PredefinedVariationUsageFormGroup>({\n routerLink: new FormControl<string>({ value: routerLink, disabled: true }, { nonNullable: true }),\n displayValue: new FormControl<string>({ value: displayValue, disabled: true }, { nonNullable: true }),\n }),\n environmentIndex: index,\n };\n }\n\n getDashboardUrl(usage: PredefinedVariationUsageModel) {\n const urlTree = this.router.createUrlTree([\n \"v2\",\n this.data.organizationId,\n this.data.productId,\n this.data.configId,\n usage.environmentId,\n usage.settingId,\n ]);\n return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);\n }\n\n setDataSource() {\n this.dataSource.data = this.formGroup.controls.predefinedVariations.controls;\n }\n\n expandText(stringValueControl: FormControl<string>) {\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: stringValueControl.value,\n readOnly: stringValueControl.disabled,\n validators: [Validators.required, Validators.maxLength(this.data.maxStringFlagValueLength)],\n maxValueLength: this.data.maxStringFlagValueLength,\n description: \"Modify the text within the editor to change the value.\",\n disableJsonEditor: true,\n } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data?.value) {\n stringValueControl.setValue(data.value);\n stringValueControl.updateValueAndValidity();\n stringValueControl.markAsTouched();\n stringValueControl.markAsDirty();\n }\n });\n }\n\n expandHint(stringValueControl: FormControl<string | null>) {\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: stringValueControl.value,\n readOnly: stringValueControl.disabled,\n validators: [Validators.maxLength(1000)],\n maxValueLength: 1000,\n description: \"Modify the text within the editor to change the hint.\",\n } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data?.value) {\n stringValueControl.setValue(data.value);\n stringValueControl.updateValueAndValidity();\n stringValueControl.markAsTouched();\n stringValueControl.markAsDirty();\n }\n });\n }\n\n addVariation() {\n const predefinedVariationFormGroup = this.createPredefinedVariationFormGroup({\n predefinedVariationId: null,\n name: null,\n hint: null,\n value: this.createEmptyPredefinedVariationValueModel(),\n usages: [],\n usagesInOtherEnvironments: 0,\n }, []);\n\n this.formGroup.controls.predefinedVariations.push(predefinedVariationFormGroup);\n this.formGroup.controls.predefinedVariations.markAsDirty();\n this.setDataSource();\n this.focusIndex = this.formGroup.controls.predefinedVariations.length - 1;\n }\n\n removeVariation(index: number) {\n this.formGroup.controls.predefinedVariations.removeAt(index);\n this.formGroup.controls.predefinedVariations.markAsDirty();\n this.setDataSource();\n }\n\n createEmptyPredefinedVariationValueModel(): PredefinedVariationValueModel {\n switch (this.settingType) {\n case (SettingType.Boolean): {\n return { boolValue: false, intValue: null, doubleValue: null, stringValue: null };\n }\n case (SettingType.String): {\n return { stringValue: \"\", intValue: null, doubleValue: null, boolValue: null };\n }\n case (SettingType.Int): {\n return { intValue: 0, boolValue: null, doubleValue: null, stringValue: null };\n }\n case (SettingType.Double): {\n return { doubleValue: 0, intValue: null, boolValue: null, stringValue: null };\n }\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n onSubmit() {\n if (!this.formGroup.valid) {\n return;\n }\n this.submitting.set(true);\n\n const predefinedVariations = this.formGroup.controls.predefinedVariations.controls.map(c => ({\n predefinedVariationId: c.controls.predefinedVariationId.value,\n name: c.controls.name.value,\n hint: c.controls.hint.value,\n value: {\n boolValue: this.settingType === SettingType.Boolean ? c.controls.value.controls.boolValue!.getRawValue() : void 0,\n stringValue: this.settingType === SettingType.String ? c.controls.value.controls.stringValue!.getRawValue() : void 0,\n intValue: this.settingType === SettingType.Int ? c.controls.value.controls.intValue!.getRawValue() : void 0,\n doubleValue: this.settingType === SettingType.Double ? c.controls.value.controls.doubleValue!.getRawValue() : void 0,\n } as PredefinedVariationValueModel,\n\n } as UpdatePredefinedVariationModel));\n\n this.publicApiService.createSettingsService(\n this.data.basicAuthUsername,\n this.data.basicAuthPassword,\n this.data.basePath\n ).updatePredefinedVariations(this.data.settingId, { predefinedVariations }).subscribe({\n next: () => {\n this.dialogRef.close(true);\n this.submitting.set(false);\n },\n error: (error: Error) => {\n ErrorHandler.handleErrors(this.formGroup, error);\n this.submitting.set(false);\n },\n });\n }\n\n dropTable(event: CdkDragDrop<MatTableDataSource<FormGroup<UpdatePredefinedVariationFormGroup>>>) {\n moveItemInArray(this.formGroup.controls.predefinedVariations.controls, event.previousIndex, event.currentIndex);\n this.formGroup.controls.predefinedVariations.markAsDirty();\n this.setDataSource();\n }\n\n getColorIndex(row: FormGroup<UpdatePredefinedVariationFormGroup>, index: number) {\n return getPredefinedVariationColorIndex(this.settingType, getRawPredefinedVariationValue(row.controls.value), index);\n }\n}\n","@if (setting.isLoading()) {\n <div mat-dialog-content class=\"content\">\n <app-loader />\n </div>\n} @else {\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n <h1 mat-dialog-title>{{ data.manage ? \"Manage predefined variations\" : \"View predefined variations\" }}</h1>\n <div class=\"content\">\n <div class=\"dialog-description\" mat-dialog-content>\n @if (data.manage) {\n <p>\n Add, delete, and update predefined variations of the\n <strong>{{ data.settingName }}</strong>\n setting.\n <br />\n The\n <strong>served value</strong>\n is sent to SDKs and received by your applications. The\n <strong>display name</strong>\n appears in the targeting UI.\n <br />\n You can update a value or delete a variation only if it is not in use. As a help, you can see where each\n variation is used.\n </p>\n } @else {\n <p>\n The\n <strong>served value</strong>\n is sent to SDKs and received by your applications. The\n <strong>display name</strong>\n appears in the targeting UI.\n </p>\n }\n </div>\n\n <div class=\"dialog-table\" mat-dialog-content>\n <table\n mat-table\n cdkDropList\n [dataSource]=\"dataSource\"\n [cdkDropListData]=\"dataSource\"\n [cdkDropListDisabled]=\"!data.manage || settingType === SettingType.Boolean\"\n (cdkDropListDropped)=\"dropTable($event)\">\n <ng-container matColumnDef=\"reorder\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div class=\"drag-handle\">\n <div cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"color\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n <span [class]=\"'variation-indicator variation-color-' + getColorIndex(row, i)\"></span>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"value\">\n <th *matHeaderCellDef mat-header-cell>Served value *</th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n @switch (settingType) {\n @case (SettingType.Boolean) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.boolValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingType.String) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.stringValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingType.Int) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.intValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingType.Double) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.doubleValue,\n setFocus: i === focusIndex,\n }\" />\n }\n }\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef mat-header-cell>Display name (optional)</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field\">\n <input\n matInput\n [formControl]=\"row.controls.name\"\n [placeholder]=\"row.controls.valueForComparison.value\" />\n @if (row.controls.name.invalid) {\n <mat-error class=\"small-error\">\n {{ formHelper.getErrorMessage(row.controls.name) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th *matHeaderCellDef mat-header-cell>Hint (optional)</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field suffixed\">\n <input matInput [formControl]=\"row.controls.hint\" />\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandHint(row.controls.hint)\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n @if (row.controls.hint.invalid) {\n <mat-error>\n {{ formHelper.getErrorMessage(row.controls.hint) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"variationId\">\n <th *matHeaderCellDef mat-header-cell>Variation ID</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <app-copyable-value [value]=\"row.controls.variationId.value\" [small]=\"true\" />\n </td>\n </ng-container>\n <ng-container matColumnDef=\"usages\">\n <th *matHeaderCellDef mat-header-cell>Usages</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <div class=\"usages\">\n <button\n type=\"button\"\n class=\"usage-button\"\n mat-icon-button\n [disabled]=\"!row.controls.usages.controls.length && !row.controls.usagesInOtherEnvironments.value\"\n (click)=\"row.controls.usagesExpanded.setValue(!row.controls.usagesExpanded.value)\">\n @if (row.controls.usagesExpanded.value) {\n <mat-icon>expand_less</mat-icon>\n } @else {\n <mat-icon>expand_more</mat-icon>\n }\n </button>\n <div>\n @if (row.controls.usagesExpanded.value) {\n @for (usage of row.controls.usages.controls; track $index) {\n <div class=\"usage\">\n <a target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"usage.controls.routerLink.value\">\n {{ usage.controls.displayValue.value }}\n </a>\n </div>\n }\n @if (row.controls.usagesInOtherEnvironments.value > 0) {\n {{ row.controls.usagesInOtherEnvironments.value }} usage{{\n row.controls.usagesInOtherEnvironments.value > 1 ? \"s\" : \"\"\n }}\n in environments you don't have access to.\n } @else if (row.controls.usages.controls.length === 0) {\n <div>no usages</div>\n }\n } @else {\n <div>\n @if (row.controls.usages.controls.length + row.controls.usagesInOtherEnvironments.value > 0) {\n {{ row.controls.usages.controls.length + row.controls.usagesInOtherEnvironments.value }}\n usage{{\n row.controls.usages.controls.length + row.controls.usagesInOtherEnvironments.value > 1\n ? \"s\"\n : \"\"\n }}\n } @else {\n <div>no usages</div>\n }\n </div>\n }\n </div>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"actions\">\n <th *matHeaderCellDef mat-header-cell>{{ dataSource.data.length }} / {{ maxPredefinedVariations }}</th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div\n class=\"delete\"\n [matTooltip]=\"\n formGroup.controls.predefinedVariations.controls.length > 2\n ? 'Cannot remove a variation that is already in use.'\n : 'At least 2 predefined variations should be set.'\n \"\n [matTooltipDisabled]=\"\n row.controls.usages.controls.length === 0 &&\n row.controls.usagesInOtherEnvironments.value === 0 &&\n formGroup.controls.predefinedVariations.controls.length > 2\n \">\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove variation\"\n [disabled]=\"\n formGroup.controls.predefinedVariations.controls.length <= 2 ||\n row.controls.usages.controls.length > 0 ||\n row.controls.usagesInOtherEnvironments.value > 0\n \"\n (click)=\"removeVariation(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row cdkDrag [cdkDragData]=\"row\"></tr>\n </table>\n @if (\n formGroup.controls.predefinedVariations.invalid &&\n formHelper.getErrorMessage(formGroup.controls.predefinedVariations)\n ) {\n <mat-error>\n {{ formHelper.getErrorMessage(formGroup.controls.predefinedVariations) }}\n </mat-error>\n }\n </div>\n @if (data.manage && settingType !== SettingType.Boolean) {\n <div class=\"add-variation\" mat-dialog-content>\n <div\n [matTooltip]=\"'Maximum ' + maxPredefinedVariations + ' variations can be added.'\"\n [matTooltipDisabled]=\"dataSource.data.length < maxPredefinedVariations\">\n <button\n type=\"button\"\n mat-stroked-button\n color=\"primary\"\n [disabled]=\"dataSource.data.length >= maxPredefinedVariations\"\n (click)=\"addVariation()\">\n <mat-icon>add</mat-icon>\n Add variation\n </button>\n </div>\n </div>\n }\n @if (formGroup.errors && formGroup.errors[\"serverSide\"]) {\n <div class=\"error\" mat-dialog-content>\n <span>{{ formGroup.errors[\"serverSide\"] }}</span>\n </div>\n }\n </div>\n\n <div mat-dialog-actions>\n @if (data.manage) {\n <button\n type=\"submit\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"submitting() || !formGroup.dirty || !formGroup.valid\">\n Save\n </button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]>Cancel</button>\n } @else {\n <button type=\"button\" color=\"primary\" mat-flat-button [mat-dialog-close]>Close</button>\n }\n </div>\n </form>\n}\n\n<ng-template #settingValueTemplate let-formControl=\"formControl\" let-setFocus=\"setFocus\">\n @switch (settingType) {\n @case (SettingType.String) {\n <mat-form-field class=\"small-form-field text suffixed\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n placeholder=\"Add text ...\"\n focus\n matTooltip=\"This variation is in use. The value cannot be changed.\"\n [matTooltipDisabled]=\"!formControl.disabled || !data.manage\"\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\" />\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandText(formControl)\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n @if (formControl.invalid) {\n <mat-error class=\"small-error\">\n {{ formHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n </mat-form-field>\n }\n @case (SettingType.Int) {\n <mat-form-field\n class=\"small-form-field\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n matTooltip=\"This variation is in use. The value cannot be changed.\"\n [matTooltipDisabled]=\"!formControl.disabled || !data.manage\">\n @if (formControl.invalid) {\n <mat-error>\n {{ formHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n <input\n matInput\n type=\"number\"\n required\n name=\"index\"\n appDigitOnly\n focus\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\"\n [digitOnlyAllowNegatives]=\"true\" />\n </mat-form-field>\n }\n @case (SettingType.Double) {\n <mat-form-field\n class=\"small-form-field\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n matTooltip=\"This variation is in use. The value cannot be changed.\"\n [matTooltipDisabled]=\"!formControl.disabled || !data.manage\">\n @if (formControl.invalid) {\n <mat-error>\n {{ formHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n <input\n matInput\n type=\"number\"\n required\n name=\"index\"\n inputDisplayNormalizer\n focus\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\" />\n </mat-form-field>\n }\n @case (SettingType.Boolean) {\n <div\n class=\"toggle\"\n matTooltip=\"This variation is in use. The value cannot be changed.\"\n [matTooltipDisabled]=\"!formControl.disabled || !data.manage\">\n <label class=\"switch\">\n <input type=\"checkbox\" name=\"index\" [formControl]=\"formControl\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n }\n }\n</ng-template>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { Component, inject } from \"@angular/core\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { Router } from \"@angular/router\";\nimport { IDependeeSetting } from \"../../../_models/setting-value-formgroup\";\nimport { PublicApiService } from \"../../../_services\";\n\n@Component({\n selector: \"app-dependees-dialog\",\n templateUrl: \"./dependees-dialog.component.html\",\n imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, MatButton, MatDialogClose],\n})\nexport class DependeesDialogComponent {\n data = inject<{\n dependees: IDependeeSetting[];\n name: string;\n organizationId: string;\n productId: string;\n configId: string;\n environmentId: string;\n }>(MAT_DIALOG_DATA);\n private readonly router = inject(Router);\n private readonly publicApiService = inject(PublicApiService);\n\n getDashboardUrl(settingId: number) {\n const urlTree = this.router.createUrlTree([\n \"v2\",\n this.data.organizationId,\n this.data.productId,\n this.data.configId,\n this.data.environmentId,\n settingId,\n ]);\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>\n is the prerequisite of the following feature flags:\n </p>\n @for (dependee of data.dependees; track dependee) {\n <ul>\n <li>\n <a rel=\"noopener noreferrer\" target=\"_blank\" [href]=\"getDashboardUrl(dependee.settingId)\">\n {{ dependee.name }} ({{ dependee.key }})\n </a>\n </li>\n </ul>\n }\n</div>\n\n<div mat-dialog-actions>\n <button type=\"button\" mat-stroked-button mat-dialog-close>Close</button>\n</div>\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, inject, input, output, viewChildren } from \"@angular/core\";\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatOption, MatSelect, MatSelectTrigger } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { PredefinedVariationModel, PredefinedVariationValueModel } from \"ng-configcat-publicapi\";\nimport { PastedDataTrimmerDirective } from \"../../../../../lib/_directives/pasted-data-trimmer.directive\";\nimport { getPredefinedVariationColorIndex, getPredefinedVariationValueDisplayValue } from \"../../../../../lib/_services/variation-helper.service\";\nimport { DigitOnlyDirective } from \"../../../../_directives/digit-only.directive\";\nimport { InputDisplayNormalizerDirective } from \"../../../../_directives/input-display-normalizer.directive\";\nimport {\n FormHelper,\n getValidatorsForSettingType,\n IFeatureFlagLimitations,\n SettingType,\n ValueForm,\n} from \"../../../../bootstrap\";\nimport {\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult,\n} from \"../popout-text-editor-dialog/popout-text-editor-dialog.component\";\n\nexport interface IFeatureFlagValueSettingModel {\n settingId: number;\n key: string;\n name: string;\n settingType: SettingType;\n predefinedVariations: PredefinedVariationModel[];\n}\n\n@Component({\n selector: \"app-feature-flag-value\",\n templateUrl: \"./feature-flag-value.component.html\",\n styleUrls: [\"../components.scss\", \"../../../../../css/slider.scss\", \"./feature-flag-value.component.scss\"],\n imports: [\n MatFormField,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatTooltip,\n MatIconButton,\n MatSuffix,\n MatIcon,\n MatError,\n InputDisplayNormalizerDirective,\n DigitOnlyDirective,\n MatSelect,\n MatOption,\n NgClass,\n MatSelectTrigger,\n PastedDataTrimmerDirective,\n ],\n})\nexport class FeatureFlagValueComponent {\n private readonly dialog = inject(MatDialog);\n\n readonly formGroup = input.required<FormGroup<ValueForm>>();\n readonly setting = input.required<IFeatureFlagValueSettingModel>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n readonly notAvailablePredefinedVariationIds = input<string[]>([]);\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly isPrerequisite = input(false);\n readonly tooltip = input<string>();\n\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n readonly tooltips = viewChildren(MatTooltip);\n\n readonly predefinedVariations = computed(() => {\n return this.setting().predefinedVariations\n .map((sv, index) => ({\n ...sv,\n isAvailable: !this.notAvailablePredefinedVariationIds().find(u => u === sv.predefinedVariationId),\n colorIndex: getPredefinedVariationColorIndex(this.setting().settingType, sv.value, index),\n }));\n });\n\n FormHelper = FormHelper;\n getPredefinedVariationValueDisplayValue = getPredefinedVariationValueDisplayValue;\n SettingType = SettingType;\n\n expandText() {\n const stringValueControl = this.formGroup().controls.stringValue!;\n\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: stringValueControl.value,\n readOnly: stringValueControl.disabled,\n validators: 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 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 } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data) {\n stringValueControl.setValue(data.value);\n stringValueControl.updateValueAndValidity();\n stringValueControl.markAsTouched();\n stringValueControl.markAsDirty();\n }\n });\n }\n\n getPredefinedVariation(predefinedVariationId: string) {\n return this.predefinedVariations().find(p => p.predefinedVariationId === predefinedVariationId);\n }\n\n getServedValueText(model: {\n boolValue?: boolean | FormControl<boolean> | null;\n stringValue?: string | FormControl<string> | null;\n intValue?: number | FormControl<number> | null;\n doubleValue?: number | FormControl<number> | null;\n } | undefined) {\n switch (this.setting().settingType) {\n case SettingType.Boolean: {\n const controlOrValue = model?.boolValue;\n return \"\" + (controlOrValue instanceof FormControl ? controlOrValue.value : !!controlOrValue);\n }\n case SettingType.Int: {\n const controlOrValue = model?.intValue;\n return \"\" + (controlOrValue instanceof FormControl ? controlOrValue.value : controlOrValue);\n }\n case SettingType.Double: {\n const controlOrValue = model?.doubleValue;\n return \"\" + (controlOrValue instanceof FormControl ? controlOrValue.value : controlOrValue);\n }\n default: {\n const controlOrValue = model?.stringValue;\n let stringValue = (controlOrValue instanceof FormControl ? controlOrValue.value : controlOrValue) ?? \"\";\n if (stringValue.length > 50) {\n stringValue = stringValue.substring(0, 23) + \"[...]\" + stringValue.substring(stringValue.length - 22);\n }\n return \"'\" + stringValue.replace(/[\\\\']/g, \"\\\\$&\") + \"'\";\n }\n }\n }\n\n getDefaultDisplayNameText(model: PredefinedVariationValueModel | undefined) {\n switch (this.setting().settingType) {\n case SettingType.Boolean:\n return model?.boolValue ? \"On\" : \"Off\";\n case SettingType.Int:\n return \"\" + model?.intValue;\n case SettingType.Double:\n return \"\" + model?.doubleValue;\n default:\n return model?.stringValue ?? \"\";\n }\n }\n\n onPredefinedVariationSelectOpenedChange(opened: boolean) {\n if (!opened) {\n this.tooltips().forEach(t => t.hide(0));\n }\n }\n}\n","@let formGroupValue = formGroup();\n\n<div class=\"feature-flag-value\">\n @if (formGroupValue.controls.predefinedVariationId) {\n <div class=\"setting-variation\" [ngClass]=\"{ prerequisite: isPrerequisite() }\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field select-suffixed\" subscriptSizing=\"dynamic\">\n @let selectedPredefinedVariation = getPredefinedVariation(formGroupValue.controls.predefinedVariationId.value);\n @let variationName = selectedPredefinedVariation?.name;\n @let variationHint = selectedPredefinedVariation?.hint;\n <mat-select\n #predefinedVariationSelect=\"matSelect\"\n disableOptionCentering\n [formControl]=\"formGroupValue.controls.predefinedVariationId\"\n [matTooltip]=\"\n `${tooltip()}: ${getServedValueText(selectedPredefinedVariation?.value)} (type: ${setting().settingType})` +\n `\\nName: ${variationName || getDefaultDisplayNameText(selectedPredefinedVariation?.value)}` +\n `${variationHint ? `\\nHint: ${variationHint}` : ''}`\n \"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\"\n (openedChange)=\"onPredefinedVariationSelectOpenedChange($event)\">\n <mat-select-trigger>\n @if (selectedPredefinedVariation) {\n <div class=\"variation-option\">\n <span [class]=\"'variation-indicator variation-color-' + selectedPredefinedVariation.colorIndex\"></span>\n @if (selectedPredefinedVariation.name) {\n <em class=\"variation-name\">\n {{ selectedPredefinedVariation.name }}\n </em>\n } @else {\n <span>\n {{\n getPredefinedVariationValueDisplayValue(setting().settingType, selectedPredefinedVariation.value)\n }}\n </span>\n }\n </div>\n }\n </mat-select-trigger>\n\n @for (predefinedVariation of predefinedVariations(); track predefinedVariation.predefinedVariationId) {\n <span\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\"\n [matTooltip]=\"\n !predefinedVariation.isAvailable\n ? 'The predefined variation is already selected in another percentage option.'\n : (predefinedVariation.hint ?? '')\n \"\n [matTooltipDisabled]=\"\n !predefinedVariationSelect.panelOpen || (predefinedVariation.isAvailable && !predefinedVariation.hint)\n \">\n <mat-option\n [value]=\"predefinedVariation.predefinedVariationId\"\n [disabled]=\"!predefinedVariation.isAvailable\">\n <div class=\"variation-option\">\n <span [class]=\"'variation-indicator variation-color-' + predefinedVariation.colorIndex\"></span>\n @if (predefinedVariation.name) {\n <em class=\"variation-name\">\n {{ predefinedVariation.name }}\n </em>\n } @else {\n <span>\n {{ getPredefinedVariationValueDisplayValue(setting().settingType, predefinedVariation.value) }}\n </span>\n }\n </div>\n </mat-option>\n </span>\n }\n </mat-select>\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n [matTooltip]=\"canCreateOrUpdateSetting() ? 'Manage predefined variations' : 'View predefined variations'\"\n (click)=\"\n $event.stopPropagation();\n viewVariationsRequested.emit({ settingId: setting().settingId, settingName: setting().name })\n \">\n <mat-icon class=\"icon-transform-rotate-90\">call_split</mat-icon>\n </button>\n @if (formGroupValue.controls.predefinedVariationId.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroupValue.controls.predefinedVariationId) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n } @else if (formGroupValue.controls.stringValue) {\n <mat-form-field appearance=\"outline\" class=\"small-form-field suffixed\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n placeholder=\"Add text ...\"\n appPastedDataTrimmer\n [formControl]=\"formGroupValue.controls.stringValue\"\n [matTooltip]=\"`${tooltip()}: ${getServedValueText(formGroupValue.controls)} (type: ${setting().settingType})`\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\" />\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandText()\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n @if (formGroupValue.controls.stringValue.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroupValue.controls.stringValue) }}\n </mat-error>\n }\n </mat-form-field>\n } @else if (formGroupValue.controls.intValue) {\n <mat-form-field appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"number\"\n appDigitOnly\n inputDisplayNormalizer\n placeholder=\"Add number ...\"\n [formControl]=\"formGroupValue.controls.intValue\"\n [digitOnlyAllowNegatives]=\"true\"\n [matTooltip]=\"`${tooltip()}: ${getServedValueText(formGroupValue.controls)} (type: ${setting().settingType})`\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\" />\n @if (formGroupValue.controls.intValue.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroupValue.controls.intValue) }}\n </mat-error>\n }\n </mat-form-field>\n } @else if (formGroupValue.controls.doubleValue) {\n <mat-form-field appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"number\"\n inputDisplayNormalizer\n placeholder=\"Add number ...\"\n [formControl]=\"formGroupValue.controls.doubleValue\"\n [matTooltip]=\"`${tooltip()}: ${getServedValueText(formGroupValue.controls)} (type: ${setting().settingType})`\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\" />\n @if (formGroupValue.controls.doubleValue.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroupValue.controls.doubleValue) }}\n </mat-error>\n }\n </mat-form-field>\n } @else if (formGroupValue.controls.boolValue) {\n <div class=\"bool\" [class.readonly]=\"formGroupValue.controls.boolValue.disabled\">\n <label\n class=\"switch\"\n [matTooltip]=\"`${tooltip()}: ${getServedValueText(formGroupValue.controls)} (type: ${setting().settingType})`\"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\">\n <input type=\"checkbox\" [formControl]=\"formGroupValue.controls.boolValue\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n }\n</div>\n","import { Component, input, OnChanges } from \"@angular/core\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\n\n@Component({\n selector: \"app-condition-chip\",\n templateUrl: \"./condition-chip.component.html\",\n styleUrl: \"../../../chips.scss\",\n imports: [MatChipSet, MatChip],\n})\nexport class ConditionChipComponent implements OnChanges {\n readonly targetingRuleIndex = input.required<number>();\n readonly conditionIndex = input.required<number>();\n chipText = \"\";\n\n ngOnChanges(): void {\n this.chipText = this.conditionIndex() > 0 ? \"AND\" : this.targetingRuleIndex() === 0 ? \"IF\" : \"ELSE IF\";\n }\n}\n","<div class=\"chip-container fixed-width\">\n @if (conditionIndex() > 0) {\n <!-- In the integrations we remove the enter sign to spare some space-->\n <!-- <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div> -->\n }\n <mat-chip-set>\n <mat-chip disabled>{{ chipText }}</mat-chip>\n </mat-chip-set>\n</div>\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, input, linkedSignal, output, signal, viewChildren } from \"@angular/core\";\nimport { FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatOption, MatSelect, MatSelectTrigger } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n FormHelper,\n generatePrerequisiteDefaultValue,\n generateValueFormGroup,\n IFeatureFlagLimitations,\n IPrerequisiteSetting,\n PrerequisiteComparator,\n PrerequisiteFlagConditionForm,\n SettingType,\n} from \"../../../../../../bootstrap\";\nimport { FeatureFlagValueComponent } from \"../../../feature-flag-value/feature-flag-value.component\";\nimport { ConditionChipComponent } from \"../condition-chip/condition-chip.component\";\n\n@Component({\n selector: \"app-prerequisite-flag-condition\",\n templateUrl: \"./prerequisite-flag-condition.component.html\",\n styleUrls: [\"../../../components.scss\", \"./prerequisite-flag-condition.component.scss\"],\n imports: [\n ConditionChipComponent,\n MatFormField,\n FormsModule,\n MatTooltip,\n MatSelect,\n MatOption,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n FeatureFlagValueComponent,\n MatDivider,\n NgClass,\n MatIcon,\n MatIconButton,\n MatSuffix,\n MatInput,\n MatSelectTrigger,\n ],\n})\nexport class PrerequisiteFlagConditionComponent {\n readonly targetingRuleIndex = input.required<number>();\n readonly conditionIndex = input.required<number>();\n readonly formGroup = input.required<FormGroup<PrerequisiteFlagConditionForm>>();\n readonly prerequisiteSettings = input.required<IPrerequisiteSetting[]>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n\n readonly prerequisiteConditionChanged = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n SettingType = SettingType;\n\n readonly setting = linkedSignal(() => this.getSetting());\n\n readonly filterText = signal(\"\");\n readonly tooltips = viewChildren(MatTooltip);\n readonly filteredPrerequisiteSettings = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n return this.prerequisiteSettings().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText) && !s.key.toLocaleLowerCase().includes(filterText) })\n );\n });\n\n readonly hasFilteredSettings = computed(() => !!this.filteredPrerequisiteSettings().find(f => !f.hidden));\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 getSetting() {\n return this.prerequisiteSettings().find(\n s => s.settingId === this.formGroup().controls.prerequisiteSettingId.value\n );\n }\n\n prerequisiteSettingChanged() {\n const oldSetting = this.setting();\n const newSetting = this.getSetting();\n this.setting.update(() => newSetting);\n const changeNeeded = (oldSetting?.settingId !== newSetting?.settingId\n && (oldSetting?.predefinedVariations.length || newSetting?.predefinedVariations.length))\n || (oldSetting?.settingType !== newSetting?.settingType);\n\n const prerequisiteSettingType = newSetting?.settingType ?? SettingType.Boolean;\n const variations = newSetting?.predefinedVariations ?? [];\n if (changeNeeded) {\n this.formGroup().setControl(\n \"prerequisiteComparisonValue\",\n generateValueFormGroup(\n generatePrerequisiteDefaultValue(prerequisiteSettingType, variations),\n prerequisiteSettingType,\n variations,\n false,\n this.featureFlagLimitations()\n )\n );\n }\n this.prerequisiteConditionChanged.emit();\n }\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n\n onPrerequisiteSelectOpenedChange(opened: boolean) {\n this.clearFilter();\n if (!opened) {\n this.tooltips().forEach(t => t.hide(0));\n }\n }\n\n}\n","@let settingValue = setting();\n\n<div class=\"targeting-rule-line\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex()\" [conditionIndex]=\"conditionIndex()\" />\n <div class=\"explanation\">\n <a\n href=\"https://configcat.com/docs/targeting/targeting-rule/flag-condition/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"user-link\">\n flag\n </a>\n </div>\n </div>\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field class=\"small-form-field select no-suffix\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select\n #prerequisiteSelect=\"matSelect\"\n placeholder=\"Select feature flag ...\"\n matTooltip=\"Prerequisite flag key\"\n [formControl]=\"formGroup().controls.prerequisiteSettingId\"\n (selectionChange)=\"prerequisiteSettingChanged()\"\n (openedChange)=\"onPrerequisiteSelectOpenedChange($event)\">\n <mat-select-trigger>\n @if (settingValue) {\n {{ settingValue.name }} ({{ settingValue.key }})\n }\n </mat-select-trigger>\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter feature flags\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n\n @for (prerequisiteSetting of filteredPrerequisiteSettings(); track $index) {\n <mat-option [value]=\"prerequisiteSetting.settingId\" [ngClass]=\"{ hidden: prerequisiteSetting.hidden }\">\n <div class=\"feature-flag-selector-item\">\n @switch (prerequisiteSetting.settingType) {\n @case (SettingType.Boolean) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/feature_flag.svg\"\n alt=\"feature flag\" />\n }\n @case (SettingType.String) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/text.svg\"\n alt=\"text setting\" />\n }\n @case (SettingType.Int) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/whole.svg\"\n alt=\"whole number setting\" />\n }\n @case (SettingType.Double) {\n <img\n class=\"feature-flag-selector-img\"\n src=\"./assets/images/setting-types/decimal.svg\"\n alt=\"decimal number setting\" />\n }\n }\n <div class=\"item-text-wrapper\">\n <span\n [matTooltip]=\"prerequisiteSetting.name\"\n [matTooltipDisabled]=\"!prerequisiteSelect.panelOpen || !prerequisiteSetting.name\">\n {{ prerequisiteSetting.name }}\n </span>\n <code\n class=\"highlight copyable-like small\"\n [matTooltip]=\"prerequisiteSetting.key\"\n [matTooltipDisabled]=\"!prerequisiteSelect.panelOpen || !prerequisiteSetting.key\">\n {{ prerequisiteSetting.key }}\n </code>\n </div>\n </div>\n </mat-option>\n }\n @if (!hasFilteredSettings()) {\n <mat-option disabled>No feature flags found.</mat-option>\n }\n </mat-select>\n @if (formGroup().controls.prerequisiteSettingId.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.prerequisiteSettingId) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n @if (\n !settingValue || (!settingValue.predefinedVariations.length && settingValue.settingType === SettingType.Boolean)\n ) {\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field class=\"small-form-field select\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select\n [matTooltip]=\"\n `Comparison value: ${!!formGroup().controls.prerequisiteComparisonValue.controls.boolValue?.value} (type: ${SettingType.Boolean})`\n \"\n [matTooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\"\n [formControl]=\"formGroup().controls.comparator\">\n @for (prerequisiteComparator of booleanPrerequisiteComparators; track $index) {\n <mat-option [value]=\"prerequisiteComparator.value\">\n {{ prerequisiteComparator.label }}\n </mat-option>\n }\n </mat-select>\n @if (formGroup().controls.comparator.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparator) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n } @else {\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field class=\"small-form-field select\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select matTooltip=\"Comparator\" [formControl]=\"formGroup().controls.comparator\">\n @for (prerequisiteComparator of prerequisiteComparators; track $index) {\n <mat-option [value]=\"prerequisiteComparator.value\">\n {{ prerequisiteComparator.label }}\n </mat-option>\n }\n </mat-select>\n @if (formGroup().controls.comparator.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparator) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n }\n </div>\n @if (\n !(!settingValue || (!settingValue.predefinedVariations.length && settingValue.settingType === SettingType.Boolean))\n ) {\n <app-feature-flag-value\n class=\"wrapper-group grow\"\n tooltip=\"Comparison value\"\n [setting]=\"settingValue\"\n [formGroup]=\"formGroup().controls.prerequisiteComparisonValue\"\n [isPrerequisite]=\"true\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n }\n</div>\n","import { NgClass } from \"@angular/common\";\nimport { Component, computed, input, linkedSignal, output, signal, viewChildren } from \"@angular/core\";\nimport { FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatOption, MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { TrackingDirective } from \"../../../../../../_services/tracking.directive\";\nimport { FormHelper, ISegment, SegmentComparator, SegmentConditionForm } from \"../../../../../../bootstrap\";\nimport { ConditionChipComponent } from \"../condition-chip/condition-chip.component\";\n\n@Component({\n selector: \"app-segment-condition\",\n templateUrl: \"./segment-condition.component.html\",\n styleUrls: [\"../../../components.scss\", \"./segment-condition.component.scss\"],\n imports: [\n ConditionChipComponent,\n MatFormField,\n FormsModule,\n MatTooltip,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatInput,\n MatIconButton,\n MatMenuTrigger,\n TrackingDirective,\n MatIcon,\n MatMenu,\n MatMenuContent,\n MatMenuItem,\n MatSelect,\n MatOption,\n MatDivider,\n NgClass,\n MatSuffix,\n ],\n})\nexport class SegmentConditionComponent {\n readonly targetingRuleIndex = input.required<number>();\n readonly conditionIndex = input.required<number>();\n readonly formGroup = input.required<FormGroup<SegmentConditionForm>>();\n readonly segments = input.required<ISegment[]>();\n readonly canManageSegments = input.required<boolean>();\n readonly createSegmentRequested = output();\n readonly manageSegmentsRequested = output();\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 readonly filterText = signal(\"\");\n readonly tooltips = viewChildren(MatTooltip);\n readonly filteredSegments = linkedSignal(() => {\n const filterText = this.filterText().trim().toLocaleLowerCase();\n return this.segments().map(s => ({\n ...s,\n hidden: !!filterText && !s.name.toLocaleLowerCase().includes(filterText) && !s.description?.toLocaleLowerCase().includes(filterText) })\n );\n });\n readonly hasFilteredSegments = computed(() => !!this.filteredSegments().find(f => !f.hidden));\n\n createSegment() {\n this.createSegmentRequested.emit();\n }\n\n clearFilter() {\n this.filterText.set(\"\");\n }\n\n onSegmentSelectOpenedChange(opened: boolean) {\n this.clearFilter();\n if (!opened) {\n this.tooltips().forEach(t => t.hide(0));\n }\n }\n}\n","<div class=\"targeting-rule-line\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex()\" [conditionIndex]=\"conditionIndex()\" />\n\n <div class=\"explanation\">\n <a\n href=\"https://configcat.com/docs/targeting/targeting-rule/segment-condition/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"user-link\">\n user\n </a>\n </div>\n </div>\n\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field class=\"small-form-field select\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select matTooltip=\"Comparator\" [formControl]=\"formGroup().controls.comparator\">\n @for (comparator of segmentComparators; track $index) {\n <mat-option [value]=\"comparator.value\">\n {{ comparator.label }}\n </mat-option>\n }\n </mat-select>\n @if (formGroup().controls.comparator.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparator) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component suffixed\">\n <mat-form-field\n class=\"small-form-field\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n [class.select-suffixed]=\"canManageSegments()\">\n <mat-select\n #segmentSelect=\"matSelect\"\n matTooltip=\"Segment\"\n placeholder=\"Select segment ...\"\n [formControl]=\"formGroup().controls.segmentId\"\n (openedChange)=\"onSegmentSelectOpenedChange($event)\">\n <div class=\"menu-filter small-density-form-field\">\n <mat-form-field\n subscriptSizing=\"dynamic\"\n appearance=\"outline\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <input matInput placeholder=\"Filter segments\" [(ngModel)]=\"filterText\" />\n <span matSuffix [hidden]=\"!filterText()\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"clear-filter\"\n aria-label=\"Clear\"\n matTooltip=\"Clear search filters\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n </div>\n <mat-divider />\n\n @for (segment of filteredSegments(); track $index) {\n <mat-option\n [value]=\"segment.segmentId\"\n [matTooltip]=\"segment.description\"\n [matTooltipDisabled]=\"!segmentSelect.panelOpen || !segment.description\"\n [ngClass]=\"{ hidden: segment.hidden }\">\n {{ segment.name }}\n </mat-option>\n } @empty {\n <mat-option disabled>No segments available.</mat-option>\n }\n @if (segments().length && !hasFilteredSegments()) {\n <mat-option disabled>No segments found.</mat-option>\n }\n </mat-select>\n @if (canManageSegments()) {\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Create and manage segments\"\n [matMenuTriggerFor]=\"segmentMenu\"\n [track]=\"['segment menu click', 'feature flags and settings']\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n }\n @if (formGroup().controls.segmentId.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.segmentId) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-menu #segmentMenu=\"matMenu\">\n <ng-template matMenuContent>\n <a\n mat-menu-item\n [track]=\"['create segment click', 'Feature flags & settings V2 page']\"\n (click)=\"createSegmentRequested.emit()\">\n <mat-icon>add</mat-icon>\n <span>Create new segment</span>\n </a>\n <a\n mat-menu-item\n [track]=\"['manage segment click', 'Feature flags & settings V2 page']\"\n (click)=\"manageSegmentsRequested.emit()\">\n <mat-icon class=\"icon-transform-rotate\">pie_chart</mat-icon>\n <span>Manage segments</span>\n </a>\n </ng-template>\n</mat-menu>\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 readonly 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 offsetDate(date: Date, offsetMins: number): Date {\n return new Date(date.getTime() + offsetMins * 60000);\n }\n}\n","import { Component, DestroyRef, forwardRef, inject, input, OnInit } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n Validators,\n} from \"@angular/forms\";\nimport { DateAdapter } from \"@angular/material/core\";\nimport { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from \"@angular/material/datepicker\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatTimepicker, MatTimepickerInput, MatTimepickerToggle } from \"@angular/material/timepicker\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { distinctUntilChanged } from \"rxjs\";\nimport { DateHelper } from \"../../../_services/date-helper\";\nimport { AppDateAdapter, FormHelper } from \"../../../bootstrap\";\n\nexport interface DateTimeForm {\n dateValue: FormControl<Date | undefined>;\n timeValue: FormControl<Date | undefined>;\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 imports: [\n MatFormField,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatTooltip,\n MatDatepicker,\n MatDatepickerToggle,\n MatDatepickerInput,\n MatSuffix,\n MatTimepicker,\n MatTimepickerInput,\n MatTimepickerToggle,\n MatError,\n ],\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor, Validator {\n FormHelper = FormHelper;\n destroyRef = inject(DestroyRef);\n formGroup: FormGroup<DateTimeForm> = new FormGroup<DateTimeForm>({\n dateValue: new FormControl<Date | undefined>(void 0, { nonNullable: true, validators: [Validators.required] }),\n timeValue: new FormControl<Date | undefined>(void 0, { nonNullable: true, validators: [Validators.required] }),\n });\n private onChangeModel?: (value: number | undefined) => void;\n private onTouchModel?: () => void;\n readonly dateTooltip = input<string>();\n readonly timeTooltip = input<string>();\n\n ngOnInit(): void {\n this.formGroup.valueChanges.pipe(\n takeUntilDestroyed(this.destroyRef),\n distinctUntilChanged((a, b) => a.dateValue === b.dateValue && a.timeValue === b.timeValue)\n ).subscribe(value => {\n if (this.onChangeModel) {\n if (!value.dateValue || !value.timeValue\n || isNaN(value.dateValue.getTime())\n || isNaN(value.timeValue.getTime())\n ) {\n this.onChangeModel(void 0);\n } else {\n let dateTimeValue = new Date(value.dateValue.getFullYear(), value.dateValue.getMonth(), value.dateValue.getDate(),\n value.timeValue.getHours(), value.timeValue.getMinutes());\n dateTimeValue = DateHelper.offsetDate(dateTimeValue, -dateTimeValue.getTimezoneOffset());\n this.onChangeModel(dateTimeValue.getTime() / 1000);\n }\n }\n if (this.onTouchModel) {\n this.onTouchModel();\n }\n });\n }\n\n writeValue(obj: number): void {\n if (!obj) {\n this.formGroup.patchValue({ dateValue: void 0, timeValue: void 0 });\n } else {\n let dateTimeValue = new Date(obj * 1000.0);\n dateTimeValue = DateHelper.offsetDate(dateTimeValue, dateTimeValue.getTimezoneOffset());\n this.formGroup.patchValue({ dateValue: dateTimeValue, timeValue: dateTimeValue }, { onlySelf: true, emitEvent: false });\n }\n }\n\n registerOnChange(fn: (value: number | undefined) => void): void {\n this.onChangeModel = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchModel = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (isDisabled) {\n this.formGroup.disable();\n } else {\n this.formGroup.enable();\n }\n }\n\n validate(): ValidationErrors | null {\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-form-field suffixed small-icon-button\">\n <input\n matInput\n [formControl]=\"formGroup.controls.dateValue\"\n [matDatepicker]=\"datepicker\"\n [matTooltip]=\"dateTooltip()\" />\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\" />\n <mat-datepicker #datepicker />\n @if (formGroup.controls.dateValue.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.dateValue) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n <div class=\"component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field suffixed small-icon-button\">\n <input\n matInput\n [matTimepicker]=\"timepicker\"\n [formControl]=\"formGroup.controls.timeValue\"\n [matTooltip]=\"timeTooltip()\" />\n <mat-timepicker #timepicker />\n\n <div matSuffix class=\"suffix\">\n <div>UTC</div>\n <mat-timepicker-toggle [for]=\"timepicker\" />\n </div>\n @if (formGroup.controls.timeValue.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.timeValue) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n</div>\n","import { CdkDrag, CdkDragHandle } from \"@angular/cdk/drag-drop\";\nimport { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { NgClass, NgTemplateOutlet } from \"@angular/common\";\nimport { Component, inject, OnInit } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatRadioButton, MatRadioGroup } from \"@angular/material/radio\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\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\nexport interface ComparatorDialogData {\n selectedComparator: UserComparator;\n readOnly: boolean;\n}\n\n@Component({\n selector: \"app-comparator-dialog\",\n templateUrl: \"./comparator-dialog.component.html\",\n styleUrls: [\"./comparator-dialog.component.scss\"],\n imports: [\n MatDialogTitle,\n CdkDrag,\n CdkDragHandle,\n MatButtonToggleGroup,\n FormsModule,\n RxReactiveFormsModule,\n MatButtonToggle,\n CdkScrollable,\n MatDialogContent,\n NgTemplateOutlet,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n MatRadioGroup,\n NgClass,\n MatRadioButton,\n MatTooltip,\n MatIcon,\n ],\n})\nexport class ComparatorDialogComponent implements OnInit {\n dialogRef = inject<MatDialogRef<ComparatorDialogComponent, UserComparator>>(MatDialogRef);\n data = inject<ComparatorDialogData>(MAT_DIALOG_DATA);\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 {\n value: UserComparator.TextEquals,\n sensitiveValue: UserComparator.SensitiveTextEquals,\n group: ComparatorGroup.Text,\n label: \"EQUALS\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK is equal to the comparison value set on the ConfigCat Dashboard\",\n },\n {\n value: UserComparator.TextDoesNotEqual,\n sensitiveValue: UserComparator.SensitiveTextDoesNotEqual,\n group: ComparatorGroup.Text,\n label: \"NOT EQUALS\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK is not equal to the comparison value\",\n },\n {\n value: UserComparator.IsOneOf,\n sensitiveValue: UserComparator.SensitiveIsOneOf,\n group: ComparatorGroup.Text,\n label: \"IS ONE OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK is equal to any of the comparison values\",\n },\n {\n value: UserComparator.IsNotOneOf,\n sensitiveValue: UserComparator.SensitiveIsNotOneOf,\n group: ComparatorGroup.Text,\n label: \"IS NOT ONE OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK is not equal to any of the comparison values\",\n },\n {\n value: UserComparator.TextStartsWithAnyOf,\n sensitiveValue: UserComparator.SensitiveTextStartsWithAnyOf,\n group: ComparatorGroup.Text,\n label: \"STARTS WITH ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK starts with any of the comparison values\",\n },\n {\n value: UserComparator.TextNotStartsWithAnyOf,\n sensitiveValue: UserComparator.SensitiveTextNotStartsWithAnyOf,\n group: ComparatorGroup.Text,\n label: \"NOT STARTS WITH ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK does not start with any of the comparison values\",\n },\n {\n value: UserComparator.TextEndsWithAnyOf,\n sensitiveValue: UserComparator.SensitiveTextEndsWithAnyOf,\n group: ComparatorGroup.Text,\n label: \"ENDS WITH ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK ends with any of the comparison values\",\n },\n {\n value: UserComparator.TextNotEndsWithAnyOf,\n sensitiveValue: UserComparator.SensitiveTextNotEndsWithAnyOf,\n group: ComparatorGroup.Text,\n label: \"NOT ENDS WITH ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK does not end with any of the comparison values\",\n },\n {\n value: UserComparator.ContainsAnyOf,\n group: ComparatorGroup.Text,\n label: \"CONTAINS ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK contains any comparison values as a substring\",\n },\n {\n value: UserComparator.DoesNotContainAnyOf,\n group: ComparatorGroup.Text,\n label: \"NOT CONTAINS ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK does not contain any comparison values as a substring\",\n },\n\n {\n value: UserComparator.NumberEquals,\n group: ComparatorGroup.Number,\n label: \"= (EQUALS)\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is equal to the comparison value\",\n },\n {\n value: UserComparator.NumberDoesNotEqual,\n group: ComparatorGroup.Number,\n label: \"!= (NOT EQUALS)\",\n description:\n \"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 },\n {\n value: UserComparator.NumberLess,\n group: ComparatorGroup.Number,\n label: \"< (LESS THAN)\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is less than the comparison value\",\n },\n {\n value: UserComparator.NumberLessOrEquals,\n group: ComparatorGroup.Number,\n label: \"<= (LESS THAN OR EQUAL)\",\n description:\n \"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 },\n {\n value: UserComparator.NumberGreater,\n group: ComparatorGroup.Number,\n label: \"> (GREATER THAN)\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is greater than the comparison value\",\n },\n {\n value: UserComparator.NumberGreaterOrEquals,\n group: ComparatorGroup.Number,\n label: \">= (GRATER THAN OR EQUAL)\",\n description:\n \"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\n {\n value: UserComparator.SemVerIsOneOf,\n group: ComparatorGroup.Semver,\n label: \"IS ONE OF\",\n description:\n \"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 },\n {\n value: UserComparator.SemVerIsNotOneOf,\n group: ComparatorGroup.Semver,\n label: \"IS NOT ONE OF\",\n description:\n \"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 },\n {\n value: UserComparator.SemVerLess,\n group: ComparatorGroup.Semver,\n label: \"< (LESS THAN)\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is less than the comparison value\",\n },\n {\n value: UserComparator.SemVerLessOrEquals,\n group: ComparatorGroup.Semver,\n label: \"<= (LESS THAN OR EQUAL)\",\n description:\n \"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 },\n {\n value: UserComparator.SemVerGreater,\n group: ComparatorGroup.Semver,\n label: \"> (GREATER THAN)\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is greater than the comparison value\",\n },\n {\n value: UserComparator.SemVerGreaterOrEquals,\n group: ComparatorGroup.Semver,\n label: \">= (GRATER THAN OR EQUAL)\",\n description:\n \"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\n {\n value: UserComparator.DateTimeBefore,\n group: ComparatorGroup.DateTime,\n label: \"BEFORE (UTC)\",\n description:\n \"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 },\n {\n value: UserComparator.DateTimeAfter,\n group: ComparatorGroup.DateTime,\n label: \"AFTER (UTC)\",\n description:\n \"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\n {\n value: UserComparator.ArrayContainsAnyOf,\n group: ComparatorGroup.Array,\n sensitiveValue: UserComparator.SensitiveArrayContainsAnyOf,\n label: \"ARRAY CONTAINS ANY OF\",\n description:\n \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a string list) contains any of the comparison values\",\n },\n {\n value: UserComparator.ArrayDoesNotContainAnyOf,\n group: ComparatorGroup.Array,\n sensitiveValue: UserComparator.SensitiveArrayDoesNotContainAnyOf,\n label: \"ARRAY NOT CONTAINS ANY OF\",\n description:\n \"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\n ngOnInit(): void {\n const selected = this.comparators.find(\n c => c.value === this.data.selectedComparator || c.sensitiveValue === this.data.selectedComparator\n )!;\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(\n c => c.value === this.selectedComparator || c.sensitiveValue === this.selectedComparator\n )!;\n const result = this.isConfidential && selected.sensitiveValue ? selected.sensitiveValue : selected.value;\n this.dialogRef.close(result);\n }\n}\n","<h1 mat-dialog-title cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle class=\"draggable\">\n Comparator selector\n</h1>\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\">\n @switch (selectedGroup) {\n @case (ComparatorGroup.Text) {\n <div>\n <p>\n The following comparators expect the\n <i>comparison attribute's</i>\n value (passed to the SDK via the\n <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n ) and the\n <i>comparison value</i>\n (specified on the Dashboard) to contain string/text. The comparison performed by these comparators is\n case-sensitive.\n </p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{ group: ComparatorGroup.Text }\" />\n <ng-container [ngTemplateOutlet]=\"confidential\" />\n </div>\n }\n @case (ComparatorGroup.Number) {\n <div>\n <p>\n The following comparators expect the\n <i>comparison attribute's</i>\n value (passed to the SDK via the\n <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n ) and the\n <i>comparison value</i>\n (specified on the Dashboard) to contain numbers.\n </p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{ group: ComparatorGroup.Number }\" />\n </div>\n }\n @case (ComparatorGroup.Semver) {\n <div>\n <p>\n The following comparators expect the\n <i>comparison attribute's</i>\n value (passed to the SDK via the\n <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n ) and the\n <i>comparison value</i>\n (specified on the Dashboard) to contain semantic versions.\n </p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{ group: ComparatorGroup.Semver }\" />\n </div>\n }\n @case (ComparatorGroup.DateTime) {\n <div>\n <p>\n The following comparators expect the\n <i>comparison attribute's</i>\n value (passed to the SDK via the\n <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n ) and the\n <i>comparison value</i>\n (specified on the Dashboard) to contain datetimes.\n </p>\n <ng-container\n [ngTemplateOutlet]=\"comparators\"\n [ngTemplateOutletContext]=\"{ group: ComparatorGroup.DateTime }\" />\n </div>\n }\n @case (ComparatorGroup.Array) {\n <div>\n <p>\n The following comparators expect the\n <i>comparison attribute's</i>\n value (passed to the SDK via the\n <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n ) and the\n <i>comparison value</i>\n (specified on the Dashboard) to contain items of a string/text list. The comparison performed by these\n comparators is case-sensitive.\n </p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{ group: ComparatorGroup.Array }\" />\n <ng-container [ngTemplateOutlet]=\"confidential\" />\n </div>\n }\n }\n</div>\n<div mat-dialog-actions>\n @if (!data.readOnly) {\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button mat-dialog-close>Cancel</button>\n } @else {\n <button type=\"button\" mat-stroked-button color=\"primary\" mat-dialog-close>Close</button>\n }\n</div>\n\n<ng-template #comparators let-group=\"group\">\n <div>\n <mat-radio-group color=\"primary\" (change)=\"comparatorChange($event.value)\">\n <div class=\"comparator-container\">\n @for (comparator of listComparators(group); track $index; let i = $index) {\n <div\n class=\"item\"\n [ngClass]=\"'col-' + (i % 2)\"\n [class.selected]=\"comparator.value === selectedComparator\"\n (click)=\"comparatorChange(comparator.value)\">\n <mat-radio-button\n [value]=\"comparator.value\"\n [disabled]=\"data.readOnly\"\n [checked]=\"comparator.value === selectedComparator\"\n [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 @switch (comparator.value) {\n <!-- TEXT -->\n @case (UserComparator.TextEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob@foo.com</span>\n EQUALS\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">bob@foo.com</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextDoesNotEqual) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice@foo.com</span>\n NOT EQUALS\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">bob@foo.com</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.IsOneOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span>\n IS ONE OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [ Android, macOS,\n <span class=\"match-val\">iOS</span>\n ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.IsNotOneOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span>\n IS NOT ONE OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, Windows ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextStartsWithAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob@foo.com</span>\n STARTS WITH ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">bob</span>\n , jane ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextNotStartsWithAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice@foo.com</span>\n NOT STARTS WITH ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ bob, jane ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextEndsWithAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob@foo.com</span>\n ENDS WITH ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">@foo.com</span>\n , @bar.com ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextNotEndsWithAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob@example.com</span>\n NOT ENDS WITH ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ @foo.com, @bar.com ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.ContainsAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://test-app.foo.com</span>\n CONTAINS ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">test</span>\n , localhost ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.DoesNotContainAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://app.foo.com</span>\n NOT CONTAINS ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ test, localhost ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n <!-- NUMBER -->\n @case (UserComparator.NumberEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span>\n =\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.NumberDoesNotEqual) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span>\n !=\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">3.14</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.NumberLess) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span>\n <\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.NumberLessOrEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span>\n <=\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.NumberGreater) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span>\n >\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.NumberGreaterOrEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span>\n >=\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span>\n <span class=\"arrow\">➔</span>\n true\n }\n <!-- SEMVER -->\n @case (UserComparator.SemVerIsOneOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span>\n IS ONE OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">1.0.0</span>\n , 4.3.5 ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.SemVerIsNotOneOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2.1.0</span>\n IS NOT ONE OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ 1.0.0, 4.3.5 ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.SemVerLess) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span>\n <\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.SemVerLessOrEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span>\n <=\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.SemVerGreater) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span>\n >\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.0.0-alpha</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.SemVerGreaterOrEquals) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.2.0</span>\n >=\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.1.0</span>\n <span class=\"arrow\">➔</span>\n true\n }\n <!-- DATETIME -->\n @case (UserComparator.DateTimeBefore) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 10:36:24</span>\n BEFORE\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.DateTimeAfter) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 15:41:06</span>\n AFTER\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span>\n <span class=\"arrow\">➔</span>\n true\n }\n <!-- ARRAY -->\n @case (UserComparator.ArrayContainsAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Writer, Reader ]</span>\n ARRAY CONTAINS ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">Writer</span>\n , Admin ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.ArrayDoesNotContainAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Guest, Reader ]</span>\n ARRAY NOT CONTAINS ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Writer, Admin ]</span>\n <span class=\"arrow\">➔</span>\n true\n }\n }\n </div>\n </div>\n </div>\n }\n </div>\n </mat-radio-group>\n </div>\n</ng-template>\n\n<ng-template #confidential>\n <p>\n Select how the\n <i>comparison values</i>\n should be persisted:\n </p>\n <div\n 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\" color=\"primary\" (change)=\"confidentialChange($event.value)\">\n <div class=\"confidential item\" (click)=\"confidentialChange(true)\">\n <mat-radio-button [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\n email addresses, names, etc).\n </div>\n </div>\n <div class=\"cleartext item\" (click)=\"confidentialChange(false)\">\n <mat-radio-button\n [value]=\"false\"\n [checked]=\"!isConfidential\"\n [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\n as plain text in the\n <i>config JSON</i>\n .\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { CdkTextareaAutosize } from \"@angular/cdk/text-field\";\nimport { SlicePipe } from \"@angular/common\";\nimport { AfterViewInit, Component, DestroyRef, effect, inject, OnInit, viewChild } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport { MatChipRow, MatChipSet } from \"@angular/material/chips\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatPaginator } from \"@angular/material/paginator\";\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable,\n MatTableDataSource,\n} from \"@angular/material/table\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { Subscription } from \"rxjs\";\nimport { AceEditorComponent } from \"../../../../../../../..//lib/ace-editor/ace-editor.component\";\nimport { AutofocusDirective } from \"../../../../../../../../lib/_directives/autofocus.directive\";\nimport { PastedDataTrimmerDirective } from \"../../../../../../../../lib/_directives/pasted-data-trimmer.directive\";\nimport {\n addComparisonValueListValueItems,\n ComparisonValueListForm,\n ComparisonValueListParseResult,\n formatValuesAndHintAsCsv,\n formatValuesAndHintAsJson,\n formatValuesAsCsv,\n FormHelper,\n generateComparisonValueFormGroup,\n IComparisonValueListModel,\n IFeatureFlagLimitations,\n parseValuesAndHintsFromCsv,\n parseValuesAndHintsFromJson,\n parseValuesFromCsv,\n UserComparator,\n} from \"../../../../../../../bootstrap\";\n\nexport interface PopoutListEditorDialogData {\n comparisonValueList: IComparisonValueListModel[];\n comparator: UserComparator;\n featureFlagLimitations: IFeatureFlagLimitations;\n readOnly: boolean;\n}\n\nexport interface PopoutListEditorDialogResult {\n comparisonValueList: IComparisonValueListModel[];\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 imports: [\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatButtonToggleGroup,\n FormsModule,\n MatButtonToggle,\n MatTooltip,\n MatFormField,\n MatLabel,\n MatInput,\n MatIconButton,\n MatIcon,\n MatTable,\n MatColumnDef,\n MatHeaderCellDef,\n MatHeaderCell,\n MatCellDef,\n MatCell,\n AutofocusDirective,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatHeaderRowDef,\n MatHeaderRow,\n MatRowDef,\n MatRow,\n MatPaginator,\n AceEditorComponent,\n CdkTextareaAutosize,\n MatChipSet,\n MatChipRow,\n MatButton,\n MatDialogActions,\n MatDialogClose,\n SlicePipe,\n PastedDataTrimmerDirective,\n ],\n})\nexport class PopoutListEditorDialogComponent implements OnInit, AfterViewInit {\n dialogRef = inject<MatDialogRef<PopoutListEditorDialogComponent, PopoutListEditorDialogResult>>(MatDialogRef);\n data = inject<PopoutListEditorDialogData>(MAT_DIALOG_DATA);\n\n destroyRef = inject(DestroyRef);\n FormHelper = FormHelper;\n VisualizationType = VisualizationType;\n\n dataSource = new MatTableDataSource<FormGroup<ComparisonValueListForm>>([]);\n plainText = \"\";\n listValueFormArray!: FormArray<FormGroup<ComparisonValueListForm>>;\n filterValue = \"\";\n valueChanged = false;\n currentlyHasHints = false;\n\n displayedColumns = [\"value\", \"hint\", \"actions\"];\n visualizationType = VisualizationType.Table;\n comparisonValueListParseResult?: ComparisonValueListParseResult;\n valueChangeSubscription?: Subscription;\n focusIndex = 0;\n\n readonly paginator = viewChild<MatPaginator>(\"paginator\");\n readonly paginatorChangeEffect = effect(() => {\n const paginator = this.paginator();\n if (paginator) {\n this.dataSource.paginator = paginator;\n }\n });\n\n ngOnInit(): void {\n const comparisonValueList = this.data.comparisonValueList;\n if (!comparisonValueList.length) {\n comparisonValueList.push({ value: \"\", hint: null });\n }\n\n this.setFormGroup(comparisonValueList);\n }\n\n setFormGroup(comparisonValueList: IComparisonValueListModel[]) {\n this.listValueFormArray = generateComparisonValueFormGroup(\n { listValue: comparisonValueList, doubleValue: null, stringValue: null },\n this.data.comparator,\n this.data.readOnly,\n this.data.featureFlagLimitations\n ).controls.listValue!;\n\n if (this.listValueFormArray.invalid) {\n this.listValueFormArray.markAllAsTouched();\n }\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n this.checkHasHints();\n this.valueChangeSubscription = this.listValueFormArray.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.checkHasHints();\n },\n });\n }\n\n checkHasHints() {\n this.currentlyHasHints = !!this.listValueFormArray.controls.find(r => !!r.value.hint);\n }\n\n setDataSource() {\n this.dataSource.data = this.listValueFormArray.controls;\n if (this.dataSource.paginator) {\n this.dataSource.paginator.length = this.dataSource.data.length;\n }\n }\n\n ngAfterViewInit(): void {\n this.dataSource = new MatTableDataSource(this.listValueFormArray.controls);\n this.dataSource.paginator = this.paginator() ?? null;\n this.dataSource.filterPredicate = (row, filter) =>\n [\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.focusIndex = -1;\n this.dataSource.filter = this.filterValue.trim().toLowerCase();\n\n if (this.dataSource.paginator) {\n this.dataSource.paginator.firstPage();\n }\n }\n\n add() {\n if (this.listValueFormArray.controls.length >= this.data.featureFlagLimitations.maxComparisonValueListLength) {\n return;\n }\n\n addComparisonValueListValueItems(\n this.data.comparator,\n this.listValueFormArray,\n [{ value: \"\", hint: null }],\n this.data.featureFlagLimitations\n );\n\n this.setDataSource();\n this.filterValue = \"\";\n this.applyFilter();\n this.focusIndex = this.listValueFormArray.controls.length - 1;\n this.dataSource.paginator?.lastPage();\n }\n\n remove(row: FormGroup<ComparisonValueListForm>) {\n const index = this.listValueFormArray.controls.findIndex(c => c.controls.index.value === row.controls.index.value);\n if (index === -1) {\n return;\n }\n this.listValueFormArray.controls.splice(index, 1);\n this.listValueFormArray.updateValueAndValidity();\n this.listValueFormArray.markAsTouched();\n this.listValueFormArray.markAsDirty();\n this.setDataSource();\n }\n\n set() {\n if (this.visualizationType !== VisualizationType.Table) {\n if (!this.comparisonValueListParseResult || this.comparisonValueListParseResult.error) {\n return;\n }\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n this.valueChanged = false;\n }\n\n if (this.listValueFormArray.invalid) {\n this.listValueFormArray.markAllAsTouched();\n return;\n }\n\n this.dialogRef.close({ comparisonValueList: this.getRawValue() });\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.listValueFormArray.value.map(v => {\n return { value: v.value, hint: v.hint ?? \"\" } as IComparisonValueListModel;\n });\n }\n\n focusInvalid() {\n if (this.visualizationType !== VisualizationType.Table) {\n this.changeVisualizationType(VisualizationType.Table);\n }\n const invalidIndex = this.listValueFormArray.controls.findIndex(c => c.invalid);\n const paginator = this.paginator();\n if (paginator && invalidIndex !== -1) {\n this.listValueFormArray.markAllAsTouched();\n this.filterValue = \"\";\n this.applyFilter();\n paginator.length = this.dataSource.data.length;\n const pageNumber = Math.floor(invalidIndex / (this.dataSource.paginator?.pageSize ?? 5));\n this.focusIndex = invalidIndex;\n paginator.pageIndex = pageNumber;\n paginator.page.emit({\n pageIndex: pageNumber,\n pageSize: paginator.pageSize,\n length: paginator.length,\n });\n }\n }\n\n changeVisualizationType(visualizationType: VisualizationType) {\n if (this.valueChanged && this.visualizationType !== VisualizationType.Table) {\n if (!this.comparisonValueListParseResult || 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 = formatValuesAndHintAsJson(this.getRawValue());\n break;\n case VisualizationType.Csv:\n this.plainText = formatValuesAndHintAsCsv(this.getRawValue());\n break;\n case VisualizationType.Csl:\n this.plainText = 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 && !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 = parseValuesAndHintsFromJson(\n this.plainText\n );\n break;\n case VisualizationType.Csv:\n this.comparisonValueListParseResult = parseValuesAndHintsFromCsv(this.plainText);\n break;\n case VisualizationType.Csl:\n this.comparisonValueListParseResult = 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: Event) {\n const files = (event.target as HTMLInputElement).files;\n if (!files || files.length === 0) {\n return;\n }\n const file = files[0];\n const fileReader = new FileReader();\n fileReader.onload = () => {\n this.plainText = fileReader.result as string;\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 <div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"visualizationType\" (ngModelChange)=\"changeVisualizationType($event)\">\n <mat-button-toggle\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [value]=\"VisualizationType.Table\"\n [disabled]=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult?.error\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Table || !comparisonValueListParseResult?.error\">\n Table\n </mat-button-toggle>\n <mat-button-toggle\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [value]=\"VisualizationType.Json\"\n [disabled]=\"visualizationType !== VisualizationType.Json && comparisonValueListParseResult?.error\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Json || !comparisonValueListParseResult?.error\">\n JSON\n </mat-button-toggle>\n <mat-button-toggle\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [value]=\"VisualizationType.Csv\"\n [disabled]=\"visualizationType !== VisualizationType.Csv && comparisonValueListParseResult?.error\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Csv || !comparisonValueListParseResult?.error\">\n CSV with hints\n </mat-button-toggle>\n <mat-button-toggle\n [value]=\"VisualizationType.Csl\"\n [disabled]=\"\n (visualizationType !== VisualizationType.Csl && comparisonValueListParseResult?.error) || currentlyHasHints\n \"\n [matTooltip]=\"\n currentlyHasHints\n ? 'There are hints set to your values so the CSV without hints view is not available'\n : 'Can not switch between views while there are errors in the current view.'\n \"\n [matTooltipDisabled]=\"\n (visualizationType === VisualizationType.Csl || !comparisonValueListParseResult?.error) && !currentlyHasHints\n \">\n CSV without hints\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"table-format\" [hidden]=\"visualizationType !== VisualizationType.Table\">\n <p class=\"description\">\n Modify the items within the list of comparison values. The hint helps you label the value for easier reference.\n </p>\n <div class=\"controls\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"small-density-form-field\" subscriptSizing=\"dynamic\">\n <mat-label>Filter</mat-label>\n <input\n matInput\n placeholder=\"Filter values and hints.\"\n [(ngModel)]=\"filterValue\"\n (ngModelChange)=\"applyFilter()\" />\n </mat-form-field>\n </div>\n <div class=\"control-button-container\">\n <div\n class=\"add-btn-container\"\n matTooltip=\"Add item\"\n [matTooltipDisabled]=\"\n listValueFormArray.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\n \">\n <div\n [matTooltip]=\"\n 'Maximum ' + data.featureFlagLimitations.maxComparisonValueListLength + ' items can be added.'\n \"\n [matTooltipDisabled]=\"\n listValueFormArray.controls.length < data.featureFlagLimitations.maxComparisonValueListLength\n \">\n @if (!data.readOnly) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"add-btn\"\n [disabled]=\"\n listValueFormArray.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\n \"\n (click)=\"add()\">\n <mat-icon>add_circle</mat-icon>\n </button>\n }\n </div>\n </div>\n\n @if (!data.readOnly) {\n <button\n type=\"button\"\n class=\"action-icon-button\"\n mat-icon-button\n matTooltip=\"Remove all\"\n (click)=\"removeAll()\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n </div>\n <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"value\">\n <th *matHeaderCellDef mat-header-cell mat-sort-header>Comparison value</th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field\">\n @if (paginator.pageIndex * paginator.pageSize + i === focusIndex) {\n <input matInput focus appPastedDataTrimmer [formControl]=\"row.controls.value\" />\n } @else {\n <input matInput appPastedDataTrimmer [formControl]=\"row.controls.value\" />\n }\n @if (row.controls.value.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(row.controls.value) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th *matHeaderCellDef mat-header-cell mat-sort-header>Hint</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field\">\n <input matInput [formControl]=\"row.controls.hint\" />\n @if (row.controls.hint.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(row.controls.hint) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"actions\">\n <th *matHeaderCellDef mat-header-cell mat-sort-header></th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n @if (!data.readOnly) {\n <button mat-icon-button type=\"button\" matTooltip=\"Remove item\" (click)=\"remove(row)\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </td>\n </ng-container>\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n </table>\n <mat-paginator #paginator showFirstLastButtons [pageSizeOptions]=\"[5, 10, 50, 100]\" />\n </div>\n\n @if (visualizationType === VisualizationType.Json) {\n <div class=\"json-format\">\n <div class=\"actions\">\n <div>Modify the items via a JSON text.</div>\n @if (!data.readOnly) {\n <div>\n <input\n #fileInput\n hidden=\"true\"\n type=\"file\"\n accept=\".txt,.json\"\n (click)=\"fileInput.value = ''\"\n (change)=\"loadFile($event)\" />\n <button\n type=\"button\"\n class=\"action-icon-button\"\n mat-icon-button\n matTooltip=\"Load from file (your values will be overwritten)\"\n (click)=\"fileInput.click()\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n }\n </div>\n <div class=\"json-editor\">\n <app-ace-editor [readOnly]=\"data.readOnly\" [(value)]=\"plainText\" (valueChange)=\"textValueChanged()\" />\n </div>\n </div>\n } @else if (visualizationType === VisualizationType.Csv) {\n <div class=\"csv-format\">\n <div class=\"actions\">\n <div>Modify the items via a CSV (values and hints) text.</div>\n @if (!data.readOnly) {\n <div>\n <input\n #fileInput\n hidden=\"true\"\n type=\"file\"\n accept=\".txt,.csv\"\n (click)=\"fileInput.value = ''\"\n (change)=\"loadFile($event)\" />\n <button\n type=\"button\"\n mat-icon-button\n class=\"action-icon-button\"\n matTooltip=\"Load from file (your values will be overwritten)\"\n (click)=\"fileInput.click()\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n }\n </div>\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea\n matInput\n autofocus\n focus\n rows=\"17\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\"\n spellcheck=\"false\"\n [readonly]=\"data.readOnly\"\n [(ngModel)]=\"plainText\"\n (ngModelChange)=\"textValueChanged()\"></textarea>\n </mat-form-field>\n </div>\n } @else if (visualizationType === VisualizationType.Csl) {\n <div class=\"csv-format\">\n <div class=\"actions\">\n <div>Modify the items via a CSV (values only) text.</div>\n @if (!data.readOnly) {\n <div>\n <input\n #fileInput\n hidden=\"true\"\n type=\"file\"\n accept=\".txt,.csv\"\n (click)=\"fileInput.value = ''\"\n (change)=\"loadFile($event)\" />\n <button\n type=\"button\"\n mat-icon-button\n class=\"action-icon-button\"\n matTooltip=\"Load from file (your values will be overwritten)\"\n (click)=\"fileInput.click()\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n }\n </div>\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea\n matInput\n autofocus\n focus\n rows=\"17\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\"\n spellcheck=\"false\"\n [readonly]=\"data.readOnly\"\n [(ngModel)]=\"plainText\"\n (ngModelChange)=\"textValueChanged()\"></textarea>\n </mat-form-field>\n </div>\n }\n\n @if (visualizationType !== VisualizationType.Table && comparisonValueListParseResult) {\n <div>\n @if (!comparisonValueListParseResult.error && comparisonValueListParseResult.comparisonValueList.length) {\n <p class=\"small-chip-input\">\n Preview ({{ comparisonValueListParseResult.comparisonValueList.length }} items)\n <mat-chip-set>\n @for (listValueItem of comparisonValueListParseResult.comparisonValueList | slice: 0 : 10; track $index) {\n <span class=\"chip-container\" [matTooltip]=\"listValueItem.hint ? listValueItem.hint : 'No hint'\">\n <mat-chip-row>\n {{ listValueItem.value }}\n </mat-chip-row>\n </span>\n }\n @if (comparisonValueListParseResult.comparisonValueList.length > 10) {\n <mat-chip-row>\n {{ comparisonValueListParseResult.comparisonValueList.length - 10 }} remaining items...\n </mat-chip-row>\n }\n </mat-chip-set>\n </p>\n }\n @if (comparisonValueListParseResult.error) {\n <mat-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 }\n </div>\n }\n @if (listValueFormArray.touched && listValueFormArray.invalid && listValueFormArray.errors) {\n <mat-error class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>{{ FormHelper.getErrorMessage(listValueFormArray) }}</span>\n </mat-error>\n }\n @if (!valueChanged && listValueFormArray.touched && listValueFormArray.invalid) {\n <mat-error class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Invalid items. </span>\n <div>\n @if (visualizationType !== VisualizationType.Table || (paginator?.getNumberOfPages() ?? 0) > 1) {\n <button type=\"button\" mat-stroked-button color=\"primary\" class=\"jump\" (click)=\"focusInvalid()\">\n Jump to fix\n </button>\n }\n </div>\n </mat-error>\n }\n</div>\n<div mat-dialog-actions>\n @if (!data.readOnly) {\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]>Cancel</button>\n } @else {\n <button type=\"button\" mat-stroked-button color=\"primary\" [mat-dialog-close]>Close</button>\n }\n</div>\n","import { Clipboard } from \"@angular/cdk/clipboard\";\nimport { COMMA, ENTER } from \"@angular/cdk/keycodes\";\nimport { KeyValuePipe, NgClass, NgTemplateOutlet, SlicePipe } from \"@angular/common\";\nimport { ChangeDetectorRef, Component, inject, input, OnChanges, viewChild } from \"@angular/core\";\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport {\n MatChipEditedEvent,\n MatChipGrid,\n MatChipInput,\n MatChipInputEvent,\n MatChipRemove,\n MatChipRow,\n} from \"@angular/material/chips\";\nimport { DateAdapter, ErrorStateMatcher, MatOptgroup, MatOption } from \"@angular/material/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatError, MatFormField, MatPrefix, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { ConfirmationDialogData } from \"projects/ng-configcat-publicapi-ui/src/lib/dialogs/confirmation-dialog/confirmation-dialog\";\nimport { InfoDialogData, InfoDialogResult } from \"projects/ng-configcat-publicapi-ui/src/lib/dialogs/info-dialog/info-dialog\";\nimport { PastedDataTrimmerDirective } from \"../../../../../../../lib/_directives/pasted-data-trimmer.directive\";\nimport { InputDisplayNormalizerDirective } from \"../../../../../../_directives/input-display-normalizer.directive\";\nimport { isClearTextComparator } from \"../../../../../../_models/user-comparator\";\nimport {\n addComparisonValueListValueItems,\n AppDateAdapter,\n ComparisonValueListForm,\n ConfirmationDialogComponent,\n formatValuesAsCsv,\n FormHelper,\n generateComparisonValueFormGroup,\n generateComparisonValueListValueArray,\n getComparisonValueSemverListItemValidators,\n getComparisonValueSemverValidators,\n getComparisonValueStringListItemValidators,\n getComparisonValueStringValidators,\n getComparisonValueType,\n IComparisonValueListModel,\n IComparisonValueModel,\n IFeatureFlagLimitations,\n InfoDialogComponent,\n MessagingService,\n parseValuesFromCsv,\n UserComparator,\n UserComparatorText,\n UserComparatorType,\n UserConditionForm,\n} from \"../../../../../../bootstrap\";\nimport { DateTimePickerComponent } from \"../../../../date-time-picker/date-time-picker.component\";\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData, PopoutTextEditorDialogResult } from \"../../../popout-text-editor-dialog/popout-text-editor-dialog.component\";\nimport { ConditionChipComponent } from \"../condition-chip/condition-chip.component\";\nimport { ComparatorDialogComponent, ComparatorDialogData } from \"./comparator-dialog/comparator-dialog.component\";\nimport {\n PopoutListEditorDialogComponent,\n PopoutListEditorDialogData,\n PopoutListEditorDialogResult,\n} from \"./popout-list-editor-dialog/popout-list-editor-dialog.component\";\n\nexport class ListValueErrorStateMatcher implements ErrorStateMatcher {\n constructor(private readonly formGroup: FormGroup<UserConditionForm>) {}\n isErrorState(): boolean {\n return (\n (this.formGroup.controls.comparisonValue.controls.listValue?.touched\n && this.formGroup.controls.comparisonValue.controls.listValue.invalid)\n ?? false\n );\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 {\n value: UserComparator.ContainsAnyOf,\n label: UserComparatorText.ContainsAnyOf,\n group: ComparatorGroup.Text,\n index: 2,\n },\n {\n value: UserComparator.DoesNotContainAnyOf,\n label: UserComparatorText.DoesNotContainAnyOf,\n group: ComparatorGroup.Text,\n index: 3,\n },\n {\n value: UserComparator.SemVerIsOneOf,\n label: UserComparatorText.SemVerIsOneOf,\n group: ComparatorGroup.SemanticVersion,\n index: 4,\n },\n {\n value: UserComparator.SemVerIsNotOneOf,\n label: UserComparatorText.SemVerIsNotOneOf,\n group: ComparatorGroup.SemanticVersion,\n index: 5,\n },\n {\n value: UserComparator.SemVerLess,\n label: UserComparatorText.SemVerLess,\n group: ComparatorGroup.SemanticVersion,\n index: 6,\n },\n {\n value: UserComparator.SemVerLessOrEquals,\n label: UserComparatorText.SemVerLessOrEquals,\n group: ComparatorGroup.SemanticVersion,\n index: 7,\n },\n {\n value: UserComparator.SemVerGreater,\n label: UserComparatorText.SemVerGreater,\n group: ComparatorGroup.SemanticVersion,\n index: 8,\n },\n {\n value: UserComparator.SemVerGreaterOrEquals,\n label: UserComparatorText.SemVerGreaterOrEquals,\n group: ComparatorGroup.SemanticVersion,\n index: 9,\n },\n {\n value: UserComparator.NumberEquals,\n label: UserComparatorText.NumberEquals,\n group: ComparatorGroup.Number,\n index: 10,\n },\n {\n value: UserComparator.NumberDoesNotEqual,\n label: UserComparatorText.NumberDoesNotEqual,\n group: ComparatorGroup.Number,\n index: 11,\n },\n { value: UserComparator.NumberLess, label: UserComparatorText.NumberLess, group: ComparatorGroup.Number, index: 12 },\n {\n value: UserComparator.NumberLessOrEquals,\n label: UserComparatorText.NumberLessOrEquals,\n group: ComparatorGroup.Number,\n index: 13,\n },\n {\n value: UserComparator.NumberGreater,\n label: UserComparatorText.NumberGreater,\n group: ComparatorGroup.Number,\n index: 14,\n },\n {\n value: UserComparator.NumberGreaterOrEquals,\n label: UserComparatorText.NumberGreaterOrEquals,\n group: ComparatorGroup.Number,\n index: 15,\n },\n {\n value: UserComparator.SensitiveIsOneOf,\n label: UserComparatorText.SensitiveIsOneOf,\n group: ComparatorGroup.ConfidentialText,\n index: 16,\n },\n {\n value: UserComparator.SensitiveIsNotOneOf,\n label: UserComparatorText.SensitiveIsNotOneOf,\n group: ComparatorGroup.ConfidentialText,\n index: 17,\n },\n {\n value: UserComparator.DateTimeBefore,\n label: UserComparatorText.DateTimeBefore,\n group: ComparatorGroup.DateTime,\n index: 18,\n },\n {\n value: UserComparator.DateTimeAfter,\n label: UserComparatorText.DateTimeAfter,\n group: ComparatorGroup.DateTime,\n index: 19,\n },\n {\n value: UserComparator.SensitiveTextEquals,\n label: UserComparatorText.SensitiveTextEquals,\n group: ComparatorGroup.ConfidentialText,\n index: 20,\n },\n {\n value: UserComparator.SensitiveTextDoesNotEqual,\n label: UserComparatorText.SensitiveTextDoesNotEqual,\n group: ComparatorGroup.ConfidentialText,\n index: 21,\n },\n {\n value: UserComparator.SensitiveTextStartsWithAnyOf,\n label: UserComparatorText.SensitiveTextStartsWithAnyOf,\n group: ComparatorGroup.ConfidentialText,\n index: 22,\n },\n {\n value: UserComparator.SensitiveTextNotStartsWithAnyOf,\n label: UserComparatorText.SensitiveTextNotStartsWithAnyOf,\n group: ComparatorGroup.ConfidentialText,\n index: 23,\n },\n {\n value: UserComparator.SensitiveTextEndsWithAnyOf,\n label: UserComparatorText.SensitiveTextEndsWithAnyOf,\n group: ComparatorGroup.ConfidentialText,\n index: 24,\n },\n {\n value: UserComparator.SensitiveTextNotEndsWithAnyOf,\n label: UserComparatorText.SensitiveTextNotEndsWithAnyOf,\n group: ComparatorGroup.ConfidentialText,\n index: 25,\n },\n {\n value: UserComparator.SensitiveArrayContainsAnyOf,\n label: UserComparatorText.SensitiveArrayContainsAnyOf,\n group: ComparatorGroup.ConfidentialArray,\n index: 26,\n },\n {\n value: UserComparator.SensitiveArrayDoesNotContainAnyOf,\n label: UserComparatorText.SensitiveArrayDoesNotContainAnyOf,\n group: ComparatorGroup.ConfidentialArray,\n index: 27,\n },\n { value: UserComparator.TextEquals, label: UserComparatorText.TextEquals, group: ComparatorGroup.Text, index: 28 },\n {\n value: UserComparator.TextDoesNotEqual,\n label: UserComparatorText.TextDoesNotEqual,\n group: ComparatorGroup.Text,\n index: 29,\n },\n {\n value: UserComparator.TextStartsWithAnyOf,\n label: UserComparatorText.TextStartsWithAnyOf,\n group: ComparatorGroup.Text,\n index: 30,\n },\n {\n value: UserComparator.TextNotStartsWithAnyOf,\n label: UserComparatorText.TextNotStartsWithAnyOf,\n group: ComparatorGroup.Text,\n index: 31,\n },\n {\n value: UserComparator.TextEndsWithAnyOf,\n label: UserComparatorText.TextEndsWithAnyOf,\n group: ComparatorGroup.Text,\n index: 32,\n },\n {\n value: UserComparator.TextNotEndsWithAnyOf,\n label: UserComparatorText.TextNotEndsWithAnyOf,\n group: ComparatorGroup.Text,\n index: 33,\n },\n {\n value: UserComparator.ArrayContainsAnyOf,\n label: UserComparatorText.ArrayContainsAnyOf,\n group: ComparatorGroup.Array,\n index: 34,\n },\n {\n value: UserComparator.ArrayDoesNotContainAnyOf,\n label: UserComparatorText.ArrayDoesNotContainAnyOf,\n group: ComparatorGroup.Array,\n index: 35,\n },\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: [\"../../../components.scss\", \"./user-condition.component.scss\"],\n providers: [{ provide: DateAdapter, useClass: AppDateAdapter }],\n imports: [\n ConditionChipComponent,\n NgClass,\n MatFormField,\n MatInput,\n MatTooltip,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatSelect,\n MatOption,\n MatOptgroup,\n MatIconButton,\n MatSuffix,\n MatIcon,\n NgTemplateOutlet,\n MatPrefix,\n MatChipGrid,\n MatChipRow,\n MatChipRemove,\n MatButton,\n MatChipInput,\n MatMenuTrigger,\n InputDisplayNormalizerDirective,\n DateTimePickerComponent,\n MatMenu,\n MatMenuItem,\n SlicePipe,\n KeyValuePipe,\n MatDivider,\n PastedDataTrimmerDirective,\n ],\n})\nexport class UserConditionComponent implements OnChanges {\n private readonly dialog = inject(MatDialog);\n private readonly clipboard = inject(Clipboard);\n private readonly messagingService = inject(MessagingService);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n FormHelper = FormHelper;\n\n readonly targetingRuleIndex = input.required<number>();\n readonly conditionIndex = input.required<number>();\n readonly readOnly = input.required<boolean>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly formGroup = input.required<FormGroup<UserConditionForm>>();\n readonly matChipGrid = viewChild<MatChipGrid>(\"chipGrid\");\n\n defaultComparisonAttributes = [\"Identifier\", \"Email\", \"Country\"];\n comparisionAttributeCustom = \"Custom\";\n\n comparatorSuggestions = new Map<ComparatorGroup, IComparatorValue[]>();\n selectedComparator!: UserComparator;\n\n keepOrder = () => 0;\n\n RolloutRuleComparatorV2Type = UserComparatorType;\n rolloutRuleComparatorType!: UserComparatorType;\n isClearTextComparator!: boolean;\n selectedAttribute!: string;\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 error state with the original component's errorState.\n fakeFormControl = new FormControl<string>(\"\");\n errorStateMatcher!: ListValueErrorStateMatcher;\n\n ngOnChanges(): void {\n this.rolloutRuleComparatorType = getComparisonValueType(\n this.formGroup().controls.comparator.value\n );\n this.isClearTextComparator = isClearTextComparator(this.formGroup().controls.comparator.value);\n this.errorStateMatcher = new ListValueErrorStateMatcher(this.formGroup());\n this.selectedComparator = this.formGroup().controls.comparator.value;\n this.selectedAttribute = !this.defaultComparisonAttributes.includes(\n this.formGroup().controls.comparisonAttribute.value\n )\n ? this.comparisionAttributeCustom\n : this.formGroup().controls.comparisonAttribute.value;\n this.calcComparators();\n }\n\n attributeChanged(value: string): void {\n const formGroup = this.formGroup();\n if (this.defaultComparisonAttributes.includes(value)) {\n const formGroup = this.formGroup();\n if (formGroup.controls.comparisonAttribute.value !== value) {\n formGroup.controls.comparisonAttribute.setValue(value);\n formGroup.markAsDirty();\n this.calcComparators(true);\n }\n } else if (formGroup.controls.comparisonAttribute.value !== \"\") {\n formGroup.controls.comparisonAttribute.setValue(\"\");\n formGroup.markAsDirty();\n this.calcComparators(true);\n }\n }\n\n comparatorChanged(value: string): 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 const comparatorValue = value as UserComparator;\n this.formGroup().controls.comparator.setValue(comparatorValue);\n this.formGroup().markAsDirty();\n this.selectedComparator = comparatorValue;\n this.isClearTextComparator = isClearTextComparator(this.formGroup().controls.comparator.value);\n\n const oldRolloutRuleComparatorType = this.rolloutRuleComparatorType;\n this.rolloutRuleComparatorType = getComparisonValueType(\n this.formGroup().controls.comparator.value\n );\n if (oldRolloutRuleComparatorType !== this.rolloutRuleComparatorType) {\n const defaultValue: IComparisonValueModel =\n this.rolloutRuleComparatorType === UserComparatorType.DateTime\n ? {\n doubleValue: new Date().getTime() / 1000.0,\n listValue: null,\n stringValue: null,\n }\n : { doubleValue: null, listValue: null, stringValue: null };\n this.formGroup().setControl(\n \"comparisonValue\",\n generateComparisonValueFormGroup(\n defaultValue,\n this.formGroup().controls.comparator.value,\n false,\n this.featureFlagLimitations()\n )\n );\n }\n }\n\n compDialog() {\n const dialogRef = this.dialog.open<ComparatorDialogComponent, ComparatorDialogData, UserComparator | undefined>(\n ComparatorDialogComponent,\n {\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\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 openCleartextInfoDialog() {\n this.dialog.open<InfoDialogComponent, InfoDialogData, InfoDialogResult>(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: () => {\n this.compDialog();\n },\n },\n });\n }\n\n add(event: MatChipInputEvent): void {\n const value = (event.value || \"\").trim();\n\n event.chipInput.clear();\n\n if (!value) {\n return;\n }\n\n if (!value.includes(\",\")) {\n addComparisonValueListValueItems(\n this.formGroup().controls.comparator.value,\n this.formGroup().controls.comparisonValue.controls.listValue!,\n [{ value, hint: null }],\n this.featureFlagLimitations()\n );\n return;\n }\n\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\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 cancelButtonLabel: \"Add as a single item\",\n },\n disableClose: true,\n }\n );\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === \"yes\") {\n const comparisonValueListParseResult = parseValuesFromCsv(value);\n if (comparisonValueListParseResult.error) {\n this.messagingService.showErrorSnack(\"Parse error\");\n } else if (comparisonValueListParseResult.comparisonValueList.length > 0) {\n addComparisonValueListValueItems(\n this.formGroup().controls.comparator.value,\n this.formGroup().controls.comparisonValue.controls.listValue!,\n comparisonValueListParseResult.comparisonValueList,\n this.featureFlagLimitations()\n );\n }\n } else {\n addComparisonValueListValueItems(\n this.formGroup().controls.comparator.value,\n this.formGroup().controls.comparisonValue.controls.listValue!,\n [{ value, hint: null }],\n this.featureFlagLimitations()\n );\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 formGroup = this.formGroup();\n if (!formGroup.controls.comparisonValue.controls.stringValue) {\n return;\n }\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: formGroup.controls.comparisonValue.controls.stringValue.value,\n readOnly: formGroup.controls.comparisonValue.controls.stringValue.disabled,\n validators:\n this.rolloutRuleComparatorType === UserComparatorType.Semver\n ? getComparisonValueSemverValidators(this.featureFlagLimitations())\n : getComparisonValueStringValidators(this.featureFlagLimitations()),\n maxValueLength: this.featureFlagLimitations().maxComparisonValueLength,\n description:\n \"Modify the text within the editor to change the comparison value. The editor supports JSON syntax highlighting.\",\n } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (\n formGroup.controls.comparisonValue.controls.stringValue\n && data\n && data.value !== formGroup.controls.comparisonValue.controls.stringValue.value\n ) {\n formGroup.controls.comparisonValue.controls.stringValue.setValue(data.value);\n formGroup.controls.comparisonValue.controls.stringValue.updateValueAndValidity();\n formGroup.controls.comparisonValue.controls.stringValue.markAsTouched();\n formGroup.controls.comparisonValue.controls.stringValue.markAsDirty();\n }\n });\n }\n\n expandList() {\n const dialogRef = this.dialog.open<\n PopoutListEditorDialogComponent,\n PopoutListEditorDialogData,\n PopoutListEditorDialogResult | undefined\n >(PopoutListEditorDialogComponent, {\n width: \"670px\",\n data: {\n comparisonValueList: this.getRawValue(),\n comparator: this.formGroup().controls.comparator.value,\n featureFlagLimitations: this.featureFlagLimitations(),\n readOnly: this.readOnly(),\n } as PopoutListEditorDialogData,\n });\n dialogRef.afterClosed().subscribe(data => {\n if (data?.comparisonValueList) {\n const oldValue = this.formGroup().controls.comparisonValue.controls.listValue!.value.map(l => {\n return { value: l.value, hint: l.hint };\n });\n const newValue = data.comparisonValueList.map(l => {\n return { value: l.value, hint: l.hint };\n });\n if (JSON.stringify(oldValue) === JSON.stringify(newValue)) {\n return;\n }\n const validators =\n getComparisonValueType(this.formGroup().controls.comparator.value) ===\n UserComparatorType.SemverList\n ? getComparisonValueSemverListItemValidators(this.featureFlagLimitations())\n : getComparisonValueStringListItemValidators(this.featureFlagLimitations());\n const formArray = generateComparisonValueListValueArray(\n data.comparisonValueList,\n this.readOnly(),\n this.featureFlagLimitations(),\n validators\n );\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 // As we are overriding the control that is used in a @for,\n // the change detection cannot detect it, so we have to call .detectChanges() on it.\n // The chips were not updated without this .detectChanges().\n // When we switch to signal forms in angular, this can be probably removed.\n this.changeDetectorRef.detectChanges();\n }\n });\n }\n\n removeAll() {\n const formGroup = this.formGroup();\n this.formGroup().controls.comparisonValue.controls.listValue!.controls.splice(\n 0,\n formGroup.controls.comparisonValue.controls.listValue!.controls.length\n );\n formGroup.controls.comparisonValue.controls.listValue!.updateValueAndValidity();\n formGroup.controls.comparisonValue.controls.listValue!.markAllAsTouched();\n formGroup.controls.comparisonValue.controls.listValue!.markAsDirty();\n }\n\n copyValuesAsCsv() {\n this.copyToClipboard(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 } else {\n this.messagingService.showErrorSnack(\"Nothing to be copied.\");\n }\n }\n\n getRawValue(): IComparisonValueListModel[] {\n return this.formGroup().controls.comparisonValue.controls.listValue!.value.map(v => {\n return { value: v.value, hint: v.hint } as IComparisonValueListModel;\n });\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>): string {\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 (\n resetVal\n && !ids.includes(selected.index)\n && this.isNullCompVal(this.formGroup().controls.comparisonValue.value)\n ) {\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(\n (entryMap, e) => entryMap.set(e.group, [...(entryMap.get(e.group) ?? []), e]),\n new Map<ComparatorGroup, IComparatorValue[]>()\n );\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 isNumberArr(val: number[]): 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(\n compVal: Partial<{\n stringValue: string | null;\n doubleValue: number | null;\n listValue: Partial<{ value: string; hint: string | null; index: number } | null>[];\n }>\n ): boolean {\n return !compVal.doubleValue && !compVal.listValue && !compVal.stringValue;\n }\n}\n","<div class=\"targeting-rule-line\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex()\" [conditionIndex]=\"conditionIndex()\" />\n\n <div class=\"explanation\">\n <a\n href=\"https://configcat.com/docs/targeting/targeting-rule/user-condition/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"user-link\">\n user's\n </a>\n </div>\n </div>\n\n <div class=\"wrapper-group\">\n <div class=\"wrapper-group\">\n <div\n class=\"targeting-rule-component pad-right\"\n [ngClass]=\"{\n small: comparisionAttributeCustom === selectedAttribute,\n }\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field select\" subscriptSizing=\"dynamic\">\n <mat-select\n matTooltip=\"Comparison attribute\"\n [disabled]=\"formGroup().controls.comparisonAttribute.disabled\"\n [(value)]=\"selectedAttribute\"\n (selectionChange)=\"attributeChanged(selectedAttribute)\">\n @for (comparisonAttribute of defaultComparisonAttributes; track $index) {\n <mat-option [value]=\"comparisonAttribute\">{{ comparisonAttribute }}</mat-option>\n }\n <mat-option value=\"Custom\">Custom</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right small\" [hidden]=\"comparisionAttributeCustom !== selectedAttribute\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n matTooltip=\"Custom comparison attribute\"\n [formControl]=\"formGroup().controls.comparisonAttribute\"\n (blur)=\"calcComparators(true)\" />\n @if (formGroup().controls.comparisonAttribute.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparisonAttribute) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"targeting-rule-component pad-right suffixed\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field select-suffixed\" subscriptSizing=\"dynamic\">\n <mat-select\n matTooltip=\"Comparator\"\n [disabled]=\"readOnly()\"\n [(value)]=\"selectedComparator\"\n (selectionChange)=\"comparatorChanged(selectedComparator)\">\n @for (group of comparatorSuggestions | keyvalue: keepOrder; track group) {\n <mat-optgroup [label]=\"group.key\">\n @for (comparator of group.value; track comparator) {\n <mat-option [value]=\"comparator.value\">\n {{ comparator.label }}\n </mat-option>\n }\n </mat-optgroup>\n }\n <mat-divider />\n <mat-option value=\"showall\">\n <mat-icon>list_alt</mat-icon>\n SHOW ALL COMPARATORS\n </mat-option>\n </mat-select>\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"All comparators\"\n (click)=\"compDialog(); $event.stopPropagation()\">\n <mat-icon>list_alt</mat-icon>\n </button>\n @if (formGroup().controls.comparator.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparator) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n @switch (rolloutRuleComparatorType) {\n @case (RolloutRuleComparatorV2Type.String) {\n <ng-container [ngTemplateOutlet]=\"textTemplate\" />\n }\n @case (RolloutRuleComparatorV2Type.Semver) {\n <ng-container [ngTemplateOutlet]=\"semverTemplate\" />\n }\n @case (RolloutRuleComparatorV2Type.StringList) {\n <ng-container [ngTemplateOutlet]=\"listTemplate\" />\n }\n @case (RolloutRuleComparatorV2Type.SemverList) {\n <ng-container [ngTemplateOutlet]=\"listTemplate\" />\n }\n @case (RolloutRuleComparatorV2Type.Number) {\n <ng-container [ngTemplateOutlet]=\"numberTemplate\" />\n }\n @case (RolloutRuleComparatorV2Type.DateTime) {\n <ng-container [ngTemplateOutlet]=\"dateTimeTemplate\" />\n }\n }\n</div>\n\n<ng-template #textTemplate>\n @if (formGroup().controls.comparisonValue.controls.stringValue) {\n <div class=\"targeting-rule-component grow\">\n <mat-form-field\n appearance=\"outline\"\n class=\"small-form-field\"\n subscriptSizing=\"dynamic\"\n [class.suffixed]=\"!isClearTextComparator\"\n [class.suffixed-prefixed]=\"isClearTextComparator\">\n <input\n matInput\n type=\"text\"\n matTooltip=\"Comparison value (text)\"\n placeholder=\"Add text ...\"\n appPastedDataTrimmer\n [formControl]=\"formGroup().controls.comparisonValue.controls.stringValue!\" />\n @if (isClearTextComparator) {\n <button\n matPrefix\n class=\"prefix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"\n (click)=\"openCleartextInfoDialog()\">\n <mat-icon>lock_open_right</mat-icon>\n </button>\n }\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandText()\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n @if (formGroup().controls.comparisonValue.controls.stringValue!.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparisonValue.controls.stringValue!) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n }\n</ng-template>\n\n<ng-template #semverTemplate>\n @if (formGroup().controls.comparisonValue.controls.stringValue) {\n <div class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n matTooltip=\"Comparison value (semantic version)\"\n placeholder=\"Add semantic version ... (1.2.3)\"\n [formControl]=\"formGroup().controls.comparisonValue.controls.stringValue!\" />\n @if (formGroup().controls.comparisonValue.controls.stringValue!.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparisonValue.controls.stringValue!) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n }\n</ng-template>\n\n<ng-template #listTemplate>\n @if (formGroup().controls.comparisonValue.controls.listValue) {\n <div class=\"targeting-rule-component grow small-chip-input top-icon-suffix\">\n <mat-form-field\n appearance=\"outline\"\n class=\"small-form-field suffixed\"\n subscriptSizing=\"dynamic\"\n [class.suffixed]=\"!isClearTextComparator\"\n [class.suffixed-prefixed]=\"isClearTextComparator\">\n <mat-chip-grid #chipGrid [formControl]=\"fakeFormControl\" [errorStateMatcher]=\"errorStateMatcher\">\n @for (\n listValueItem of formGroup().controls.comparisonValue.controls.listValue!.controls | slice: 0 : 20;\n track $index;\n let i = $index\n ) {\n <span class=\"chip-container\" [matTooltip]=\"getListValueItemTooltipMessage(listValueItem)\">\n <mat-chip-row\n class=\"chip\"\n [disabled]=\"readOnly()\"\n [removable]=\"!readOnly()\"\n [editable]=\"!readOnly()\"\n [ngClass]=\"{ invalid: isListValueItemInvalid(listValueItem) }\"\n (removed)=\"remove(i)\"\n (edited)=\"edit(i, $event)\">\n {{ listValueItem.controls.value.value }}\n @if (!readOnly()) {\n <button type=\"button\" matChipRemove>\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </button>\n }\n </mat-chip-row>\n </span>\n }\n @if (formGroup().controls.comparisonValue.controls.listValue!.controls.length > 20) {\n <button mat-stroked-button class=\"show-all\" type=\"button\" (click)=\"expandList()\">\n show all {{ formGroup().controls.comparisonValue.controls.listValue!.controls.length }} items\n </button>\n }\n <input\n matChipInputAddOnBlur\n matTooltip=\"Comparison values (list)\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"!readOnly() ? 'Add item to list ...' : ''\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"add($event)\" />\n </mat-chip-grid>\n @if (isClearTextComparator) {\n <button\n matIconPrefix\n class=\"prefix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"\n (click)=\"openCleartextInfoDialog()\">\n <mat-icon>lock_open_right</mat-icon>\n </button>\n }\n <button\n matIconSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandList()\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n <button\n matIconSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"More...\"\n [matMenuTriggerFor]=\"moreMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n @if (\n formGroup().controls.comparisonValue.controls.listValue!.invalid &&\n formGroup().controls.comparisonValue.controls.listValue!.errors\n ) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparisonValue.controls.listValue!) }}\n </mat-error>\n }\n @if (\n formGroup().controls.comparisonValue.controls.listValue!.invalid &&\n !formGroup().controls.comparisonValue.controls.listValue!.errors\n ) {\n <mat-error>Invalid items</mat-error>\n }\n </mat-form-field>\n </div>\n }\n</ng-template>\n\n<ng-template #numberTemplate>\n @if (formGroup().controls.comparisonValue.controls.doubleValue) {\n <div class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"number\"\n matTooltip=\"Comparison value (number)\"\n placeholder=\"Add number ...\"\n inputDisplayNormalizer\n [formControl]=\"formGroup().controls.comparisonValue.controls.doubleValue!\" />\n @if (formGroup().controls.comparisonValue.controls.doubleValue!.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup().controls.comparisonValue.controls.doubleValue!) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n }\n</ng-template>\n\n<ng-template #dateTimeTemplate>\n @if (formGroup().controls.comparisonValue.controls.doubleValue) {\n <div class=\"targeting-rule-component datetime\">\n <app-date-time-picker\n dateTooltip=\"Comparison value (date)\"\n timeTooltip=\"Comparison value (time)\"\n [formControl]=\"formGroup().controls.comparisonValue.controls.doubleValue!\" />\n </div>\n }\n</ng-template>\n\n<mat-menu #moreMenu>\n <a mat-menu-item (click)=\"expandList()\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n Open advanced editor\n </a>\n <a mat-menu-item (click)=\"copyValuesAsCsv()\">\n <mat-icon>content_copy</mat-icon>\n Copy as CSV (values only)\n </a>\n <a mat-menu-item [disabled]=\"readOnly()\" (click)=\"removeAll()\">\n <mat-icon>delete</mat-icon>\n Remove all\n </a>\n</mat-menu>\n","import { Component, input, output } from \"@angular/core\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n ConditionForm,\n generateConditionFormGroup,\n generateEmptyPrerequisiteFlagConditionFormGroup,\n generateEmptySegmentConditionFormGroup,\n IFeatureFlagLimitations,\n IFlagState,\n ISegment,\n UserComparator,\n} from \"../../../../../bootstrap\";\nimport { PrerequisiteFlagConditionComponent } from \"./prerequisite-flag-condition/prerequisite-flag-condition.component\";\nimport { SegmentConditionComponent } from \"./segment-condition/segment-condition.component\";\nimport { UserConditionComponent } from \"./user-condition/user-condition.component\";\n\n@Component({\n selector: \"app-conditions\",\n templateUrl: \"./conditions.component.html\",\n styleUrls: [\"../../components.scss\", \"./conditions.component.scss\", \"../../add-btn.scss\"],\n imports: [\n UserConditionComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n SegmentConditionComponent,\n PrerequisiteFlagConditionComponent,\n MatIconButton,\n MatTooltip,\n MatIcon,\n MatMenuTrigger,\n MatMenu,\n MatMenuItem,\n ],\n})\nexport class ConditionsComponent {\n readonly formArray = input.required<FormArray<FormGroup<ConditionForm>>>();\n readonly segments = input.required<ISegment[]>();\n readonly flagState = input.required<IFlagState>();\n readonly targetingRuleIndex = input.required<number>();\n readonly canManageSegments = input.required<boolean>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n\n readonly createSegmentRequested = output();\n readonly manageSegmentsRequested = output();\n readonly addSegmentConditionRequestedWithoutSegments = output();\n readonly lastConditionDeleted = output();\n readonly subscriptionLimitReached = output();\n readonly prerequisiteConditionChanged = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n addUserCondition() {\n if (!this.checkLimitations()) return;\n\n const f = generateConditionFormGroup(\n {\n userCondition: {\n comparisonAttribute: \"Identifier\",\n comparator: UserComparator.SensitiveTextEquals,\n comparisonValue: { stringValue: \"\", doubleValue: null, listValue: null },\n },\n prerequisiteFlagCondition: null,\n segmentCondition: null,\n },\n this.flagState().readOnly,\n this.flagState().prerequisiteSettings,\n this.featureFlagLimitations()\n );\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 = new FormGroup<ConditionForm>({\n segmentCondition: generateEmptySegmentConditionFormGroup(),\n });\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: generateEmptyPrerequisiteFlagConditionFormGroup(\n this.featureFlagLimitations()\n ),\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","@for (condition of formArray().controls; track $index; let i = $index) {\n <div class=\"condition\">\n @if (condition.controls.userCondition) {\n <app-user-condition\n class=\"grow\"\n [readOnly]=\"flagState().readOnly\"\n [formGroup]=\"condition.controls.userCondition\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [targetingRuleIndex]=\"targetingRuleIndex()\"\n [conditionIndex]=\"i\" />\n } @else if (condition.controls.segmentCondition) {\n <app-segment-condition\n class=\"grow\"\n [formGroup]=\"condition.controls.segmentCondition\"\n [segments]=\"segments()\"\n [canManageSegments]=\"canManageSegments()\"\n [targetingRuleIndex]=\"targetingRuleIndex()\"\n [conditionIndex]=\"i\"\n (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\" />\n } @else if (condition.controls.prerequisiteFlagCondition) {\n <app-prerequisite-flag-condition\n class=\"grow\"\n [formGroup]=\"condition.controls.prerequisiteFlagCondition\"\n [prerequisiteSettings]=\"flagState().prerequisiteSettings\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [targetingRuleIndex]=\"targetingRuleIndex()\"\n [conditionIndex]=\"i\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n }\n @if (formArray().controls.length > 1 && !flagState().readOnly) {\n <div class=\"delete-button\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove condition\" (click)=\"remove(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </button>\n </div>\n }\n </div>\n}\n\n@if (formArray().controls.length && !flagState().readOnly) {\n <div class=\"add-cond\">\n <!-- In the integrations we remove the enter sign to spare some space-->\n <!-- <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div> -->\n <div matTooltip=\"Add AND condition\" class=\"add-btn add-and\" [matMenuTriggerFor]=\"andmenu\">+ AND</div>\n </div>\n}\n\n<mat-menu #andmenu class=\"menu-long-text-and\">\n <a mat-menu-item (click)=\"addUserCondition()\">\n <mat-icon>track_changes</mat-icon>\n Add user condition\n </a>\n <a mat-menu-item (click)=\"addSegmentCondition()\">\n <mat-icon class=\"icon-transform-rotate\">pie_chart</mat-icon>\n Add segment condition\n </a>\n <div\n 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 [disabled]=\"!flagState().prerequisiteSettings.length\" (click)=\"addPrerequisiteFlagCondition()\">\n <mat-icon>account_tree</mat-icon>\n Add flag condition (prerequisite)\n </a>\n </div>\n</mat-menu>\n","import { Component, input, linkedSignal, output } from \"@angular/core\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport { MatError, MatFormField, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { DigitOnlyDirective } from \"../../../../../_directives/digit-only.directive\";\nimport { InputDisplayNormalizerDirective } from \"../../../../../_directives/input-display-normalizer.directive\";\nimport {\n FormHelper,\n generateDefaultValue,\n generatePercentageOptionFormGroup,\n IFeatureFlagLimitations,\n IFlagState,\n PercentageOptionForm,\n SettingType,\n} from \"../../../../../bootstrap\";\nimport { FeatureFlagValueComponent } from \"../../feature-flag-value/feature-flag-value.component\";\n\n@Component({\n selector: \"app-percentage-options\",\n templateUrl: \"./percentage-options.component.html\",\n styleUrls: [\"../../components.scss\", \"./percentage-options.component.scss\", \"../../chips.scss\", \"../../add-btn.scss\"],\n imports: [\n MatFormField,\n MatInput,\n FormsModule,\n InputDisplayNormalizerDirective,\n MatTooltip,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatSuffix,\n MatError,\n MatButton,\n MatIconButton,\n MatIcon,\n FeatureFlagValueComponent,\n DigitOnlyDirective,\n ],\n})\nexport class PercentageOptionsComponent {\n readonly formArray = input.required<FormArray<FormGroup<PercentageOptionForm>>>();\n readonly flagState = input.required<IFlagState>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly percentageEvaluationAttribute = input.required<string | null>();\n readonly isPercentageOnlyTargetingRule = input.required<boolean>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n\n readonly lastPercentageOptionLeft = output();\n readonly subscriptionLimitReached = output();\n readonly changePercentageEvaluationAttributeRequested = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n readonly percentageOptionsCount = linkedSignal(() => {\n return this.formArray().controls.length;\n });\n\n SettingType = SettingType;\n FormHelper = FormHelper;\n\n addOption() {\n if (this.formArray().length >= this.featureFlagLimitations().maxPercentageOptionCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n\n const remainingPredefinedVariations = this.getRemainingPredefinedVariations();\n\n if (this.flagState().settingValue.setting.predefinedVariations.length && !remainingPredefinedVariations.length) {\n return;\n }\n\n this.formArray().push(\n generatePercentageOptionFormGroup(\n {\n percentage: 0,\n value: generateDefaultValue(this.flagState().settingValue.setting.settingType, remainingPredefinedVariations),\n },\n this.flagState().settingValue.setting.settingType,\n this.flagState().settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n )\n );\n this.formArray().markAsDirty();\n this.percentageOptionsCount.set(this.formArray().controls.length);\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 this.percentageOptionsCount.set(this.formArray().controls.length);\n }\n\n percentageChanged(index: number) {\n const formArray = this.formArray();\n\n if (formArray.controls[index].controls.percentage.value < 0) {\n formArray.controls[index].controls.percentage.setValue(0);\n }\n if (formArray.controls[index].controls.percentage.value > 100) {\n formArray.controls[index].controls.percentage.setValue(100);\n }\n\n if (formArray.controls.length === 2) {\n formArray.controls[1 - index].controls.percentage.setValue(\n 100 - formArray.controls[index].controls.percentage.value\n );\n }\n }\n\n changePercentageEvaluationAttribute() {\n this.changePercentageEvaluationAttributeRequested.emit();\n }\n\n getRemainingPredefinedVariations() {\n let remainingPredefinedVariations = this.flagState().settingValue.setting.predefinedVariations;\n if (remainingPredefinedVariations.length) {\n const existingVariations = this.formArray().controls.map(p => p.controls.value.controls.predefinedVariationId?.value);\n remainingPredefinedVariations = remainingPredefinedVariations.filter(sv => !existingVariations.includes(sv.predefinedVariationId));\n }\n return remainingPredefinedVariations;\n }\n\n getNotAvailablePredefinedVariationIds(currentIndex: number) {\n return this.formArray().controls\n .filter((sv, index) => index !== currentIndex && sv.controls.value.controls.predefinedVariationId?.value)\n .map(p => p.controls.value.controls.predefinedVariationId!.value);\n }\n}\n","@for (percentageOption of formArray().controls; track $index; let i = $index) {\n <div class=\"targeting-rule-line\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field perc-input\">\n <input\n matInput\n type=\"number\"\n min=\"0\"\n max=\"100\"\n matTooltip=\"Percentage\"\n appDigitOnly\n inputDisplayNormalizer\n [formControl]=\"percentageOption.controls.percentage\"\n (input)=\"percentageChanged(i)\" />\n <span matTextSuffix>%</span>\n @if (percentageOption.controls.percentage.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(percentageOption.controls.percentage) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n @if (!percentageEvaluationAttribute()) {\n <div class=\"attribute-wrapper flex\">\n of \n <a href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\" rel=\"noopener noreferrer\">\n users\n </a>\n </div>\n } @else {\n <div class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button\n mat-flat-button\n type=\"button\"\n class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n [disabled]=\"flagState().readOnly\"\n (click)=\"changePercentageEvaluationAttribute()\">\n {{ percentageEvaluationAttribute() }}\n </button>\n </div>\n <div>attributes</div>\n </div>\n }\n @if (!flagState().readOnly) {\n <div class=\"delete-button\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </button>\n </div>\n }\n </div>\n <app-feature-flag-value\n class=\"value\"\n tooltip=\"Served value\"\n [setting]=\"flagState().settingValue.setting\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [notAvailablePredefinedVariationIds]=\"getNotAvailablePredefinedVariationIds(i)\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n </div>\n}\n@if (formArray().invalid && !!FormHelper.getErrorMessage(formArray())) {\n <mat-error class=\"sumerror\">\n {{ FormHelper.getErrorMessage(formArray()) }}\n </mat-error>\n}\n@if (percentageEvaluationAttribute()) {\n @if (isPercentageOnlyTargetingRule()) {\n <div class=\"small small-pad-bottom\">\n If the {{ percentageEvaluationAttribute() }} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n , the percentage options are skipped and the evaluation continues with the next rule.\n </div>\n } @else {\n <div class=\"small small-pad-bottom\">\n If the {{ percentageEvaluationAttribute() }} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">\n User Object\n </a>\n , the current targeting rule is skipped and the evaluation continues with the next one.\n </div>\n }\n}\n\n@if (\n flagState().settingValue.setting.settingType !== SettingType.Boolean &&\n !flagState().readOnly &&\n (!flagState().settingValue.setting.predefinedVariations.length ||\n flagState().settingValue.setting.predefinedVariations.length > percentageOptionsCount())\n) {\n <div class=\"add-perc\">\n <!-- In the integrations we remove the enter sign to spare some space-->\n <!-- <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div> -->\n <div class=\"add-btn add-perc-btn\" (click)=\"addOption()\">+ % OPTION</div>\n </div>\n}\n","import { Component, input, output } from \"@angular/core\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n generatePercentageOptionFormGroup,\n generateValueFormGroup,\n getRawSettiongValue,\n IFeatureFlagLimitations,\n IFlagState,\n ISegment,\n isPercentageOnlyTargetingRule,\n IValueModel,\n PercentageOptionForm,\n SettingType,\n TargetingRuleForm,\n validatePercentageSum,\n} from \"../../../../bootstrap\";\nimport { FeatureFlagValueComponent } from \"../feature-flag-value/feature-flag-value.component\";\nimport { ConditionsComponent } from \"./conditions/conditions.component\";\nimport { PercentageOptionsComponent } from \"./percentage-options/percentage-options.component\";\n\n@Component({\n selector: \"app-targeting-rule\",\n templateUrl: \"./targeting-rule.component.html\",\n styleUrls: [\"./targeting-rule.component.scss\", \"../chips.scss\", \"../add-btn.scss\"],\n imports: [\n ConditionsComponent,\n MatDivider,\n MatTooltip,\n MatChipSet,\n MatChip,\n PercentageOptionsComponent,\n FeatureFlagValueComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n ],\n})\nexport class TargetingRuleComponent {\n readonly formGroup = input.required<FormGroup<TargetingRuleForm>>();\n readonly segments = input.required<ISegment[]>();\n readonly flagState = input.required<IFlagState>();\n readonly targetingRuleIndex = input.required<number>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly canManageSegments = input.required<boolean>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n readonly percentageEvaluationAttribute = input.required<string | null>();\n\n readonly createSegmentRequested = output();\n readonly manageSegmentsRequested = output();\n readonly addSegmentConditionRequestedWithoutSegments = output();\n readonly removedAllRules = output();\n readonly subscriptionLimitReached = output();\n readonly changePercentageEvaluationAttributeRequested = output();\n readonly prerequisiteConditionChanged = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n convertToPercentage() {\n const formGroup = this.formGroup();\n if (!formGroup.controls.value || formGroup.controls.value.disabled) {\n return;\n }\n\n const currentValue: IValueModel = getRawSettiongValue(formGroup.controls.value);\n\n const flagState = this.flagState();\n if (flagState.settingValue.setting.predefinedVariations.length) {\n const nextPredefinedVariationId = flagState.settingValue.setting.predefinedVariations\n .find(sv => sv.predefinedVariationId !== currentValue.predefinedVariationId)?.predefinedVariationId;\n if (!nextPredefinedVariationId) {\n return;\n }\n formGroup.setControl(\n \"percentageOptions\",\n new FormArray<FormGroup<PercentageOptionForm>>(\n [\n generatePercentageOptionFormGroup(\n {\n percentage: 100,\n value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: currentValue.predefinedVariationId },\n },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n generatePercentageOptionFormGroup(\n {\n percentage: 0,\n value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: nextPredefinedVariationId },\n },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n ],\n [validatePercentageSum]\n )\n );\n formGroup.removeControl(\"value\");\n formGroup.markAsDirty();\n return;\n }\n switch (flagState.settingValue.setting.settingType) {\n case SettingType.Boolean: {\n formGroup.setControl(\n \"percentageOptions\",\n new FormArray<FormGroup<PercentageOptionForm>>(\n [\n generatePercentageOptionFormGroup(\n {\n percentage: currentValue.boolValue ? 100 : 0,\n value: { boolValue: true, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null },\n },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n generatePercentageOptionFormGroup(\n {\n percentage: currentValue.boolValue ? 0 : 100,\n value: { boolValue: false, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null },\n },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n ],\n [validatePercentageSum]\n )\n );\n formGroup.removeControl(\"value\");\n formGroup.markAsDirty();\n break;\n }\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double: {\n formGroup.setControl(\n \"percentageOptions\",\n new FormArray<FormGroup<PercentageOptionForm>>(\n [\n generatePercentageOptionFormGroup(\n { percentage: 100, value: currentValue },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n generatePercentageOptionFormGroup(\n { percentage: 0, value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null, predefinedVariationId: null } },\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n ),\n ],\n [validatePercentageSum]\n )\n );\n formGroup.removeControl(\"value\");\n formGroup.markAsDirty();\n break;\n }\n\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n isPercentageOnly(): boolean {\n return 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 && this.isPercentageOnly() ? \"OTHERWISE\" : \"THEN\";\n }\n\n getChipTooltip(): string {\n return this.targetingRuleIndex() !== 0 && 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 const formGroup = this.formGroup();\n if (formGroup.controls.conditions.length === 0) {\n this.removedAllRules.emit();\n return;\n }\n const lastValue = getRawSettiongValue(formGroup.controls.percentageOptions!.controls[0].controls.value);\n formGroup.setControl(\n \"value\",\n generateValueFormGroup(\n lastValue,\n this.flagState().settingValue.setting.settingType,\n this.flagState().settingValue.setting.predefinedVariations,\n false,\n this.featureFlagLimitations()\n )\n );\n formGroup.removeControl(\"percentageOptions\");\n 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","@let formGroupValue = formGroup();\n\n@if (formGroupValue.controls.conditions.length) {\n <div class=\"side-padd conditions\">\n <app-conditions\n [formArray]=\"formGroupValue.controls.conditions\"\n [segments]=\"segments()\"\n [flagState]=\"flagState()\"\n [targetingRuleIndex]=\"targetingRuleIndex()\"\n [canManageSegments]=\"canManageSegments()\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (lastConditionDeleted)=\"lastConditionDeleted()\"\n (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n </div>\n}\n\n@if (formGroupValue.controls.conditions.length) {\n <mat-divider />\n}\n\n<div class=\"served-value\">\n <div class=\"flex side-padd\">\n @if (showBadge()) {\n <div class=\"chip-container fixed-width\" [matTooltip]=\"getChipTooltip()\">\n <mat-chip-set>\n <mat-chip disabled>{{ getChipText() }}</mat-chip>\n </mat-chip-set>\n </div>\n }\n\n @if (formGroupValue.controls.percentageOptions && formGroupValue.controls.percentageOptions.length) {\n <app-percentage-options\n class=\"grow\"\n [formArray]=\"formGroupValue.controls.percentageOptions\"\n [flagState]=\"flagState()\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [isPercentageOnlyTargetingRule]=\"isPercentageOnly()\"\n [percentageEvaluationAttribute]=\"percentageEvaluationAttribute()\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (lastPercentageOptionLeft)=\"lastPercentageOptionLeft()\"\n (subscriptionLimitReached)=\"subscriptionLimitReached.emit()\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n }\n @if (formGroupValue.controls.value) {\n <app-feature-flag-value\n class=\"grow\"\n tooltip=\"Served value\"\n [setting]=\"flagState().settingValue.setting\"\n [formGroup]=\"formGroupValue.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n }\n </div>\n\n @if (formGroupValue.controls.value && !flagState().readOnly) {\n <div class=\"add-perc flex side-padd bot-padd\">\n <!-- In the integrations we remove the enter sign to spare some space-->\n <!-- <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div> -->\n <div\n matTooltip=\"Target a percentage of users to whom this rule applies\"\n class=\"add-btn add-perc-btn\"\n (click)=\"convertToPercentage()\">\n + % OPTION\n </div>\n </div>\n }\n</div>\n","import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { NgClass } from \"@angular/common\";\nimport { Component, input, output } from \"@angular/core\";\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { generateConditionFormGroup, generateDefaultValueFormGroup, generateEmptyPrerequisiteFlagConditionFormGroup, generateEmptySegmentConditionFormGroup, generateTargetingRuleWithEmptyPercentageOptions, isPercentageOnlyTargetingRule } from \"../../../_services\";\nimport {\n ConditionForm,\n IFeatureFlagLimitations,\n IFlagState,\n IPrerequisiteChanged,\n ISegment,\n TargetingRuleForm,\n UpdateSettingValueForm,\n UserComparator,\n} from \"../../../bootstrap\";\nimport { FeatureFlagValueComponent } from \"./feature-flag-value/feature-flag-value.component\";\nimport { TargetingRuleComponent } from \"./targeting-rule/targeting-rule.component\";\n\n@Component({\n selector: \"app-evaluation-formula\",\n templateUrl: \"./evaluation-formula.component.html\",\n styleUrls: [\"./evaluation-formula.component.scss\", \"./chips.scss\", \"./add-btn.scss\"],\n imports: [\n MatTooltip,\n MatMenuTrigger,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n MatIcon,\n TargetingRuleComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatIconButton,\n MatChipSet,\n MatChip,\n NgClass,\n FeatureFlagValueComponent,\n MatMenu,\n MatMenuItem,\n ],\n})\nexport class EvaluationFormulaComponent {\n readonly formGroup = input.required<FormGroup<UpdateSettingValueForm>>();\n readonly segments = input.required<ISegment[]>();\n readonly flagState = input.required<IFlagState>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly canManageSegments = input.required<boolean>();\n readonly canCreateOrUpdateSetting = input.required<boolean>();\n\n readonly createSegmentRequested = output();\n readonly manageSegmentsRequested = output();\n readonly addSegmentConditionRequestedWithoutSegments = output();\n readonly changePercentageEvaluationAttributeRequested = output();\n\n readonly subscriptionLimitReached = output();\n readonly prerequisiteConditionChanged = output<IPrerequisiteChanged>();\n readonly recalcAddButtons = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\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 generateConditionFormGroup(\n {\n userCondition: {\n comparisonAttribute: \"Identifier\",\n comparator: UserComparator.SensitiveTextEquals,\n comparisonValue: { stringValue: \"\", doubleValue: null, listValue: null },\n },\n prerequisiteFlagCondition: null,\n segmentCondition: null,\n },\n this.flagState().readOnly,\n this.flagState().prerequisiteSettings,\n this.featureFlagLimitations()\n ),\n ]),\n value: generateDefaultValueFormGroup(\n this.flagState().settingValue.setting.settingType,\n this.flagState().settingValue.setting.predefinedVariations,\n this.flagState().readOnly,\n this.featureFlagLimitations()\n ),\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 new FormGroup<ConditionForm>({\n segmentCondition: generateEmptySegmentConditionFormGroup(),\n }),\n ]),\n value: generateDefaultValueFormGroup(\n this.flagState().settingValue.setting.settingType,\n this.flagState().settingValue.setting.predefinedVariations,\n this.flagState().readOnly,\n this.featureFlagLimitations()\n ),\n });\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: generateEmptyPrerequisiteFlagConditionFormGroup(\n this.featureFlagLimitations()\n ),\n }),\n ]),\n value: generateDefaultValueFormGroup(\n this.flagState().settingValue.setting.settingType,\n this.flagState().settingValue.setting.predefinedVariations,\n this.flagState().readOnly,\n this.featureFlagLimitations()\n ),\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addPercentageOptions() {\n const flagState = this.flagState();\n if (flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return false;\n }\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = generateTargetingRuleWithEmptyPercentageOptions(\n flagState.settingValue.setting.settingType,\n flagState.settingValue.setting.predefinedVariations,\n flagState.readOnly,\n flagState.prerequisiteSettings,\n 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(\n this.formGroup().controls.targetingRules.controls.length - 1,\n formGroup\n );\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 onDrop(event: CdkDragDrop<FormGroup<TargetingRuleForm>[]>) {\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 || 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 (\n index < this.formGroup().controls.targetingRules.controls.length - 1\n || !isPercentageOnlyTargetingRule(this.formGroup().controls.targetingRules.controls[index])\n );\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 formGroup = this.formGroup();\n const shouldEmitPrerequisiteChanged = formGroup.controls.targetingRules.controls[\n index\n ].controls.conditions.controls.some(c => c.controls.prerequisiteFlagCondition);\n formGroup.controls.targetingRules.removeAt(index);\n 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: number[] = [];\n for (const rule of this.formGroup().controls.targetingRules.controls) {\n for (const condition of rule.controls.conditions.controls) {\n if (condition.controls.prerequisiteFlagCondition?.controls.prerequisiteSettingId.value) {\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","@if (flagState().addButtonRenderState.renderTopAddButtons && !flagState().readOnly) {\n <div class=\"targeting-rule-outer\">\n <div class=\"grow vertical-center add-box pad-bottom left-align\">\n <div class=\"add-btn add-if\" matTooltip=\"Add targeting rule\" [matMenuTriggerFor]=\"ormenu\">+ IF</div>\n @if (!flagState().addButtonRenderState.hasPercentageOnlyRule) {\n <div class=\"add-btn add-if pad-left\" matTooltip=\"Target a percentage of users\" (click)=\"addPercentageOptions()\">\n + %\n </div>\n }\n </div>\n </div>\n}\n\n<div\n cdkDropList\n [cdkDropListDisabled]=\"flagState().readOnly\"\n [cdkDropListSortPredicate]=\"sortPredicate()\"\n [cdkDropListData]=\"formGroup().controls.targetingRules.controls\"\n (cdkDropListDropped)=\"onDrop($event)\">\n @for (targetingRule of formGroup().controls.targetingRules.controls; track $index; let i = $index) {\n <div>\n <div\n class=\"targeting-rule-outer grow\"\n cdkDrag\n [cdkDragDisabled]=\"isDragDisabled(targetingRule)\"\n [cdkDragData]=\"targetingRule\">\n <div class=\"drag-handle\">\n @if (!isDragDisabled(targetingRule)) {\n <div cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n }\n </div>\n <div class=\"white-box grow\">\n <app-targeting-rule\n class=\"grow\"\n [formGroup]=\"targetingRule\"\n [segments]=\"segments()\"\n [flagState]=\"flagState()\"\n [targetingRuleIndex]=\"i\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canManageSegments]=\"canManageSegments()\"\n [percentageEvaluationAttribute]=\"formGroup().controls.percentageEvaluationAttribute.value\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n (removedAllRules)=\"remove(i)\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisiteReferences()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n <div class=\"delete\">\n @if (!flagState().readOnly) {\n <button type=\"button\" mat-icon-button matTooltip=\"Remove targeting rule\" (click)=\"remove(i)\">\n <mat-icon class=\"icon-transform-rotate\">cancel</mat-icon>\n </button>\n }\n </div>\n </div>\n </div>\n @if (flagState().addButtonRenderState.addRuleButtonTracker[i].showAddRuleButtons && !flagState().readOnly) {\n <div class=\"targeting-rule-outer\">\n <div class=\"grow vertical-center add-box pad-bottom pad-top center-shift\">\n @if (!flagState().readOnly) {\n <div class=\"add-btn add-if\" matTooltip=\"Add targeting rule\" [matMenuTriggerFor]=\"ormenu\">+ OR</div>\n }\n @if (!flagState().addButtonRenderState.hasPercentageOnlyRule) {\n <div\n class=\"add-btn add-if pad-left\"\n matTooltip=\"Target a percentage of users\"\n (click)=\"addPercentageOptions()\">\n + %\n </div>\n }\n </div>\n </div>\n }\n @if (flagState().addButtonRenderState.addRuleButtonTracker[i].showOrChip) {\n <div class=\"or-chip\">\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 }\n @if (flagState().addButtonRenderState.addRuleButtonTracker[i].renderSeparationArea) {\n <div class=\"or-chip\"></div>\n }\n </div>\n }\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\n class=\"chip-container fixed-width\"\n [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\n class=\"value grow\"\n tooltip=\"Served value\"\n [setting]=\"flagState().settingValue.setting\"\n [canCreateOrUpdateSetting]=\"canCreateOrUpdateSetting()\"\n [formGroup]=\"formGroup().controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n </div>\n</div>\n\n<mat-menu #ormenu>\n <a mat-menu-item (click)=\"addUserCondition()\">\n <mat-icon>track_changes</mat-icon>\n Target users\n </a>\n <a mat-menu-item (click)=\"addSegmentCondition()\">\n <mat-icon class=\"icon-transform-rotate\">pie_chart</mat-icon>\n Target a segment\n </a>\n <div\n 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 [disabled]=\"!flagState().prerequisiteSettings.length\" (click)=\"addPrerequisiteFlagCondition()\">\n <mat-icon>account_tree</mat-icon>\n Add prerequisite\n </a>\n </div>\n</mat-menu>\n","import { CdkScrollable } from \"@angular/cdk/scrolling\";\nimport { Component, inject, OnInit } from \"@angular/core\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatHint, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatOption, MatSelect } from \"@angular/material/select\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { generatePercentageEvaluationAttributeFormControl } from \"../../../_services\";\nimport { FormHelper } from \"../../../bootstrap\";\n\nexport interface PercentageEvaluationAttributeDialogComponentData {\n percentageEvaluationAttribute: string | null;\n readOnly: boolean;\n}\n\nexport interface PercentageEvaluationAttributeDialogComponentResult {\n percentageEvaluationAttribute: string | null;\n}\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 imports: [\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatFormField,\n MatLabel,\n MatHint,\n MatInput,\n MatSelect,\n MatOption,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n ],\n})\nexport class PercentageEvaluationAttributeDialogComponent implements OnInit {\n dialogRef =\n inject<\n MatDialogRef<PercentageEvaluationAttributeDialogComponent, PercentageEvaluationAttributeDialogComponentResult>\n >(MatDialogRef);\n data = inject<PercentageEvaluationAttributeDialogComponentData>(MAT_DIALOG_DATA);\n\n FormHelper = FormHelper;\n defaultComparisonAttributes = [\"Identifier\", \"Email\", \"Country\"];\n comparisionAttributeCustom = \"Custom\";\n\n formControl!: FormControl<string | null>;\n selectedValue!: string;\n\n ngOnInit(): void {\n this.formControl = generatePercentageEvaluationAttributeFormControl(\n this.data.percentageEvaluationAttribute,\n this.data.readOnly\n );\n this.selectedValue = !this.formControl.value\n ? this.defaultComparisonAttributes[0]\n : !this.isDefault(this.formControl.value)\n ? this.comparisionAttributeCustom\n : this.formControl.value;\n }\n\n attributeChanged(value: string): void {\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 isCustom(): boolean {\n return this.comparisionAttributeCustom === this.selectedValue;\n }\n\n isDefault(attribute: string | null): boolean {\n return attribute === null || this.defaultComparisonAttributes.includes(attribute);\n }\n\n set() {\n if (this.formControl.invalid) {\n this.formControl.markAsTouched();\n return;\n }\n const percentageEvaluationAttributeFilter = this.formControl.value === this.defaultComparisonAttributes[0] ? null : this.formControl.value;\n this.dialogRef.close({ percentageEvaluationAttribute: percentageEvaluationAttributeFilter });\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.\n </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 <mat-select\n [disabled]=\"formControl.disabled\"\n [(value)]=\"selectedValue\"\n (selectionChange)=\"attributeChanged(selectedValue)\">\n @for (comparisonAttribute of defaultComparisonAttributes; track $index) {\n <mat-option [value]=\"comparisonAttribute\">{{ comparisonAttribute }}</mat-option>\n }\n <mat-option value=\"Custom\">Custom</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"!isCustom()\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\" />\n @if (formControl.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\">\n <a\n href=\"https://configcat.com/docs/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n Read more\n </a>\n about percentage-based targeting in the docs.\n </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 [mat-dialog-close]>Cancel</button>\n</div>\n","import { Clipboard } from \"@angular/cdk/clipboard\";\nimport { NgClass } from \"@angular/common\";\nimport { Component, inject, input, output } from \"@angular/core\";\nimport { FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatDivider } from \"@angular/material/divider\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { Router } from \"@angular/router\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { SettingDataModel } from \"ng-configcat-publicapi\";\nimport { getRawPredefinedVariationValue } from \"../../_models/setting-form\";\nimport { isPercentageOnlyTargetingRule, PublicApiService } from \"../../_services\";\nimport { TrackingDirective } from \"../../_services/tracking.directive\";\nimport {\n IFeatureFlagLimitations,\n IFlagState,\n IPrerequisiteChanged,\n ISegment,\n MessagingService,\n SettingType,\n UpdateSettingValueForm,\n} from \"../../bootstrap\";\nimport { CopyableValueComponent } from \"./copyable-value/copyable-value.component\";\nimport { DependeesDialogComponent } from \"./dependees-dialog/dependees-dialog.component\";\nimport { EvaluationFormulaComponent } from \"./evaluation-formula/evaluation-formula.component\";\nimport { FeatureFlagValueComponent } from \"./evaluation-formula/feature-flag-value/feature-flag-value.component\";\nimport { PercentageEvaluationAttributeDialogComponent, PercentageEvaluationAttributeDialogComponentData, PercentageEvaluationAttributeDialogComponentResult } from \"./percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-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: [\"./feature-flag.component.scss\"],\n imports: [\n NgClass,\n MatTooltip,\n MatIcon,\n MatIconButton,\n TrackingDirective,\n MatMenuTrigger,\n FeatureFlagValueComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n EvaluationFormulaComponent,\n MatMenu,\n MatMenuItem,\n MatDivider,\n CopyableValueComponent,\n ],\n})\nexport class FeatureFlagComponent {\n private readonly dialog = inject(MatDialog);\n private readonly messagingService = inject(MessagingService);\n private readonly router = inject(Router);\n private readonly publicApiService = inject(PublicApiService);\n private readonly clipboard = inject(Clipboard);\n\n readonly formGroup = input.required<FormGroup<UpdateSettingValueForm>>();\n readonly flagState = input.required<IFlagState>();\n readonly segments = input.required<ISegment[]>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly hasOtherEnvironment = input.required<boolean>();\n readonly environmentName = input(\"\");\n readonly showEnvironmentName = input(false);\n readonly deleteSettingText = input(\"Delete setting\");\n readonly canDeleteSetting = input(false);\n readonly predefinedVariationsEnabled = input.required<boolean>();\n\n readonly addSegmentConditionRequestedWithoutSegments = output();\n\n readonly expandedChanged = output<boolean>();\n readonly deleteSettingRequested = output<{ setting: SettingDataModel }>();\n readonly subscriptionLimitReached = output();\n readonly prerequisiteConditionChanged = output<IPrerequisiteChanged>();\n readonly recalcAddButtons = output();\n readonly viewVariationsRequested = output<{ settingId: number; settingName: string }>();\n\n SettingType = SettingType;\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 subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n\n changePercentageEvaluationAttribute() {\n const flagState = this.flagState();\n if (flagState.readOnly) {\n return;\n }\n\n const dialogRef = this.dialog.open<\n PercentageEvaluationAttributeDialogComponent,\n PercentageEvaluationAttributeDialogComponentData,\n PercentageEvaluationAttributeDialogComponentResult | undefined\n >(PercentageEvaluationAttributeDialogComponent, {\n width: \"500px\",\n data: {\n percentageEvaluationAttribute: this.formGroup().controls.percentageEvaluationAttribute.value,\n readOnly: flagState.readOnly,\n },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n const formGroup = this.formGroup();\n if (\n result\n && result.percentageEvaluationAttribute !== formGroup.controls.percentageEvaluationAttribute.value\n ) {\n formGroup.controls.percentageEvaluationAttribute.setValue(result.percentageEvaluationAttribute);\n formGroup.controls.percentageEvaluationAttribute.updateValueAndValidity();\n formGroup.controls.percentageEvaluationAttribute.markAsDirty();\n formGroup.controls.percentageEvaluationAttribute.markAsTouched();\n }\n });\n }\n\n getGlance(): IGlance | undefined {\n const flagState = this.flagState();\n const formGroup = this.formGroup();\n if (formGroup.controls.targetingRules.length === 0 || flagState.panelExpanded) {\n return;\n }\n\n const glance: IGlance = { ruleText: this.getRuleText(), percentageText: \"\", class: \"default\" };\n\n const defaultPredefinedVariation = flagState.settingValue.setting.predefinedVariations.length\n ? flagState.settingValue.setting.predefinedVariations.find(v => v.predefinedVariationId === formGroup.controls.defaultValue.value.predefinedVariationId)\n : void 0;\n\n const hasTrueRule = formGroup.controls.targetingRules.controls.some(\n r => r.controls.value?.controls.boolValue?.value\n || flagState.settingValue.setting.predefinedVariations\n .find(v => v.predefinedVariationId === r.controls.value?.controls.predefinedVariationId?.value)?.value?.boolValue\n );\n const lastFormulaTerm =\n formGroup.controls.targetingRules.controls[formGroup.controls.targetingRules.controls.length - 1];\n if (isPercentageOnlyTargetingRule(lastFormulaTerm)) {\n if (flagState.settingValue.setting.settingType === SettingType.Boolean) {\n const boolRule = lastFormulaTerm.controls.percentageOptions!.controls.find(\n p => p.controls.value.controls.boolValue?.value\n || flagState.settingValue.setting.predefinedVariations\n .find(v => v.predefinedVariationId === p.controls.value.value.predefinedVariationId)?.value.boolValue\n );\n if (boolRule && boolRule.controls.percentage.value > 0) {\n glance.percentageText = \"ON for \" + boolRule.controls.percentage.value + \"%\";\n glance.class = \"on\";\n } else {\n glance.percentageText = \"OFF (%)\";\n glance.class = hasTrueRule ? \"on\" : \"off\";\n }\n } else {\n glance.percentageText = lastFormulaTerm.controls\n .percentageOptions!.controls.map(p => p.controls.percentage.value + \"%\")\n .join(\" / \");\n glance.class = \"other\";\n }\n } else {\n glance.percentageText = defaultPredefinedVariation\n ? defaultPredefinedVariation?.name ?? this.getValueText(flagState.settingValue.setting.settingType, defaultPredefinedVariation.value)\n : this.getValueText(flagState.settingValue.setting.settingType, getRawPredefinedVariationValue(formGroup.controls.defaultValue));\n\n if (flagState.settingValue.setting.settingType === SettingType.Boolean) {\n glance.class = defaultPredefinedVariation?.value.boolValue || formGroup.controls.defaultValue.value.boolValue || hasTrueRule ? \"on\" : \"off\";\n } else {\n glance.class = \"other\";\n }\n }\n\n return glance;\n }\n\n getValueText(settingType: SettingType,\n value: { boolValue: boolean | null; stringValue: string | null; intValue: number | null; doubleValue: number | null }) {\n switch (settingType) {\n case SettingType.Double:\n return value.doubleValue?.toString() ?? \"\";\n case SettingType.Int:\n return value.intValue?.toString() ?? \"\";\n case SettingType.Boolean:\n return value.boolValue ? \"ON\" : \"OFF\";\n case SettingType.String:\n default:\n return value.stringValue ?? \"\";\n }\n }\n\n getRuleText(): string {\n const count = this.formGroup().controls.targetingRules.controls.filter(\n tr => !isPercentageOnlyTargetingRule(tr)\n ).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([\n \"v2\",\n this.flagState().settingValue.config.product.organization.organizationId,\n this.flagState().settingValue.config.product.productId,\n this.flagState().settingValue.config.configId,\n this.flagState().settingValue.environment.environmentId,\n this.flagState().settingValue.setting.settingId,\n ]);\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","@let flagStateValue = flagState();\n\n<div class=\"outer\">\n <div class=\"wrapper\">\n <div class=\"mat-elevation-z0 feature-flag\" [ngClass]=\"{ invalid: formGroup().touched && formGroup().invalid }\">\n <div class=\"expandcollapse\">\n @if (flagStateValue.panelExpanded) {\n <div matTooltip=\"Collapse\" class=\"btn\" (click)=\"setExpanded(!flagStateValue.panelExpanded)\">\n <mat-icon>arrow_drop_up</mat-icon>\n </div>\n } @else {\n <div matTooltip=\"Expand\" class=\"btn\" (click)=\"setExpanded(!flagStateValue.panelExpanded)\">\n <mat-icon>arrow_drop_down</mat-icon>\n </div>\n }\n </div>\n <div class=\"header\">\n <div class=\"top\">\n <div class=\"left\">\n <div class=\"name-key\">\n <span class=\"name\" [matTooltip]=\"flagStateValue.settingValue.setting.name\">\n {{ flagStateValue.settingValue.setting.name }}\n </span>\n @if (showEnvironmentName()) {\n <span class=\"environment-name\" [matTooltip]=\"environmentName()\">({{ environmentName() }})</span>\n }\n <div class=\"key\">\n <app-copyable-value\n [tooltip]=\"\n `Copy key to clipboard\\n(Setting type: ${flagStateValue.settingValue.setting.settingType})`\n \"\n [tooltipClass]=\"['wide-tooltip', 'multiline-tooltip', 'left-aligned']\"\n [value]=\"flagStateValue.settingValue.setting.key\"\n [smallest]=\"true\"\n [dark]=\"true\"\n [wholeControlCopyable]=\"true\" />\n </div>\n </div>\n </div>\n\n <div class=\"right\">\n <div class=\"line\">\n @if (flagStateValue.dependeeSettings && flagStateValue.dependeeSettings.length) {\n <button\n type=\"button\"\n class=\"prereq-button\"\n mat-icon-button\n [track]=\"['prerequisite button click', 'Feature flags & settings V2 page']\"\n [matTooltip]=\"'Prerequisite of ' + flagStateValue.dependeeSettings.length + ' other flag(s).'\"\n (click)=\"openDependeesDialog()\">\n <mat-icon>account_tree</mat-icon>\n </button>\n }\n <button\n type=\"button\"\n class=\"more-button\"\n mat-icon-button\n matTooltip=\"More\"\n [matMenuTriggerFor]=\"moreMenu\"\n [track]=\"['more menu button click', 'Feature flags & settings V2 page']\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"description-container\">\n <div class=\"description-tags\">\n @if (flagStateValue.settingValue.setting.hint) {\n <div class=\"hint\" [class.crop]=\"!flagStateValue.panelExpanded\">\n {{ flagStateValue.settingValue.setting.hint }}\n </div>\n }\n\n @if (!flagStateValue.panelExpanded && !formGroup().controls.targetingRules.length) {\n <app-feature-flag-value\n class=\"glance\"\n tooltip=\"Served value\"\n [class.text-glance]=\"flagStateValue.settingValue.setting.settingType !== 'boolean'\"\n [setting]=\"flagStateValue.settingValue.setting\"\n [formGroup]=\"formGroup().controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canCreateOrUpdateSetting]=\"true\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n }\n\n @if (getGlance(); as glance) {\n <div class=\"quick-glance\" (click)=\"setExpanded(!flagStateValue.panelExpanded)\">\n <div class=\"container\" [ngClass]=\"glance.class\">\n @if (glance.percentageText) {\n <div class=\"quick-glance-item\">{{ glance.percentageText }}</div>\n }\n @if (glance.ruleText) {\n <div class=\"quick-glance-item\">{{ glance.ruleText }}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (flagStateValue.panelExpanded) {\n <div class=\"eval-formula-wrapper\">\n <app-evaluation-formula\n [formGroup]=\"formGroup()\"\n [flagState]=\"flagStateValue\"\n [segments]=\"segments()\"\n [featureFlagLimitations]=\"featureFlagLimitations()\"\n [canManageSegments]=\"false\"\n [canCreateOrUpdateSetting]=\"true\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttribute()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit($event)\"\n (recalcAddButtons)=\"recalcAddButtons.emit()\"\n (viewVariationsRequested)=\"viewVariationsRequested.emit($event)\" />\n </div>\n }\n </div>\n </div>\n</div>\n<mat-menu #moreMenu=\"matMenu\">\n <div\n mat-menu-item\n data-robot=\"history\"\n [track]=\"['change percentage attribute click', 'Feature flags & settings V2 page']\"\n [disabled]=\"flagStateValue.readOnly\"\n (click)=\"changePercentageEvaluationAttribute()\">\n <mat-icon>percent</mat-icon>\n <span>Change percentage attribute</span>\n </div>\n <a target=\"_blank\" rel=\"noopener noreferrer\" [href]=\"getDashboardUrl()\">\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\n mat-menu-item\n data-robot=\"renameSetting\"\n [track]=\"['copy direct link click', 'Feature flags & settings V2 page']\"\n (click)=\"copyDirectLink()\">\n <mat-icon>content_copy</mat-icon>\n <span>Copy direct link</span>\n </div>\n @if (canDeleteSetting()) {\n <div>\n <mat-divider />\n <div\n mat-menu-item\n data-robot=\"deleteSetting\"\n [track]=\"['delete feature flag click', 'Feature flags & settings V2 page']\"\n (click)=\"deleteSetting()\">\n <mat-icon>delete_outline</mat-icon>\n <span>{{ deleteSettingText() }}</span>\n </div>\n </div>\n }\n @if (predefinedVariationsEnabled()) {\n @if (flagStateValue.settingValue.setting.predefinedVariations.length) {\n <mat-divider />\n <div\n mat-menu-item\n [track]=\"['view/manage variations click', 'Feature flags & settings V2 page']\"\n (click)=\"\n viewVariationsRequested.emit({\n settingId: flagStateValue.settingValue.setting.settingId,\n settingName: flagStateValue.settingValue.setting.name,\n })\n \">\n <mat-icon class=\"rotated-icon\">call_split</mat-icon>\n <span>Manage predefined variations</span>\n <!-- @if (permissions().canCreateOrUpdateSetting) {\n <span>Manage predefined variations</span>\n } @else {\n <span>View predefined variations</span>\n } -->\n </div>\n }\n }\n</mat-menu>\n","import { NgClass } from \"@angular/common\";\nimport { HttpErrorResponse } from \"@angular/common/http\";\nimport { Component, inject, input, OnDestroy, OnInit, output } from \"@angular/core\";\nimport { FormArray, FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n EvaluationVersion,\n SegmentListModel,\n SettingDataModel,\n SettingFormulaModel,\n SettingModel,\n UpdateEvaluationFormulaModel,\n} from \"ng-configcat-publicapi\";\nimport { forkJoin, Subscription } from \"rxjs\";\nimport { DeleteSettingModel } from \"../_models\";\nimport { IFlagState } from \"../_models/flag-state\";\nimport { IPrerequisiteSetting, TargetingRuleForm, UpdateSettingValueForm } from \"../_models/setting-value-formgroup\";\nimport { TrackingDirective } from \"../_services/tracking.directive\";\nimport { BaseComponent } from \"../base/base.component\";\nimport {\n FormHelper,\n generateSettingValuesFormGroup,\n generateTargetingRuleFormGroup,\n generateValueFormGroup,\n getRawValue,\n isPercentageOnlyTargetingRule,\n MessagingService,\n RerouteDialogComponent,\n} from \"../bootstrap\";\nimport { ConcurrentDeleteDialogComponent, ConcurrentDeleteDialogComponentData } from \"../dialogs/concurrent-delete-dialog/concurrent-delete-dialog.component\";\nimport { ConfirmationDialogComponent, ConfirmationDialogData } from \"../dialogs/confirmation-dialog/confirmation-dialog\";\nimport { ReasonDialogComponent, ReasonDialogComponentResult } from \"../dialogs/reason-dialog/reason-dialog.component\";\nimport { VariationsDialogComponent, VariationsDialogComponentData } from \"../dialogs/variations-dialog/variations-dialog.component\";\nimport { FeatureFlagComponent } from \"./feature-flag/feature-flag.component\";\n\n@Component({\n selector: \"app-feature-flag-item\",\n templateUrl: \"./feature-flag-item.component.html\",\n styleUrls: [\"./feature-flag-item.component.scss\"],\n imports: [FormsModule, ReactiveFormsModule, RxReactiveFormsModule, NgClass, FeatureFlagComponent, MatButton, TrackingDirective, MatIcon],\n})\nexport class FeatureFlagItemComponent extends BaseComponent implements OnInit, OnDestroy {\n private readonly dialog = inject(MatDialog);\n private readonly messagingService = inject(MessagingService);\n\n readonly productId = input.required<string>();\n readonly environmentId = input.required<string>();\n readonly configId = input.required<string>();\n readonly settingId = input.required<number>();\n\n readonly canDeleteSetting = input(true);\n readonly deleteSettingText = input(\"Delete setting\");\n readonly showEnvironmentName = input(true);\n\n readonly deleteSettingRequested = output<DeleteSettingModel>();\n\n readonly loadSucceeded = output();\n readonly loadFailed = output<Error>();\n readonly saveSucceeded = output();\n readonly saveFailed = output();\n readonly expandedStateChanged = output();\n readonly formValuesChanged = output();\n\n segments!: SegmentListModel[];\n dashboardBasePath: string;\n loading = true;\n submitting = false;\n\n formGroup!: FormGroup<UpdateSettingValueForm>;\n formValueChangesSubscription!: Subscription | null;\n\n settings!: SettingModel[];\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 super();\n this.dashboardBasePath = this.getDashboardBasePath();\n }\n\n ngOnInit() {\n this.reloadSettingValues();\n }\n\n ngOnDestroy(): void {\n this.unsubscribeFormValueChangesSubscription();\n }\n\n reloadSettingValues() {\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({\n next: 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 predefinedVariations: sv.predefinedVariations,\n };\n });\n this.segments = result.segments;\n this.handleFetchedSettingValues(result.settingFormula);\n this.loading = false;\n this.loadSucceeded.emit();\n },\n error: (error: Error) => {\n this.loadFailed.emit(error);\n throw error;\n },\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 = generateSettingValuesFormGroup(\n model,\n model.readOnly,\n this.prerequisiteSettings,\n model.featureFlagLimitations\n );\n }\n\n getAvailablePrerequisiteSettings(settingId: number) {\n return this.prerequisiteSettings.filter(ds => ds.settingId !== settingId);\n }\n\n revert() {\n this.openDiscardDialog(\n \"Revert to last saved state?\",\n \"All changes will be lost.\",\n \"Revert\",\n \"No\"\n ).subscribe(result => {\n if (result === \"yes\") {\n this.revertDirtyValuesFromState();\n }\n });\n }\n\n revertDirtyValuesFromState() {\n this.formGroup.setControl(\n \"defaultValue\",\n generateValueFormGroup(\n this.settingFormula.defaultValue,\n this.settingFormula.setting.settingType,\n this.settingFormula.setting.predefinedVariations,\n this.settingFormula.readOnly,\n this.settingFormula.featureFlagLimitations\n )\n );\n this.formGroup.setControl(\n \"percentageEvaluationAttribute\",\n new FormControl(\n { value: this.settingFormula.percentageEvaluationAttribute, disabled: this.settingFormula.readOnly },\n { validators: [Validators.max(1000)], nonNullable: true }\n )\n );\n this.formGroup.setControl(\n \"targetingRules\",\n new FormArray<FormGroup<TargetingRuleForm>>(\n this.settingFormula.targetingRules.map(ft =>\n generateTargetingRuleFormGroup(\n ft,\n this.settingFormula.setting.settingType,\n this.settingFormula.setting.predefinedVariations,\n this.settingFormula.readOnly,\n this.prerequisiteSettings,\n this.settingFormula.featureFlagLimitations\n )\n )\n )\n );\n this.recalcAddButtons();\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 ...getRawValue(this.formGroup),\n };\n\n this.updateSettingValues(value);\n }\n\n updateSettingValues(updateModel: UpdateEvaluationFormulaModel, reason?: string) {\n this.submitting = true;\n this.createSettingValuesV2Service()\n .replaceSettingValueV2(this.environmentId(), this.settingId(), updateModel, reason)\n .subscribe({\n next: settingValues => {\n this.handleFetchedSettingValues(settingValues);\n this.messagingService.showSuccessSnack(\"Settings saved successfully.\", 5000);\n this.submitting = false;\n this.saveSucceeded.emit();\n },\n error: (error: Error) => {\n this.submitting = false;\n if (\n error instanceof HttpErrorResponse\n && error.status === 400\n && FormHelper.getHttpErrorResponseMessage(error, \"Reason\") === \"Reason required.\"\n ) {\n const dialogRef = this.dialog.open<ReasonDialogComponent, never, ReasonDialogComponentResult>(\n ReasonDialogComponent,\n {\n width: \"450px\",\n }\n );\n dialogRef.afterClosed().subscribe(result => {\n if (result?.button === \"save\" && result.reason) {\n this.updateSettingValues(updateModel, result.reason);\n }\n });\n return;\n }\n\n if (\n error instanceof HttpErrorResponse\n && error.status === 400\n && FormHelper.getHttpErrorResponseMessage(error, \"SegmentCondition\") === \"Segment not found.\"\n ) {\n this.openDiscardDialog(\n \"Cannot save feature flags\",\n \"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 \"Reload\",\n \"\",\n true,\n \"450px\"\n ).subscribe(() => {\n this.reloadSettingValues();\n });\n return;\n }\n\n if (\n error instanceof HttpErrorResponse\n && error.status === 400\n && FormHelper.getHttpErrorResponseMessage(error, \"PrerequisiteFlagCondition\") === \"Prerequisite setting not found.\"\n ) {\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\n width: \"450px\",\n data: {\n title: \"Cannot save feature flags\",\n body: \"A feature flag referenced in a prerequisite condition has been deleted. Reload the config to see its latest state, apply your changes and try the save again.\",\n yesButtonLabel: \"Reload\",\n hideCancelButton: true,\n },\n }\n );\n dialogRef.afterClosed().subscribe(() => {\n this.reloadSettingValues();\n });\n return;\n }\n\n if (\n error instanceof HttpErrorResponse\n && error.status === 400\n && (FormHelper.getHttpErrorResponseMessage(error, \"DefaultValue\")?.includes(\"Variation could not be found.\")\n || FormHelper.getHttpErrorResponseMessage(error, \"Value\")?.includes(\"Variation could not be found.\")\n || FormHelper.getHttpErrorResponseMessage(error, \"PrerequisiteComparisonValue\")?.includes(\"Variation could not be found.\")\n || FormHelper.getHttpErrorResponseMessage(error, \"PredefinedVariationId\")?.includes(\"Could not find Variation.\"))\n ) {\n this.openDiscardDialog(\n \"Cannot save feature flags\",\n \"A predefined variation 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 \"Reload\",\n \"\",\n true,\n \"450px\"\n ).subscribe(() => {\n this.reloadSettingValues();\n });\n return;\n }\n\n if (\n error instanceof HttpErrorResponse\n && error.status === 400\n && error.error && (\"\" + error.error).startsWith(\"Circular dependency detected.\")) {\n const errorMessage = (\"\" + error.error).slice(\"Circular dependency detected.\".length + 1);\n this.openDiscardDialog(\n \"Cannot save feature flags\",\n \"Circular dependency detected between the following feature flags:<p>\"\n + errorMessage\n + \"</p>Please <strong>eliminate the circular dependency</strong> before saving your feature flags.\",\n \"I understand\",\n \"\",\n true,\n \"450px\"\n );\n return;\n }\n\n if (\n error instanceof HttpErrorResponse\n && error.status === 404\n ) {\n this.openConcurentDeleteDialog();\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: { setting: SettingDataModel }) {\n if (!this.canDeactivate()) {\n this.openDiscardDialog(\n \"Discard changes?\",\n \"You have unsaved feature flag changes. If you continue, unsaved changes will be lost.\",\n \"Discard changes\",\n \"No\"\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: { setting: SettingDataModel }) {\n this.deleteSettingRequested.emit({\n config: this.settingFormula.config,\n environment: this.settingFormula.environment,\n setting: setting.setting,\n } as DeleteSettingModel);\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): number {\n return index;\n }\n\n recalcPrerequisites(): void {\n const settingValue = this.settingFormula;\n this.flagState.dependeeSettings = this.settings\n .filter(s => settingValue.settingIdsWherePrerequisite?.includes(s.settingId))\n .map(s => {\n return { key: s.key, name: s.name, settingId: s.settingId };\n });\n return;\n }\n\n recalcAddButtons(): void {\n const state = this.flagState;\n const group = this.formGroup;\n\n state.addButtonRenderState.renderTopAddButtons =\n !group.controls.targetingRules.controls.length || 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 =\n group.controls.targetingRules.controls.length > 0\n && isPercentageOnlyTargetingRule(\n group.controls.targetingRules.controls[group.controls.targetingRules.controls.length - 1]\n ));\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:\n isPercentageOnlyTargetingRule(item)\n || (this.settingFormula.readOnly && (isLastRule || (hasPercOnly && isBeforeLast))),\n };\n });\n }\n }\n\n hasOnlyPercentageRule(group: FormGroup<UpdateSettingValueForm>): boolean {\n return (\n group.controls.targetingRules.controls.length === 1\n && isPercentageOnlyTargetingRule(group.controls.targetingRules.controls[0])\n );\n }\n\n expandedChanged(expandedState: boolean): void {\n this.flagState.panelExpanded = expandedState;\n this.expandedStateChanged.emit();\n }\n\n private openDiscardDialog(title: string, body: string, yesButtonLabel?: string, cancelButtonLabel?: string, hideCancelButton?: boolean, width?: string) {\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\n width: width,\n data: {\n title: title,\n body: body,\n yesButtonLabel: yesButtonLabel,\n cancelButtonLabel: cancelButtonLabel,\n hideCancelButton: hideCancelButton,\n },\n }\n );\n\n return dialogRef.afterClosed();\n }\n\n canDeactivate(): boolean {\n return !this.formGroup?.dirty;\n }\n\n viewVariations(event: { settingId: number; settingName: string }) {\n if (!this.canDeactivate()) {\n this.openDiscardDialog(\n \"Manage predefined variations for the feature flag\",\n \"You have unsaved changes. Before changing the predefined variations, please save or discard your current changes.\",\n \"Discard changes\",\n \"No\"\n ).subscribe(result => {\n if (result === \"yes\") {\n this.revertDirtyValuesFromState();\n this.openVariationsDialog(event);\n }\n });\n } else {\n this.openVariationsDialog(event);\n }\n }\n\n openConcurentDeleteDialog() {\n this.createProductsService().getProduct(this.productId()).subscribe({\n next: product => {\n const dialogRef = this.dialog.open<ConcurrentDeleteDialogComponent, ConcurrentDeleteDialogComponentData, string>(\n ConcurrentDeleteDialogComponent,\n {\n width: \"450px\",\n data: {\n organizationId: product.organization.organizationId,\n productId: this.productId(),\n configId: this.configId(),\n environmentId: this.environmentId(),\n evaluationVersion: EvaluationVersion.V2,\n },\n }\n );\n dialogRef.afterClosed().subscribe(() => {\n this.saveFailed.emit();\n });\n },\n error: (error: Error) => {\n console.log(error);\n this.messagingService.showErrorSnack(\"Something went wrong on our side. This is not your fault. Please try again.\");\n },\n });\n }\n\n openVariationsDialog(event: { settingId: number; settingName: string }) {\n this.createProductsService().getProduct(this.productId()).subscribe({\n next: product => {\n const dialogRef = this.dialog.open<\n VariationsDialogComponent,\n VariationsDialogComponentData,\n boolean\n >(VariationsDialogComponent, {\n data: {\n settingId: event.settingId,\n settingName: event.settingName,\n manage: true,\n organizationId: product.organization.organizationId,\n productId: this.productId(),\n configId: this.configId(),\n maxStringFlagValueLength: this.settingFormula.featureFlagLimitations.maxStringFlagValueLength,\n basePath: this.basePath(),\n basicAuthUsername: this.basicAuthUsername(),\n basicAuthPassword: this.basicAuthPassword(),\n },\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.reloadSettingValues();\n }\n });\n },\n error: (error: Error) => {\n console.log(error);\n this.messagingService.showErrorSnack(\"Could not load predefined variations dialog.\");\n },\n });\n }\n}\n","<div class=\"container\">\n @if (!loading) {\n <form id=\"feature-flag-form\" [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\">\n <div [ngClass]=\"{ 'invalid-flag': formGroup.invalid }\">\n <app-feature-flag\n [formGroup]=\"formGroup\"\n [flagState]=\"flagState\"\n [segments]=\"segments\"\n [featureFlagLimitations]=\"settingFormula.featureFlagLimitations\"\n [hasOtherEnvironment]=\"false\"\n [showEnvironmentName]=\"showEnvironmentName()\"\n [environmentName]=\"settingFormula.environment.name\"\n [deleteSettingText]=\"deleteSettingText()\"\n [canDeleteSetting]=\"canDeleteSetting()\"\n [predefinedVariationsEnabled]=\"true\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisites()\"\n (recalcAddButtons)=\"recalcAddButtons()\"\n (expandedChanged)=\"expandedChanged($event)\"\n (viewVariationsRequested)=\"viewVariations($event)\" />\n </div>\n @if (!settingFormula.readOnly && formGroup!.dirty) {\n <div class=\"save\">\n <button\n class=\"save-button\"\n mat-flat-button\n color=\"warn\"\n type=\"submit\"\n [class.animate]=\"formGroup.dirty\"\n [disabled]=\"submitting\"\n [track]=\"['save & publish click', 'feature flags and settings']\">\n <mat-icon>backup</mat-icon>\n <span>Save & publish changes</span>\n </button>\n <button\n type=\"button\"\n class=\"revert-button\"\n mat-stroked-button\n [disabled]=\"submitting\"\n [track]=\"['revert click', 'feature flags and settings']\"\n (click)=\"revert()\">\n <span>Revert</span>\n </button>\n @if (formGroup.touched && formGroup.invalid && showFeedBackMessage) {\n <div class=\"feedback\">\n @if (formGroup.errors && formGroup.errors[\"internalServerError\"]) {\n <div class=\"error\">\n <span>\n Something went wrong and we could not save your settings. You can try again or\n <a href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact us.</a>\n </span>\n </div>\n }\n @if (!formGroup.errors || !formGroup.errors[\"internalServerError\"]) {\n <div class=\"error\">\n <span>Oh no! A feature flag has invalid or missing data. </span>\n </div>\n }\n </div>\n }\n </div>\n }\n </form>\n }\n</div>\n","import { Component, inject, input, OnDestroy, OnInit, output, signal } from \"@angular/core\";\nimport { FormControl, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { Subscription } from \"rxjs\";\nimport { ConfigSelectComponent, EnvironmentSelectComponent, ProductSelectComponent, SettingSelectComponent } from \"../../public-api\";\nimport { AuthorizationParameters } from \"../_models/authorization-parameters\";\nimport { LinkFeatureFlagParameters } from \"../_models/link-feature-flag-parameters\";\nimport { IntegrationAddSettingFormGroup } from \"../_models/setting-form\";\n\n@Component({\n selector: \"app-link-feature-flag\",\n templateUrl: \"./link-feature-flag.component.html\",\n styleUrl: \"./link-feature-flag.component.scss\",\n imports: [\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatButton,\n ProductSelectComponent,\n ConfigSelectComponent,\n EnvironmentSelectComponent,\n SettingSelectComponent,\n ],\n})\nexport class LinkFeatureFlagComponent implements OnInit, OnDestroy {\n\n readonly authorizationParameters = input<AuthorizationParameters | null>();\n readonly hideCancelButton = input(true);\n readonly addButtonLabel = input();\n readonly cancelButtonLabel = input();\n\n readonly linkInitiated = output<LinkFeatureFlagParameters>();\n readonly resizeRequested = output();\n readonly cancelInitiated = output();\n readonly selectDropdownPanelChangedReqested = output<boolean>();\n\n private readonly formBuilder = inject(NonNullableFormBuilder);\n\n formGroup = this.formBuilder.group<IntegrationAddSettingFormGroup>({\n productId: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n environmentId: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n configId: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n settingId: new FormControl<number>(0, {\n nonNullable: true,\n validators: [Validators.required],\n }),\n });\n\n subscription!: Subscription | null;\n\n readonly submitting = signal(false);\n\n ngOnInit(): void {\n this.formGroup.reset();\n this.subscription = this.formGroup.statusChanges.subscribe(() => {\n this.resizeRequested.emit();\n });\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n this.subscription = null;\n }\n }\n\n add() {\n if (!this.formGroup.valid) {\n return;\n }\n this.submitting.set(true);\n\n this.linkInitiated.emit({\n environmentId: this.formGroup.controls.environmentId.value,\n settingId: this.formGroup.controls.settingId.value,\n callback: () => this.linkingFinished(),\n });\n }\n\n linkingFinished() {\n this.submitting.set(false);\n }\n\n cancel() {\n this.cancelInitiated.emit();\n }\n\n selectDropdownPanelChanged(useSelector: boolean) {\n this.selectDropdownPanelChangedReqested.emit(useSelector);\n }\n\n}\n","<div class=\"container\">\n <form class=\"form\" [formGroup]=\"formGroup\" (ngSubmit)=\"add()\">\n <div>\n <app-product-select\n name=\"productId\"\n [basicAuthUsername]=\"authorizationParameters()!.basicAuthUsername\"\n [basicAuthPassword]=\"authorizationParameters()!.basicAuthPassword\"\n [valueFormControl]=\"formGroup.controls.productId\"\n [customDropdown]=\"true\" />\n @if (formGroup.controls.productId.value) {\n <app-config-select\n [basicAuthUsername]=\"authorizationParameters()!.basicAuthUsername\"\n [basicAuthPassword]=\"authorizationParameters()!.basicAuthPassword\"\n [customDropdown]=\"true\"\n [productId]=\"formGroup.controls.productId.value\"\n [valueFormControl]=\"formGroup.controls.configId\"\n (dropdownOpened)=\"selectDropdownPanelChanged($event)\" />\n }\n @if (formGroup.controls.productId.value) {\n <app-environment-select\n [basicAuthUsername]=\"authorizationParameters()!.basicAuthUsername\"\n [productId]=\"formGroup.controls.productId.value\"\n [basicAuthPassword]=\"authorizationParameters()!.basicAuthPassword\"\n [valueFormControl]=\"formGroup.controls.environmentId\"\n [customDropdown]=\"true\"\n (dropdownOpened)=\"selectDropdownPanelChanged($event)\" />\n }\n @if (formGroup.controls.configId.value) {\n <app-setting-select\n [basicAuthUsername]=\"authorizationParameters()!.basicAuthUsername\"\n [configId]=\"formGroup.controls.configId.value\"\n [basicAuthPassword]=\"authorizationParameters()!.basicAuthPassword\"\n [valueFormControl]=\"formGroup.controls.settingId\"\n [customDropdown]=\"true\"\n (dropdownOpened)=\"selectDropdownPanelChanged($event)\" />\n }\n </div>\n <div class=\"buttons\">\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"submitting() || !formGroup.valid\">\n {{ addButtonLabel() ? addButtonLabel() : \"Add\" }}\n </button>\n @if (!hideCancelButton()) {\n <button mat-stroked-button type=\"button\" (click)=\"cancel()\">\n {{ cancelButtonLabel() ? cancelButtonLabel() : \"Cancel\" }}\n </button>\n }\n </div>\n </form>\n</div>\n","import { Component, input, ViewEncapsulation } from \"@angular/core\";\n\n@Component({\n selector: \"app-box\",\n templateUrl: \"./box.component.html\",\n styleUrls: [\"./box.component.scss\"],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BoxComponent {\n readonly type = input.required<string>();\n readonly title = input<string>();\n}\n","<div [class.info-box]=\"type() === 'info'\" [class.warn-box]=\"type() === 'warn'\" [class.error-box]=\"type() === 'error'\">\n <div class=\"box-container\" [class.titleless]=\"!title()\">\n @if (title()) {\n <div class=\"box-header\">\n <div class=\"box-icon\"></div>\n <div class=\"box-title\">{{ title() }}</div>\n </div>\n } @else {\n <div class=\"box-icon\"></div>\n }\n <div class=\"box-content\">\n <ng-content />\n </div>\n </div>\n</div>\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport { Component, computed, DestroyRef, inject, input, OnInit, output, signal } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { FormArray, FormControl, FormGroup, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton, MatIconButton } from \"@angular/material/button\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatError, MatFormField, MatHint, MatLabel, MatSuffix } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInput } from \"@angular/material/input\";\nimport { MatOption, MatSelect } from \"@angular/material/select\";\nimport { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatRow, MatRowDef, MatTable, MatTableDataSource } from \"@angular/material/table\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { CreatePredefinedVariationModel, EnvironmentModel, EvaluationVersion, PredefinedVariationValueModel, SettingType } from \"ng-configcat-publicapi\";\nimport { ConfigSelectComponent, EnvironmentSelectComponent, featureFlagKeyRegex, FormHelper, ProductSelectComponent, wholeNumberRegex } from \"../../public-api\";\nimport { AutofocusDirective } from \"../_directives/autofocus.directive\";\nimport { DigitOnlyDirective } from \"../_directives/digit-only.directive\";\nimport { LinkFeatureFlagParameters } from \"../_models/link-feature-flag-parameters\";\nimport { getRawPredefinedVariationValue, InitialValueFormGroup, IntegrationCreateSettingFormGroup, PredefinedVariationFormGroup, PredefinedVariationValueFormGroup } from \"../_models/setting-form\";\nimport { validateNumberNan, validateUniqueVariations } from \"../_services/custom-validators\";\nimport { ErrorHandler } from \"../_services/error-handler\";\nimport { getPredefinedVariationColorIndex, getPredefinedVariationFeatureFlagValue, getPredefinedVariationValueDisplayValue } from \"../_services/variation-helper.service\";\nimport { BaseComponent } from \"../base/base.component\";\nimport { BoxComponent } from \"../box/box.component\";\nimport { LoaderComponent } from \"../loader/loader.component\";\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData, PopoutTextEditorDialogResult } from \"../v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component\";\n\nexport interface PresetProductAndConfig {\n productId: string;\n configId: string;\n productName: string;\n configName: string;\n}\n\n@Component({\n selector: \"app-create-feature-flag\",\n templateUrl: \"./create-feature-flag.component.html\",\n styleUrls: [\n \"./create-feature-flag.component.scss\",\n \"../../css/slider.scss\",\n ],\n imports: [\n AutofocusDirective,\n DigitOnlyDirective,\n ProductSelectComponent,\n ConfigSelectComponent,\n EnvironmentSelectComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatSelect,\n MatOption,\n NgTemplateOutlet,\n MatTooltip,\n MatIcon,\n MatInput,\n MatHint,\n MatError,\n MatButton,\n MatTable,\n MatColumnDef,\n MatHeaderCellDef,\n MatHeaderCell,\n MatCellDef,\n MatCell,\n MatHeaderRowDef,\n MatHeaderRow,\n MatRowDef,\n MatRow,\n MatSuffix,\n MatIconButton,\n LoaderComponent,\n BoxComponent,\n ],\n})\nexport class CreateFeatureFlagComponent extends BaseComponent implements OnInit {\n private readonly formBuilder = inject(NonNullableFormBuilder);\n private readonly destroyRef = inject(DestroyRef);\n private readonly dialog = inject(MatDialog);\n\n readonly hideCancelButton = input(true);\n readonly createButtonLabel = input<string>();\n readonly cancelButtonLabel = input<string>();\n readonly targetSectionHeader = input<string>();\n readonly targetSectionDescription = input<string>();\n readonly flagSectionHeader = input<string>();\n readonly flagSectionDescription = input<string>();\n readonly linkSectionHeader = input<string>();\n readonly linkSectionDescription = input<string>();\n readonly hideLinkSection = input(false);\n\n readonly presetProductAndConfig = input<PresetProductAndConfig>();\n\n readonly createInitiated = output<LinkFeatureFlagParameters>();\n readonly resizeRequested = output();\n readonly cancelInitiated = output();\n readonly selectDropdownPanelChangedReqested = output<boolean>();\n\n SettingTypeEnum = SettingType;\n\n FormHelper = FormHelper;\n EvaluationVersion = EvaluationVersion;\n\n private readonly loadingProduct = signal(false);\n private readonly loadingEnviroments = signal(false);\n private readonly loadinOrganizationLimitations = signal(false);\n private readonly loadingConfigurations = signal(false);\n private readonly loading = signal(false);\n readonly loadingComputed = computed(() => this.loading() || this.loadingProduct() || this.loadingEnviroments()\n || this.loadinOrganizationLimitations() || this.loadingConfigurations());\n readonly submitting = signal(false);\n readonly reasonRequired = signal(false);\n\n dataSource = new MatTableDataSource<FormGroup<PredefinedVariationFormGroup>>([]);\n formGroup!: FormGroup<IntegrationCreateSettingFormGroup>;\n configEvaluationVersion = EvaluationVersion.V2;\n\n maxPredefinedVariations = 50;\n maxStringFlagValueLength = 100000;\n selectedProductOrganiaztionId = \"0\";\n\n focusIndex = -1;\n settingTypeText = \"\";\n displayedColumns: string[] = [];\n\n private selectedProductEnviroment!: EnvironmentModel[];\n private stringValidators = [Validators.required,\n Validators.maxLength(this.maxStringFlagValueLength)];\n private readonly intValidators = [\n Validators.required,\n validateNumberNan,\n Validators.max(2147483647),\n Validators.min(-2147483648),\n Validators.pattern(wholeNumberRegex),\n ];\n private readonly doubleValidators = [Validators.required, validateNumberNan, Validators.min(-Number.MAX_VALUE), Validators.max(Number.MAX_VALUE)];\n\n ngOnInit(): void {\n this.loading.set(true);\n this.formGroup = this.formBuilder.group<IntegrationCreateSettingFormGroup>({\n productId: new FormControl<string>(this.presetProductAndConfig()?.productId ? this.presetProductAndConfig()!.productId : \"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n environmentId: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n configId: new FormControl<string>(this.presetProductAndConfig()?.configId ? this.presetProductAndConfig()!.configId : \"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n name: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required, Validators.maxLength(255)],\n }),\n key: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.required, Validators.maxLength(255), Validators.pattern(featureFlagKeyRegex)],\n }),\n hint: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.maxLength(255)],\n }),\n settingType: new FormControl<SettingType>(SettingType.Boolean, {\n nonNullable: true,\n validators: [Validators.required],\n }),\n useVariations: new FormControl(false, { nonNullable: true }),\n predefinedVariations: new FormArray<FormGroup<PredefinedVariationFormGroup>>([], { validators: [validateUniqueVariations] }),\n\n initialValuesPerEnvironment: new FormControl(false, { nonNullable: true }),\n\n initialValueForAll: this.initialValueForAllFormControlFunction(SettingType.Boolean),\n initialValueForAllVariationIndex: new FormControl(0, { nonNullable: true }),\n initialValues: new FormArray([\n this.formBuilder.group<InitialValueFormGroup>({\n environmentName: new FormControl(\"\", { nonNullable: true }),\n environmentId: new FormControl(\"\", { nonNullable: true }),\n settingValue: this.initialValueForAllFormControlFunction(SettingType.Boolean),\n predefinedVariationIndex: new FormControl(0, { nonNullable: true }),\n }),\n ]),\n });\n\n this.settingTypeChanges(SettingType.Boolean);\n\n //SettingType valueChanges\n this.formGroup.controls.settingType.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.settingTypeChanges(value);\n });\n\n //Product valueChanges\n this.formGroup.controls.productId.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.loadingProduct.set(true);\n this.createProductsService().getProduct(value).subscribe(product => {\n this.reasonRequired.set(product.reasonRequired);\n const hintValidators = product.reasonRequired ? [Validators.required, Validators.maxLength(255)] : [Validators.maxLength(255)];\n this.formGroup.controls.hint.clearValidators();\n this.formGroup.controls.hint.addValidators(hintValidators);\n this.loadingEnviroments.set(true);\n this.createEnvironmentsService().getEnvironments(product.productId).subscribe(enviroments => {\n this.selectedProductEnviroment = enviroments;\n this.formGroup.controls.initialValues = new FormArray(\n enviroments.map(env =>\n this.formBuilder.group<InitialValueFormGroup>({\n environmentName: new FormControl(env.name, { nonNullable: true }),\n environmentId: new FormControl(env.environmentId, { nonNullable: true }),\n settingValue: this.initialValueForAllFormControlFunction(this.formGroup.controls.settingType.value),\n predefinedVariationIndex: new FormControl(0, { nonNullable: true }),\n }))\n );\n this.loadingEnviroments.set(false);\n });\n\n if (this.selectedProductOrganiaztionId !== product.organization.organizationId) {\n this.loadinOrganizationLimitations.set(true);\n this.selectedProductOrganiaztionId = product.organization.organizationId;\n this.createOrganizationService().getOrganizationLimitations(this.selectedProductOrganiaztionId).subscribe(organizationLimitations => {\n this.maxStringFlagValueLength = organizationLimitations.maxStringFlagValueLength;\n this.maxPredefinedVariations = organizationLimitations.maxPredefinedVariations;\n this.stringValidators = [Validators.required, Validators.maxLength(this.maxStringFlagValueLength)];\n this.loadinOrganizationLimitations.set(false);\n });\n }\n this.loadingProduct.set(false);\n });\n });\n\n //Config valueChanges\n this.formGroup.controls.configId.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.loadingConfigurations.set(true);\n this.createConfigsService().getConfig(value).subscribe(config => {\n this.configEvaluationVersion = config.evaluationVersion;\n this.loadingConfigurations.set(false);\n });\n });\n\n //InitialValuesPerEnvironment valueChanges\n this.formGroup.controls.initialValuesPerEnvironment.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n if (value) {\n this.formGroup.controls.initialValues.enable();\n this.formGroup.controls.initialValueForAll.disable();\n this.formGroup.controls.initialValueForAllVariationIndex.disable();\n } else {\n this.formGroup.controls.initialValues.disable();\n this.formGroup.controls.initialValueForAll.enable();\n this.formGroup.controls.initialValueForAllVariationIndex.enable();\n }\n this.formGroup.updateValueAndValidity();\n });\n\n //UseVariations valueChanges\n this.formGroup.controls.useVariations.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n if (value) {\n this.formGroup.controls.predefinedVariations.enable();\n } else {\n this.formGroup.controls.predefinedVariations.disable();\n }\n this.formGroup.updateValueAndValidity();\n });\n\n //InitialValueForAll valueChanges\n this.formGroup.controls.initialValueForAll.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.formGroup.controls.initialValues.controls.forEach(c => c.controls.settingValue.patchValue(value, { emitEvent: false }));\n });\n\n //PredefinedVariations valueChanges\n this.formGroup.controls.predefinedVariations.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.formGroup.controls.predefinedVariations.controls.forEach(c => {\n const valueForComparison = getPredefinedVariationValueDisplayValue(\n this.formGroup.controls.settingType.value, getRawPredefinedVariationValue(c.controls.value)\n );\n if (c.controls.valueForComparison.value !== valueForComparison) {\n c.controls.valueForComparison.setValue(valueForComparison);\n }\n }\n );\n });\n\n this.setDataSource();\n\n if (this.hideLinkSection()) {\n this.formGroup.controls.environmentId.setValidators(null);\n this.formGroup.controls.environmentId.updateValueAndValidity();\n }\n\n this.formGroup.statusChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.resizeRequested.emit();\n });\n\n this.loading.set(false);\n }\n\n initialValueForAllFormControlFunction(settingType: SettingType) {\n switch (settingType) {\n case SettingType.Boolean:\n return new FormControl(false, { nonNullable: true });\n case SettingType.String:\n return new FormControl(\"initial placeholder text\", { validators: this.stringValidators, nonNullable: true });\n case SettingType.Int:\n return new FormControl(42, { validators: this.intValidators, nonNullable: true });\n case SettingType.Double:\n return new FormControl(3.14, { validators: this.doubleValidators, nonNullable: true });\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n settingTypeChanges(newSettingType: SettingType) {\n this.settingTypeText = newSettingType === SettingType.Boolean ? \"flag\" : \"setting\";\n this.displayedColumns = newSettingType === SettingType.Boolean ? [\"value\", \"name\", \"hint\"] : [\"color\", \"value\", \"name\", \"hint\", \"actions\"];\n this.formGroup.controls.predefinedVariations.clear();\n\n switch (newSettingType) {\n case SettingType.Boolean:\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, false));\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, true));\n break;\n case SettingType.String:\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, void 0, \"Variation A\"));\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, void 0, \"Variation B\"));\n break;\n case SettingType.Int:\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, void 0, void 0, 1));\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, void 0, void 0, 2));\n break;\n case SettingType.Double:\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, false, void 0, void 0, 3.14));\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(newSettingType, false, void 0, void 0, 1.618));\n break;\n }\n\n this.formGroup.controls.initialValueForAll.clearValidators();\n this.formGroup.setControl(\"initialValueForAll\", this.initialValueForAllFormControlFunction(newSettingType));\n\n //InitialValueForAll valueChanges set again after setControl\n this.formGroup.controls.initialValueForAll.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n this.formGroup.controls.initialValues.controls.forEach(c => {\n c.controls.settingValue.patchValue(value, { emitEvent: false });\n });\n });\n\n this.formGroup.controls.initialValues.controls.forEach(initValueForEnv => {\n initValueForEnv.setControl(\"settingValue\", this.initialValueForAllFormControlFunction(newSettingType));\n });\n\n this.formGroup.updateValueAndValidity();\n\n this.setDataSource();\n }\n\n setDataSource() {\n this.dataSource.data = this.formGroup.controls.predefinedVariations.controls;\n }\n\n create() {\n if (!this.formGroup.valid) {\n return;\n }\n this.submitting.set(true);\n const newSettingType = this.formGroup.controls.settingType.value;\n\n const predefinedVariations = this.formGroup.controls.useVariations.value\n ? this.formGroup.controls.predefinedVariations.controls.map(c => (\n {\n name: c.controls.name.value,\n hint: c.controls.hint.value,\n value: {\n boolValue: newSettingType === SettingType.Boolean ? c.controls.value.controls.boolValue!.getRawValue() : void 0,\n stringValue: newSettingType === SettingType.String ? c.controls.value.controls.stringValue!.value : void 0,\n intValue: newSettingType === SettingType.Int ? c.controls.value.controls.intValue!.value : void 0,\n doubleValue: newSettingType === SettingType.Double ? c.controls.value.controls.doubleValue!.value : void 0,\n } as PredefinedVariationValueModel,\n } as CreatePredefinedVariationModel\n ))\n : void 0;\n\n const initialValues = this.formGroup.controls.initialValuesPerEnvironment.value\n ? this.formGroup.controls.initialValues.controls.map(initialValue => {\n return {\n environmentId: initialValue.controls.environmentId.value,\n value: this.formGroup.controls.useVariations.value\n ? getPredefinedVariationFeatureFlagValue(newSettingType,\n getRawPredefinedVariationValue(\n this.formGroup.controls.predefinedVariations.controls[initialValue.controls.predefinedVariationIndex.value].controls.value))\n : initialValue.controls.settingValue.value,\n };\n })\n : this.selectedProductEnviroment.map(env => ({\n environmentId: env.environmentId,\n value: this.formGroup.controls.useVariations.value\n ? getPredefinedVariationFeatureFlagValue(newSettingType,\n getRawPredefinedVariationValue(\n this.formGroup.controls.predefinedVariations.controls[this.formGroup.controls.initialValueForAllVariationIndex.value].controls.value))\n : this.formGroup.controls.initialValueForAll.value,\n }));\n\n this.createSettingsService()\n .createSetting(this.formGroup.controls.configId.value,\n {\n key: this.formGroup.controls.key.value,\n settingType: newSettingType,\n name: this.formGroup.controls.name.value,\n hint: this.formGroup.controls.hint.value,\n initialValues: initialValues,\n predefinedVariations: predefinedVariations,\n })\n .subscribe({\n next: setting => {\n this.submitting.set(false);\n this.createInitiated.emit({\n environmentId: this.formGroup.controls.environmentId.value,\n settingId: setting.settingId,\n callback: () => this.linkingFinished(),\n });\n },\n error: (error: Error) => {\n this.submitting.set(false);\n ErrorHandler.handleErrors(this.formGroup, error);\n console.log(error);\n },\n });\n\n }\n\n linkingFinished() {\n this.submitting.set(false);\n }\n\n cancel() {\n this.cancelInitiated.emit();\n }\n\n selectDropdownPanelChanged(useSelector: boolean) {\n this.selectDropdownPanelChangedReqested.emit(useSelector);\n }\n\n createEmptyVariationFormGroup(settingType: SettingType, boolValue = false, stringValue = \"\", intValue = 0, doubleValue = 0) {\n return this.formBuilder.group<PredefinedVariationFormGroup>(\n {\n name: new FormControl<string | null>(null),\n hint: new FormControl<string | null>(null),\n value: this.createEmptyVariationValueFormGroup(settingType, boolValue, stringValue, intValue, doubleValue),\n valueForComparison: new FormControl<string | null>({\n value: getPredefinedVariationValueDisplayValue(settingType, { boolValue, stringValue, intValue, doubleValue }),\n disabled: true,\n }),\n }\n );\n }\n\n createEmptyVariationValueFormGroup(settingType: SettingType, boolValue = false, stringValue = \"\", intValue = 0, doubleValue = 0) {\n switch (settingType) {\n case SettingType.Boolean:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n boolValue: new FormControl<boolean>({ value: boolValue, disabled: true }, { nonNullable: true }),\n });\n case SettingType.String:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n stringValue: new FormControl<string>(stringValue, { nonNullable: true, validators: this.stringValidators }),\n });\n case SettingType.Int:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n intValue: new FormControl<number>(intValue, { nonNullable: true, validators: this.intValidators }),\n });\n case SettingType.Double:\n return this.formBuilder.group<PredefinedVariationValueFormGroup>({\n doubleValue: new FormControl<number>(doubleValue,\n { nonNullable: true, validators: this.doubleValidators }),\n });\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n addVariation() {\n this.formGroup.controls.predefinedVariations.push(this.createEmptyVariationFormGroup(this.formGroup.controls.settingType.value));\n this.formGroup.controls.predefinedVariations.markAsDirty();\n this.setDataSource();\n this.focusIndex = this.formGroup.controls.predefinedVariations.length - 1;\n }\n\n removeVariation(index: number) {\n this.formGroup.controls.predefinedVariations.removeAt(index);\n this.formGroup.controls.predefinedVariations.markAsDirty();\n this.fixupVariationIndex(index, this.formGroup.controls.initialValueForAllVariationIndex);\n this.formGroup.controls.initialValues.controls.forEach(c => this.fixupVariationIndex(index, c.controls.predefinedVariationIndex));\n this.setDataSource();\n }\n\n fixupVariationIndex(removedIndex: number, formControl: FormControl<number>) {\n if (formControl.value === removedIndex) {\n formControl.patchValue(0, { emitEvent: false });\n } else if (formControl.value > removedIndex) {\n formControl.patchValue(formControl.value - 1, { emitEvent: false });\n }\n }\n\n expandText(stringValueControl: FormControl<string>) {\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: stringValueControl.value,\n readOnly: stringValueControl.disabled,\n validators: [\n Validators.required,\n Validators.maxLength(this.maxStringFlagValueLength),\n ],\n maxValueLength: this.maxStringFlagValueLength,\n description: \"Modify the text within the editor to change the initial value.\",\n } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data?.value) {\n stringValueControl.setValue(data.value);\n stringValueControl.updateValueAndValidity();\n stringValueControl.markAsTouched();\n stringValueControl.markAsDirty();\n }\n });\n }\n\n expandHint(stringValueControl: FormControl<string | null>) {\n const dialogRef = this.dialog.open<\n PopoutTextEditorDialogComponent,\n PopoutTextEditorDialogData,\n PopoutTextEditorDialogResult | undefined\n >(PopoutTextEditorDialogComponent, {\n width: \"800px\",\n data: {\n value: stringValueControl.value,\n readOnly: stringValueControl.disabled,\n validators: [Validators.maxLength(1000)],\n maxValueLength: 1000,\n description: \"Modify the text within the editor to change the hint.\",\n disableJsonEditor: true,\n } as PopoutTextEditorDialogData,\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data?.value) {\n stringValueControl.setValue(data.value);\n stringValueControl.updateValueAndValidity();\n stringValueControl.markAsTouched();\n stringValueControl.markAsDirty();\n }\n });\n }\n\n getColorIndex(row: FormGroup<PredefinedVariationFormGroup>, index: number) {\n return getPredefinedVariationColorIndex(this.formGroup.controls.settingType.value, getRawPredefinedVariationValue(row.controls.value), index);\n }\n}\n","<div class=\"container\">\n <form class=\"form\" [formGroup]=\"formGroup\" (ngSubmit)=\"create()\">\n <div>\n <div class=\"header\">1. {{ targetSectionHeader() ? targetSectionHeader() : \"Select Product and Config\" }}</div>\n @if (targetSectionDescription()) {\n <p>{{ targetSectionDescription() }}</p>\n }\n @if (this.presetProductAndConfig()) {\n <p>\n Pre selected product\n <b>{{ this.presetProductAndConfig()!.productName }}</b>\n </p>\n <p>\n Pre selected config\n <b>{{ this.presetProductAndConfig()!.configName }}</b>\n </p>\n }\n <app-product-select\n name=\"productId\"\n [hidden]=\"this.presetProductAndConfig()\"\n [basicAuthUsername]=\"basicAuthUsername()\"\n [basicAuthPassword]=\"basicAuthPassword()\"\n [preSelectedProductId]=\"this.presetProductAndConfig()?.productId\"\n [valueFormControl]=\"formGroup.controls.productId\"\n [customDropdown]=\"true\" />\n @if (formGroup.controls.productId.value) {\n <app-config-select\n [hidden]=\"this.presetProductAndConfig()\"\n [basicAuthUsername]=\"basicAuthUsername()\"\n [basicAuthPassword]=\"basicAuthPassword()\"\n [preSelectedConfigId]=\"this.presetProductAndConfig()?.configId\"\n [productId]=\"formGroup.controls.productId.value\"\n [valueFormControl]=\"formGroup.controls.configId\"\n [customDropdown]=\"true\" />\n }\n\n <div class=\"header\">2. {{ flagSectionHeader() ? flagSectionHeader() : \"Setup Feature Flag\" }}</div>\n @if (flagSectionDescription()) {\n <p>{{ flagSectionDescription() }}</p>\n }\n @if (loadingComputed()) {\n <app-loader />\n } @else {\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Type</mat-label>\n <mat-select placeholder=\"Type\" formControlName=\"settingType\" panelClass=\"'custom-dropdown-below'\">\n <mat-option [value]=\"SettingTypeEnum.Boolean\">Feature Flag (bool)</mat-option>\n <mat-option [value]=\"SettingTypeEnum.String\">Text (string)</mat-option>\n <mat-option [value]=\"SettingTypeEnum.Int\">Whole Number (integer)</mat-option>\n <mat-option [value]=\"SettingTypeEnum.Double\">Decimal Number (double)</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"form-field name\" appearance=\"outline\">\n <mat-label>Name for humans</mat-label>\n <input matInput placeholder=\"My awesome feature\" formControlName=\"name\" />\n <mat-hint>A friendly name that best describes your setting.</mat-hint>\n @if (formGroup.controls.name.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.name) }}\n </mat-error>\n }\n </mat-form-field>\n <mat-form-field class=\"form-field key\" appearance=\"outline\">\n <mat-label>Key for programs</mat-label>\n <input matInput placeholder=\"isMyAwesomeFeatureEnabled\" formControlName=\"key\" />\n <mat-hint>Your applications will access your setting via this key.</mat-hint>\n @if (formGroup.controls.key.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.key) }}\n </mat-error>\n }\n </mat-form-field>\n <mat-form-field class=\"form-field hint\" appearance=\"outline\">\n @if (!reasonRequired()) {\n <mat-label>Hint (Optional)</mat-label>\n } @else {\n <mat-label>Hint</mat-label>\n }\n <textarea matInput placeholder=\"Hint or description (Optional)\" formControlName=\"hint\"></textarea>\n <mat-hint>A description to help you remember the purpose of your setting.</mat-hint>\n @if (formGroup.controls.hint.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.hint) }}\n </mat-error>\n }\n </mat-form-field>\n\n <div class=\"init-value-section\">\n @if (configEvaluationVersion === EvaluationVersion.V2) {\n <h3>How do you want to set values?</h3>\n <div class=\"value-mode-question\">\n <mat-form-field appearance=\"outline\" class=\"small-form-field value-mode-select\" subscriptSizing=\"dynamic\">\n <mat-select formControlName=\"useVariations\" class=\"choose\">\n <mat-option [value]=\"false\">\n {{\n formGroup.controls.settingType.value === SettingTypeEnum.Boolean\n ? \"use an ON/OFF toggle\"\n : \"enter free-form values\"\n }}\n </mat-option>\n <mat-option [value]=\"true\">choose from predefined variations</mat-option>\n </mat-select>\n </mat-form-field>\n <a href=\"https://configcat.com/docs/advanced/predefined-variations\" class=\"readmore\" target=\"_blank\">\n <mat-icon color=\"primary\" matTooltip=\"Click to read more about value-modes.\">info</mat-icon>\n </a>\n </div>\n @if (formGroup.controls.useVariations.value) {\n <div class=\"header small\">Variations</div>\n <div class=\"variations\">\n <div class=\"predef-var-table-scroll\">\n <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"color\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row\">\n <span [class]=\"'variation-indicator variation-color-' + getColorIndex(row, i)\"></span>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"value\">\n <th *matHeaderCellDef mat-header-cell>Served value *</th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n @switch (formGroup.controls.settingType.value) {\n @case (SettingTypeEnum.Boolean) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.boolValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingTypeEnum.String) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.stringValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingTypeEnum.Int) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.intValue,\n setFocus: i === focusIndex,\n }\" />\n }\n @case (SettingTypeEnum.Double) {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{\n formControl: row.controls.value.controls.doubleValue,\n setFocus: i === focusIndex,\n }\" />\n }\n }\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef mat-header-cell>Display name (optional)</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <div class=\"predefined-component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-form-field\">\n <input\n matInput\n [formControl]=\"row.controls.name\"\n [placeholder]=\"row.controls.valueForComparison.value\" />\n @if (row.controls.name.invalid) {\n <mat-error class=\"small-error\">\n {{ FormHelper.getErrorMessage(row.controls.name) }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th *matHeaderCellDef mat-header-cell>Hint (optional)</th>\n <td *matCellDef=\"let row\" mat-cell class=\"row align-top\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"small-form-field suffixed\">\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandHint(row.controls.hint)\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n <input matInput [formControl]=\"row.controls.hint\" />\n @if (row.controls.hint.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(row.controls.hint) }}\n </mat-error>\n }\n </mat-form-field>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"actions\">\n <th *matHeaderCellDef mat-header-cell>\n {{ dataSource.data.length }} / {{ maxPredefinedVariations }}\n </th>\n <td *matCellDef=\"let row; let i = index\" mat-cell class=\"row align-top\">\n <div\n [matTooltip]=\"\n formGroup.controls.predefinedVariations.controls.length > 2\n ? 'Remove item'\n : 'At least 2 predefined variations should be set.'\n \">\n <button\n mat-icon-button\n type=\"button\"\n [disabled]=\"formGroup.controls.predefinedVariations.controls.length <= 2\"\n (click)=\"removeVariation(i)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n </table>\n </div>\n\n @if (\n formGroup.controls.predefinedVariations.invalid &&\n !!FormHelper.getErrorMessage(formGroup.controls.predefinedVariations)\n ) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.predefinedVariations) }}\n </mat-error>\n }\n <div class=\"add-variation\">\n @if (this.formGroup.controls.settingType.value !== SettingTypeEnum.Boolean) {\n <div\n [matTooltip]=\"'Maximum ' + maxPredefinedVariations + ' predefined variations can be added.'\"\n [matTooltipDisabled]=\"dataSource.data.length < maxPredefinedVariations\">\n <button\n type=\"button\"\n mat-stroked-button\n color=\"primary\"\n [disabled]=\"dataSource.data.length >= maxPredefinedVariations\"\n (click)=\"addVariation()\">\n <mat-icon>add</mat-icon>\n Add variation\n </button>\n </div>\n } @else {\n <app-box type=\"info\" class=\"bool-variation-info\">\n For more variations, create a flag of another type.\n <a\n href=\"https://configcat.com/docs/main-concepts/#about-setting-types\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n Read more\n </a>\n about setting types.\n </app-box>\n }\n </div>\n </div>\n }\n }\n\n <div class=\"header small\">Initial values</div>\n <div class=\"initial-value-first-line\">\n The initial value\n <mat-form-field\n appearance=\"outline\"\n class=\"small-form-field initial-value-environment-type\"\n subscriptSizing=\"dynamic\">\n <mat-select formControlName=\"initialValuesPerEnvironment\">\n <mat-option [value]=\"false\">in all environments</mat-option>\n <mat-option [value]=\"true\">per environment</mat-option>\n </mat-select>\n </mat-form-field>\n will be set to\n </div>\n @if (!formGroup.controls.initialValuesPerEnvironment.value) {\n @if (formGroup.controls.useVariations.value) {\n <div class=\"value-field all\">\n <ng-container\n [ngTemplateOutlet]=\"predefinedVariationTemplate\"\n [ngTemplateOutletContext]=\"{ formControl: formGroup.controls.initialValueForAllVariationIndex }\" />\n </div>\n } @else {\n <div class=\"value-field all\">\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{ formControl: formGroup.controls.initialValueForAll }\" />\n </div>\n }\n }\n\n @if (formGroup.controls.initialValuesPerEnvironment.value) {\n @for (initialValue of formGroup.controls.initialValues.controls; track $index; let index = $index) {\n <div formArrayName=\"initialValues\">\n <div class=\"value-field\" [formGroupName]=\"index\">\n @if (formGroup.controls.useVariations.value) {\n <ng-container\n [ngTemplateOutlet]=\"predefinedVariationTemplate\"\n [ngTemplateOutletContext]=\"{ formControl: initialValue.controls.predefinedVariationIndex }\" />\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"settingValueTemplate\"\n [ngTemplateOutletContext]=\"{ formControl: initialValue.controls.settingValue }\" />\n }\n <div class=\"environment\">\n in\n <strong [matTooltip]=\"initialValue.controls.environmentName.value\">\n {{ initialValue.controls.environmentName.value }}\n </strong>\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n\n @if (!hideLinkSection()) {\n <div class=\"header\">\n 3. {{ linkSectionHeader() ? linkSectionHeader() : \"Select which environment should we link to this card\" }}\n </div>\n @if (linkSectionDescription()) {\n <p>{{ linkSectionDescription() }}</p>\n }\n @if (formGroup.controls.productId.value) {\n <app-environment-select\n [basicAuthUsername]=\"basicAuthUsername()\"\n [productId]=\"formGroup.controls.productId.value\"\n [basicAuthPassword]=\"basicAuthPassword()\"\n [valueFormControl]=\"formGroup.controls.environmentId\"\n [customDropdown]=\"true\" />\n }\n }\n </div>\n @if (formGroup.errors && formGroup.errors[\"serverSide\"]) {\n <div class=\"error\">\n <span>{{ formGroup.errors[\"serverSide\"] }}</span>\n </div>\n }\n <div class=\"buttons\">\n <button\n mat-raised-button\n color=\"primary\"\n type=\"submit\"\n [disabled]=\"submitting() || loadingComputed() || !formGroup.valid\">\n {{ createButtonLabel() ? createButtonLabel() : \"Create\" }}\n </button>\n @if (!hideCancelButton()) {\n <button mat-stroked-button type=\"button\" (click)=\"cancel()\">\n {{ cancelButtonLabel() ? cancelButtonLabel() : \"Cancel\" }}\n </button>\n }\n </div>\n </form>\n</div>\n\n<ng-template #settingValueTemplate let-formControl=\"formControl\" let-setFocus=\"setFocus\">\n @switch (formGroup.controls.settingType.value) {\n @case (SettingTypeEnum.String) {\n <mat-form-field class=\"small-form-field text suffixed\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n placeholder=\"Add text ...\"\n focus\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\" />\n <button\n matSuffix\n class=\"input-suffix-button\"\n type=\"button\"\n mat-icon-button\n matTooltip=\"Advanced editor\"\n (click)=\"expandText(formControl)\">\n <mat-icon class=\"icon-transform-rotate\">edit_note</mat-icon>\n </button>\n @if (formControl.invalid) {\n <mat-error class=\"small-error\">\n {{ FormHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n </mat-form-field>\n }\n @case (SettingTypeEnum.Int) {\n <mat-form-field class=\"small-form-field\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n @if (formControl.invalid) {\n <mat-error class=\"small-error\">\n {{ FormHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n <input\n matInput\n type=\"number\"\n required\n name=\"index\"\n appDigitOnly\n focus\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\"\n [digitOnlyAllowNegatives]=\"true\" />\n </mat-form-field>\n }\n @case (SettingTypeEnum.Double) {\n <mat-form-field class=\"small-form-field\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n @if (formControl.invalid) {\n <mat-error class=\"small-error\">\n {{ FormHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n <input\n matInput\n type=\"number\"\n required\n name=\"index\"\n inputDisplayNormalizer\n focus\n [isFocused]=\"setFocus\"\n [formControl]=\"formControl\" />\n </mat-form-field>\n }\n @case (SettingTypeEnum.Boolean) {\n <div class=\"toggle\">\n <label class=\"switch\">\n <input type=\"checkbox\" name=\"index\" [formControl]=\"formControl\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n }\n }\n</ng-template>\n\n<ng-template #predefinedVariationTemplate let-formControl=\"formControl\">\n <mat-form-field class=\"small-form-field\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select [formControl]=\"formControl\">\n @for (predefinedVariation of formGroup.controls.predefinedVariations.controls; let idx = $index; track $index) {\n <mat-option [value]=\"idx\">\n @if (predefinedVariation.controls.name.value) {\n {{ predefinedVariation.controls.name.value }}\n } @else {\n {{ predefinedVariation.controls.valueForComparison.value }}\n }\n </mat-option>\n }\n </mat-select>\n @if (formControl.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formControl) }}\n </mat-error>\n }\n </mat-form-field>\n</ng-template>\n","import { Component, inject, input, OnInit, output, signal } from \"@angular/core\";\nimport { FormControl, FormGroup, FormsModule, NonNullableFormBuilder, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { MatButton } from \"@angular/material/button\";\nimport { MatError, MatFormField, MatHint, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { EnvironmentModel, EvaluationVersion, SettingType } from \"ng-configcat-publicapi\";\nimport { FormHelper, ProductSelectComponent } from \"../../public-api\";\nimport { CreateConfigFormGroup } from \"../_models/setting-form\";\nimport { ErrorHandler } from \"../_services/error-handler\";\nimport { BaseComponent } from \"../base/base.component\";\nimport { LoaderComponent } from \"../loader/loader.component\";\n\nexport interface PresetProduct {\n productId: string;\n productName: string;\n}\n\n@Component({\n selector: \"app-create-config\",\n templateUrl: \"./create-config.component.html\",\n styleUrls: [\n \"./create-config.component.scss\",\n ],\n imports: [\n ProductSelectComponent,\n FormsModule,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatInput,\n MatHint,\n MatError,\n MatButton,\n LoaderComponent,\n ],\n})\nexport class CreateConfigComponent extends BaseComponent implements OnInit {\n private readonly formBuilder = inject(NonNullableFormBuilder);\n\n readonly hideCancelButton = input(true);\n readonly createButtonLabel = input<string>();\n readonly cancelButtonLabel = input<string>();\n readonly targetSectionHeader = input<string>();\n readonly targetSectionDescription = input<string>();\n readonly configSectionHeader = input<string>();\n readonly configSectionDescription = input<string>();\n\n readonly presetProduct = input<PresetProduct>();\n\n readonly createInitiated = output<string>();\n readonly resizeRequested = output();\n readonly cancelInitiated = output();\n readonly selectDropdownPanelChangedReqested = output<boolean>();\n\n readonly loading = signal(true);\n readonly submitting = signal(false);\n\n SettingTypeEnum = SettingType;\n\n FormHelper = FormHelper;\n EvaluationVersion = EvaluationVersion;\n\n formGroup!: FormGroup<CreateConfigFormGroup>;\n\n maxPredefinedVariations = 50;\n maxStringFlagValueLength = 100000;\n selectedProductOrganiaztionId = \"0\";\n selectedProductEnviroment!: EnvironmentModel[];\n\n focusIndex = -1;\n settingTypeText = \"\";\n displayedColumns: string[] = [];\n\n ngOnInit(): void {\n this.loading.set(true);\n this.formGroup = this.formBuilder.group<CreateConfigFormGroup>({\n productId: new FormControl<string>(this.presetProduct()?.productId ? this.presetProduct()!.productId : \"\", {\n nonNullable: true,\n validators: [Validators.required],\n }),\n name: new FormControl<string>(\"Main Config\", {\n nonNullable: true,\n validators: [Validators.required, Validators.maxLength(255)],\n }),\n description: new FormControl<string>(\"\", {\n nonNullable: true,\n validators: [Validators.maxLength(1000)],\n }),\n evaluationVersion: new FormControl<EvaluationVersion>(EvaluationVersion.V2, {\n nonNullable: true,\n validators: [Validators.required],\n }),\n });\n this.loading.set(false);\n }\n\n create() {\n if (!this.formGroup.valid) {\n return;\n }\n this.submitting.set(true);\n\n this.createConfigsService()\n .createConfig(\n this.formGroup.controls.productId.value,\n {\n name: this.formGroup.controls.name.value,\n description: this.formGroup.controls.description.value,\n evaluationVersion: this.formGroup.controls.evaluationVersion.value,\n })\n .subscribe({\n next: config => {\n this.submitting.set(false);\n this.createInitiated.emit(config.configId);\n },\n error: (error: Error) => {\n this.submitting.set(false);\n ErrorHandler.handleErrors(this.formGroup, error);\n console.log(error);\n },\n });\n\n }\n\n cancel() {\n this.cancelInitiated.emit();\n }\n\n selectDropdownPanelChanged(useSelector: boolean) {\n this.selectDropdownPanelChangedReqested.emit(useSelector);\n }\n\n}\n","<div class=\"container\">\n <form class=\"form\" [formGroup]=\"formGroup\" (ngSubmit)=\"create()\">\n <div>\n <div class=\"header\">1. {{ targetSectionHeader() ? targetSectionHeader() : \"Select Product and Config\" }}</div>\n @if (targetSectionDescription()) {\n <p>{{ targetSectionDescription() }}</p>\n }\n @if (this.presetProduct()) {\n <p>\n Pre selected product\n <b>{{ this.presetProduct()!.productName }}</b>\n </p>\n }\n <app-product-select\n name=\"productId\"\n [hidden]=\"this.presetProduct()\"\n [basicAuthUsername]=\"basicAuthUsername()\"\n [basicAuthPassword]=\"basicAuthPassword()\"\n [preSelectedProductId]=\"this.presetProduct()?.productId\"\n [valueFormControl]=\"formGroup.controls.productId\"\n [customDropdown]=\"true\" />\n\n <div class=\"header\">2. {{ configSectionHeader() ? configSectionHeader() : \"Setup Feature Flag\" }}</div>\n @if (configSectionDescription()) {\n <p>{{ configSectionDescription() }}</p>\n }\n @if (loading()) {\n <app-loader />\n } @else {\n <mat-form-field class=\"form-field name\" appearance=\"outline\">\n <mat-label>Name</mat-label>\n <input matInput placeholder=\"Config's name\" formControlName=\"name\" />\n <mat-hint>A friendly name that best describes your config.</mat-hint>\n @if (formGroup.controls.name.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.name) }}\n </mat-error>\n }\n </mat-form-field>\n <mat-form-field class=\"form-field hint\" appearance=\"outline\">\n <mat-label>Config description (Optional)</mat-label>\n <textarea matInput placeholder=\"This config is responsible for...\" formControlName=\"description\"></textarea>\n <mat-hint>A description to help you remember the purpose of your config.</mat-hint>\n @if (formGroup.controls.description.invalid) {\n <mat-error>\n {{ FormHelper.getErrorMessage(formGroup.controls.description) }}\n </mat-error>\n }\n </mat-form-field>\n }\n </div>\n @if (formGroup.errors && formGroup.errors[\"serverSide\"]) {\n <div class=\"error\">\n <span>{{ formGroup.errors[\"serverSide\"] }}</span>\n </div>\n }\n <div class=\"buttons\">\n <button\n mat-raised-button\n color=\"primary\"\n type=\"submit\"\n [disabled]=\"submitting() || loading() || !formGroup.valid\">\n {{ createButtonLabel() ? createButtonLabel() : \"Create\" }}\n </button>\n @if (!hideCancelButton()) {\n <button mat-stroked-button type=\"button\" (click)=\"cancel()\">\n {{ cancelButtonLabel() ? cancelButtonLabel() : \"Cancel\" }}\n </button>\n }\n </div>\n </form>\n</div>\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/_models\";\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\";\nexport * from \"./lib/link-feature-flag/link-feature-flag.component\";\nexport * from \"./lib/create-feature-flag/create-feature-flag.component\";\nexport * from \"./lib/create-config/create-config.component\";\nexport * from \"./lib/loader/loader.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PublicApiConfiguration","catchError","MatOption","ComparatorGroup"],"mappings":"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"}
|