ng-configcat-publicapi-ui 4.2.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/README.md +2 -2
  2. package/fesm2022/ng-configcat-publicapi-ui.mjs +4240 -3534
  3. package/fesm2022/ng-configcat-publicapi-ui.mjs.map +1 -1
  4. package/index.d.ts +476 -3
  5. package/package.json +11 -10
  6. package/src/css/button.scss +83 -0
  7. package/src/css/controls.scss +390 -0
  8. package/src/css/dialog.scss +63 -0
  9. package/src/css/icon.scss +7 -0
  10. package/src/css/slider.scss +82 -0
  11. package/src/css/snackbar.scss +16 -0
  12. package/src/css/table.scss +142 -0
  13. package/src/css/theme.scss +47 -0
  14. package/src/css/tooltip.scss +12 -0
  15. package/src/css/variables.scss +324 -0
  16. package/src/css/vars/auth.scss +24 -0
  17. package/src/css/vars/banner.scss +116 -0
  18. package/src/css/vars/box.scss +48 -0
  19. package/src/css/vars/config-overview.scss +27 -0
  20. package/src/css/vars/flag.scss +146 -0
  21. package/src/css/vars/header.scss +24 -0
  22. package/src/css/vars/icon.scss +33 -0
  23. package/src/css/vars/logo.scss +19 -0
  24. package/src/css/vars/notification.scss +38 -0
  25. package/src/css/vars/overview.scss +51 -0
  26. package/src/css/vars/prism.scss +44 -0
  27. package/src/css/vars/sidenav.scss +42 -0
  28. package/src/css/vars/theme.scss +78 -0
  29. package/src/public-api.scss +208 -0
  30. package/esm2022/lib/_directives/index.mjs +0 -2
  31. package/esm2022/lib/_directives/input-display-normalizer.directive.mjs +0 -38
  32. package/esm2022/lib/_models/deleteSettingModel.mjs +0 -2
  33. package/esm2022/lib/_models/flag-state.mjs +0 -2
  34. package/esm2022/lib/_models/index.mjs +0 -4
  35. package/esm2022/lib/_models/setting-value-formgroup.mjs +0 -2
  36. package/esm2022/lib/_models/settingValuesModel.mjs +0 -2
  37. package/esm2022/lib/_models/updateSettingValuesModel.mjs +0 -2
  38. package/esm2022/lib/_models/user-comparator.mjs +0 -100
  39. package/esm2022/lib/_services/app-data-adapter.mjs +0 -18
  40. package/esm2022/lib/_services/comparison-value-list-helper.mjs +0 -72
  41. package/esm2022/lib/_services/date-helper.mjs +0 -56
  42. package/esm2022/lib/_services/form-generator.mjs +0 -359
  43. package/esm2022/lib/_services/form-helper.mjs +0 -163
  44. package/esm2022/lib/_services/index.mjs +0 -3
  45. package/esm2022/lib/_services/messaging.service.mjs +0 -26
  46. package/esm2022/lib/_services/platform-helper.mjs +0 -7
  47. package/esm2022/lib/_services/public-api.service.mjs +0 -77
  48. package/esm2022/lib/_services/setting-list-form-helper.mjs +0 -171
  49. package/esm2022/lib/_services/tracking.directive.mjs +0 -16
  50. package/esm2022/lib/ace-editor/ace-editor.component.mjs +0 -137
  51. package/esm2022/lib/authorization/authorization.component.mjs +0 -62
  52. package/esm2022/lib/base/base-select.component.mjs +0 -27
  53. package/esm2022/lib/base/base.component.mjs +0 -48
  54. package/esm2022/lib/bootstrap.mjs +0 -11
  55. package/esm2022/lib/configuration.mjs +0 -14
  56. package/esm2022/lib/dialogs/confirmation-dialog/confirmation-dialog.mjs +0 -28
  57. package/esm2022/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.mjs +0 -27
  58. package/esm2022/lib/dialogs/expand-dialog/expand-dialog.component.mjs +0 -80
  59. package/esm2022/lib/dialogs/info-dialog/info-dialog.mjs +0 -29
  60. package/esm2022/lib/dialogs/reason-dialog/reason-dialog.component.mjs +0 -36
  61. package/esm2022/lib/dialogs/reroute-dialog/reroute-dialog.mjs +0 -28
  62. package/esm2022/lib/dialogs/save-snackbar/save-snackbar.component.mjs +0 -14
  63. package/esm2022/lib/ng-configcat-publicapi-ui.module.mjs +0 -288
  64. package/esm2022/lib/selects/config-select/config-select.component.mjs +0 -60
  65. package/esm2022/lib/selects/environment-select/environment-select.component.mjs +0 -47
  66. package/esm2022/lib/selects/product-select/product-select.component.mjs +0 -40
  67. package/esm2022/lib/selects/setting-select/setting-select.component.mjs +0 -47
  68. package/esm2022/lib/setting-item/setting-item.component.mjs +0 -118
  69. package/esm2022/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +0 -81
  70. package/esm2022/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +0 -293
  71. package/esm2022/lib/setting-list/setting/setting.component.mjs +0 -136
  72. package/esm2022/lib/setting-list/setting/value/value.component.mjs +0 -37
  73. package/esm2022/lib/setting-list/setting-list.component.mjs +0 -194
  74. package/esm2022/lib/v2/feature-flag/date-time-picker/date-time-picker.component.mjs +0 -123
  75. package/esm2022/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.mjs +0 -30
  76. package/esm2022/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.mjs +0 -220
  77. package/esm2022/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.mjs +0 -61
  78. package/esm2022/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.mjs +0 -72
  79. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.mjs +0 -25
  80. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.mjs +0 -105
  81. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.mjs +0 -75
  82. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.mjs +0 -48
  83. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.mjs +0 -113
  84. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.mjs +0 -251
  85. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.mjs +0 -444
  86. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.mjs +0 -84
  87. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.mjs +0 -129
  88. package/esm2022/lib/v2/feature-flag/feature-flag.component.mjs +0 -190
  89. package/esm2022/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.mjs +0 -65
  90. package/esm2022/lib/v2/feature-flag-item.component.mjs +0 -330
  91. package/esm2022/ng-configcat-publicapi-ui.mjs +0 -5
  92. package/esm2022/public-api.mjs +0 -15
  93. package/lib/_directives/index.d.ts +0 -1
  94. package/lib/_directives/input-display-normalizer.directive.d.ts +0 -13
  95. package/lib/_models/deleteSettingModel.d.ts +0 -6
  96. package/lib/_models/flag-state.d.ts +0 -20
  97. package/lib/_models/index.d.ts +0 -3
  98. package/lib/_models/setting-value-formgroup.d.ts +0 -69
  99. package/lib/_models/settingValuesModel.d.ts +0 -11
  100. package/lib/_models/updateSettingValuesModel.d.ts +0 -7
  101. package/lib/_models/user-comparator.d.ts +0 -84
  102. package/lib/_services/app-data-adapter.d.ts +0 -7
  103. package/lib/_services/comparison-value-list-helper.d.ts +0 -17
  104. package/lib/_services/date-helper.d.ts +0 -6
  105. package/lib/_services/form-generator.d.ts +0 -59
  106. package/lib/_services/form-helper.d.ts +0 -21
  107. package/lib/_services/index.d.ts +0 -2
  108. package/lib/_services/messaging.service.d.ts +0 -12
  109. package/lib/_services/platform-helper.d.ts +0 -3
  110. package/lib/_services/public-api.service.d.ts +0 -21
  111. package/lib/_services/setting-list-form-helper.d.ts +0 -19
  112. package/lib/_services/tracking.directive.d.ts +0 -6
  113. package/lib/ace-editor/ace-editor.component.d.ts +0 -32
  114. package/lib/authorization/authorization.component.d.ts +0 -21
  115. package/lib/base/base-select.component.d.ts +0 -10
  116. package/lib/base/base.component.d.ts +0 -18
  117. package/lib/bootstrap.d.ts +0 -13
  118. package/lib/configuration.d.ts +0 -9
  119. package/lib/dialogs/confirmation-dialog/confirmation-dialog.d.ts +0 -19
  120. package/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.d.ts +0 -17
  121. package/lib/dialogs/expand-dialog/expand-dialog.component.d.ts +0 -25
  122. package/lib/dialogs/info-dialog/info-dialog.d.ts +0 -17
  123. package/lib/dialogs/reason-dialog/reason-dialog.component.d.ts +0 -15
  124. package/lib/dialogs/reroute-dialog/reroute-dialog.d.ts +0 -20
  125. package/lib/dialogs/save-snackbar/save-snackbar.component.d.ts +0 -8
  126. package/lib/ng-configcat-publicapi-ui.module.d.ts +0 -75
  127. package/lib/selects/config-select/config-select.component.d.ts +0 -17
  128. package/lib/selects/environment-select/environment-select.component.d.ts +0 -17
  129. package/lib/selects/product-select/product-select.component.d.ts +0 -14
  130. package/lib/selects/setting-select/setting-select.component.d.ts +0 -17
  131. package/lib/setting-item/setting-item.component.d.ts +0 -37
  132. package/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.d.ts +0 -27
  133. package/lib/setting-list/setting/rollout-rules/rollout-rules.component.d.ts +0 -61
  134. package/lib/setting-list/setting/setting.component.d.ts +0 -43
  135. package/lib/setting-list/setting/value/value.component.d.ts +0 -20
  136. package/lib/setting-list/setting-list.component.d.ts +0 -53
  137. package/lib/v2/feature-flag/date-time-picker/date-time-picker.component.d.ts +0 -25
  138. package/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.d.ts +0 -27
  139. package/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.d.ts +0 -41
  140. package/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.d.ts +0 -18
  141. package/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.d.ts +0 -30
  142. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.d.ts +0 -10
  143. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.d.ts +0 -27
  144. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.d.ts +0 -36
  145. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.d.ts +0 -21
  146. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.d.ts +0 -79
  147. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.d.ts +0 -63
  148. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.d.ts +0 -94
  149. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.d.ts +0 -31
  150. package/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.d.ts +0 -33
  151. package/lib/v2/feature-flag/feature-flag.component.d.ts +0 -49
  152. package/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.d.ts +0 -28
  153. package/lib/v2/feature-flag-item.component.d.ts +0 -66
  154. package/public-api.d.ts +0 -11
  155. package/public-api.scss +0 -350
@@ -1 +1 @@
1
- {"version":3,"file":"ng-configcat-publicapi-ui.mjs","sources":["../../../projects/ng-configcat-publicapi-ui/src/lib/configuration.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/public-api.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/base/base.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/platform-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reason-dialog/reason-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reason-dialog/reason-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/save-snackbar/save-snackbar.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/save-snackbar/save-snackbar.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/setting-list-form-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/expand-dialog/expand-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/expand-dialog/expand-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_directives/input-display-normalizer.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/value/value.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/value/value.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/rollout-rules/rollout-rules.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/rollout-rules/rollout-rules.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/setting.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting/setting.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting-list.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-list/setting-list.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-item/setting-item.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/setting-item/setting-item.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/base/base-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/setting-select/setting-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/setting-select/setting-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/product-select/product-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/product-select/product-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/config-select/config-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/config-select/config-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/environment-select/environment-select.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/selects/environment-select/environment-select.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/authorization/authorization.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/authorization/authorization.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_models/user-comparator.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/form-generator.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/date-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/app-data-adapter.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/confirmation-dialog/confirmation-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/confirmation-dialog/confirmation-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reroute-dialog/reroute-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reroute-dialog/reroute-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/info-dialog/info-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/info-dialog/info-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/comparison-value-list-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/messaging.service.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/ace-editor/ace-editor.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/ace-editor/ace-editor.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/date-time-picker/date-time-picker.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/date-time-picker/date-time-picker.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/tracking.directive.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/feature-flag.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/feature-flag.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag-item.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag-item.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/ng-configcat-publicapi-ui.module.ts","../../../projects/ng-configcat-publicapi-ui/src/public-api.ts","../../../projects/ng-configcat-publicapi-ui/src/ng-configcat-publicapi-ui.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class Configuration {\n basicAuthUsername?: string;\n basicAuthPassword?: string;\n basePath = 'https://api.configcat.com';\n dashboardBasePath = 'https://app.configcat.com';\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n Configuration as PublicApiConfiguration,\n ProductsService, EnvironmentsService, ConfigsService,\n FeatureFlagsSettingsService, FeatureFlagSettingValuesService, MeService,\n IntegrationLinksService,\n SegmentsService,\n FeatureFlagSettingValuesV2Service\n} from 'ng-configcat-publicapi';\nimport { Configuration } from '../configuration';\n\n@Injectable({ providedIn: 'root' })\nexport class PublicApiService {\n\n constructor(\n private httpClient: HttpClient,\n @Optional() private configuration: Configuration) {\n }\n\n createMeService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new MeService(this.httpClient, basePath ?? this.configuration?.basePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createProductsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new ProductsService(this.httpClient, basePath ?? this.configuration?.basePath,\n new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createConfigsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new ConfigsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createEnvironmentsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new EnvironmentsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSettingsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new FeatureFlagsSettingsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSettingValuesV2Service(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new FeatureFlagSettingValuesV2Service(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSettingValuesService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new FeatureFlagSettingValuesService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createIntegrationLinksService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new IntegrationLinksService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n createSegmentsService(basicAuthUsername: string | null = null, basicAuthPassword: string | null = null, basePath: string | null = null) {\n return new SegmentsService(this.httpClient, basePath ?? this.configuration?.basePath, new PublicApiConfiguration({\n username: basicAuthUsername ?? this.configuration?.basicAuthUsername,\n password: basicAuthPassword ?? this.configuration?.basicAuthPassword\n }));\n }\n\n getDashboardBasePath() {\n return this.configuration?.dashboardBasePath ?? 'https://app.configcat.com';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { PublicApiService } from '../_services/public-api.service';\n\n@Component({\n selector: 'base',\n template: '<div></div>'\n})\nexport class BaseComponent {\n\n @Input() basePath: string | null = null;\n @Input() basicAuthUsername: string | null = null;\n @Input() basicAuthPassword: string | null = null;\n\n constructor(private publicApiService: PublicApiService) {\n }\n\n protected createProductsService() {\n return this.publicApiService.createProductsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createConfigsService() {\n return this.publicApiService.createConfigsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createEnvironmentsService() {\n return this.publicApiService.createEnvironmentsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSettingsService() {\n return this.publicApiService.createSettingsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSettingValuesService() {\n return this.publicApiService.createSettingValuesService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSettingValuesV2Service() {\n return this.publicApiService.createSettingValuesV2Service(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n\n protected createSegmentsService() {\n return this.publicApiService.createSegmentsService(this.basicAuthUsername, this.basicAuthPassword, this.basePath);\n }\n}\n","export class PlatformHelper {\n public static isChromium() {\n // https://stackoverflow.com/a/62797156/8656352\n return !!(window as any).chrome;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { UntypedFormControl, UntypedFormGroup, UntypedFormArray, FormGroup, AbstractControl } from '@angular/forms';\nimport { PlatformHelper } from './platform-helper';\n\nexport const percentageRegex = '^[0-9]*$';\nexport const wholeNumberRegex = '^[-+]?[0-9]\\\\d*$';\nexport const timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;\nexport const featureFlagKeyRegex = '^[a-zA-Z]+[a-zA-Z0-9_-]*$';\n\nexport class FormHelper {\n\n public static getErrorMessage(control: UntypedFormControl | UntypedFormGroup | UntypedFormArray | AbstractControl, hint = '') {\n if (!control || control.valid) {\n return null;\n }\n if (control.hasError('validateNumberNan')) {\n return `Invalid value.`\n }\n \n if (control.hasError('matDatepickerParse')) {\n return `Invalid date value.`\n }\n \n if (control.hasError('required')) {\n if (control instanceof UntypedFormArray) {\n return 'The list must contain min 1 items.';\n } else {\n return hint ? `${hint} The field is required.` : `The field is required.`;\n }\n }\n \n if (control.hasError('emails')) {\n return control.errors.emails;\n }\n \n if (control.hasError('minlength')) {\n if (control instanceof UntypedFormArray) {\n return 'The list must contain min ' + control.errors.minlength.requiredLength + ' items.';\n } else {\n return 'The field must be at least ' + control.errors.minlength.requiredLength + ' characters long.';\n }\n }\n \n if (control.hasError('maxlength')) {\n if (control instanceof UntypedFormArray) {\n return 'The list must contain max ' + control.errors.maxlength.requiredLength + ' items.';\n } else {\n return 'The field must be at max ' + control.errors.maxlength.requiredLength + ' characters long.';\n }\n }\n \n if (control.hasError('serverSide')) {\n return control.errors.serverSide;\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === percentageRegex) {\n return 'The percentage value must be a whole number.';\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === wholeNumberRegex) {\n return 'Please enter a whole number e.g. 42.';\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === timeRegex) {\n return 'Invalid time value.';\n }\n \n if (control.hasError('pattern') && control.errors.pattern.requiredPattern === featureFlagKeyRegex) {\n return 'Invalid key. Keys must start with a letter, followed by a combination of numbers, letters, underscores and hyphens.';\n }\n\n if (control.hasError('pattern')) {\n return 'Not a valid e-mail address.';\n } \n \n if (control.hasError('alreadyExists')) {\n return control.errors.alreadyExists;\n }\n \n if (control.hasError('validateSemVer')) {\n return 'Invalid semantic version.';\n }\n \n if (control.hasError('validatePercentageSum')) {\n return 'The sum of percentages must be equal to 100.';\n }\n \n if (control.hasError('min')) {\n return 'The value must be greater than ' + (control.errors.min.min - 1) + '.';\n }\n \n if (control.hasError('max')) {\n return 'The value must be less than ' + (control.errors.max.max + 1) + '.';\n }\n \n return '';\n }\n\n\n public static handleErrors(formGroup: FormGroup, error: any) {\n if (error instanceof HttpErrorResponse) {\n const response = error as HttpErrorResponse;\n switch (response.status) {\n case 400:\n let unknownFieldName = false;\n for (const fieldName in error.error) {\n if (error.error.hasOwnProperty(fieldName) && error.error[fieldName] &&\n (error.error[fieldName]?.length > 0 || error.error[fieldName]?.Errors?.length > 0)) {\n let jsonFieldName = fieldName;\n if (jsonFieldName.length > 0) {\n jsonFieldName = jsonFieldName[0].toLowerCase() + jsonFieldName.slice(1);\n }\n\n const errorMessage = error.error[fieldName]?.Errors?.length > 0 ?\n (error.error[fieldName]?.Errors.map((e: any) => e.ErrorMessage)).join(', ')\n : error.error[fieldName];\n\n if (formGroup.controls.hasOwnProperty(jsonFieldName)) {\n formGroup.controls[jsonFieldName].setErrors({ serverSide: errorMessage });\n } else {\n unknownFieldName = true;\n }\n }\n }\n if (unknownFieldName) {\n formGroup.setErrors({ serverSide: 'Something went wrong.' });\n }\n break;\n // in these cases we do not show errors on the form, they're handled by the http\n // interceptor in src\\app\\_interceptors\\httpstatuscode.interceptor.ts\n case 402:\n case 429:\n return;\n }\n } else {\n formGroup.setErrors({ serverSide: 'Something went wrong on our side. This is not your fault. Please try again.' });\n }\n }\n\n /**\n * Converts a value representing a number to a `number` value.\n * Returns `NaN` in the case of non-numerical values.\n */\n public static normalizeNumber(value: any): number {\n switch (typeof value) {\n case \"number\":\n return value;\n case \"string\":\n // NOTE: `Number()` converts whitespace strings to 0.\n return value.trim() === '' ? NaN : Number(value);\n case \"bigint\":\n return Number(value);\n default:\n return NaN;\n }\n }\n\n /**\n * Converts a value representing a number to the normalized `string`\n * representation of the number. (e.g. `.1` --> `'0.1'`, `3.14e2` --> `'314'`).\n * Returns `''` in the case of non-numerical values or non-finite numerical values.\n */\n public static normalizeNumberStoredAsString(value: any): string {\n value = FormHelper.normalizeNumber(value);\n // NOTE: `NaN` is not considered finite.\n return isFinite(value) ? value + '' : '';\n }\n\n \n public static formatNumberForDisplay(value: number) {\n if (!isFinite(value)) {\n return '';\n }\n\n // Chromium-based browsers don't respect the `lang` attribute,\n // they use a display format corresponding to the browser's language setting.\n if (PlatformHelper.isChromium()) {\n return value.toLocaleString();\n }\n\n // Firefox (and probably other browsers) respect the `lang` attribute,\n // which is currently set to the fixed value of \"en\" (see index.html),\n // so in these cases dot should be used as the decimal separator.\n // (In case localization is implemented in the application, this logic should be revised!)\n return value + '';\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { UntypedFormGroup, UntypedFormBuilder, Validators } from '@angular/forms';\n\n@Component({\n selector: 'configcat-reason-dialog',\n templateUrl: './reason-dialog.component.html',\n styleUrls: ['./reason-dialog.component.scss']\n})\nexport class ReasonDialogComponent implements OnInit {\n\n formGroup!: UntypedFormGroup;\n\n constructor(\n public dialogRef: MatDialogRef<ReasonDialogComponent>,\n private formBuilder: UntypedFormBuilder\n ) { }\n\n ngOnInit() {\n this.formGroup = this.formBuilder.group({\n reason: ['', [Validators.required, Validators.maxLength(1000)]]\n });\n }\n\n handleSaveButton() {\n if (!this.formGroup.valid) {\n return;\n }\n\n this.dialogRef.close({ button: 'save', reason: this.formGroup.controls.reason.value });\n }\n\n cancel() {\n this.dialogRef.close({ button: 'cancel' });\n }\n}\n","<h1 mat-dialog-title>Add notes</h1>\n<form [formGroup]=\"formGroup\" (ngSubmit)=\"handleSaveButton()\">\n <div mat-dialog-content class=\"container\">\n <p>This will appear in the Audit Log (in the Notes section when you expand the corresponding entry).</p>\n <mat-form-field appearance=\"outline\">\n <mat-label>Note</mat-label>\n <textarea matInput formControlName=\"reason\" name=\"reason\" placeholder=\"I'm changing settings because...\"\n rows=\"3\"></textarea>\n <mat-error *ngIf=\"formGroup.controls.reason.invalid\">The field is required.</mat-error>\n </mat-form-field>\n </div>\n <div mat-dialog-actions>\n <button type=\"submit\" style=\"margin-right: 10px;\" mat-flat-button color=\"primary\">Add notes & Save</button>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\">Cancel</button>\n </div>\n</form>","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'configcat-save-snackbar',\n templateUrl: './save-snackbar.component.html',\n styleUrls: ['./save-snackbar.component.scss']\n})\nexport class SaveSnackbarComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<p class=\"header\">Settings saved successfully.</p>","import { Injectable } from '@angular/core';\nimport { SettingValuesModel } from '../_models/settingValuesModel';\nimport { UntypedFormBuilder, Validators, UntypedFormGroup, UntypedFormArray } from '@angular/forms';\nimport { RolloutPercentageItemModel, RolloutRuleComparator, RolloutRuleModel, SettingType, SettingValueModel } from 'ng-configcat-publicapi';\nimport { FormHelper } from './form-helper';\n\n@Injectable({ providedIn: 'root' })\nexport class SettingListFormHelper {\n\n constructor(private formBuilder: UntypedFormBuilder) { }\n\n createSettingValuesFormGroup(settingValuesModel: SettingValuesModel) {\n const formGroup = this.formBuilder.group({\n settingValues: this.formBuilder.array(\n settingValuesModel.settingValues.map(sv => {\n return this.createSettingValueFormGroup(sv, settingValuesModel.readOnly);\n })),\n\n // Decorator\n environment: this.formBuilder.group({\n environmentId: [{ value: settingValuesModel.environment.environmentId, disabled: true }],\n name: [{ value: settingValuesModel.environment.name, disabled: true }],\n }),\n\n comparisonAttributes: [[]]\n });\n\n const rolloutRules = this.getAllRolloutRules(formGroup);\n const comparisonAttributes = this.getComparisonAttributes(rolloutRules);\n formGroup.patchValue({ comparisonAttributes: comparisonAttributes });\n return formGroup;\n }\n\n\n createSettingValueFormGroup(settingValueModel: SettingValueModel, readOnly: boolean) {\n if (!settingValueModel.setting) {\n return this.formBuilder.group({});\n }\n return this.formBuilder.group({\n settingId: [settingValueModel.setting.settingId],\n value: [\n { value: settingValueModel.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingValueModel.setting.settingType)\n ],\n rolloutPercentageItems: settingValueModel.rolloutPercentageItems\n ? this.formBuilder.array(settingValueModel.rolloutPercentageItems.map(p => {\n // @ts-ignore()\n return this.createRolloutPercentageItemFormGroup(p, readOnly, settingValueModel.setting.settingType);\n }))\n : this.formBuilder.array([]), rolloutRules: settingValueModel.rolloutRules\n ? this.formBuilder.array(settingValueModel.rolloutRules.map(r => {\n // @ts-ignore()\n return this.createRolloutRuleFormGroup(r, readOnly, settingValueModel.setting.settingType);\n }))\n : this.formBuilder.array([]),\n\n updatedAt: [{ value: settingValueModel.updatedAt, disabled: true }],\n lastUpdaterUserEmail: [{ value: settingValueModel.lastUpdaterUserEmail, disabled: true }],\n lastUpdaterUserFullName: [{ value: settingValueModel.lastUpdaterUserFullName, disabled: true }],\n\n rolloutPercentageItemsSum: [{ value: 100, disabled: false }, [Validators.min(100), Validators.max(100)]],\n // Decoration\n setting: this.formBuilder.group({\n settingId: [{ value: settingValueModel.setting.settingId, disabled: true }],\n key: [{ value: settingValueModel.setting.key, disabled: true }],\n name: [{ value: settingValueModel.setting.name, disabled: true }],\n hint: [{ value: settingValueModel.setting.hint, disabled: true }],\n settingType: [{ value: settingValueModel.setting.settingType, disabled: true }],\n creatorEmail: [{ value: settingValueModel.setting.creatorEmail, disabled: true }],\n creatorFullName: [{ value: settingValueModel.setting.creatorFullName, disabled: true }],\n createdAt: [{ value: settingValueModel.setting.createdAt, disabled: true }]\n }),\n\n integrationLinks: settingValueModel.integrationLinks ? this.formBuilder.array(settingValueModel.integrationLinks.map(il => {\n return this.formBuilder.group({\n key: [{ value: il.key, disabled: true }],\n description: [{ value: il.description, disabled: true }],\n integrationLinkType: [{ value: il.integrationLinkType, disabled: true }],\n url: [{ value: il.url, disabled: true }],\n });\n })) : this.formBuilder.array([])\n });\n }\n\n createRolloutPercentageItemFormGroup(p: RolloutPercentageItemModel, readOnly: boolean, settingType: SettingType | undefined) {\n return this.formBuilder.group({\n percentage: [{ value: p.percentage, disabled: readOnly }, [Validators.required, Validators.min(0), Validators.max(100)]],\n value: [\n { value: p.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingType)\n ],\n valueDisabled: [\n { value: p.value, disabled: true }, // For percentage item value\n ]\n });\n }\n\n createRolloutRuleFormGroup(r: RolloutRuleModel, readOnly: boolean, settingType: SettingType | undefined) {\n if (r.comparator) {\n return this.formBuilder.group({\n type: [{ value: 0, disabled: true }],\n comparisonAttribute: [{ value: r.comparisonAttribute, disabled: readOnly }, [Validators.required]],\n comparator: [{ value: r.comparator, disabled: readOnly }, [Validators.required]],\n comparisonValue: [{ value: r.comparisonValue, disabled: readOnly }, [Validators.required]],\n value: [\n { value: r.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingType)\n ],\n });\n } else if (r.segmentComparator) {\n return this.formBuilder.group({\n type: [{ value: 1, disabled: true }],\n segmentComparator: [{ value: r.segmentComparator, disabled: readOnly }, [Validators.required]],\n segmentId: [{ value: r.segmentId, disabled: readOnly }, [Validators.required]],\n value: [\n { value: r.value, disabled: readOnly },\n this.getValidatorsForSettingType(settingType)\n ],\n });\n } else {\n throw new Error('Invalid rollout rule');\n }\n }\n\n private getValidatorsForSettingType(settingType: SettingType | undefined) {\n switch (settingType) {\n case SettingType.Int:\n return [Validators.required,\n Validators.min(-2147483648), Validators.max(2147483647), Validators.pattern('^[-+]?[0-9]\\\\d*$')];\n case SettingType.Double:\n return [Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\n case SettingType.String:\n case SettingType.Boolean:\n return [Validators.required];\n default:\n return [];\n }\n }\n\n private getAllRolloutRules(formGroup: UntypedFormGroup) {\n const settingValues = formGroup.get('settingValues') as UntypedFormArray;\n const rolloutRules = settingValues.controls.map(cv => (cv.get('rolloutRules') as UntypedFormArray).value);\n return rolloutRules.length === 0 ? rolloutRules : rolloutRules.reduce((a, b) => a.concat(b));\n }\n\n private getComparisonAttributes(rolloutRules: any[]) {\n if (rolloutRules.length > 0) {\n const currentComparisonAttributes = rolloutRules.map(r => r.comparisonAttribute);\n\n const defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n const comparisonAttributes = currentComparisonAttributes.filter(c => defaultComparisonAttributes.indexOf(c) === -1);\n return Array.from(new Set(comparisonAttributes));\n } else {\n return [];\n }\n }\n\n getComparisonValueType(comparator: RolloutRuleComparator) {\n switch (comparator) {\n case RolloutRuleComparator.NumberEquals:\n case RolloutRuleComparator.NumberDoesNotEqual:\n case RolloutRuleComparator.NumberLess:\n case RolloutRuleComparator.NumberLessOrEquals:\n case RolloutRuleComparator.NumberGreater:\n case RolloutRuleComparator.NumberGreaterOrEquals:\n return 'number';\n default:\n return 'text';\n }\n }\n\n normalizeComparisonValue(comparator: RolloutRuleComparator | undefined, comparisonValue: any) {\n // In the case of number inputs value is a number but API expects\n // a string, so we need to make sure that it's converted to string.\n return comparator && this.getComparisonValueType(comparator) === \"number\"\n ? FormHelper.normalizeNumberStoredAsString(comparisonValue)\n : comparisonValue;\n }\n}\n","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\nimport { UntypedFormBuilder, UntypedFormGroup, UntypedFormArray, UntypedFormControl } from '@angular/forms';\n\n@Component({\n selector: 'configcat-expand-dialog',\n templateUrl: './expand-dialog.component.html',\n styleUrls: ['./expand-dialog.component.scss']\n})\nexport class ExpandDialogComponent implements OnInit, OnDestroy {\n\n formControlSubscription!: Subscription | null;\n formGroupSubscription!: Subscription | null;\n\n formGroup!: UntypedFormGroup;\n readOnly = false;\n\n constructor(public dialogRef: MatDialogRef<ExpandDialogComponent>,\n private formBuilder: UntypedFormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n }\n\n\n ngOnInit(): void {\n this.readOnly = this.data.control.disabled;\n if (this.data.multiline) {\n this.buildFormGroup();\n } else {\n this.formControlSubscription = this.data.control.valueChanges.subscribe((value: any) => {\n this.data.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.data.control.markAsDirty();\n }, () => { }, () => { });\n }\n }\n\n values() {\n return this.formGroup.get('values') as UntypedFormArray;\n }\n\n getValueControls() {\n return this.values().controls.map(c => c as UntypedFormControl);\n }\n\n buildFormGroup() {\n const value = this.data.control.value ? this.data.control.value : '';\n const list = value.split(',').map((v: any) => v.trim()).filter((v: any) => !!v);\n this.formGroup = this.formBuilder.group({\n values: this.formBuilder.array(list.map((v: any) => this.formBuilder.control({ value: v, disabled: this.data.control.disabled })))\n });\n this.formGroupSubscription = this.formGroup.valueChanges.subscribe((formGroupValue) => {\n this.data.control.setValue(formGroupValue.values\n .filter((v: any) => !!v)\n .join(','), { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.data.control.updateValueAndValidity();\n this.data.control.markAsDirty();\n });\n }\n\n add() {\n (this.formGroup.controls.values as UntypedFormArray).push(this.formBuilder.control(''));\n }\n\n remove(index: any) {\n (this.formGroup.controls.values as UntypedFormArray).removeAt(index);\n }\n\n ngOnDestroy() {\n if (this.formControlSubscription) {\n this.formControlSubscription.unsubscribe();\n this.formControlSubscription = null;\n }\n\n if (this.formGroupSubscription) {\n this.formGroupSubscription.unsubscribe();\n this.formGroupSubscription = null;\n }\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","<div mat-dialog-content class=\"container\">\n <mat-form-field appearance=\"outline\" *ngIf=\"!data.multiline\" subscriptSizing=\"dynamic\">\n <mat-label></mat-label>\n <textarea matInput [formControl]=\"data.control\" rows=\"10\"></textarea>\n </mat-form-field>\n <div [formGroup]=\"formGroup\" *ngIf=\"data.multiline\">\n <div *ngFor=\"let valueControl of getValueControls(); let i = index;\" class=\"value-field\">\n <mat-form-field appearance=\"outline\">\n <input matInput [formControl]=\"valueControl\" />\n </mat-form-field>\n <button (click)=\"remove(i)\" mat-icon-button type=\"button\" class=\"no-density-mat-icon-button\"\n matTooltip=\"Remove item\" *ngIf=\"!readOnly\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n </div>\n <button (click)=\"add()\" mat-stroked-button type=\"button\" *ngIf=\"!readOnly\">\n <mat-icon>add</mat-icon>Add item\n </button>\n </div>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"close()\">Done</button>\n</div>","import { Directive, HostListener } from '@angular/core';\n\n/**\n * Makes sure that values entered into HTML input fields are displayed in the correct format,\n * where correct means normalized (e.g. `'.10'` --> `'0.1'`) and corresponding to the locale setting.\n * \n * The format is adjusted on the blur event. Only the format of number inputs is adjusted currently.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'input[inputDisplayNormalizer]'\n})\nexport class InputDisplayNormalizerDirective {\n constructor() { }\n\n @HostListener('blur', ['$event'])\n onChange($event: any) {\n const target = $event.target;\n if (target.type === 'number') {\n let value = target.value;\n value = value.trim() !== '' ? Number(value) : NaN;\n if (isFinite(value)) {\n // The string returned by the `value` property and the string displayed in the input field are not necessarily equal.\n // HACK: When the returned and the displayed value differs only in the decimal separator,\n // Chrome won't update the displayed value unless the value is changed first...\n target.value = '';\n target.value = value;\n }\n }\n }\n}","import { Component, Input } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ExpandDialogComponent } from '../../../dialogs/expand-dialog/expand-dialog.component';\nimport { SettingModel, SettingType } from 'ng-configcat-publicapi';\nimport { FormHelper } from '../../../_services/form-helper';\n\n@Component({\n selector: 'configcat-value',\n templateUrl: './value.component.html',\n styleUrls: [\n './slider.scss',\n './value.component.scss'\n ]\n})\nexport class ValueComponent {\n\n @Input() valueFormControl!: UntypedFormControl;\n\n @Input() setting!: SettingModel;\n\n SettingType = SettingType;\n\n constructor(private dialog: MatDialog) {\n }\n\n popOut() {\n this.dialog.open(ExpandDialogComponent, {\n width: '640px',\n data: { control: this.valueFormControl }\n });\n }\n\n formatDecimalNumber(value: number) {\n return FormHelper.formatNumberForDisplay(value);\n }\n}\n","<div class=\"flex\">\n <div class=\"container\" [ngSwitch]=\"setting.settingType\">\n <div *ngSwitchCase=\"SettingType.String\" class=\"with-validation\">\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"text\"\n [formControl]=\"valueFormControl\" placeholder=\"my value\" name=\"value\">\n <div class=\"expand\" (click)=\"popOut()\" matTooltip=\"Pop-out Editor\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n <div *ngSwitchCase=\"SettingType.Int\" class=\"with-validation\">\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"number\" [formControl]=\"valueFormControl\"\n placeholder=\"42\" name=\"value\" digitOnly digitOnlyAllowNegatives=\"true\"/>\n </div>\n <div *ngSwitchCase=\"SettingType.Double\" class=\"with-validation\">\n <span *ngIf=\"valueFormControl.invalid\" class=\"error\">*</span>\n <input [ngClass]=\"{'invalid': valueFormControl.invalid}\" type=\"number\" [formControl]=\"valueFormControl\"\n placeholder=\"{{ formatDecimalNumber(3.14) }}\" name=\"value\" inputDisplayNormalizer>\n </div>\n <div *ngSwitchCase=\"SettingType.Boolean\" class=\"toggle\">\n <label class=\"switch\">\n <input type=\"checkbox\" [formControl]=\"valueFormControl\" name=\"value\" />\n <span class=\"slider round\"></span>\n </label>\n </div>\n </div>\n <div *ngIf=\"setting.settingType === SettingType.Boolean\" class=\"spacer\"></div>\n\n</div>\n","import { Component, Input } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormArray, UntypedFormControl } from '@angular/forms';\nimport { SettingType } from 'ng-configcat-publicapi';\n\n@Component({\n selector: 'configcat-rollout-percentage-items',\n templateUrl: './rollout-percentage-items.component.html',\n styleUrls: ['./rollout-percentage-items.component.scss']\n})\nexport class RolloutPercentageItemsComponent {\n\n @Input() formGroup!: UntypedFormGroup;\n @Input() readOnly = false;\n SettingType = SettingType;\n\n\n setting() {\n return this.formGroup.get('setting')?.value;\n }\n\n rolloutRules() {\n return this.formGroup.get('rolloutRules') as UntypedFormArray;\n }\n\n rolloutPercentageItems() {\n return this.formGroup.get('rolloutPercentageItems') as UntypedFormArray;\n }\n\n rolloutPercentageItemsSum() {\n return this.formGroup.get('rolloutPercentageItemsSum') as UntypedFormControl;\n }\n\n value(rolloutPercentageItem: UntypedFormGroup): UntypedFormControl {\n return this.setting().settingType === SettingType.Boolean ?\n rolloutPercentageItem.get('valueDisabled') as UntypedFormControl :\n rolloutPercentageItem.get('value') as UntypedFormControl;\n }\n\n constructor() { }\n\n percentageChanged(index: number) {\n if (this.rolloutPercentageItems().controls[index].value.percentage < 0) {\n (this.rolloutPercentageItems().controls[index] as UntypedFormGroup).controls.percentage.setValue(0);\n }\n if (this.rolloutPercentageItems().controls[index].value.percentage > 100) {\n (this.rolloutPercentageItems().controls[index] as UntypedFormGroup).controls.percentage.setValue(100);\n }\n\n if (this.rolloutPercentageItems().controls.length === 2) {\n (this.rolloutPercentageItems().controls[1 - index] as UntypedFormGroup).controls.percentage\n .setValue(100 - this.rolloutPercentageItems().controls[index].value.percentage);\n }\n\n this.updateSum();\n }\n\n updateSum() {\n if (this.rolloutPercentageItems().controls.length === 0) {\n this.rolloutPercentageItemsSum().setValue(100);\n } else {\n this.rolloutPercentageItemsSum().setValue(\n this.rolloutPercentageItems().controls.map(v => v.value.percentage)\n .reduce((a, b) => a + b)\n );\n }\n }\n\n removeRolloutPercentageItem(index: number) {\n this.rolloutPercentageItems().removeAt(index);\n this.rolloutPercentageItems().markAsDirty();\n this.updateSum();\n }\n\n removeAll() {\n this.rolloutPercentageItems().clear();\n this.rolloutPercentageItems().markAsDirty();\n this.updateSum();\n }\n\n getRolloutPercentageItemFormGroups() {\n return this.rolloutPercentageItems()?.controls?.map(c => c as UntypedFormGroup);\n }\n\n getPercentageFormControl(rolloutPercentageItem: any) {\n return rolloutPercentageItem.controls.percentage as UntypedFormControl;\n }\n}\n","<div class=\"percentage-wrapper\" [formGroup]=\"formGroup\">\n\n <div class=\"if\" *ngIf=\"rolloutRules().controls.length > 0\">\n <mat-chip-set>\n <mat-chip class=\"chip\">ELSE IF</mat-chip>\n </mat-chip-set>\n </div>\n <div class=\"grow\">\n <div class=\"percentage-row flex\"\n *ngFor=\"let rolloutPercentageItem of getRolloutPercentageItemFormGroups(); let i = index\">\n <div class=\"flex\">\n <input type=\"number\" [formControl]=\"getPercentageFormControl(rolloutPercentageItem)\"\n (input)=\"percentageChanged(i)\" digitOnly>%\n <span class=\"users\">of <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </span>\n </div>\n\n <div class=\"delete-option\" matTooltip=\"Remove this % option\"\n *ngIf=\"!readOnly && rolloutPercentageItems().controls.length > 2\"\n (click)=\"removeRolloutPercentageItem(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n\n <span matTooltip=\"The sum of percentages must be equal to 100.\" matTooltipPosition=\"above\"\n *ngIf=\"(i === rolloutPercentageItems().controls.length -1) && (rolloutPercentageItemsSum().invalid)\">\n <mat-icon color=\"warn\">\n error_outline\n </mat-icon>\n </span>\n\n <div class=\"value flex\">\n <span class=\"value-name\" *ngIf=\"setting().settingType !== SettingType.Boolean\">Served value:</span>\n <configcat-value class=\"served-value\" [valueFormControl]=\"value(rolloutPercentageItem)\"\n [setting]=\"setting()\">\n </configcat-value>\n </div>\n <div class=\"delete\" matTooltip=\"Remove % options\" (click)=\"removeAll()\" *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormControl, UntypedFormArray, Validators } from '@angular/forms';\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\nimport { valid } from 'semver';\nimport { ExpandDialogComponent } from '../../../dialogs/expand-dialog/expand-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SettingType, RolloutRuleComparator, SegmentListModel, SegmentComparator } from 'ng-configcat-publicapi';\nimport { SettingListFormHelper } from '../../../_services/setting-list-form-helper';\nimport { FormHelper } from '../../../_services/form-helper';\n\n@Component({\n selector: 'configcat-rollout-rules',\n templateUrl: './rollout-rules.component.html',\n styleUrls: ['./rollout-rules.component.scss']\n})\nexport class RolloutRulesComponent {\n\n @Input() formGroup!: UntypedFormGroup;\n @Input() readOnly = false;\n @Input() segments!: SegmentListModel[];\n\n SettingType = SettingType;\n\n defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n\n rolloutRuleComparators = [\n { value: RolloutRuleComparator.IsOneOf, label: 'IS ONE OF (cleartext)' },\n { value: RolloutRuleComparator.IsNotOneOf, label: 'IS NOT ONE OF (cleartext)' },\n { value: RolloutRuleComparator.Contains, label: 'CONTAINS (cleartext)' },\n { value: RolloutRuleComparator.DoesNotContain, label: 'DOES NOT CONTAIN (cleartext)' },\n\n { value: RolloutRuleComparator.SemVerIsOneOf, label: 'IS ONE OF (SemVer)' },\n { value: RolloutRuleComparator.SemVerIsNotOneOf, label: 'IS NOT ONE OF (SemVer)' },\n { value: RolloutRuleComparator.SemVerLess, label: '< (SemVer)' },\n { value: RolloutRuleComparator.SemVerLessOrEquals, label: '<= (SemVer)' },\n { value: RolloutRuleComparator.SemVerGreater, label: '> (SemVer)' },\n { value: RolloutRuleComparator.SemVerGreaterOrEquals, label: '>= (SemVer)' },\n\n { value: RolloutRuleComparator.NumberEquals, label: '= (Number)' },\n { value: RolloutRuleComparator.NumberDoesNotEqual, label: '!= (Number)' },\n { value: RolloutRuleComparator.NumberLess, label: '< (Number)' },\n { value: RolloutRuleComparator.NumberLessOrEquals, label: '<= (Number)' },\n { value: RolloutRuleComparator.NumberGreater, label: '> (Number)' },\n { value: RolloutRuleComparator.NumberGreaterOrEquals, label: '>= (Number)' },\n\n { value: RolloutRuleComparator.SensitiveIsOneOf, label: 'IS ONE OF (hashed)' },\n { value: RolloutRuleComparator.SensitiveIsNotOneOf, label: 'IS NOT ONE OF (hashed)' },\n ];\n\n segmentComparators = [\n { value: SegmentComparator.IsIn, label: 'IS IN SEGMENT' },\n { value: SegmentComparator.IsNotIn, label: 'IS NOT IN SEGMENT' },\n ];\n\n constructor(\n private dialog: MatDialog,\n private settingListFormHelper: SettingListFormHelper) { }\n\n setting() {\n return this.formGroup.get('setting')?.value;\n }\n\n rolloutRules() {\n return this.formGroup.get('rolloutRules') as UntypedFormArray;\n }\n\n comparisonAttributes() {\n return this.formGroup.root.get('comparisonAttributes')?.value;\n }\n\n removeRule(index: any) {\n this.rolloutRules().removeAt(index);\n this.rolloutRules().markAsDirty();\n }\n\n onDrop(event: any) {\n const rolloutRules = this.rolloutRules().controls;\n moveItemInArray(rolloutRules, event.previousIndex, event.currentIndex);\n this.formGroup.markAsDirty();\n }\n\n attributeChanged(event: any, comparisonAttribute: UntypedFormControl) {\n if (this.defaultComparisonAttributes.indexOf(event.value) !== -1) {\n if (comparisonAttribute.value !== event.value) {\n comparisonAttribute.setValue(event.value);\n this.formGroup.markAsDirty();\n }\n } else {\n if (comparisonAttribute.value !== '') {\n comparisonAttribute.setValue('');\n this.formGroup.markAsDirty();\n }\n }\n }\n\n getPlaceHolder(rolloutRule: any) {\n if (!rolloutRule.controls.comparisonAttribute.value) {\n return '';\n }\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.SensitiveIsOneOf:\n case RolloutRuleComparator.SensitiveIsNotOneOf:\n switch (rolloutRule.controls.comparisonAttribute.value.toLowerCase()) {\n case 'identifier':\n return 'e.g: user_id1, user_id2, user_id3';\n case 'email':\n return 'e.g: jane@example.com, john@example.com';\n case 'country':\n return 'e.g: France, Brazil';\n default:\n return 'e.g: value1, value2, value3';\n }\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n switch (rolloutRule.controls.comparisonAttribute.value.toLowerCase()) {\n case 'identifier':\n return 'part-of-id';\n case 'email':\n return 'e.g: @example.com';\n case 'country':\n return 'e.g: United';\n default:\n return 'e.g: any-part-of-your-value-string';\n }\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n return 'e.g: 1.0.0, 2.0.1';\n case RolloutRuleComparator.SemVerLessOrEquals:\n case RolloutRuleComparator.SemVerLess:\n case RolloutRuleComparator.SemVerGreater:\n case RolloutRuleComparator.SemVerGreaterOrEquals:\n return 'e.g: 1.0.0';\n case RolloutRuleComparator.NumberEquals:\n case RolloutRuleComparator.NumberDoesNotEqual:\n case RolloutRuleComparator.NumberLess:\n case RolloutRuleComparator.NumberLessOrEquals:\n case RolloutRuleComparator.NumberGreater:\n case RolloutRuleComparator.NumberGreaterOrEquals:\n return 'e.g: 42';\n }\n\n return '';\n }\n\n getComparisonValueType(rolloutRule: any) {\n return this.settingListFormHelper.getComparisonValueType(rolloutRule.controls.comparator.value);\n }\n\n getInfoClass(rolloutRule: any) {\n if (!rolloutRule.controls.comparisonAttribute.value) {\n return 'info';\n }\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n return 'warn';\n default:\n return 'info';\n }\n }\n\n getInfoTooltip(rolloutRule: any) {\n if (!rolloutRule.controls.comparisonAttribute.value) {\n return 'Learn more about comparators';\n }\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n return 'Consider using sensitive text comparators. Click to learn more.';\n default:\n return 'Click to learn more about comparators';\n }\n }\n\n comparatorChanged(rolloutRule: any) {\n let validators: any[] = [];\n\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.SensitiveIsOneOf:\n case RolloutRuleComparator.SensitiveIsNotOneOf:\n case RolloutRuleComparator.Contains:\n case RolloutRuleComparator.DoesNotContain:\n validators = [Validators.required, Validators.maxLength(65535)];\n break;\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n validators = [Validators.required, this.validateSemVerList];\n break;\n case RolloutRuleComparator.SemVerLessOrEquals:\n case RolloutRuleComparator.SemVerLess:\n case RolloutRuleComparator.SemVerGreater:\n case RolloutRuleComparator.SemVerGreaterOrEquals:\n validators = [Validators.required, this.validateSemVer];\n break;\n case RolloutRuleComparator.NumberEquals:\n case RolloutRuleComparator.NumberDoesNotEqual:\n case RolloutRuleComparator.NumberLess:\n case RolloutRuleComparator.NumberLessOrEquals:\n case RolloutRuleComparator.NumberGreater:\n case RolloutRuleComparator.NumberGreaterOrEquals:\n validators = [Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\n break;\n }\n\n rolloutRule.controls.comparisonValue.setValidators(validators);\n if (this.getComparisonValueType(rolloutRule) === \"number\") {\n const oldValue = rolloutRule.controls.comparisonValue.value;\n rolloutRule.controls.comparisonValue.setValue(FormHelper.normalizeNumberStoredAsString(rolloutRule.controls.comparisonValue.value));\n if (oldValue !== rolloutRule.controls.comparisonValue.value) {\n rolloutRule.controls.comparisonValue.markAsTouched();\n }\n }\n rolloutRule.controls.comparisonValue.updateValueAndValidity();\n }\n\n isListType(rolloutRule: any) {\n switch (rolloutRule.controls.comparator.value) {\n case RolloutRuleComparator.IsOneOf:\n case RolloutRuleComparator.IsNotOneOf:\n case RolloutRuleComparator.SensitiveIsOneOf:\n case RolloutRuleComparator.SensitiveIsNotOneOf:\n case RolloutRuleComparator.SemVerIsOneOf:\n case RolloutRuleComparator.SemVerIsNotOneOf:\n return true;\n default:\n return false;\n }\n }\n\n validateSemVer(c: UntypedFormControl) {\n\n if (valid(c.value) === null) {\n return {\n validateSemVer: {\n valid: false\n }\n };\n }\n\n return null;\n }\n\n validateSemVerList(c: UntypedFormControl) {\n if (!c.value) {\n return {\n validateSemVerList: {\n valid: false\n }\n };\n }\n\n const semvers = c.value.split(',').map((s: any) => s.trim());\n if (semvers.find((s: any) => s && s !== '' && valid(s) === null)) {\n return {\n validateSemVerList: {\n valid: false\n }\n };\n }\n\n return null;\n }\n\n popOut(rolloutRule: any) {\n this.dialog.open(ExpandDialogComponent, {\n width: '640px',\n data: {\n control: rolloutRule.controls.comparisonValue,\n multiline: this.isListType(rolloutRule)\n }\n });\n }\n\n\n trackByIndex(index: number): any {\n return index;\n }\n\n getRolloutRuleValueFormControl(rolloutRule: any) {\n return rolloutRule.controls.value as UntypedFormControl;\n }\n\n getRolloutRuleComparisonValueFormControl(rolloutRule: any) {\n return rolloutRule.controls.comparisonValue as UntypedFormControl;\n }\n\n getRolloutRuleComparisonAttributeFormControl(rolloutRule: any) {\n return rolloutRule.controls.comparisonAttribute as UntypedFormControl;\n }\n\n getRolloutRuleTypeFormControl(rolloutRule: any) {\n return rolloutRule.controls.type as UntypedFormControl;\n }\n\n getRolloutRuleComparatorFormControl(rolloutRule: any) {\n return rolloutRule.controls.comparator as UntypedFormControl;\n }\n\n getRolloutRuleSegmentComparatorFormControl(rolloutRule: any) {\n return rolloutRule.controls.segmentComparator as UntypedFormControl;\n }\n\n getRolloutRuleSegmentIdFormControl(rolloutRule: any) {\n return rolloutRule.controls.segmentId as UntypedFormControl;\n }\n}\n","<div [formGroup]=\"formGroup\">\n <div cdkDropList (cdkDropListDropped)=\"onDrop($event)\" [cdkDropListDisabled]=\"readOnly\"\n [cdkDropListData]=\"rolloutRules().controls\">\n <div *ngFor=\"let rolloutRule of rolloutRules().controls; trackBy: trackByIndex; let i = index\" cdkDrag>\n <div class=\"targeting-row\">\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 0\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user's</a>\n </div>\n\n <select class=\"custom-select attribute-select\" matTooltip=\"Comparison attribute\"\n matTooltipPosition=\"above\"\n (change)=\"attributeChanged($event.target, getRolloutRuleComparisonAttributeFormControl(rolloutRule))\"\n [disabled]=\"readOnly\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\n [selected]=\"comparisonAttribute === getRolloutRuleComparisonAttributeFormControl(rolloutRule).value\">\n {{comparisonAttribute}}</option>\n <option\n [selected]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) === -1\">\n Custom\n </option>\n </select>\n\n\n <span class=\"attribute-span\" matTooltip=\"Custom user attribute\" matTooltipPosition=\"above\"\n [hidden]=\"defaultComparisonAttributes.indexOf(getRolloutRuleComparisonAttributeFormControl(rolloutRule).value) !== -1\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid\">*</span>\n <input\n [ngClass]=\"{'invalid': getRolloutRuleComparisonAttributeFormControl(rolloutRule).invalid}\"\n type=\"text\" matInput [matAutocomplete]=\"auto\"\n [formControl]=\"getRolloutRuleComparisonAttributeFormControl(rolloutRule)\" class=\"attribute\"\n placeholder=\"e.g. Eye color\">\n </span>\n\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of comparisonAttributes()\" [value]=\"option\">\n {{option}}\n </mat-option>\n </mat-autocomplete>\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select\" [formControl]=\"getRolloutRuleComparatorFormControl(rolloutRule)\"\n matTooltip=\"Comparator\" matTooltipPosition=\"above\"\n (change)=\"comparatorChanged(rolloutRule)\">\n <optgroup label=\"CONFIDENTIAL TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(16, 18)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"TEXT\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(0, 4)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"SEMANTIC VERSION\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(4, 10)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup label=\"NUMBER\">\n <option *ngFor=\"let comparator of rolloutRuleComparators.slice(10, 16)\"\n [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n </select>\n <div [class]=\"getInfoClass(rolloutRule)\" [matTooltip]=\"getInfoTooltip(rolloutRule)\">\n <a href=\"https://configcat.com/docs/advanced/targeting/#comparator\" target=\"_blank\"\n rel=\"noopener noreferrer\">\n <mat-icon>info</mat-icon>\n </a>\n </div>\n </div>\n\n <div class=\"comparison-value\">\n <span class=\"error\"\n *ngIf=\"getRolloutRuleComparisonValueFormControl(rolloutRule).invalid\">*</span>\n\n <input [ngClass]=\"{'invalid': getRolloutRuleComparisonValueFormControl(rolloutRule).invalid}\"\n [formControl]=\"getRolloutRuleComparisonValueFormControl(rolloutRule)\"\n [type]=\"getComparisonValueType(rolloutRule)\" [placeholder]=\"getPlaceHolder(rolloutRule)\"\n matTooltip=\"Comparison value\" matTooltipPosition=\"above\" inputDisplayNormalizer>\n <div class=\"expand\" matTooltip=\"Pop-out Editor\" matTooltipPosition=\"above\"\n (click)=\"popOut(rolloutRule)\" *ngIf=\"getComparisonValueType(rolloutRule)==='text'\">\n <mat-icon>height</mat-icon>\n </div>\n </div>\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n <div class=\"fields flex\" *ngIf=\"getRolloutRuleTypeFormControl(rolloutRule).value === 1\">\n <div class=\"drag-handle\" cdkDragHandle matTooltip=\"Drag here to reorder\" matTooltipPosition=\"above\"\n *ngIf=\"!readOnly\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div class=\"if\">\n <mat-chip-set [class.spacing]=\"i === 0\">\n <mat-chip class=\"chip\">{{ i === 0 ? 'IF' : 'ELSE IF' }}</mat-chip>\n </mat-chip-set>\n <a href=\"https://configcat.com/docs/advanced/user-object\" target=\"_blank\"\n rel=\"noopener noreferrer\">user</a>\n </div>\n\n\n <div class=\"select-wrapper\">\n <select class=\"custom-select segment-comparator\"\n [formControl]=\"getRolloutRuleSegmentComparatorFormControl(rolloutRule)\"\n matTooltip=\"Segment comparator\" matTooltipPosition=\"above\">\n <option *ngFor=\"let comparator of segmentComparators\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </select>\n </div>\n\n <div class=\"select-wrapper\">\n <span class=\"attribute-error\"\n *ngIf=\"getRolloutRuleSegmentIdFormControl(rolloutRule).invalid\">*</span>\n <select class=\"custom-select segment-select\"\n [formControl]=\"getRolloutRuleSegmentIdFormControl(rolloutRule)\" matTooltip=\"Segment\"\n matTooltipPosition=\"above\"\n [ngClass]=\"{'invalid': getRolloutRuleSegmentIdFormControl(rolloutRule).invalid}\">\n <option *ngFor=\"let segment of segments\" [ngValue]=\"segment.segmentId\">\n {{segment.name}}\n </option>\n </select>\n </div>\n\n\n <div class=\"delete\" matTooltip=\"Remove targeting rule\" *ngIf=\"!readOnly\" (click)=\"removeRule(i)\">\n <mat-icon>cancel</mat-icon>\n </div>\n </div>\n\n\n <div class=\"value flex\">\n <div class=\"serve\" *ngIf=\"setting().settingType !== SettingType.Boolean\">\n <mat-chip-set>\n <mat-chip class=\"chip\">Serve:</mat-chip>\n </mat-chip-set>\n </div>\n\n <configcat-value class=\"served-value\"\n [valueFormControl]=\"getRolloutRuleValueFormControl(rolloutRule)\" [setting]=\"setting()\">\n </configcat-value>\n </div>\n </div>\n </div>\n </div>\n</div>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormArray, UntypedFormControl } from '@angular/forms';\nimport { RolloutPercentageItemModel, RolloutRuleComparator, RolloutRuleModel, SegmentComparator, SegmentListModel, SettingModel, SettingType } from 'ng-configcat-publicapi';\nimport { SettingListFormHelper } from '../../_services/setting-list-form-helper';\n\n@Component({\n selector: 'setting',\n templateUrl: './setting.component.html',\n styleUrls: ['./setting.component.scss']\n})\nexport class SettingComponent implements OnInit {\n\n @Input() dashboardBasePath = 'https://app.configcat.com';\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n\n @Input() formGroup!: UntypedFormGroup;\n @Input() readOnly = false;\n @Input() canDeleteSetting = false;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = false;\n @Input() segments!: SegmentListModel[];\n\n @Output() deleteSettingRequested = new EventEmitter();\n\n rulesBeingRendered = false;\n\n SettingType = SettingType;\n\n constructor(private formHelper: SettingListFormHelper) { }\n\n ngOnInit() { }\n\n environment() {\n return this.formGroup.root.get('environment')?.value;\n }\n\n setting() {\n return <SettingModel>this.formGroup.get('setting')?.value;\n }\n\n integrationLinks() {\n return this.formGroup.get('integrationLinks') as UntypedFormArray;\n }\n\n rolloutRules() {\n return this.formGroup.get('rolloutRules') as UntypedFormArray;\n }\n\n rolloutPercentageItems() {\n return this.formGroup.get('rolloutPercentageItems') as UntypedFormArray;\n }\n\n value() {\n return this.formGroup.get('value') as UntypedFormControl;\n }\n\n addRolloutRule() {\n this.rolloutRules().push(this.formHelper.createRolloutRuleFormGroup(\n <RolloutRuleModel>{\n comparisonAttribute: 'Identifier',\n comparator: RolloutRuleComparator.SensitiveIsOneOf,\n comparisonValue: '',\n value: this.setting().settingType === SettingType.Boolean ? false as unknown : null\n },\n this.readOnly, this.setting().settingType));\n this.rolloutRules().markAsDirty();\n }\n\n addSegmentRolloutRule() {\n this.rolloutRules().push(this.formHelper.createRolloutRuleFormGroup(\n <RolloutRuleModel>{\n segmentComparator: SegmentComparator.IsIn,\n value: this.setting().settingType === SettingType.Boolean ? false as unknown : null\n },\n this.readOnly, this.setting().settingType));\n this.rolloutRules().markAsDirty();\n }\n\n removeRolloutRules() {\n this.rolloutRules().clear();\n this.rolloutRules().markAsDirty();\n }\n\n addRolloutPercentageItem() {\n\n if (this.rolloutPercentageItems().length === 0) {\n switch (this.setting().settingType) {\n case SettingType.Boolean:\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 0,\n value: true as unknown\n },\n this.readOnly, this.setting().settingType));\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 100,\n value: false as unknown\n },\n this.readOnly, this.setting().settingType));\n break;\n\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n for (let i = 0; i < 4; i++) {\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 25,\n value: null\n },\n this.readOnly, this.setting().settingType));\n }\n\n break;\n }\n } else if (this.setting().settingType !== SettingType.Boolean) {\n this.rolloutPercentageItems().push(this.formHelper.createRolloutPercentageItemFormGroup(\n <RolloutPercentageItemModel>{\n percentage: 0,\n value: null\n },\n this.readOnly, this.setting().settingType));\n }\n\n this.rolloutPercentageItems().markAsDirty();\n }\n\n removeRolloutPercentageItems() {\n this.rolloutPercentageItems().clear();\n this.rolloutPercentageItems().markAsDirty();\n }\n\n deleteSetting() {\n this.deleteSettingRequested.emit({ setting: this.setting() });\n }\n\n getDashboardUrl() {\n return this.dashboardBasePath + '/' + this.productId + '/' + this.configId + '/' + this.environmentId + '?settingId=' + this.setting().settingId;\n }\n}\n","<div class=\"setting-full\" [formGroup]=\"formGroup\">\n <div class=\"delete\" (click)=\"deleteSetting()\" *ngIf=\"canDeleteSetting\" [matTooltip]=\"deleteSettingText\"\n data-robot=\"deleteSetting\">\n <mat-icon>cancel</mat-icon>\n </div>\n <div class=\"setting-header\">\n <div class=\"setting-name\">\n <div class=\"name\" data-robot=\"settingName\">\n {{setting().name}}\n <span *ngIf=\"showEnvironmentName\"> ({{environment().name}})</span>\n </div>\n </div>\n </div>\n <div class=\"setting-content\">\n <div class=\"setting-details\">\n <div class=\"setting-key\"><code data-robot=\"settingKey\">{{setting().key}}</code></div>\n <span *ngIf=\"setting().hint\" class=\"description\">{{setting().hint}}</span>\n <div class=\"open\"><a [href]=\"getDashboardUrl()\" target=\"_blank\" rel=\"noopener noreferrer\">Open in ConfigCat</a>\n </div>\n </div>\n\n <div class=\"rules-list\">\n <div>\n <configcat-rollout-rules *ngIf=\"rolloutRules().controls.length !== 0\" [formGroup]=\"formGroup\"\n [segments]=\"segments\" [readOnly]=\"readOnly\">\n </configcat-rollout-rules>\n </div>\n\n <configcat-rollout-percentage-items *ngIf=\"rolloutPercentageItems().controls.length !== 0\" [formGroup]=\"formGroup\"\n [readOnly]=\"readOnly\">\n </configcat-rollout-percentage-items>\n\n <div class=\"all-other flex\">\n <div *ngIf=\"rolloutPercentageItems().length === 0 && rolloutRules().length !== 0\"\n matTooltip=\"This value will be served to all users who the above rules don't apply.\"\n matTooltipPosition=\"above\">\n <mat-chip-set>\n <mat-chip class=\"chip\">To all other users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n <div *ngIf=\"rolloutPercentageItems().length !== 0\"\n matTooltip=\"This fallback value will be served in case the user can't be identified.\"\n matTooltipPosition=\"above\">\n <mat-chip-set>\n <mat-chip class=\"chip\">To unidentified users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n <div *ngIf=\"rolloutPercentageItems().length === 0 && rolloutRules().length === 0\">\n <mat-chip-set>\n <mat-chip class=\"chip\">To all users, serve:</mat-chip>\n </mat-chip-set>\n </div>\n <configcat-value class=\"served-value\" [valueFormControl]=\"value()\" [setting]=\"setting()\">\n </configcat-value>\n </div>\n <div class=\"buttons\">\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addRolloutRule()\" *ngIf=\"!readOnly\">\n {{rolloutRules().length === 0 ? 'Target specific users' : 'Add new targeting rule'}}\n </button>\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addSegmentRolloutRule()\" *ngIf=\"!readOnly\">\n {{rolloutRules().length === 0 ? 'Target segment' : 'Target new segment'}}\n </button>\n <button type=\"button\" class=\"sige-button targeting-button\" (click)=\"addRolloutPercentageItem()\"\n *ngIf=\"!readOnly\"\n [disabled]=\"setting().settingType === SettingType.Boolean && rolloutPercentageItems().length !== 0\">\n {{rolloutPercentageItems().length === 0 ? 'Target % of users' : 'Add new % option'}}\n </button>\n </div>\n </div>\n </div>\n</div>","import { Component, Input, Output, EventEmitter, OnDestroy, OnChanges } from '@angular/core';\nimport { SettingValuesModel, UpdateSettingValuesModel } from '../_models';\nimport { UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { forkJoin, Observable, Subscription } from 'rxjs';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ReasonDialogComponent } from '../dialogs/reason-dialog/reason-dialog.component';\nimport { SaveSnackbarComponent } from '../dialogs/save-snackbar/save-snackbar.component';\nimport { SettingListFormHelper } from '../_services/setting-list-form-helper';\nimport { RolloutPercentageItemModel, RolloutRuleModel, SegmentListModel, SettingModel, UpdateSettingValueModel } from 'ng-configcat-publicapi';\n\n@Component({\n selector: 'configcat-setting-list',\n templateUrl: './setting-list.component.html',\n styleUrls: ['./setting-list.component.scss']\n})\nexport class SettingListComponent implements OnChanges, OnDestroy {\n\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n @Input() dashboardBasePath = 'https://app.configcat.com';\n\n @Input() canDeleteSetting = false;\n\n @Input() onSave!: (value: UpdateSettingValuesModel) => Observable<SettingValuesModel>;\n @Input() loadSettingValues!: () => Observable<SettingValuesModel>;\n @Input() loadSegments!: () => Observable<SegmentListModel[]>;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = false;\n\n @Output() loadSucceeded = new EventEmitter();\n @Output() deleteSettingRequested = new EventEmitter();\n @Output() formValuesChanged = new EventEmitter();\n\n formValuesChangedSubscription!: Subscription | null;\n\n loading = true;\n\n settingValues!: SettingValuesModel;\n segments!: SegmentListModel[];\n formGroup!: UntypedFormGroup;\n\n submitting = false;\n showRevertQuestion = false;\n showFeedBackMessage = false;\n readOnly = false;\n\n constructor(private formHelper: SettingListFormHelper,\n private snackBar: MatSnackBar,\n private dialog: MatDialog) { }\n\n ngOnChanges(): void {\n this.reloadSettingValues();\n }\n\n ngOnDestroy() {\n if (this.formValuesChangedSubscription) {\n this.formValuesChangedSubscription.unsubscribe();\n this.formValuesChangedSubscription = null;\n }\n }\n\n reloadSettingValues() {\n this.showFeedBackMessage = false;\n this.loading = true;\n forkJoin({\n segments: this.loadSegments(),\n settingValues: this.loadSettingValues()\n }).subscribe(result => {\n this.readOnly = result.settingValues.readOnly;\n this.settingValues = result.settingValues;\n this.segments = result.segments;\n this.createFormGroup();\n this.loading = false;\n this.loadSucceeded.emit(true);\n },\n () => {\n this.snackBar.open('Ooops. We could not load your Feature Flags and Settings. Please try again or contact us.',\n 'Dismiss', { duration: 60000, panelClass: 'red-snackbar' });\n });\n }\n\n createFormGroup() {\n this.formGroup = this.formHelper.createSettingValuesFormGroup(this.settingValues);\n this.formValuesChangedSubscription = this.formGroup.valueChanges.subscribe(() => {\n this.formValuesChanged.emit();\n });\n }\n\n settingValuesFormArray() {\n return this.formGroup.get('settingValues') as UntypedFormArray;\n }\n\n getSettingValueFormGroups() {\n return this.settingValuesFormArray().controls.map(c => c as UntypedFormGroup);\n }\n\n private buildUpdateSettingValuesModel(settingValuesVM: UpdateSettingValueModel[]) {\n return settingValuesVM.map(settingValueVM => {\n return <UpdateSettingValueModel>\n {\n rolloutRules: settingValueVM.rolloutRules?.map(rolloutRuleVM =>\n <RolloutRuleModel>{\n comparisonAttribute: rolloutRuleVM.comparisonAttribute,\n comparator: rolloutRuleVM.comparator,\n comparisonValue: this.formHelper.normalizeComparisonValue(rolloutRuleVM.comparator, rolloutRuleVM.comparisonValue),\n segmentComparator: rolloutRuleVM.segmentComparator,\n segmentId: rolloutRuleVM.segmentId,\n value: rolloutRuleVM.value\n }),\n rolloutPercentageItems: settingValueVM.rolloutPercentageItems?.map(rolloutPercentageItemVM =>\n <RolloutPercentageItemModel>{\n percentage: rolloutPercentageItemVM.percentage,\n value: rolloutPercentageItemVM.value\n }),\n value: settingValueVM.value\n };\n });\n }\n\n submit() {\n if (!this.formGroup || !this.formGroup.valid) {\n this.showFeedBackMessage = true;\n this.formGroup.markAsTouched();\n return;\n }\n\n this.showFeedBackMessage = false;\n this.submitting = true;\n\n const updateSettingValuesModel = <UpdateSettingValuesModel>{\n settingValues: this.buildUpdateSettingValuesModel(this.formGroup.controls.settingValues.value),\n knownLastUpdatedAt: this.settingValues.lastUpdatedAt,\n forced: false\n };\n\n if (this.settingValues.reasonRequired) {\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\n width: '450px'\n });\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result && result.button === 'save' && result.reason) {\n\n updateSettingValuesModel.reason = result.reason;\n this.updateSettingValues(updateSettingValuesModel);\n } else {\n this.submitting = false;\n }\n });\n return;\n }\n\n this.updateSettingValues(updateSettingValuesModel);\n }\n\n updateSettingValues(updateSettingValuesModel: any) {\n this.onSave(updateSettingValuesModel).subscribe(settingValues => {\n this.settingValues = settingValues;\n this.createFormGroup();\n this.submitting = false;\n this.snackBar.openFromComponent(SaveSnackbarComponent, { duration: 5000, panelClass: 'green-snackbar' });\n }, (error) => {\n if (error.status === 400 && error.error && error.error.Reason && error.error.Reason[0] === 'Reason required') {\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\n width: '450px'\n });\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result && result.button === 'save' && result.reason) {\n updateSettingValuesModel.reason = result.reason;\n this.updateSettingValues(updateSettingValuesModel);\n } else {\n this.submitting = false;\n }\n });\n return;\n }\n\n this.formGroup.setErrors({ internalServerError: 'Internal server error' });\n this.showFeedBackMessage = true;\n });\n }\n\n handleRevertYes() {\n this.showRevertQuestion = false;\n this.reloadSettingValues();\n }\n\n handleRevertCancel() {\n this.showRevertQuestion = false;\n }\n\n onDeleteSettingRequested(setting: { setting: SettingModel }) {\n this.deleteSettingRequested.emit({\n setting: setting.setting,\n environment: this.settingValues.environment,\n config: this.settingValues.config\n });\n }\n}\n","<form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" *ngIf=\"!loading\">\n <div class=\"wrapper\" *ngFor=\"let settingValueFromGroup of getSettingValueFormGroups(); let i = index\">\n <setting [formGroup]=\"settingValueFromGroup\" [readOnly]=\"readOnly\" [canDeleteSetting]=\"canDeleteSetting\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\n [showEnvironmentName]=\"showEnvironmentName\" [segments]=\"segments\" [productId]=\"productId\" [configId]=\"configId\"\n [environmentId]=\"environmentId\" [dashboardBasePath]=\"dashboardBasePath\">\n </setting>\n </div>\n\n <div class=\"save\" *ngIf=\"!readOnly && !submitting && formGroup.dirty\">\n\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [disabled]=\"submitting\">\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\n </button>\n <button type=\"button\" mat-stroked-button *ngIf=\"!showRevertQuestion\" (click)=\"showRevertQuestion = true\">\n <mat-icon>history</mat-icon><span>Revert changes</span>\n </button>\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\n <span>Something went wrong and we could not save your settings. You can try again or <a\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact us.</a></span>\n </div>\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\n <span>Oh no! A feature flag has invalid or missing data.</span>\n </div>\n </div>\n <div *ngIf=\"showRevertQuestion\">\n <span class=\"revert\">Revert to last saved state?</span>\n <button type=\"button\" class=\"yes\" mat-stroked-button (click)=\"handleRevertYes()\">Yes</button>\n <button type=\"button\" mat-stroked-button (click)=\"handleRevertCancel()\">No</button>\n </div>\n </div>\n</form>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { BaseComponent } from '../base/base.component';\nimport { EvaluationVersion, SegmentListModel, SettingFormulaModel, SettingValueModel, UpdateSettingValueModel } from 'ng-configcat-publicapi';\nimport { Observable, throwError, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { PublicApiService } from '../_services';\nimport { SettingValuesModel, UpdateSettingValuesModel } from '../_models';\n\n@Component({\n selector: 'configcat-setting-item',\n templateUrl: './setting-item.component.html',\n styleUrls: ['./setting-item.component.scss']\n})\nexport class SettingItemComponent extends BaseComponent implements OnInit {\n\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n @Input() evaluationVersion!: EvaluationVersion;\n @Input() settingId!: number;\n\n @Input() canDeleteSetting = true;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = true;\n\n @Output() deleteSettingRequested = new EventEmitter();\n\n @Output() loadSucceeded = new EventEmitter();\n @Output() loadFailed = new EventEmitter();\n @Output() saveSucceeded = new EventEmitter();\n @Output() saveFailed = new EventEmitter();\n\n @Output() formValuesChanged = new EventEmitter();\n\n settingValue!: SettingValueModel;\n segments!: SegmentListModel[];\n dashboardBasePath: string;\n\n settingFormulaModel!: SettingFormulaModel;\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n this.dashboardBasePath = publicApiService.getDashboardBasePath();\n }\n\n ngOnInit(): void {\n }\n\n loadSettingValues = (): Observable<SettingValuesModel> => {\n return this.createSettingValuesService().getSettingValue(this.environmentId, this.settingId)\n .pipe(\n map(settingValue => {\n this.settingValue = settingValue;\n\n const settingValues = {\n settingValues: [settingValue],\n readOnly: settingValue.readOnly,\n config: settingValue.config,\n environment: settingValue.environment\n } as SettingValuesModel;\n\n return settingValues;\n }),\n catchError(error => {\n this.loadFailed.emit(error);\n return throwError(error);\n })\n );\n }\n\n itemLoadSucceeded() {\n this.loadSucceeded.emit(true);\n }\n\n loadSegments = (): Observable<SegmentListModel[]> => {\n return this.createSegmentsService().getSegments(this.productId)\n .pipe(\n map(segments => {\n this.segments = segments;\n return segments;\n }),\n catchError(error => {\n return throwError(error);\n })\n );\n }\n\n handleSave = (model: UpdateSettingValuesModel): Observable<SettingValuesModel> => {\n if (model.settingValues.length === 0) {\n return of();\n }\n const updateModel = model.settingValues[0] as UpdateSettingValueModel;\n\n return this.createSettingValuesService().replaceSettingValue(\n this.environmentId, this.settingId, updateModel, model.reason)\n .pipe(\n map(settingValue => {\n this.settingValue = settingValue;\n\n const settingValues = {\n settingValues: [settingValue],\n readOnly: settingValue.readOnly,\n config: settingValue.config,\n environment: settingValue.environment\n } as SettingValuesModel;\n\n this.saveSucceeded.emit(settingValues);\n return settingValues;\n }),\n catchError(error => {\n this.saveFailed.emit(error);\n return throwError(error);\n })\n );\n }\n\n onDeleteSettingRequested(setting: any) {\n this.deleteSettingRequested.emit({\n setting: setting.setting,\n environment: this.settingValue.environment,\n config: this.settingValue.config\n });\n }\n\n onFormValuesChanged() {\n this.formValuesChanged.emit();\n }\n}\n","<configcat-setting-list [canDeleteSetting]=\"canDeleteSetting\" [onSave]=\"handleSave\"\n [loadSettingValues]=\"loadSettingValues\" [loadSegments]=\"loadSegments\" (loadSucceeded)=\"itemLoadSucceeded()\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\n [showEnvironmentName]=\"showEnvironmentName\" (formValuesChanged)=\"onFormValuesChanged()\" [productId]=\"productId\"\n [configId]=\"configId\" [environmentId]=\"environmentId\" [dashboardBasePath]=\"dashboardBasePath\">\n</configcat-setting-list>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { BaseComponent } from './base.component';\n\n@Component({\n selector: 'base-select',\n template: '<div></div>'\n})\nexport class BaseSelectComponent extends BaseComponent {\n\n @Input() customDropdown: boolean = false;\n\n @Output() dropdownOpened = new EventEmitter<boolean>();\n\n protected openChanged(event: any) {\n this.dropdownOpened.emit(event);\n }\n}\n\n\n","import { Component, OnInit, Input, OnChanges } from '@angular/core';\nimport { SettingModel } from 'ng-configcat-publicapi';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-setting-select',\n templateUrl: './setting-select.component.html',\n styleUrls: ['./setting-select.component.css']\n})\nexport class SettingSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n\n @Input() valueFormControl!: UntypedFormControl;\n @Input() configId!: string;\n settings: SettingModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.settings = [];\n this.reloadSettings();\n }\n\n ngOnChanges() {\n this.reloadSettings();\n }\n\n reloadSettings() {\n if (this.configId) {\n this.createSettingsService().getSettings(this.configId).subscribe(settings => {\n this.settings = settings;\n if (this.settings.length > 0) {\n this.valueFormControl.setValue(this.settings[0].settingId);\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n }\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\" *ngIf=\"settings\">\n <mat-label>Feature flag or setting</mat-label>\n <mat-select placeholder=\"Feature flag or setting\" [formControl]=\"valueFormControl\" name=\"value\"\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let setting of settings\" [value]=\"setting.settingId\" matTooltip=\"{{setting.name}}\"\n [matTooltipShowDelay]=\"1000\">{{setting.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input } from '@angular/core';\nimport { ProductModel } from 'ng-configcat-publicapi';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-product-select',\n templateUrl: './product-select.component.html',\n styleUrls: ['./product-select.component.css']\n})\nexport class ProductSelectComponent extends BaseSelectComponent implements OnInit {\n\n @Input() valueFormControl!: UntypedFormControl;\n products: ProductModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.products = [];\n this.createProductsService().getProducts().subscribe(products => {\n this.products = products;\n if (this.products.length > 0) {\n this.valueFormControl.setValue(this.products[0].productId, {\n emitEvent: true,\n emitModelToViewChange: true, emitViewToModelChange: true\n });\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Product</mat-label>\n <mat-select placeholder=\"Product\" [formControl]=\"valueFormControl\" name=\"productValue\"\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let product of products\" [value]=\"product.productId\" matTooltip=\"{{product.name}}\"\n [matTooltipShowDelay]=\"1000\">{{product.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input, OnChanges, forwardRef } from '@angular/core';\nimport { ConfigModel } from 'ng-configcat-publicapi';\nimport { NG_VALUE_ACCESSOR, UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-config-select',\n templateUrl: './config-select.component.html',\n styleUrls: ['./config-select.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ConfigSelectComponent),\n multi: true\n }\n ]\n})\nexport class ConfigSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n\n @Input() valueFormControl!: UntypedFormControl;\n @Input() productId!: string;\n configs: ConfigModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.configs = [];\n this.reloadConfigs();\n }\n\n ngOnChanges() {\n this.reloadConfigs();\n }\n\n reloadConfigs() {\n if (this.productId) {\n this.createConfigsService().getConfigs(this.productId).subscribe(configs => {\n this.configs = configs;\n if (this.configs.length > 0) {\n this.valueFormControl.setValue(this.configs[0].configId);\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n }\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\" *ngIf=\"configs\">\n <mat-label>Config</mat-label>\n <mat-select placeholder=\"Config\" [formControl]=\"valueFormControl\" name=\"value\" disableOptionCentering\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let config of configs\" [value]=\"config.configId\" matTooltip=\"{{config.name}}\"\n [matTooltipShowDelay]=\"1000\">{{config.name}}</mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input, OnChanges } from '@angular/core';\nimport { EnvironmentModel } from 'ng-configcat-publicapi';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PublicApiService } from '../../_services';\nimport { BaseSelectComponent } from '../../base/base-select.component';\n\n@Component({\n selector: 'configcat-environment-select',\n templateUrl: './environment-select.component.html',\n styleUrls: ['./environment-select.component.css']\n})\nexport class EnvironmentSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n\n @Input() valueFormControl!: UntypedFormControl;\n @Input() productId!: string;\n environments: EnvironmentModel[] = [];\n\n constructor(\n publicApiService: PublicApiService) {\n super(publicApiService);\n }\n\n ngOnInit(): void {\n this.environments = [];\n this.reloadEnvironments();\n }\n\n ngOnChanges() {\n this.reloadEnvironments();\n }\n\n reloadEnvironments() {\n if (this.productId) {\n this.createEnvironmentsService().getEnvironments(this.productId).subscribe(environments => {\n this.environments = environments;\n if (this.environments.length > 0) {\n this.valueFormControl.setValue(this.environments[0].environmentId);\n } else {\n this.valueFormControl.setValue(\"\");\n }\n });\n }\n }\n\n}\n","<mat-form-field class=\"form-field\" appearance=\"outline\" *ngIf=\"environments\">\n <mat-label>Environment</mat-label>\n <mat-select placeholder=\"Environment\" [formControl]=\"valueFormControl\" name=\"value\"\n (openedChange)=\"openChanged($event)\" [panelClass]=\"customDropdown ? 'custom-dropdown-below' : ''\">\n <mat-option *ngFor=\"let environment of environments\" [value]=\"environment.environmentId\"\n matTooltip=\"{{environment.name}}\" [matTooltipShowDelay]=\"1000\">{{environment.name}}\n </mat-option>\n </mat-select>\n</mat-form-field>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormBuilder, Validators } from '@angular/forms';\nimport { PublicApiService } from '../_services';\nimport { FormHelper } from '../_services/form-helper';\n\n@Component({\n selector: 'configcat-authorization',\n templateUrl: './authorization.component.html',\n styleUrls: ['./authorization.component.scss']\n})\nexport class AuthorizationComponent implements OnInit {\n\n formGroup!: UntypedFormGroup;\n @Input() basePath = null;\n @Input() integrationName = 'ConfigCat Feature Flags';\n @Output() authorized = new EventEmitter();\n @Output() error = new EventEmitter();\n FormHelper = FormHelper;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private publicApiService: PublicApiService\n ) { }\n\n ngOnInit(): void {\n this.formGroup = this.formBuilder.group({\n basicAuthUsername: ['', Validators.required],\n basicAuthPassword: ['', Validators.required],\n });\n }\n\n onSubmit() {\n if (!this.formGroup.valid) {\n return;\n }\n\n const meService = this.publicApiService.createMeService(\n this.formGroup.controls.basicAuthUsername.value,\n this.formGroup.controls.basicAuthPassword.value,\n this.basePath);\n\n meService.getMe().subscribe(me => {\n this.authorized.emit({\n basicAuthUsername: this.formGroup.controls.basicAuthUsername.value,\n basicAuthPassword: this.formGroup.controls.basicAuthPassword.value,\n email: me.email,\n fullName: me.fullName\n });\n },\n () => {\n this.formGroup.setErrors({ invalidAuthorization: 'Invalid Basic auth user name or password' });\n this.error.emit();\n }\n );\n }\n\n getPublicApiUrl() {\n return this.publicApiService.getDashboardBasePath() + '/my-account/public-api-credentials';\n }\n}\n","<form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n <div class=\"container\">\n <div class=\"form\">\n <p>\n In order to use {{integrationName}} you have to authorize first with your ConfigCat Public API\n credentials.\n </p>\n <ul>\n <li>\n <a [href]=\"getPublicApiUrl()\" target=\"_blank\" rel=\"noopener noreferrer\">\n Get your Basic Auth user name and password</a> to access ConfigCat Public API.\n <br />\n <b>Note!</b> Your ConfigCat account's email address and password will not work here.\n </li>\n <li>\n Type your credentials here and click the Authorize button.\n </li>\n </ul>\n\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Basic auth user name</mat-label>\n <input matInput placeholder=\"Basic auth user name\" formControlName=\"basicAuthUsername\">\n <mat-error *ngIf=\"formGroup.controls.basicAuthUsername.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.basicAuthUsername)}}\n </mat-error>\n </mat-form-field>\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Basic auth password</mat-label>\n <input matInput placeholder=\"Basic auth password\" formControlName=\"basicAuthPassword\" type=\"password\"\n autocomplete=\"current-password\">\n <mat-error *ngIf=\"formGroup.controls.basicAuthPassword.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.basicAuthPassword)}}\n </mat-error>\n </mat-form-field>\n <div>\n <button mat-flat-button color=\"primary\" type=\"submit\" class=\"submit\">Authorize</button>\n <mat-error *ngIf=\"formGroup.invalid && formGroup.errors && formGroup.errors.invalidAuthorization\">\n {{formGroup.errors.invalidAuthorization}}</mat-error>\n </div>\n </div>\n </div>\n</form>","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-delete-setting-dialog',\n templateUrl: './delete-setting-dialog.component.html',\n styleUrls: ['./delete-setting-dialog.component.scss']\n})\nexport class DeleteSettingDialogComponent {\n\n constructor(public dialogRef: MatDialogRef<DeleteSettingDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: { system: string, ticketType: string }) { }\n\n remove() {\n this.dialogRef.close({ button: 'remove' });\n }\n\n cancel() {\n this.dialogRef.close({ button: 'cancel' });\n }\n\n}\n","<h1 mat-dialog-title>Remove Feature Flag or Setting from {{data.system}}</h1>\n<div mat-dialog-actions class=\"container\">\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"remove()\">Remove from {{data.ticketType}}</button>\n <button type=\"button\" mat-raised-button (click)=\"cancel()\">Cancel</button>\n</div>","\nexport enum UserComparator {\n // RolloutRuleComparatorV2Type.StringList\n SensitiveIsOneOf = 'sensitiveIsOneOf',\n SensitiveIsNotOneOf = 'sensitiveIsNotOneOf',\n SensitiveTextStartsWithAnyOf = 'sensitiveTextStartsWithAnyOf',\n SensitiveTextEndsWithAnyOf = 'sensitiveTextEndsWithAnyOf',\n SensitiveTextNotStartsWithAnyOf = 'sensitiveTextNotStartsWithAnyOf',\n SensitiveTextNotEndsWithAnyOf = 'sensitiveTextNotEndsWithAnyOf',\n SensitiveArrayContainsAnyOf = 'sensitiveArrayContainsAnyOf',\n SensitiveArrayDoesNotContainAnyOf = 'sensitiveArrayDoesNotContainAnyOf',\n\n IsOneOf = 'isOneOf',\n IsNotOneOf = 'isNotOneOf',\n TextStartsWithAnyOf = 'textStartsWithAnyOf',\n TextEndsWithAnyOf = 'textEndsWithAnyOf',\n TextNotStartsWithAnyOf = 'textNotStartsWithAnyOf',\n TextNotEndsWithAnyOf = 'textNotEndsWithAnyOf',\n ArrayContainsAnyOf = 'arrayContainsAnyOf',\n ArrayDoesNotContainAnyOf = 'arrayDoesNotContainAnyOf',\n ContainsAnyOf = 'containsAnyOf',\n DoesNotContainAnyOf = 'doesNotContainAnyOf',\n\n // RolloutRuleComparatorV2Type.String\n SensitiveTextEquals = 'sensitiveTextEquals',\n SensitiveTextDoesNotEqual = 'sensitiveTextDoesNotEqual',\n TextEquals = 'textEquals',\n TextDoesNotEqual = 'textDoesNotEqual',\n\n // RolloutRuleComparatorV2Type.Number\n NumberEquals = 'numberEquals',\n NumberDoesNotEqual = 'numberDoesNotEqual',\n NumberLess = 'numberLess',\n NumberLessOrEquals = 'numberLessOrEquals',\n NumberGreater = 'numberGreater',\n NumberGreaterOrEquals = 'numberGreaterOrEquals',\n\n // RolloutRuleComparatorV2Type.SemverList\n SemVerIsOneOf = 'semVerIsOneOf',\n SemVerIsNotOneOf = 'semVerIsNotOneOf',\n\n // RolloutRuleComparatorV2Type.Semver\n SemVerLess = 'semVerLess',\n SemVerLessOrEquals = 'semVerLessOrEquals',\n SemVerGreater = 'semVerGreater',\n SemVerGreaterOrEquals = 'semVerGreaterOrEquals',\n\n // RolloutRuleComparatorV2Type.DateTime\n DateTimeBefore = 'dateTimeBefore',\n DateTimeAfter = 'dateTimeAfter',\n}\n\nexport enum UserComparatorText {\n // RolloutRuleComparatorV2Type.StringList\n SensitiveIsOneOf = 'IS ONE OF (hashed)',\n SensitiveIsNotOneOf = 'IS NOT ONE OF (hashed)',\n SensitiveTextStartsWithAnyOf = 'STARTS WITH ANY OF (hashed)',\n SensitiveTextEndsWithAnyOf = 'ENDS WITH ANY OF (hashed)',\n SensitiveTextNotStartsWithAnyOf = 'NOT STARTS WITH ANY OF (hashed)',\n SensitiveTextNotEndsWithAnyOf = 'NOT ENDS WITH ANY OF (hashed)',\n SensitiveArrayContainsAnyOf = 'ARRAY CONTAINS ANY OF (hashed)',\n SensitiveArrayDoesNotContainAnyOf = 'ARRAY NOT CONTAINS ANY OF (hashed)',\n\n IsOneOf = 'IS ONE OF (cleartext)',\n IsNotOneOf = 'IS NOT ONE OF (cleartext)',\n TextStartsWithAnyOf = 'STARTS WITH ANY OF (cleartext)',\n TextEndsWithAnyOf = 'ENDS WITH ANY OF (cleartext)',\n TextNotStartsWithAnyOf = 'NOT STARTS WITH ANY OF (cleartext)',\n TextNotEndsWithAnyOf = 'NOT ENDS WITH ANY OF (cleartext)',\n ArrayContainsAnyOf = 'ARRAY CONTAINS ANY OF (cleartext)',\n ArrayDoesNotContainAnyOf = 'ARRAY NOT CONTAINS ANY OF (cleartext)',\n ContainsAnyOf = 'CONTAINS ANY OF (cleartext)',\n DoesNotContainAnyOf = 'NOT CONTAINS ANY OF (cleartext)',\n\n // RolloutRuleComparatorV2Type.String\n SensitiveTextEquals = 'EQUALS (hashed)',\n SensitiveTextDoesNotEqual = 'NOT EQUALS (hashed)',\n TextEquals = 'EQUALS (cleartext)',\n TextDoesNotEqual = 'NOT EQUALS (cleartext)',\n\n // RolloutRuleComparatorV2Type.Number\n NumberEquals = '= (number)',\n NumberDoesNotEqual = '!= (number)',\n NumberLess = '< (number)',\n NumberLessOrEquals = '<= (number)',\n NumberGreater = '> (number)',\n NumberGreaterOrEquals = '>= (number)',\n\n // RolloutRuleComparatorV2Type.SemverList\n SemVerIsOneOf = 'IS ONE OF (semver)',\n SemVerIsNotOneOf = 'IS NOT ONE OF (semver)',\n\n // RolloutRuleComparatorV2Type.Semver\n SemVerLess = '< (semver)',\n SemVerLessOrEquals = '<= (semver)',\n SemVerGreater = '> (semver)',\n SemVerGreaterOrEquals = '>= (semver)',\n\n // RolloutRuleComparatorV2Type.DateTime\n DateTimeBefore = 'BEFORE (UTC datetime)',\n DateTimeAfter = 'AFTER (UTC datetime)',\n}\n\nexport enum UserComparatorType {\n StringList = 0,\n String = 1,\n Number = 2,\n SemverList = 3,\n Semver = 4,\n DateTime = 5\n}\n","import { Injectable } from \"@angular/core\";\nimport { FormArray, FormControl, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\nimport {\n UserComparator, UserComparatorType, SettingType,\n IComparisonValueModel, IComparisonValueListModel,\n IFeatureFlagLimitations,\n ComparisonValueForm, ComparisonValueListForm,\n ConditionForm,\n PrerequisiteFlagConditionForm,\n IPrerequisiteSetting,\n PercentageOptionForm,\n SegmentConditionForm,\n TargetingRuleForm,\n UpdateSettingValueForm, UserConditionForm, ValueForm,\n PrerequisiteComparator, IConditionModel, IPrerequisiteFlagConditionModel, ISegmentConditionModel, IUserConditionModel,\n IValueModel, ITargetingRuleModel, IPercentageOptionModel, ISettingValueModel\n} from \"../bootstrap\";\nimport { valid } from 'semver';\nimport { percentageRegex, wholeNumberRegex } from \"../_services/form-helper\";\n\n@Injectable()\nexport class FormGenerator {\n public generateSettingValuesFormGroup(model: ISettingValueModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<UpdateSettingValueForm> {\n return new FormGroup<UpdateSettingValueForm>({\n defaultValue: this.generateValueFormGroup(model.defaultValue, model.setting.settingType, readOnly, featureFlagLimitations),\n percentageEvaluationAttribute: this.generatePercentageEvaluationAttributeFormControl(model.percentageEvaluationAttribute, readOnly),\n targetingRules: new FormArray<FormGroup<TargetingRuleForm>>(\n model.targetingRules.map(ft => this.generateTargetingRuleFormGroup(ft, model.setting.settingType, readOnly, settings, featureFlagLimitations))\n )\n });\n }\n\n public generatePercentageEvaluationAttributeFormControl(percentageEvaluationAttribute: string, readOnly: boolean) {\n return new FormControl({ value: percentageEvaluationAttribute, disabled: readOnly }, { validators: [this.validateEmptyString, Validators.maxLength(1000)] })\n }\n\n public generateTargetingRuleFormGroup(model: ITargetingRuleModel, settingType: SettingType, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<TargetingRuleForm> {\n const conditions = new FormArray<FormGroup<ConditionForm>>(\n model.conditions.map(tr => this.generateConditionFormGroup(tr, readOnly, settings, featureFlagLimitations))\n )\n\n if (model.percentageOptions?.length > 0) {\n return new FormGroup<TargetingRuleForm>({\n conditions,\n percentageOptions: new FormArray<FormGroup<PercentageOptionForm>>(\n model.percentageOptions.map(pr => this.generatePercentageOptionFormGroup(pr, settingType, readOnly, featureFlagLimitations)),\n [this.validatePercentageSum]\n )\n });\n } else if (model.value) {\n return new FormGroup<TargetingRuleForm>({\n conditions,\n value: this.generateValueFormGroup(model.value, settingType, readOnly, featureFlagLimitations)\n });\n }\n\n throw Error(\"Invalid model\");\n }\n\n public generateTargetingRuleWithEmptyPercentageOptions(settingType: SettingType, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<TargetingRuleForm> {\n return this.generateTargetingRuleFormGroup({\n conditions: [],\n percentageOptions: this.getEmptyPercentageOptions(settingType)\n }, settingType, readOnly, settings, featureFlagLimitations);\n }\n\n public getEmptyPercentageOptions(settingType: SettingType): IPercentageOptionModel[] {\n switch (settingType) {\n case SettingType.Boolean:\n return [\n { percentage: 50, value: { boolValue: true } },\n { percentage: 50, value: { boolValue: false } }\n ];\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return [\n { percentage: 50, value: {} },\n { percentage: 50, value: {} },\n ];\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n public generatePercentageOptionFormGroup(model: IPercentageOptionModel, settingType: SettingType, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<PercentageOptionForm> {\n return new FormGroup<PercentageOptionForm>({\n percentage: new FormControl({ value: model.percentage, disabled: readOnly }, { nonNullable: true, validators: [this.validateNumberNan, Validators.required, Validators.min(0), Validators.max(100), Validators.pattern(percentageRegex)] }),\n value: this.generateValueFormGroup(model.value, settingType, readOnly || settingType === SettingType.Boolean, featureFlagLimitations),\n })\n }\n\n public generateConditionFormGroup(model: IConditionModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ConditionForm> {\n if (model.userCondition) {\n return new FormGroup<ConditionForm>({\n userCondition: this.generateUserConditionFormGroup(model.userCondition, readOnly, featureFlagLimitations)\n });\n } else if (model.segmentCondition) {\n return new FormGroup<ConditionForm>({\n segmentCondition: this.generateSegmentConditionFormGroup(model.segmentCondition, readOnly)\n });\n } else if (model.prerequisiteFlagCondition) {\n return new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: this.generatePrerequisiteFlagConditionFormGroup(model.prerequisiteFlagCondition, readOnly, settings, featureFlagLimitations)\n });\n } else {\n throw new Error('')\n }\n }\n\n public generateUserConditionFormGroup(value: IUserConditionModel, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<UserConditionForm> {\n return new FormGroup<UserConditionForm>({\n comparisonAttribute: new FormControl({ value: value.comparisonAttribute, disabled: readOnly }, { nonNullable: true, validators: [Validators.required, Validators.maxLength(1000)] }),\n comparator: new FormControl({ value: value.comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparisonValue: this.generateComparisonValueFormGroup(value.comparisonValue, value.comparator, readOnly, featureFlagLimitations)\n });\n }\n\n public generateSegmentConditionFormGroup(value: ISegmentConditionModel, readOnly: boolean): FormGroup<SegmentConditionForm> {\n return new FormGroup<SegmentConditionForm>({\n segmentId: new FormControl({ value: value.segmentId, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl({ value: value.comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n });\n }\n\n public generatePrerequisiteFlagConditionFormGroup(value: IPrerequisiteFlagConditionModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: IFeatureFlagLimitations): FormGroup<PrerequisiteFlagConditionForm> {\n const setting = settings.filter(s => s.settingId == value.prerequisiteSettingId)[0];\n if (!setting) {\n throw new Error('Could not find prerequisite setting');\n }\n if (setting.settingType === SettingType.Boolean) {\n // In case of a boolean prerequisite setting, we are enforcing a 'True' prerequisiteComparisonValue \n // so we can simplify the UI with a simple 'Is true' or 'Is false' select.\n // 'Is true' = PrerequisiteComparator.Equals TRUE\n // 'Is false' = PrerequisiteComparator.DoesNotEqual TRUE\n let comparator = value.comparator;\n if (!value.prerequisiteComparisonValue) {\n // If the prerequisiteComparisonValue is false somehow (e.g. Public Management API), we should negate the comparator.\n comparator = comparator === PrerequisiteComparator.Equals ? PrerequisiteComparator.DoesNotEqual : PrerequisiteComparator.Equals;\n }\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl({ value: value.prerequisiteSettingId, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl({ value: comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n prerequisiteComparisonValue: this.generateValueFormGroup({ boolValue: true }, setting.settingType, readOnly, featureFlagLimitations)\n });\n } else {\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl({ value: value.prerequisiteSettingId, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl({ value: value.comparator, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] }),\n prerequisiteComparisonValue: this.generateValueFormGroup(value.prerequisiteComparisonValue, setting.settingType, readOnly, featureFlagLimitations)\n });\n }\n }\n\n public generateEmptyPrerequisiteFlagConditionFormGroup(featureFlagLimitations: IFeatureFlagLimitations): FormGroup<PrerequisiteFlagConditionForm> {\n return new FormGroup<PrerequisiteFlagConditionForm>({\n prerequisiteSettingId: new FormControl(null, { nonNullable: true, validators: [Validators.required] }),\n comparator: new FormControl(PrerequisiteComparator.Equals, { nonNullable: true, validators: [Validators.required] }),\n prerequisiteComparisonValue: this.generateValueFormGroup({ boolValue: true }, SettingType.Boolean, false, featureFlagLimitations)\n });\n }\n\n public getNextIndex(formArray: FormArray<FormGroup<ComparisonValueListForm>>) {\n if (formArray.controls.length === 0) {\n return 0;\n }\n return Math.max(...formArray.controls.map(c => c.controls.index.value)) + 1;\n }\n\n public generateComparisonValueListFormGroup(listValue: IComparisonValueListModel, readOnly: boolean, validators: ValidatorFn[], index: number) {\n return new FormGroup<ComparisonValueListForm>({\n value: new FormControl({ value: listValue.value, disabled: readOnly }, { nonNullable: true, validators }),\n hint: new FormControl({ value: listValue.hint, disabled: readOnly }, [Validators.maxLength(1500)]),\n // The index column is generated on the first generation by default or by the getNextIndex() if a value is added to the listvalue. It is required so we can delete the rows on the poput editor.\n index: new FormControl({ value: index, disabled: true })\n });\n }\n\n public generateComparisonValueFormGroup(value: IComparisonValueModel, comparator: UserComparator, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ComparisonValueForm> {\n switch (this.getComparisonValueType(comparator)) {\n case UserComparatorType.String:\n return new FormGroup<ComparisonValueForm>({\n stringValue: new FormControl({ value: value.stringValue, disabled: readOnly }, { nonNullable: true, validators: this.getComparisonValueStringValidators(featureFlagLimitations) })\n });\n case UserComparatorType.StringList:\n return new FormGroup<ComparisonValueForm>({\n listValue: this.generateComparisonValueListValueArray(value.listValue, readOnly, featureFlagLimitations, this.getComparisonValueStringListItemValidators(featureFlagLimitations))\n });\n\n case UserComparatorType.Number:\n return new FormGroup<ComparisonValueForm>({\n doubleValue: new FormControl({ value: value.doubleValue, disabled: readOnly },\n // eslint-disable-next-line @typescript-eslint/no-loss-of-precision\n { nonNullable: true, validators: [this.validateNumberNan, Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)] })\n });\n\n case UserComparatorType.Semver:\n return new FormGroup<ComparisonValueForm>({\n stringValue: new FormControl({ value: value.stringValue, disabled: readOnly }, { nonNullable: true, validators: this.getComparisonValueSemverValidators(featureFlagLimitations) })\n });\n case UserComparatorType.SemverList:\n return new FormGroup<ComparisonValueForm>({\n listValue: this.generateComparisonValueListValueArray(value.listValue, readOnly, featureFlagLimitations, this.getComparisonValueSemverListItemValidators(featureFlagLimitations))\n });\n\n case UserComparatorType.DateTime:\n return new FormGroup<ComparisonValueForm>({\n doubleValue: new FormControl({ value: value.doubleValue, disabled: readOnly }, { nonNullable: true, validators: [Validators.required] })\n });\n\n default: throw new Error('Invalid comparator');\n }\n }\n\n public generateComparisonValueListValueArray(listValue: IComparisonValueListModel[], readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations, itemValidators: ValidatorFn[]) {\n return new FormArray<FormGroup<ComparisonValueListForm>>(\n (listValue ?? []).map((lv, index) => { return this.generateComparisonValueListFormGroup(lv, readOnly, itemValidators, index); }),\n [Validators.required, Validators.minLength(1), Validators.maxLength(featureFlagLimitations.maxComparisonValueListLength)]\n )\n }\n\n public getComparisonValueStringValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength)];\n }\n\n public getComparisonValueStringListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength)];\n }\n\n public getComparisonValueSemverValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength), this.validateSemVer]\n }\n\n public getComparisonValueSemverListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength), this.validateSemVer]\n }\n\n public generateDefaultValue(settingType: SettingType): IValueModel {\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: false };\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return {};\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n public generateDefaultValueFormGroup(settingType: SettingType, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ValueForm> {\n return this.generateValueFormGroup(this.generateDefaultValue(settingType), settingType, readOnly, featureFlagLimitations);\n }\n\n public generateValueFormGroup(value: IValueModel, settingType: SettingType, readOnly: boolean, featureFlagLimitations: IFeatureFlagLimitations): FormGroup<ValueForm> {\n switch (settingType) {\n case SettingType.Boolean:\n return new FormGroup<ValueForm>({\n boolValue: new FormControl({ value: value.boolValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n case SettingType.String:\n return new FormGroup<ValueForm>({\n stringValue: new FormControl({ value: value.stringValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n case SettingType.Int:\n return new FormGroup<ValueForm>({\n intValue: new FormControl({ value: value.intValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n case SettingType.Double:\n return new FormGroup<ValueForm>({\n doubleValue: new FormControl({ value: value.doubleValue, disabled: readOnly },\n { nonNullable: true, validators: this.getValidatorsForSettingType(settingType, featureFlagLimitations) })\n });\n\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n public getComparisonValueType(comparator: UserComparator): UserComparatorType {\n switch (comparator) {\n\n case UserComparator.SensitiveTextEquals:\n case UserComparator.SensitiveTextDoesNotEqual:\n case UserComparator.TextEquals:\n case UserComparator.TextDoesNotEqual:\n return UserComparatorType.String;\n\n case UserComparator.SensitiveIsOneOf:\n case UserComparator.SensitiveIsNotOneOf:\n case UserComparator.SensitiveTextStartsWithAnyOf:\n case UserComparator.SensitiveTextEndsWithAnyOf:\n case UserComparator.SensitiveTextNotStartsWithAnyOf:\n case UserComparator.SensitiveTextNotEndsWithAnyOf:\n case UserComparator.SensitiveArrayContainsAnyOf:\n case UserComparator.SensitiveArrayDoesNotContainAnyOf:\n case UserComparator.IsOneOf:\n case UserComparator.IsNotOneOf:\n case UserComparator.TextStartsWithAnyOf:\n case UserComparator.TextEndsWithAnyOf:\n case UserComparator.TextNotStartsWithAnyOf:\n case UserComparator.TextNotEndsWithAnyOf:\n case UserComparator.ArrayContainsAnyOf:\n case UserComparator.ArrayDoesNotContainAnyOf:\n case UserComparator.ContainsAnyOf:\n case UserComparator.DoesNotContainAnyOf:\n return UserComparatorType.StringList;\n\n case UserComparator.NumberEquals:\n case UserComparator.NumberDoesNotEqual:\n case UserComparator.NumberLess:\n case UserComparator.NumberLessOrEquals:\n case UserComparator.NumberGreater:\n case UserComparator.NumberGreaterOrEquals:\n return UserComparatorType.Number;\n\n case UserComparator.SemVerIsOneOf:\n case UserComparator.SemVerIsNotOneOf:\n return UserComparatorType.SemverList;\n\n case UserComparator.SemVerGreater:\n case UserComparator.SemVerGreaterOrEquals:\n case UserComparator.SemVerLess:\n case UserComparator.SemVerLessOrEquals:\n return UserComparatorType.Semver;\n\n case UserComparator.DateTimeBefore:\n case UserComparator.DateTimeAfter:\n return UserComparatorType.DateTime;\n\n default:\n throw new Error('Invalid comparator');\n }\n }\n\n\n getValidatorsForSettingType(settingType: SettingType, featureFlagLimitations: IFeatureFlagLimitations): ValidatorFn[] {\n switch (settingType) {\n case SettingType.Int:\n return [this.validateNumberNan, Validators.required,\n Validators.min(-2147483648), Validators.max(2147483647), Validators.pattern(wholeNumberRegex)];\n case SettingType.Double:\n // eslint-disable-next-line @typescript-eslint/no-loss-of-precision\n return [this.validateNumberNan, Validators.required, Validators.min(-1.79769313486232E+308), Validators.max(1.79769313486232E+308)];\n case SettingType.String:\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxStringFlagValueLength ?? 100000)];\n case SettingType.Boolean:\n return [Validators.required];\n default:\n return [];\n }\n }\n\n validateNumberNan(c: FormControl<number>) {\n if (c.value === null || isNaN(c.value)) {\n return {\n validateNumberNan: {\n valid: false\n }\n };\n }\n return null;\n }\n\n validateSemVer(c: FormControl<string>) {\n if (valid(c.value) === null) {\n return {\n validateSemVer: {\n valid: false\n }\n };\n }\n return null;\n }\n\n validateEmptyString(c: FormControl<string>) {\n if (c.value === '') {\n return {\n required: true\n };\n }\n return null;\n }\n\n validatePercentageSum(c: FormArray<FormGroup<PercentageOptionForm>>) {\n if (c?.controls.map(i => i.controls.percentage.value).reduce((a, b) => { return a + b }, 0) !== 100) {\n return {\n validatePercentageSum: {\n valid: false\n }\n };\n }\n return null;\n }\n\n isPercentageOnlyTargetingRule(formGroup: FormGroup<TargetingRuleForm>): boolean {\n return !formGroup.controls.value\n && !formGroup.controls.conditions.length\n && !!formGroup.controls.percentageOptions?.length;\n }\n\n addComparisonValueListValueItems(\n userComparator: UserComparator,\n listValueFormArray: FormArray<FormGroup<ComparisonValueListForm>>,\n comparisonValueList: IComparisonValueListModel[],\n featureFlagLimitations: IFeatureFlagLimitations) {\n const validators =\n this.getComparisonValueType(userComparator) === UserComparatorType.SemverList\n ? this.getComparisonValueSemverListItemValidators(featureFlagLimitations)\n : this.getComparisonValueStringListItemValidators(featureFlagLimitations);\n\n const maxIndex = this.getNextIndex(listValueFormArray);\n\n comparisonValueList.forEach(\n (comparisonValueListItem, index) => {\n const formGroup = this.generateComparisonValueListFormGroup(comparisonValueListItem, false, validators, maxIndex + index);\n formGroup.updateValueAndValidity();\n formGroup.markAsDirty();\n formGroup.markAllAsTouched();\n listValueFormArray.push(formGroup, { emitEvent: false });\n });\n\n listValueFormArray.updateValueAndValidity();\n listValueFormArray.markAsTouched();\n listValueFormArray.markAsDirty();\n }\n}\n","export class DateHelper {\n public static addDays(date: Date, value: number): void {\n // https://stackoverflow.com/a/3674550/8656352\n date.setDate(date.getDate() + value);\n }\n\n public static daysBetweenDates = function(from: Date, to: Date): number {\n if (!from || !to) {\n return 0;\n }\n return (new Date(to).getTime() - new Date(from).getTime()) / (1000 * 60 * 60 * 24);\n }\n\n public static formatDate(date: Date, formatString: string): string {\n if (!date) {\n return '';\n }\n const dateObj = new Date(date);\n \n return Object.entries({\n YYYY: dateObj.getFullYear(),\n YY: dateObj.getFullYear().toString().substring(2),\n yyyy: dateObj.getFullYear(),\n yy: dateObj.getFullYear().toString().substring(2),\n MMMM: dateObj.toLocaleString('default', { month: 'long' }),\n MMM: dateObj.toLocaleString('default', { month: 'short' }),\n MM: (dateObj.getMonth() + 1).toString().padStart(2, '0'),\n M: dateObj.getMonth() + 1,\n DDDD: dateObj.toLocaleDateString('default', { weekday: 'long' }),\n DDD: dateObj.toLocaleDateString('default', { weekday: 'short' }),\n DD: dateObj.getDate().toString().padStart(2, '0'),\n D: dateObj.getDate(),\n dddd: dateObj.toLocaleDateString('default', { weekday: 'long' }),\n ddd: dateObj.toLocaleDateString('default', { weekday: 'short' }),\n dd: dateObj.getDate().toString().padStart(2, '0'),\n d: dateObj.getDate(),\n HH: dateObj.getHours().toString().padStart(2, '0'), // military\n H: dateObj.getHours().toString(), // military\n hh: (dateObj.getHours() % 12).toString().padStart(2, '0'),\n h: (dateObj.getHours() % 12).toString(),\n mm: dateObj.getMinutes().toString().padStart(2, '0'),\n m: dateObj.getMinutes(),\n SS: dateObj.getSeconds().toString().padStart(2, '0'),\n S: dateObj.getSeconds(),\n ss: dateObj.getSeconds().toString().padStart(2, '0'),\n s: dateObj.getSeconds(),\n TTT: dateObj.getMilliseconds().toString().padStart(3, '0'),\n ttt: dateObj.getMilliseconds().toString().padStart(3, '0'),\n AMPM: dateObj.getHours() < 13 ? 'AM' : 'PM',\n ampm: dateObj.getHours() < 13 ? 'am' : 'pm',\n }).reduce((acc, entry) => {\n return acc.replace(entry[0], entry[1].toString())\n }, formatString)\n }\n\n public static offsetDate(date: Date, offsetMins: number) : Date {\n return new Date(date.getTime() + offsetMins * 60000);\n }\n}","import { Injectable } from \"@angular/core\";\nimport { NativeDateAdapter } from \"@angular/material/core\";\nimport { DateHelper } from \"./date-helper\";\n\n@Injectable()\nexport class AppDateAdapter extends NativeDateAdapter {\n format(date: Date): string {\n if (!date) {\n return '';\n }\n return DateHelper.formatDate(date, 'yyyy. MM. dd');\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-confirmation-dialog',\n templateUrl: './confirmation-dialog.html'\n})\nexport class ConfirmationDialogComponent {\n\n constructor(\n public dialogRef: MatDialogRef<ConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n yes() {\n this.dialogRef.close('yes');\n }\n\n cancel() {\n this.dialogRef.close('cancel');\n }\n}\n\nexport interface DialogData {\n title: string;\n body: string;\n yesButtonLabel: string;\n noButtonLabel: string;\n buttonColor: string;\n hideNoButton?: boolean;\n}","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<br>\n<div mat-dialog-actions>\n <button type=\"button\" style=\"margin-right: 10px;\" mat-flat-button\n [color]=\"data.buttonColor ? data.buttonColor : 'primary'\" (click)=\"yes()\"\n data-robot=\"dialogYes\">{{data.yesButtonLabel ? data.yesButtonLabel : 'Yes'}}</button>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\" data-robot=\"dialogNo\"\n *ngIf=\"!data.hideNoButton\">{{data.noButtonLabel ?\n data.noButtonLabel : 'Cancel'}}</button>\n</div>","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-reroute-dialog',\n templateUrl: './reroute-dialog.html',\n styleUrls: ['./reroute-dialog.scss']\n})\nexport class RerouteDialogComponent {\n\n constructor(\n public dialogRef: MatDialogRef<RerouteDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n yes() {\n this.dialogRef.close('yes');\n }\n\n cancel() {\n this.dialogRef.close('cancel');\n }\n}\n\nexport interface DialogData {\n title: string;\n body: string;\n yesButtonLabel: string;\n yesButtonLink: string;\n noButtonLabel: string;\n buttonColor: string;\n hideNoButton?: boolean;\n}","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<br>\n<div mat-dialog-actions>\n <a href=\"{{data.yesButtonLink}}\" class=\"hidden-link\" target=\"_blank\" rel=\"noopener noreferrer\">\n <button type=\"button\" style=\"margin-right: 10px;\" mat-flat-button\n [color]=\"data.buttonColor ? data.buttonColor : 'primary'\" (click)=\"yes()\"\n data-robot=\"dialogYes\">{{data.yesButtonLabel ? data.yesButtonLabel : 'Yes'}}</button>\n </a>\n <button type=\"button\" mat-stroked-button (click)=\"cancel()\" data-robot=\"dialogNo\"\n *ngIf=\"!data.hideNoButton\">{{data.noButtonLabel ?\n data.noButtonLabel : 'Cancel'}}</button>\n</div>","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nexport interface InfoDialogData {\n title: string;\n body: string;\n secondaryButtonLabel: string;\n secondaryButtonAction: () => void;\n}\n\n@Component({\n selector: 'app-info-dialog',\n templateUrl: './info-dialog.html'\n})\nexport class InfoDialogComponent {\n\n constructor(\n public dialogRef: MatDialogRef<InfoDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: InfoDialogData\n ) {}\n\n ok() {\n this.dialogRef.close();\n }\n\n secondaryButtonAction() {\n this.data.secondaryButtonAction();\n this.dialogRef.close();\n }\n}\n","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div [innerHTML]=\"data.body\"></div>\n</div>\n<br>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"ok()\">Ok</button>\n <button type=\"button\" mat-stroked-button *ngIf=\"data.secondaryButtonLabel\" (click)=\"secondaryButtonAction()\">{{data.secondaryButtonLabel}}</button>\n</div>","import { Injectable } from \"@angular/core\";\nimport { IComparisonValueListModel } from \"../bootstrap\";\nimport Papa from 'papaparse';\n\nexport interface ComparisonValueListParseResult {\n error?: string;\n comparisonValueList: IComparisonValueListModel[];\n}\n\n@Injectable()\nexport class ComparisonValueListHelper {\n formatValuesAndHintAsJson(comparisonValueList: IComparisonValueListModel[]): string {\n return JSON.stringify(comparisonValueList, null, 2);\n }\n\n formatValuesAndHintAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueListItem => {\n return [\n this.formatCsvStringValue(comparisonValueListItem.value ?? ''),\n this.formatCsvStringValue(comparisonValueListItem.hint ?? '')\n ].join(',');\n });\n return data.join('\\r\\n');\n }\n\n formatValuesAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueList => this.formatCsvStringValue(comparisonValueList.value ?? ''));\n return data.join(',');\n }\n\n formatCsvStringValue(value: string): string {\n if (!value) {\n return \"\";\n }\n const escaped = value.replaceAll(\"\\\"\", \"\\\"\\\"\",);\n return \"\\\"\" + escaped + \"\\\"\";\n }\n\n parseValuesAndHintsFromJson(value: string): ComparisonValueListParseResult {\n if (value === '') {\n return { comparisonValueList: [] };\n }\n try {\n const parsed: IComparisonValueListModel[] = JSON.parse(value);\n return { comparisonValueList: parsed.filter(v => !!v.value) };\n } catch {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n }\n\n parseValuesAndHintsFromCsv(value: string): ComparisonValueListParseResult {\n if (value === '') {\n return { comparisonValueList: [] };\n }\n const parseResult = Papa.parse<string[]>(value, { delimiter: ',', skipEmptyLines: true });\n if (parseResult.errors?.length) {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n if (parseResult?.data?.length === 0) { return { comparisonValueList: [] }; }\n return { comparisonValueList: parseResult.data.map(p => <IComparisonValueListModel>{ value: p[0], hint: p[1] }).filter(v => !!v.value) };\n }\n\n parseValuesFromCsv(value: string): ComparisonValueListParseResult {\n if (value === '') {\n return { comparisonValueList: [] };\n }\n const parseResult = Papa.parse<string[]>(value + \",\", { delimiter: ',', skipEmptyLines: true });\n if (parseResult.errors?.length) {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n if (!parseResult?.data?.length) { return { comparisonValueList: [] }; }\n return { comparisonValueList: parseResult.data.flat().map(p => <IComparisonValueListModel>{ value: p }).filter(v => !!v.value) };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Injectable()\nexport class MessagingService {\n\n constructor(private snackBar: MatSnackBar) { }\n\n showErrorSnack(message = 'Something went wrong.', action = 'Dismiss', durationMs = 60000) {\n this.snackBar.open(\n `Ooops. ${message} Please try again or contact us.`,\n action,\n { duration: durationMs, panelClass: 'red-snackbar' }\n );\n }\n\n showSuccessSnack(message = 'Success.', action = null, durationMs = 2500) {\n this.snackBar.open(\n message, action, { duration: durationMs, panelClass: 'green-snackbar' }\n );\n }\n\n showWarningSnack(message = 'Success.', action = 'Dismiss', durationMs = 5000) {\n this.snackBar.open(\n message, action, { duration: durationMs, panelClass: 'yellow-snackbar' }\n );\n }\n\n dismissCurrentSnack() {\n this.snackBar.dismiss();\n }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Input, OnDestroy, OnInit, Output, ViewChild } from \"@angular/core\";\nimport { Ace, config, edit } from \"ace-builds/src-noconflict/ace\";\nimport \"ace-builds/src-noconflict/mode-json\";\nimport \"ace-builds/src-noconflict/theme-tomorrow\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n@Component({\n selector: 'app-ace-editor',\n templateUrl: './ace-editor.component.html',\n styleUrls: ['./ace-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AceEditorComponent),\n multi: true\n }\n ],\n preserveWhitespaces: false,\n})\nexport class AceEditorComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy {\n\n private aceEditor: Ace.Editor;\n private onChangeDisabled = false;\n private onChangeModel: any;\n private _value: any;\n\n @ViewChild(\"aceEditor\", { static: true }) private editor: ElementRef<HTMLElement>;\n @Input()\n set value(value: string) {\n const checked = this.transformBoundValue(value);\n if (this._value == checked) return;\n this._value = checked ? checked : this.produceDefaultValue();\n if (this.aceEditor) {\n this.writeJsonValue(this._value);\n }\n }\n\n @Input() readOnly: boolean;\n\n @Output() valueChange = new EventEmitter();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onChange = new EventEmitter<string>();\n\n ngOnInit(): void {\n config.setModuleUrl(\"ace/mode/json_worker\", \"assets/scripts/worker-json.js\");\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.init();\n }, 200);\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n private init() {\n this.aceEditor = edit(this.editor.nativeElement, {\n wrap: true,\n tabSize: 2,\n highlightActiveLine: true,\n theme: \"ace/theme/tomorrow\",\n fontSize: 14,\n value: this.formatValue(this._value),\n });\n this.aceEditor.setReadOnly(this.readOnly);\n this.aceEditor.session.setMode(\"ace/mode/json\");\n\n this.aceEditor.on(\"change\", () => {\n if (!this.onChangeDisabled) {\n this._value = this.produceOutput(this.aceEditor.getValue());\n if (this.onChangeModel) {\n this.onChangeModel(this._value);\n }\n this.onChange.emit(this._value);\n this.valueChange.emit(this._value);\n }\n });\n }\n\n private writeJsonValue(value: any) {\n this.onChangeDisabled = true;\n this.aceEditor.setValue(this.formatValue(value), -1);\n this.onChangeDisabled = false;\n }\n\n private formatValue(value: any): string {\n const parsed = this.parseJsonOrNull(value);\n return parsed ? JSON.stringify(parsed, null, 2) : value;\n }\n\n private produceDefaultValue() {\n return \"{}\";\n }\n\n private produceOutput(value: any) {\n const parsed = this.parseJsonOrNull(value);\n return parsed ? JSON.stringify(parsed) : value;\n }\n\n private destroy() {\n if (this.aceEditor) {\n this.aceEditor.destroy();\n }\n }\n\n private parseJsonOrNull(value: string) {\n try {\n const parsed = JSON.parse(value);\n if (parsed === Infinity) {\n return null;\n }\n return parsed;\n } catch (e) {\n return null;\n }\n }\n\n private transformBoundValue(value: any): string {\n if (typeof value === 'object' && value !== null) {\n return JSON.stringify(value);\n }\n return value;\n }\n\n // ControlValueAccessor\n writeValue(value: any) {\n this.value = value;\n }\n\n // ControlValueAccessor\n registerOnChange(fn: any) {\n this.onChangeModel = fn;\n }\n\n // ControlValueAccessor\n registerOnTouched() {\n /* unused */\n }\n}","<div class=\"ace-editor-container\" #aceEditor></div>","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, ValidatorFn } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\nimport { FormHelper } from '../../../../bootstrap';\n\nexport interface PopoutTextEditorDialogData {\n value: string;\n readOnly: boolean;\n validators: ValidatorFn[];\n maxValueLength: number;\n description: string;\n}\n\n@Component({\n selector: 'app-popout-text-editor-dialog',\n templateUrl: './popout-text-editor-dialog.component.html',\n styleUrls: ['./popout-text-editor-dialog.component.scss']\n})\nexport class PopoutTextEditorDialogComponent implements OnInit, OnDestroy {\n\n formControlSubscription: Subscription;\n jsonData: string;\n format = \"text\";\n formHelper = FormHelper;\n control: FormControl<string>;\n\n constructor(public dialogRef: MatDialogRef<PopoutTextEditorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: PopoutTextEditorDialogData) {\n }\n\n ngOnInit(): void {\n this.jsonData = this.data.value;\n this.control = new FormControl<string>(\n { value: this.data.value, disabled: this.data.readOnly },\n { nonNullable: true, validators: [...this.data.validators] });\n\n if (!this.control.valid) {\n this.control.markAsTouched();\n }\n\n this.formControlSubscription = this.control.valueChanges.subscribe(value => {\n this.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.control.markAsDirty();\n this.control.markAsTouched();\n if (this.jsonData !== value) {\n this.jsonData = value;\n }\n });\n }\n\n onJsonChanged(value: string) {\n this.control.setValue(value, { onlySelf: true, emitEvent: false, emitModelToViewChange: true });\n this.control.updateValueAndValidity();\n this.control.markAsTouched();\n this.control.markAsDirty();\n }\n\n ngOnDestroy() {\n if (this.control.dirty) {\n this.control.updateValueAndValidity();\n }\n if (this.formControlSubscription) {\n this.formControlSubscription.unsubscribe();\n this.formControlSubscription = null;\n }\n }\n\n set() {\n if (!this.control.valid) {\n this.control.markAllAsTouched();\n return;\n }\n\n this.dialogRef.close({ value: this.control.value });\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","<h2 mat-dialog-title>Advanced editor</h2>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n {{data.description}}\n </p>\n <mat-button-toggle-group [(ngModel)]=\"format\">\n <mat-button-toggle value=\"text\">Text</mat-button-toggle>\n <mat-button-toggle value=\"json\">JSON</mat-button-toggle>\n </mat-button-toggle-group>\n\n <mat-form-field *ngIf=\"format === 'text'\" appearance=\"outline\" class=\"editor-container editor-clear\"\n subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus [formControl]=\"control\" rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"26\"></textarea>\n <mat-error *ngIf=\"control.invalid\">\n {{formHelper.getErrorMessage(control)}}\n </mat-error>\n <mat-hint *ngIf=\"data.maxValueLength && (data.maxValueLength - control.value?.length > -1)\">\n Remaining characters:\n {{data.maxValueLength - control.value?.length}}</mat-hint>\n </mat-form-field>\n\n <div class=\"editor-container\" *ngIf=\"format === 'json'\">\n <app-ace-editor [(value)]=\"jsonData\" (onChange)=\"onJsonChanged($event)\"\n [readOnly]=\"data.readOnly\"></app-ace-editor>\n <span *ngIf=\"control.invalid\" class=\"error mat-mdc-form-field-error\">\n {{formHelper.getErrorMessage(control)}}</span>\n </div>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\"\n [disabled]=\"!control.touched || !control.valid\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" (click)=\"close()\">Close</button>\n</div>","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n FormHelper, ValueForm, SettingType,\n IFeatureFlagLimitations, FormGenerator, IFlagState\n} from '../../../../bootstrap';\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData } from '../popout-text-editor-dialog/popout-text-editor-dialog.component';\n\n@Component({\n selector: 'app-feature-flag-value',\n templateUrl: './feature-flag-value.component.html',\n styleUrls: [\n '../components.scss',\n '../../slider.scss',\n './feature-flag-value.component.scss'\n ]\n})\nexport class FeatureFlagValueComponent {\n @Input() formGroup: FormGroup<ValueForm>;\n @Input() flagState: IFlagState;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() isPrerequisite = false;\n @Input() tooltip: string;\n\n FormHelper = FormHelper;\n\n constructor(private dialog: MatDialog,\n private formGenerator: FormGenerator) {\n }\n\n expandText() {\n const dialogRef = this.dialog.open(PopoutTextEditorDialogComponent, {\n width: '800px',\n data: <PopoutTextEditorDialogData>{\n value: this.formGroup.controls.stringValue.value,\n readOnly: this.formGroup.controls.stringValue.disabled,\n validators: this.formGenerator.getValidatorsForSettingType(SettingType.String, this.featureFlagLimitations),\n maxValueLength: this.featureFlagLimitations.maxStringFlagValueLength ?? 100000,\n description: this.isPrerequisite\n ? 'Modify the text within the editor to change the prerequisite feature flag comparison value. The editor supports JSON syntax highlighting.'\n : 'Modify the text within the editor to change the feature flag value. The editor supports JSON syntax highlighting.'\n }\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data) {\n this.formGroup.controls.stringValue.setValue(data.value);\n this.formGroup.controls.stringValue.updateValueAndValidity();\n this.formGroup.controls.stringValue.markAsTouched();\n this.formGroup.controls.stringValue.markAsDirty();\n }\n });\n }\n}\n","<div class=\"targeting-rule-component smallest-form-field grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" *ngIf=\"formGroup.controls.stringValue\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.stringValue\" [matTooltip]=\"tooltip\"\n placeholder=\"Add text ...\" />\n <button matSuffix class=\"expand-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandText()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" *ngIf=\"formGroup.controls.intValue\">\n <input matInput type=\"number\" [formControl]=\"formGroup.controls.intValue\"\n digitOnly digitOnlyAllowNegatives=\"true\"\n inputDisplayNormalizer [matTooltip]=\"tooltip\" placeholder=\"Add number ...\" />\n <mat-error *ngIf=\"formGroup.controls.intValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.intValue)}}\n </mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" *ngIf=\"formGroup.controls.doubleValue\">\n <input matInput type=\"number\" [formControl]=\"formGroup.controls.doubleValue\" inputDisplayNormalizer\n [matTooltip]=\"tooltip\" placeholder=\"Add number ...\" />\n <mat-error *ngIf=\"formGroup.controls.doubleValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.doubleValue)}}\n </mat-error>\n </mat-form-field>\n <div *ngIf=\"formGroup.controls.boolValue\" class=\"bool\" [class.readonly]=\"flagState.readOnly\">\n <label class=\"switch\" [matTooltip]=\"tooltip\">\n <input type=\"checkbox\" [formControl]=\"formGroup.controls.boolValue\" />\n <span class=\"slider round\"></span>\n </label>\n </div>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport {\n FormHelper, IFlagState, IFeatureFlagLimitations,\n PercentageOptionForm, FormGenerator, SettingType\n} from '../../../../../bootstrap';\n\n@Component({\n selector: 'app-percentage-options',\n templateUrl: './percentage-options.component.html',\n styleUrls: [\n '../../components.scss',\n './percentage-options.component.scss',\n '../../chips.scss',\n '../../add-btn.scss'\n ]\n})\nexport class PercentageOptionsComponent {\n @Input() formArray: FormArray<FormGroup<PercentageOptionForm>>;\n @Input() flagState: IFlagState;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() showPercentageEvaluationAttribute: boolean;\n @Input() percentageEvaluationAttribute: string;\n @Input() isPercentageOnlyTargetingRule: boolean;\n\n @Output() lastPercentageOptionLeft = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() changePercentageEvaluationAttributeRequested = new EventEmitter();\n\n SettingType = SettingType;\n FormHelper = FormHelper;\n\n constructor(private formGenerator: FormGenerator) { }\n\n addOption() {\n if (this.formArray.length >= this.featureFlagLimitations.maxPercentageOptionCount) {\n this.subscriptionLimitReached.emit();\n return;\n }\n this.formArray.push(this.formGenerator.generatePercentageOptionFormGroup({\n percentage: 0,\n value: this.formGenerator.generateDefaultValue(this.flagState.settingValue.setting.settingType)\n }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations))\n this.formArray.markAsDirty();\n }\n\n remove(index: number): void {\n this.formArray.removeAt(index);\n this.formArray.markAsDirty();\n if (this.formArray.length < 2) {\n this.lastPercentageOptionLeft.emit();\n }\n }\n\n percentageChanged(index: number) {\n if (this.formArray.controls[index].value.percentage < 0) {\n this.formArray.controls[index].controls.percentage.setValue(0);\n }\n if (this.formArray.controls[index].value.percentage > 100) {\n this.formArray.controls[index].controls.percentage.setValue(100);\n }\n\n if (this.formArray.controls.length === 2) {\n this.formArray.controls[1 - index].controls.percentage\n .setValue(100 - this.formArray.controls[index].value.percentage);\n }\n }\n\n changePercentageEvaluationAttribute() {\n this.changePercentageEvaluationAttributeRequested.emit();\n }\n\n getPercentageEvaluationAttribute() {\n return !this.percentageEvaluationAttribute ? 'Identifier' : this.percentageEvaluationAttribute;\n }\n}\n","<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>","import { Component, Inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UserComparator } from '../../../../../../../bootstrap';\n\nenum ComparatorGroup {\n Text = 0,\n Number = 1,\n Semver = 2,\n DateTime = 3,\n Array = 4\n}\n\ninterface ComparatorItem {\n value: UserComparator,\n sensitiveValue?: UserComparator,\n label: string,\n description: string,\n group: ComparatorGroup,\n}\n\n@Component({\n selector: 'app-comparator-dialog',\n templateUrl: './comparator-dialog.component.html',\n styleUrls: ['./comparator-dialog.component.scss'],\n})\nexport class ComparatorDialogComponent implements OnInit {\n\n ComparatorGroup = ComparatorGroup;\n selectedGroup = ComparatorGroup.Text;\n selectedComparator = UserComparator.TextEquals;\n isConfidential = true;\n lastConfidentialValue = true;\n confidentialEnabled = true;\n UserComparator = UserComparator;\n\n comparisonAttributeTooltip = \"User Object's value passed to the SDK (Comparison attribute)\";\n comparisonValueTooltip = \"Comparison value set on the ConfigCat Dashboard\";\n\n comparators: ComparatorItem[] = [\n { value: UserComparator.TextEquals, sensitiveValue: UserComparator.SensitiveTextEquals, group: ComparatorGroup.Text, label: 'EQUALS', description: \"Checks whether the User Object's comparison attribute passed to the SDK is equal to the comparison value set on the ConfigCat Dashboard\" },\n { value: UserComparator.TextDoesNotEqual, sensitiveValue: UserComparator.SensitiveTextDoesNotEqual, group: ComparatorGroup.Text, label: 'NOT EQUALS', description: \"Checks whether the User Object's comparison attribute passed to the SDK is not equal to the comparison value\" },\n { value: UserComparator.IsOneOf, sensitiveValue: UserComparator.SensitiveIsOneOf, group: ComparatorGroup.Text, label: 'IS ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK is equal to any of the comparison values\" },\n { value: UserComparator.IsNotOneOf, sensitiveValue: UserComparator.SensitiveIsNotOneOf, group: ComparatorGroup.Text, label: 'IS NOT ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK is not equal to any of the comparison values\" },\n { value: UserComparator.TextStartsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextStartsWithAnyOf, group: ComparatorGroup.Text, label: 'STARTS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK starts with any of the comparison values\" },\n { value: UserComparator.TextNotStartsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextNotStartsWithAnyOf, group: ComparatorGroup.Text, label: 'NOT STARTS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK does not start with any of the comparison values\" },\n { value: UserComparator.TextEndsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextEndsWithAnyOf, group: ComparatorGroup.Text, label: 'ENDS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK ends with any of the comparison values\" },\n { value: UserComparator.TextNotEndsWithAnyOf, sensitiveValue: UserComparator.SensitiveTextNotEndsWithAnyOf, group: ComparatorGroup.Text, label: 'NOT ENDS WITH ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK does not end with any of the comparison values\" },\n { value: UserComparator.ContainsAnyOf, group: ComparatorGroup.Text, label: 'CONTAINS ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK contains any comparison values as a substring\" },\n { value: UserComparator.DoesNotContainAnyOf, group: ComparatorGroup.Text, label: 'DOES NOT CONTAIN ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK does not contain any comparison values as a substring\" },\n\n { value: UserComparator.NumberEquals, group: ComparatorGroup.Number, label: '= (EQUALS)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is equal to the comparison value\" },\n { value: UserComparator.NumberDoesNotEqual, group: ComparatorGroup.Number, label: '!= (NOT EQUALS)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is not equal to the comparison value\" },\n { value: UserComparator.NumberLess, group: ComparatorGroup.Number, label: '< (LESS THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is less than the comparison value\" },\n { value: UserComparator.NumberLessOrEquals, group: ComparatorGroup.Number, label: '<= (LESS THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is less than or equal to the comparison value\" },\n { value: UserComparator.NumberGreater, group: ComparatorGroup.Number, label: '> (GREATER THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is greater than the comparison value\" },\n { value: UserComparator.NumberGreaterOrEquals, group: ComparatorGroup.Number, label: '>= (GRATER THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a decimal number) is greater than or equal to the comparison value\" },\n\n { value: UserComparator.SemVerIsOneOf, group: ComparatorGroup.Semver, label: 'IS ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is equal to any of the comparison values\" },\n { value: UserComparator.SemVerIsNotOneOf, group: ComparatorGroup.Semver, label: 'IS NOT ONE OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is not equal to any of the comparison values\" },\n { value: UserComparator.SemVerLess, group: ComparatorGroup.Semver, label: '< (LESS THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is less than the comparison value\" },\n { value: UserComparator.SemVerLessOrEquals, group: ComparatorGroup.Semver, label: '<= (LESS THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is less than or equal to the comparison value\" },\n { value: UserComparator.SemVerGreater, group: ComparatorGroup.Semver, label: '> (GREATER THAN)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is greater than the comparison value\" },\n { value: UserComparator.SemVerGreaterOrEquals, group: ComparatorGroup.Semver, label: '>= (GRATER THAN OR EQUAL)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a semantic version) is greater than or equal to the comparison value\" },\n\n { value: UserComparator.DateTimeBefore, group: ComparatorGroup.DateTime, label: 'BEFORE (UTC)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as the seconds elapsed since Unix Epoch) is less than the comparison value\" },\n { value: UserComparator.DateTimeAfter, group: ComparatorGroup.DateTime, label: 'AFTER (UTC)', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as the seconds elapsed since Unix Epoch) is greater than the comparison value.value\" },\n\n { value: UserComparator.ArrayContainsAnyOf, group: ComparatorGroup.Array, sensitiveValue: UserComparator.SensitiveArrayContainsAnyOf, label: 'ARRAY CONTAINS ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a string list) contains any of the comparison values\" },\n { value: UserComparator.ArrayDoesNotContainAnyOf, group: ComparatorGroup.Array, sensitiveValue: UserComparator.SensitiveArrayDoesNotContainAnyOf, label: 'ARRAY NOT CONTAINS ANY OF', description: \"Checks whether the User Object's comparison attribute passed to the SDK (interpreted as a string list) does not contain any of the comparison values\" },\n ]\n\n constructor(\n public dialogRef: MatDialogRef<ComparatorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit(): void {\n const selected = this.comparators.find(c => c.value === this.data.selectedComparator || c.sensitiveValue === this.data.selectedComparator);\n this.selectedGroup = selected.group;\n this.selectedComparator = selected.value;\n this.isConfidential = this.data.selectedComparator === selected.sensitiveValue;\n this.lastConfidentialValue = !selected.sensitiveValue ? true : this.isConfidential;\n this.confidentialEnabled = !!selected.sensitiveValue;\n }\n\n listComparators(group: ComparatorGroup): ComparatorItem[] {\n return this.comparators.filter(c => c.group === group);\n }\n\n changeGroup(group: ComparatorGroup): void {\n this.selectedGroup = group;\n }\n\n confidentialChange(confidential: boolean): void {\n if (!this.confidentialEnabled || this.data.readOnly) {\n return;\n }\n this.isConfidential = this.lastConfidentialValue = confidential;\n }\n\n comparatorChange(comp: UserComparator): void {\n if (this.data.readOnly) {\n return;\n }\n\n this.selectedComparator = comp;\n const selected = this.comparators.find(c => c.value === comp || c.sensitiveValue === comp);\n this.confidentialEnabled = !!selected.sensitiveValue;\n if (!this.confidentialEnabled) {\n this.isConfidential = false;\n } else {\n this.isConfidential = this.lastConfidentialValue;\n }\n }\n\n set(): void {\n const selected = this.comparators.find(c => c.value === this.selectedComparator || c.sensitiveValue === this.selectedComparator);\n const result = this.isConfidential && selected.sensitiveValue ? selected.sensitiveValue : selected.value;\n this.dialogRef.close(result);\n }\n}\n","<h2 mat-dialog-title cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle class=\"draggable\">Comparator selector</h2>\n<div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"selectedGroup\" (ngModelChange)=\"changeGroup($event)\">\n <mat-button-toggle [value]=\"ComparatorGroup.Text\">Text</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Number\">Number</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Semver\">Semantic version</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.DateTime\">Datetime</mat-button-toggle>\n <mat-button-toggle [value]=\"ComparatorGroup.Array\">Array</mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div mat-dialog-content class=\"container\" [ngSwitch]=\"selectedGroup\">\n <div *ngSwitchCase=\"ComparatorGroup.Text\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain string/text.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Text}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Number\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain numbers.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Number}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Semver\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain semantic versions.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Semver}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.DateTime\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain datetimes.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.DateTime}\"></ng-container>\n </div>\n\n <div *ngSwitchCase=\"ComparatorGroup.Array\">\n <p>The following comparators assume that the <i>comparison attribute's</i> value (set on the SDK's <a href=\"https://configcat.com/docs/targeting/user-object\" target=\"_blank\" rel=\"noopener noreferrer\">User Object</a>) and the <i>comparison value</i> contain items of a string/text list.</p>\n <ng-container [ngTemplateOutlet]=\"comparators\" [ngTemplateOutletContext]=\"{group:ComparatorGroup.Array}\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"confidential\"></ng-container>\n </div>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button mat-dialog-close>Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" mat-dialog-close>Close</button>\n</div>\n\n<ng-template #comparators let-group=\"group\">\n <div>\n <mat-radio-group (change)=\"comparatorChange($event.value)\">\n <div class=\"comparator-container\">\n <div class=\"item\" [ngClass]=\"'col-' + i % 2\" [class.selected]=\"comparator.value === selectedComparator\" \n *ngFor=\"let comparator of listComparators(group); let i = index\" (click)=\"comparatorChange(comparator.value)\"> \n <mat-radio-button color=\"primary\" [value]=\"comparator.value\" [disabled]=\"data.readOnly\"\n [checked]=\"comparator.value === selectedComparator\" [matTooltip]=\"comparator.description\">\n <div class=\"title\">\n {{comparator.label}}\n </div>\n </mat-radio-button>\n <div class=\"description\">\n <div class=\"example\">\n <ng-container [ngSwitch]=\"comparator.value\">\n\n <!-- TEXT -->\n <ng-container *ngSwitchCase=\"UserComparator.TextEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> EQUALS <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT EQUALS <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, <span class=\"match-val\">iOS</span> ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.IsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">iOS</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Android, macOS, Windows ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">bob</span>, jane ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotStartsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span> NOT STARTS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ bob, jane ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;foo.com</span> ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">&#64;foo.com</span>, &#64;bar.com ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.TextNotEndsWithAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;example.com</span> NOT ENDS WITH ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ &#64;foo.com, &#64;bar.com ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://test-app.foo.com</span> CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">test</span>, localhost ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">https://app.foo.com</span> NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ test, localhost ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n <!-- NUMBER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.NumberEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> = <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberDoesNotEqual\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">42</span> != <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">3.14</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">3.14</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.NumberGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">69</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">42</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n\n <!-- SEMVER -->\n\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> IS ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">1.0.0</span>, 4.3.5 ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerIsNotOneOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2.1.0</span> IS NOT ONE OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ 1.0.0, 4.3.5 ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLess\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerLessOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &lt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.2.0</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreater\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.0.0</span> &gt; <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.0.0-alpha</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.SemVerGreaterOrEquals\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">1.2.0</span> &gt;= <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">1.1.0</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n <!-- DATETIME -->\n\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeBefore\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 10:36:24</span> BEFORE <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.DateTimeAfter\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">2020.11.05 15:41:06</span> AFTER <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">2020.11.05 12:00:00</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n <!-- ARRAY -->\n\n <ng-container *ngSwitchCase=\"UserComparator.ArrayContainsAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Writer, Reader ]</span> ARRAY CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ <span class=\"match-val\">Writer</span>, Admin ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n <ng-container *ngSwitchCase=\"UserComparator.ArrayDoesNotContainAnyOf\">\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">[ Guest, Reader ]</span> ARRAY NOT CONTAINS ANY OF <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ Writer, Admin ]</span> <span class=\"arrow\">➔</span> true\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>\n\n<ng-template #confidential>\n <p>Select how the <i>comparison values</i> should be persisted:</p>\n <div matTooltip=\"The currently selected comparator does not support hashed comparison values, they will be presented as cleartext in the config JSON.\"\n [matTooltipDisabled]=\"confidentialEnabled\">\n <mat-radio-group class=\"confidential-container\" (change)=\"confidentialChange($event.value)\">\n <div class=\"confidential item\" (click)=\"confidentialChange(true)\">\n <mat-radio-button color=\"primary\" [value]=\"true\" [checked]=\"isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Hashed</div>\n <div class=\"icon\"><mat-icon>lock</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n We recommend using this option in case of frontend applications targeting users based on sensitive data (like email addresses, names, etc). \n \n </div>\n </div>\n <div class=\"cleartext item\" (click)=\"confidentialChange(false)\">\n <mat-radio-button color=\"primary\" [value]=\"false\" [checked]=\"!isConfidential\" [disabled]=\"!confidentialEnabled || data.readOnly\">\n <div class=\"title\">\n <div class=\"text\">Cleartext</div>\n <div class=\"icon\"><mat-icon>lock_open_right</mat-icon></div>\n </div>\n </mat-radio-button>\n <div class=\"description\">\n You can use this option when you target users based on non-sensitive data. Comparison values will be presented as plain text in the <i>config JSON</i>.\n </div>\n </div>\n </mat-radio-group>\n </div>\n</ng-template>","import { AfterViewInit, Component, DestroyRef, Inject, OnInit, ViewChild, inject } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Subscription } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n FormHelper, IFeatureFlagLimitations, ComparisonValueForm, ComparisonValueListForm,\n FormGenerator, UserComparator, ComparisonValueListHelper, ComparisonValueListParseResult,\n IComparisonValueListModel\n} from '../../../../../../../bootstrap';\n\nexport type PopoutListEditorDialogData = {\n comparisonValueList: IComparisonValueListModel[],\n comparator: UserComparator,\n featureFlagLimitations: IFeatureFlagLimitations\n readOnly: boolean\n};\n\nenum VisualizationType {\n Table = 0,\n Json = 1,\n Csv = 2,\n Csl = 3\n}\n\n@Component({\n selector: 'app-popout-list-editor-dialog',\n templateUrl: './popout-list-editor-dialog.component.html',\n styleUrls: ['./popout-list-editor-dialog.component.scss']\n})\nexport class PopoutListEditorDialogComponent implements OnInit, AfterViewInit {\n destroyRef = inject(DestroyRef);\n FormHelper = FormHelper;\n VisualizationType = VisualizationType;\n\n dataSource = new MatTableDataSource<FormGroup<ComparisonValueListForm>>([]);\n plainText = \"\";\n formGroup: FormGroup<ComparisonValueForm>;\n filterValue = '';\n valueChanged = false;\n currentlyHasHints = false;\n\n displayedColumns = ['value', 'hint', 'action'];\n visualizationType = VisualizationType.Table;\n comparisonValueListParseResult: ComparisonValueListParseResult;\n valueChangeSubscription: Subscription;\n focusIndex = 0;\n\n paginator: MatPaginator;\n @ViewChild(\"paginator\", { static: false }) set setPaginator(paginator: MatPaginator) {\n this.paginator = paginator;\n if (this.dataSource) {\n this.dataSource.paginator = this.paginator;\n }\n }\n\n constructor(\n private formGenerator: FormGenerator,\n public dialogRef: MatDialogRef<PopoutListEditorDialogComponent>,\n private comparisonValueListHelper: ComparisonValueListHelper,\n @Inject(MAT_DIALOG_DATA) public data: PopoutListEditorDialogData) { }\n\n ngOnInit(): void {\n const comparisonValueList = this.data.comparisonValueList;\n if (!comparisonValueList.length) {\n comparisonValueList.push({ value: '' });\n }\n\n this.setFormGroup(comparisonValueList);\n }\n\n setFormGroup(comparisonValueList: IComparisonValueListModel[]) {\n this.formGroup = this.formGenerator.generateComparisonValueFormGroup(\n { listValue: comparisonValueList },\n this.data.comparator, this.data.readOnly, this.data.featureFlagLimitations);\n\n if (this.formGroup.invalid) {\n this.formGroup.markAllAsTouched();\n }\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n this.checkHasHints();\n this.valueChangeSubscription = this.formGroup.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({ next: () => this.checkHasHints() });\n }\n\n checkHasHints() {\n this.currentlyHasHints = !!this.formGroup.controls.listValue.controls.find(r => !!r.value.hint);\n }\n\n setDataSource() {\n if (this.dataSource) {\n this.dataSource.data = this.formGroup.controls.listValue.controls;\n if (this.dataSource.paginator) {\n this.dataSource.paginator.length = this.dataSource.data.length;\n }\n }\n }\n\n ngAfterViewInit(): void {\n this.dataSource = new MatTableDataSource(this.formGroup.controls.listValue.controls);\n this.dataSource.paginator = this.paginator;\n this.dataSource.filterPredicate = (row, filter) => [\n // \"Filter audit log items by any detail.\" -> This list should be kept in sync with the HTML template!\n row.controls.value.value,\n row.controls.hint.value\n ].some(v => v?.toLowerCase().includes(filter));\n this.focusIndex = 0;\n }\n\n applyFilter() {\n this.dataSource.filter = (this.filterValue ?? \"\").trim().toLowerCase();\n\n if (this.dataSource.paginator) {\n this.focusIndex = 0;\n this.dataSource.paginator.firstPage();\n }\n }\n\n add() {\n if (this.formGroup.controls.listValue.controls.length >= this.data.featureFlagLimitations.maxComparisonValueListLength) {\n return;\n }\n\n this.formGenerator.addComparisonValueListValueItems(\n this.data.comparator,\n this.formGroup.controls.listValue,\n [{ value: '' }],\n this.data.featureFlagLimitations);\n\n this.setDataSource();\n this.filterValue = '';\n this.applyFilter();\n this.focusIndex = this.formGroup.controls.listValue.controls.length - 1;\n this.dataSource.paginator.lastPage();\n }\n\n remove(row: FormGroup<ComparisonValueListForm>) {\n const index = this.formGroup.controls.listValue.controls.findIndex(c => c.controls.index.value === row.controls.index.value);\n if (index === -1) { return; }\n this.formGroup.controls.listValue.controls.splice(index, 1);\n this.formGroup.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.listValue.markAsTouched();\n this.formGroup.controls.listValue.markAsDirty();\n this.setDataSource();\n }\n\n set() {\n if (this.visualizationType !== VisualizationType.Table) {\n if (this.comparisonValueListParseResult?.error) {\n return;\n }\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n this.valueChanged = false;\n }\n\n if (this.formGroup.invalid) {\n this.formGroup.markAllAsTouched();\n return;\n }\n\n this.dialogRef.close({ comparisonValueList: this.getRawValue() });\n }\n\n close() {\n this.dialogRef.close();\n }\n\n removeAll() {\n this.setFormGroup([]);\n this.setDataSource();\n this.focusIndex = 0;\n this.dataSource.paginator.firstPage();\n }\n\n getRawValue(): IComparisonValueListModel[] {\n return this.formGroup.controls.listValue.value.map(v => { return { value: v.value, hint: v.hint ?? '' } });\n }\n\n focusInvalid() {\n if (this.visualizationType !== VisualizationType.Table) {\n this.changeVisualizationType(VisualizationType.Table);\n }\n const invalidIndex = this.formGroup.controls.listValue.controls.findIndex(c => c.invalid);\n if (invalidIndex !== -1) {\n this.formGroup.markAllAsTouched();\n this.filterValue = '';\n this.applyFilter();\n this.dataSource.paginator.length = this.dataSource.data.length;\n const pageNumber = Math.floor(invalidIndex / this.dataSource.paginator.pageSize);\n this.focusIndex = invalidIndex;\n this.dataSource.paginator.pageIndex = pageNumber;\n this.paginator.page.next({\n pageIndex: pageNumber,\n pageSize: this.paginator.pageSize,\n length: this.paginator.length\n });\n }\n }\n\n changeVisualizationType(visualizationType: VisualizationType) {\n if (this.valueChanged && this.visualizationType !== VisualizationType.Table) {\n if (this.comparisonValueListParseResult.error) {\n return;\n }\n\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n }\n\n this.visualizationType = visualizationType;\n this.valueChanged = false;\n\n switch (visualizationType) {\n case VisualizationType.Json:\n this.plainText = this.comparisonValueListHelper.formatValuesAndHintAsJson(this.getRawValue());\n break;\n case VisualizationType.Csv:\n this.plainText = this.comparisonValueListHelper.formatValuesAndHintAsCsv(this.getRawValue());\n break;\n case VisualizationType.Csl:\n this.plainText = this.comparisonValueListHelper.formatValuesAsCsv(this.getRawValue());\n break;\n case VisualizationType.Table:\n if (this.dataSource.paginator) {\n this.focusIndex = 0;\n this.dataSource.paginator.firstPage();\n }\n break;\n }\n this.recalculate();\n }\n\n textValueChanged() {\n this.valueChanged = true;\n this.recalculate();\n if (!this.comparisonValueListParseResult?.error) {\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n }\n }\n\n recalculate() {\n switch (this.visualizationType) {\n case VisualizationType.Json:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesAndHintsFromJson(this.plainText);\n break;\n case VisualizationType.Csv:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesAndHintsFromCsv(this.plainText);\n break;\n case VisualizationType.Csl:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesFromCsv(this.plainText);\n break;\n default:\n this.comparisonValueListParseResult = { comparisonValueList: [] };\n break;\n }\n if (this.visualizationType !== VisualizationType.Table && !this.comparisonValueListParseResult.error) {\n this.currentlyHasHints = !!this.comparisonValueListParseResult.comparisonValueList.find(r => !!r.hint);\n } else if (this.visualizationType !== VisualizationType.Table) {\n this.checkHasHints();\n }\n }\n\n loadFile(event) {\n const file = event.target.files[0];\n const fileReader = new FileReader();\n fileReader.onload = () => {\n this.plainText = fileReader.result.toString();\n this.textValueChanged();\n };\n fileReader.readAsText(file);\n }\n}\n","<h2 mat-dialog-title>Advanced editor</h2>\n<div mat-dialog-content class=\"container\">\n\n <div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"visualizationType\" (ngModelChange)=\"changeVisualizationType($event)\">\n <mat-button-toggle [value]=\"VisualizationType.Table\"\n [disabled]=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Table || !comparisonValueListParseResult?.error\">Table</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Json\"\n [disabled]=\"visualizationType !== VisualizationType.Json && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Json || !comparisonValueListParseResult?.error\">JSON</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csv\"\n [disabled]=\"visualizationType !== VisualizationType.Csv && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Csv || !comparisonValueListParseResult?.error\">CSV\n with hints</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csl\"\n [disabled]=\"(visualizationType !== VisualizationType.Csl && comparisonValueListParseResult?.error) || currentlyHasHints\"\n [matTooltip]=\"currentlyHasHints ? 'There are hints set to your values so the CSV without hints view is not available' : 'Can not switch between views while there are errors in the current view.'\"\n [matTooltipDisabled]=\"(visualizationType === VisualizationType.Csl || !comparisonValueListParseResult?.error) && !currentlyHasHints\">CSV\n without hints</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div [hidden]=\"visualizationType !== VisualizationType.Table\" class=\"table-format\">\n <p class=\"description\">\n Modify the items within the list of comparison values. The hint helps you label the value for easier\n reference.\n </p>\n <div class=\"controls\">\n <div>\n <mat-form-field class=\"filter\" appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <mat-label>Filter</mat-label>\n <input matInput [(ngModel)]=\"filterValue\" (ngModelChange)=\"applyFilter()\"\n placeholder=\"Filter values and hints.\">\n </mat-form-field>\n </div>\n <div class=\"control-button-container\">\n <div class=\"add-btn-container\" matTooltip=\"Add item\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <div [matTooltip]=\"'Maximum ' + data.featureFlagLimitations.maxComparisonValueListLength + ' items can be added.'\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length < data.featureFlagLimitations.maxComparisonValueListLength\">\n <button (click)=\"add()\" mat-icon-button type=\"button\" *ngIf=\"!data.readOnly\" class=\"add-btn\"\n [disabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <mat-icon>add_circle</mat-icon>\n </button>\n </div>\n </div>\n\n <button type=\"button\" mat-icon-button matTooltip=\"Remove all\" class=\"grey-button\" *ngIf=\"!data.readOnly\"\n (click)=\"removeAll()\"><mat-icon>delete_outline</mat-icon></button>\n </div>\n </div>\n <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"value\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Comparison value </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) === focusIndex\" focus />\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) !== focusIndex\" />\n <mat-error *ngIf=\"row.controls.value.invalid\">\n {{FormHelper.getErrorMessage(row.controls.value)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Hint </th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.hint\" />\n <mat-error *ngIf=\"row.controls.hint.invalid\">\n {{FormHelper.getErrorMessage(row.controls.hint)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header></th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top\">\n <button class=\"grey-button\" (click)=\"remove(row)\" mat-icon-button type=\"button\"\n matTooltip=\"Remove item\" *ngIf=\"!data.readOnly\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\">\n </tr>\n </table>\n <div class=\"small-form-field\">\n <mat-paginator #paginator showFirstLastButtons [pageSizeOptions]=\"[5, 10, 50, 100]\"></mat-paginator>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Json\" class=\"json-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a JSON text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.json\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"json-editor\">\n <app-ace-editor [(value)]=\"plainText\" (valueChange)=\"textValueChanged()\"\n [readOnly]=\"data.readOnly\"></app-ace-editor>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csv\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values and hints) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csl\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values only) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult\">\n <p *ngIf=\"!comparisonValueListParseResult.error && comparisonValueListParseResult.comparisonValueList.length\"\n class=\"small-chip-input\">\n Preview ({{comparisonValueListParseResult.comparisonValueList.length}} items)\n <mat-chip-set>\n <span *ngFor=\"let listValueItem of comparisonValueListParseResult.comparisonValueList | slice:0:10\"\n [matTooltip]=\"listValueItem.hint ? listValueItem.hint : 'No hint'\" class=\"chip-container\">\n <mat-chip-row>\n {{listValueItem.value}}\n </mat-chip-row>\n </span>\n <mat-chip-row *ngIf=\"comparisonValueListParseResult.comparisonValueList.length > 10\">\n {{comparisonValueListParseResult.comparisonValueList.length - 10}} remaining items...\n </mat-chip-row>\n </mat-chip-set>\n </p>\n <mat-error *ngIf=\"comparisonValueListParseResult.error\" class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Couldn't parse your values. Please check the format.</span>\n </mat-error>\n </div>\n <mat-error\n *ngIf=\"formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>{{FormHelper.getErrorMessage(formGroup.controls.listValue)}}</span>\n </mat-error>\n <mat-error\n *ngIf=\"!valueChanged && formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && !formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Invalid items.&nbsp;</span>\n <div>\n <button type=\"button\" mat-stroked-button color=\"primary\"\n *ngIf=\"visualizationType !== VisualizationType.Table || paginator?.getNumberOfPages() > 1\"\n (click)=\"focusInvalid()\" class=\"jump\">\n Jump to fix\n </button>\n </div>\n </mat-error>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" (click)=\"close()\">Close</button>\n</div>","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-condition-chip',\n templateUrl: './condition-chip.component.html',\n styleUrl: '../../../chips.scss'\n})\nexport class ConditionChipComponent implements OnInit {\n\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n chipText: string;\n\n ngOnInit(): void {\n this.chipText = this.conditionIndex > 0\n ? 'AND'\n : this.targetingRuleIndex === 0\n ? 'IF'\n : 'ELSE IF';\n }\n}\n","<div class=\"chip-container fixed-width\">\n <div *ngIf=\"conditionIndex > 0\" class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <mat-chip-set>\n <mat-chip disabled>{{chipText}}</mat-chip>\n </mat-chip-set>\n</div>","import { Component, DestroyRef, Input, OnInit, forwardRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, Validators } from '@angular/forms';\nimport { FormHelper, timeRegex } from '../../../_services/form-helper';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter } from '@angular/material/core';\nimport { AppDateAdapter } from '../../../_services/app-data-adapter';\nimport { DateHelper } from '../../../_services/date-helper';\n\nexport interface DateTimeForm {\n dateValue: FormControl<Date | undefined>;\n timeValue: FormControl<string>;\n}\n\n@Component({\n selector: 'app-date-time-picker',\n templateUrl: './date-time-picker.component.html',\n styleUrls: ['./date-time-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateTimePickerComponent),\n multi: true,\n },\n { provide: DateAdapter, useClass: AppDateAdapter }\n ]\n})\nexport class DateTimePickerComponent implements OnInit, ControlValueAccessor, Validator {\n FormHelper = FormHelper;\n destroyRef = inject(DestroyRef);\n formGroup: FormGroup<DateTimeForm>;\n private onChangeModel: any;\n private onTouchModel: any;\n @Input() dateTooltip: string;\n @Input() timeTooltip: string;\n\n ngOnInit(): void {\n this.formGroup = new FormGroup<DateTimeForm>({\n dateValue: new FormControl<Date>(undefined, { nonNullable: true, validators: [Validators.required] }),\n timeValue: new FormControl<string>(undefined, { nonNullable: true, validators: [Validators.pattern(timeRegex), Validators.required] })\n });\n this.formGroup.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(value => {\n if (!value.dateValue || !value.timeValue) {\n if (this.onChangeModel) {\n this.onChangeModel(undefined);\n }\n if (this.onTouchModel) {\n this.onTouchModel();\n }\n return;\n }\n\n let dateTimeValue = new Date(value.dateValue);\n dateTimeValue = DateHelper.offsetDate(dateTimeValue, -dateTimeValue.getTimezoneOffset())\n const splitted = value.timeValue.split(':');\n if (splitted.length === 2) {\n dateTimeValue.setUTCHours(parseInt(splitted[0]));\n dateTimeValue.setUTCMinutes(parseInt(splitted[1]));\n dateTimeValue.setUTCSeconds(0);\n dateTimeValue.setUTCMilliseconds(0);\n } else {\n dateTimeValue.setUTCHours(0);\n dateTimeValue.setUTCMinutes(0);\n dateTimeValue.setUTCSeconds(0);\n dateTimeValue.setUTCMilliseconds(0);\n }\n if (this.onChangeModel) {\n this.onChangeModel(dateTimeValue.getTime() / 1000.0);\n }\n if (this.onTouchModel) {\n this.onTouchModel();\n }\n })\n }\n\n writeValue(obj: any): void {\n if (!obj) {\n this.formGroup.patchValue({ dateValue: undefined, timeValue: undefined });\n }\n const date = new Date(obj * 1000.0);\n const dateValue = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));\n const utcHours = date.getUTCHours();\n const utcMinutes = date.getUTCMinutes();\n const timeValue = `${(utcHours < 10 ? '0' : '') + utcHours}:${(utcMinutes < 10 ? '0' : '') + utcMinutes}`;\n this.formGroup.patchValue({ dateValue, timeValue }, { onlySelf: true, emitEvent: false });\n }\n\n registerOnChange(fn: any): void {\n this.onChangeModel = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouchModel = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (isDisabled) {\n this.formGroup.disable();\n }\n else {\n this.formGroup.enable();\n }\n }\n\n validate(): ValidationErrors {\n return this.formGroup.errors;\n }\n}\n","<div class=\"outer\">\n <div class=\"component date\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"small-icon-button\">\n <input matInput [formControl]=\"formGroup.controls.dateValue\" [matDatepicker]=\"datepicker\"\n [matTooltip]=\"dateTooltip\">\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\n <mat-datepicker #datepicker></mat-datepicker>\n <mat-error *ngIf=\"formGroup.controls.dateValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.dateValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"time\" [formControl]=\"formGroup.controls.timeValue\" [matTooltip]=\"timeTooltip\" />\n <mat-error *ngIf=\"formGroup.controls.timeValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.timeValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</div>","import { ENTER, COMMA } from '@angular/cdk/keycodes';\nimport { ChangeDetectorRef, Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatChipInputEvent, MatChipEditedEvent, MatChipGrid, MatChipRow } from '@angular/material/chips';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateAdapter, ErrorStateMatcher } from '@angular/material/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport {\n FormHelper, ComparisonValueListForm, UserConditionForm, FormGenerator,\n UserComparator, UserComparatorText, UserComparatorType,\n IComparisonValueListModel, IComparisonValueModel, AppDateAdapter,\n IFeatureFlagLimitations, ConfirmationDialogComponent, ComparisonValueListHelper, MessagingService, InfoDialogComponent\n} from '../../../../../../bootstrap';\nimport { ComparatorDialogComponent } from './comparator-dialog/comparator-dialog.component';\nimport { PopoutListEditorDialogComponent, PopoutListEditorDialogData } from './popout-list-editor-dialog/popout-list-editor-dialog.component';\nimport { PopoutTextEditorDialogComponent, PopoutTextEditorDialogData } from '../../../popout-text-editor-dialog/popout-text-editor-dialog.component';\n\nexport class ListValueErrorStateMatcher implements ErrorStateMatcher {\n constructor(private formGroup: FormGroup<UserConditionForm>) { }\n isErrorState(): boolean {\n return this.formGroup.controls.comparisonValue.controls.listValue?.touched && this.formGroup.controls.comparisonValue.controls.listValue?.invalid;\n }\n}\n\nenum ComparatorGroup {\n ConfidentialText = 'CONFIDENTIAL TEXT',\n Text = 'TEXT',\n SemanticVersion = 'SEMANTIC VERSION',\n Number = 'NUMBER',\n DateTime = 'DATETIME',\n ConfidentialArray = 'CONFIDENTIAL ARRAY',\n Array = 'ARRAY'\n}\n\ninterface IComparatorValue {\n value: UserComparator,\n label: UserComparatorText,\n group: ComparatorGroup,\n index: number,\n}\n\nconst allComparators: IComparatorValue[] = [\n { value: UserComparator.IsOneOf, label: UserComparatorText.IsOneOf, group: ComparatorGroup.Text, index: 0 },\n { value: UserComparator.IsNotOneOf, label: UserComparatorText.IsNotOneOf, group: ComparatorGroup.Text, index: 1 },\n { value: UserComparator.ContainsAnyOf, label: UserComparatorText.ContainsAnyOf, group: ComparatorGroup.Text, index: 2 },\n { value: UserComparator.DoesNotContainAnyOf, label: UserComparatorText.DoesNotContainAnyOf, group: ComparatorGroup.Text, index: 3 },\n { value: UserComparator.SemVerIsOneOf, label: UserComparatorText.SemVerIsOneOf, group: ComparatorGroup.SemanticVersion, index: 4 },\n { value: UserComparator.SemVerIsNotOneOf, label: UserComparatorText.SemVerIsNotOneOf, group: ComparatorGroup.SemanticVersion, index: 5 },\n { value: UserComparator.SemVerLess, label: UserComparatorText.SemVerLess, group: ComparatorGroup.SemanticVersion, index: 6 },\n { value: UserComparator.SemVerLessOrEquals, label: UserComparatorText.SemVerLessOrEquals, group: ComparatorGroup.SemanticVersion, index: 7 },\n { value: UserComparator.SemVerGreater, label: UserComparatorText.SemVerGreater, group: ComparatorGroup.SemanticVersion, index: 8 },\n { value: UserComparator.SemVerGreaterOrEquals, label: UserComparatorText.SemVerGreaterOrEquals, group: ComparatorGroup.SemanticVersion, index: 9 },\n { value: UserComparator.NumberEquals, label: UserComparatorText.NumberEquals, group: ComparatorGroup.Number, index: 10 },\n { value: UserComparator.NumberDoesNotEqual, label: UserComparatorText.NumberDoesNotEqual, group: ComparatorGroup.Number, index: 11 },\n { value: UserComparator.NumberLess, label: UserComparatorText.NumberLess, group: ComparatorGroup.Number, index: 12 },\n { value: UserComparator.NumberLessOrEquals, label: UserComparatorText.NumberLessOrEquals, group: ComparatorGroup.Number, index: 13 },\n { value: UserComparator.NumberGreater, label: UserComparatorText.NumberGreater, group: ComparatorGroup.Number, index: 14 },\n { value: UserComparator.NumberGreaterOrEquals, label: UserComparatorText.NumberGreaterOrEquals, group: ComparatorGroup.Number, index: 15 },\n { value: UserComparator.SensitiveIsOneOf, label: UserComparatorText.SensitiveIsOneOf, group: ComparatorGroup.ConfidentialText, index: 16 },\n { value: UserComparator.SensitiveIsNotOneOf, label: UserComparatorText.SensitiveIsNotOneOf, group: ComparatorGroup.ConfidentialText, index: 17 },\n { value: UserComparator.DateTimeBefore, label: UserComparatorText.DateTimeBefore, group: ComparatorGroup.DateTime, index: 18 },\n { value: UserComparator.DateTimeAfter, label: UserComparatorText.DateTimeAfter, group: ComparatorGroup.DateTime, index: 19 },\n { value: UserComparator.SensitiveTextEquals, label: UserComparatorText.SensitiveTextEquals, group: ComparatorGroup.ConfidentialText, index: 20 },\n { value: UserComparator.SensitiveTextDoesNotEqual, label: UserComparatorText.SensitiveTextDoesNotEqual, group: ComparatorGroup.ConfidentialText, index: 21 },\n { value: UserComparator.SensitiveTextStartsWithAnyOf, label: UserComparatorText.SensitiveTextStartsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 22 },\n { value: UserComparator.SensitiveTextNotStartsWithAnyOf, label: UserComparatorText.SensitiveTextNotStartsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 23 },\n { value: UserComparator.SensitiveTextEndsWithAnyOf, label: UserComparatorText.SensitiveTextEndsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 24 },\n { value: UserComparator.SensitiveTextNotEndsWithAnyOf, label: UserComparatorText.SensitiveTextNotEndsWithAnyOf, group: ComparatorGroup.ConfidentialText, index: 25 },\n { value: UserComparator.SensitiveArrayContainsAnyOf, label: UserComparatorText.SensitiveArrayContainsAnyOf, group: ComparatorGroup.ConfidentialArray, index: 26 },\n { value: UserComparator.SensitiveArrayDoesNotContainAnyOf, label: UserComparatorText.SensitiveArrayDoesNotContainAnyOf, group: ComparatorGroup.ConfidentialArray, index: 27 },\n { value: UserComparator.TextEquals, label: UserComparatorText.TextEquals, group: ComparatorGroup.Text, index: 28 },\n { value: UserComparator.TextDoesNotEqual, label: UserComparatorText.TextDoesNotEqual, group: ComparatorGroup.Text, index: 29 },\n { value: UserComparator.TextStartsWithAnyOf, label: UserComparatorText.TextStartsWithAnyOf, group: ComparatorGroup.Text, index: 30 },\n { value: UserComparator.TextNotStartsWithAnyOf, label: UserComparatorText.TextNotStartsWithAnyOf, group: ComparatorGroup.Text, index: 31 },\n { value: UserComparator.TextEndsWithAnyOf, label: UserComparatorText.TextEndsWithAnyOf, group: ComparatorGroup.Text, index: 32 },\n { value: UserComparator.TextNotEndsWithAnyOf, label: UserComparatorText.TextNotEndsWithAnyOf, group: ComparatorGroup.Text, index: 33 },\n { value: UserComparator.ArrayContainsAnyOf, label: UserComparatorText.ArrayContainsAnyOf, group: ComparatorGroup.Array, index: 34 },\n { value: UserComparator.ArrayDoesNotContainAnyOf, label: UserComparatorText.ArrayDoesNotContainAnyOf, group: ComparatorGroup.Array, index: 35 },\n]\n\nconst defaultComparatorIds = [16, 17, 20, 21, 22, 23, 24, 25, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19];\n\n@Component({\n selector: 'app-user-condition',\n templateUrl: './user-condition.component.html',\n styleUrls: [\n '../../../components.scss',\n './user-condition.component.scss'\n ],\n providers: [\n { provide: DateAdapter, useClass: AppDateAdapter }\n ],\n})\nexport class UserConditionComponent implements OnInit {\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n FormHelper = FormHelper;\n\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n @Input() readOnly: boolean;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() formGroup: FormGroup<UserConditionForm>;\n matChipGrid: MatChipGrid;\n\n @ViewChild(\"chipGrid\", { static: false }) set setMatChipGrid(matChipGrid: MatChipGrid) {\n this.matChipGrid = matChipGrid;\n }\n\n defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n\n dateValue: Date;\n timeValue: string;\n\n comparatorSuggestions = new Map<any, any>();\n selectedComparator: UserComparator;\n comparatorSeparator = \"────────────────────\";\n\n keepOrder = (a: any, _: any) => a;\n\n RolloutRuleComparatorV2Type = UserComparatorType;\n rolloutRuleComparatorType: UserComparatorType;\n isClearTextComparatorSelected: boolean;\n\n // The chip grid's [formControl] only accepts a FormControl. We have a FormArray (because of the name+hint).\n // We have to fake a FormControl and match that formControl's errorstate with the original component's errorState.\n fakeFormControl = new FormControl<string>('');\n errorStateMatcher: ListValueErrorStateMatcher;\n\n constructor(private formGenerator: FormGenerator,\n private dialog: MatDialog,\n private comparisonValueListHelper: ComparisonValueListHelper,\n private clipboard: Clipboard,\n private messagingService: MessagingService,\n private changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n this.rolloutRuleComparatorType = this.formGenerator.getComparisonValueType(this.formGroup.controls.comparator.value);\n this.isClearTextComparatorSelected = this.isClearTextComparator(this.formGroup.controls.comparator.value);\n this.errorStateMatcher = new ListValueErrorStateMatcher(this.formGroup);\n this.selectedComparator = this.formGroup.controls.comparator.value;\n this.calcComparators();\n }\n\n attributeChanged(event: Event): void {\n const value = (<HTMLSelectElement>event.target).value;\n if (this.defaultComparisonAttributes.indexOf(value) !== -1) {\n if (this.formGroup.controls.comparisonAttribute.value !== value) {\n this.formGroup.controls.comparisonAttribute.setValue(value);\n this.formGroup.markAsDirty();\n this.calcComparators(true);\n }\n } else if (this.formGroup.controls.comparisonAttribute.value !== '') {\n this.formGroup.controls.comparisonAttribute.setValue('');\n this.formGroup.markAsDirty();\n this.calcComparators(true);\n }\n }\n\n comparatorChanged(value: any): void {\n if (value === \"showall\") {\n this.changeDetectorRef.detectChanges();\n this.selectedComparator = this.formGroup.controls.comparator.value;\n this.changeDetectorRef.detectChanges();\n this.compDialog();\n return;\n }\n\n this.formGroup.controls.comparator.setValue(value);\n this.formGroup.markAsDirty();\n this.selectedComparator = value;\n this.isClearTextComparatorSelected = this.isClearTextComparator(this.formGroup.controls.comparator.value);\n\n const oldRolloutRuleComparatorType = this.rolloutRuleComparatorType;\n this.rolloutRuleComparatorType = this.formGenerator.getComparisonValueType(this.formGroup.controls.comparator.value);\n if (oldRolloutRuleComparatorType !== this.rolloutRuleComparatorType) {\n const defaultValue: IComparisonValueModel = this.rolloutRuleComparatorType === UserComparatorType.DateTime ? {\n doubleValue: new Date().getTime() / 1000.0\n } : {};\n this.formGroup.setControl('comparisonValue', this.formGenerator.generateComparisonValueFormGroup(defaultValue, this.formGroup.controls.comparator.value, false, this.featureFlagLimitations))\n }\n }\n\n compDialog() {\n const dialogRef = this.dialog.open(ComparatorDialogComponent, {\n width: '1130px',\n position: {\n top: window.innerHeight < 750 ? '0px' : window.innerHeight < 950 ? '50px' : '100px',\n },\n data: {\n readOnly: this.readOnly,\n selectedComparator: this.formGroup.controls.comparator.value\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result && result !== this.formGroup.controls.comparator.value) {\n this.comparatorChanged(result);\n this.calcComparators();\n }\n });\n }\n\n add(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n\n event.chipInput?.clear();\n\n if (!value) { return; }\n\n if (value.indexOf(',') === -1) {\n this.formGenerator.addComparisonValueListValueItems(\n this.formGroup.controls.comparator.value,\n this.formGroup.controls.comparisonValue.controls.listValue,\n [{ value }],\n this.featureFlagLimitations);\n return;\n }\n\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'How would you like to add the items?',\n body: `We've noticed a comma in the value you want to add. <br/> Do you want to add it as a single item, or would you prefer to insert multiple items separated by commas?`,\n yesButtonLabel: 'Add multiple items',\n noButtonLabel: 'Add as a single item'\n },\n disableClose: true\n });\n\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result === 'yes') {\n const comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesFromCsv(value);\n if (comparisonValueListParseResult.error) {\n this.messagingService.showWarningSnack('Parse error');\n } else if (comparisonValueListParseResult.comparisonValueList.length > 0) {\n this.formGenerator.addComparisonValueListValueItems(\n this.formGroup.controls.comparator.value,\n this.formGroup.controls.comparisonValue.controls.listValue,\n comparisonValueListParseResult.comparisonValueList,\n this.featureFlagLimitations);\n }\n } else {\n this.formGenerator.addComparisonValueListValueItems(\n this.formGroup.controls.comparator.value,\n this.formGroup.controls.comparisonValue.controls.listValue,\n [{ value }],\n this.featureFlagLimitations);\n }\n });\n }\n\n remove(index: number): void {\n if (index >= 0) {\n this.formGroup.controls.comparisonValue.controls.listValue.controls.splice(index, 1);\n this.formGroup.controls.comparisonValue.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.controls.listValue.markAsDirty();\n }\n }\n\n edit(index: number, event: MatChipEditedEvent) {\n const value = event.value.trim();\n\n // https://github.com/angular/components/issues/26584#issuecomment-1699469605\n // The mat chip control does not work well with long values. The basic setup is overflow: visible.\n // The overflow:hidden, text-overflow: ellipsis is solved in the styles.scss:\n //.mdc-evolution-chip-set .mdc-evolution-chip {\n // .mdc-evolution-chip__cell--primary,\n // .mdc-evolution-chip__action--primary,\n // .mat-mdc-chip-action-label {\n // white-space: nowrap;\n // overflow: hidden;\n // text-overflow: ellipsis;\n // }\n // }\n // \n // This works totally fine until you edit a chip's value that is long (double click on it) \n // and e.g. insert a character to the end of the value.\n // After focusing out from the input, the original chip's value is shifted or even missing if the text is long enough. \n // If we set the input's value to '' here, the shifting is solved and everything works as expected\n (event.chip as MatChipRow).defaultEditInput?.setValue('');\n\n if (!value) {\n this.remove(index);\n } else if (index >= 0) {\n this.formGroup.controls.comparisonValue.controls.listValue.controls[index].patchValue({ value });\n this.formGroup.controls.comparisonValue.controls.listValue.controls[index].updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.controls.listValue.markAsDirty();\n }\n }\n\n expandText() {\n const dialogRef = this.dialog.open(PopoutTextEditorDialogComponent, {\n width: '800px',\n data: <PopoutTextEditorDialogData>{\n value: this.formGroup.controls.comparisonValue.controls.stringValue.value,\n readOnly: this.formGroup.controls.comparisonValue.controls.stringValue.disabled,\n validators: this.rolloutRuleComparatorType === UserComparatorType.Semver\n ? this.formGenerator.getComparisonValueSemverValidators(this.featureFlagLimitations)\n : this.formGenerator.getComparisonValueStringValidators(this.featureFlagLimitations),\n maxValueLength: this.featureFlagLimitations.maxComparisonValueLength,\n description: 'Modify the text within the editor to change the comparison value. The editor supports JSON syntax highlighting.'\n }\n });\n\n dialogRef.afterClosed().subscribe(data => {\n if (data && data.value !== this.formGroup.controls.comparisonValue.controls.stringValue.value) {\n this.formGroup.controls.comparisonValue.controls.stringValue.setValue(data.value);\n this.formGroup.controls.comparisonValue.controls.stringValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.stringValue.markAsTouched();\n this.formGroup.controls.comparisonValue.controls.stringValue.markAsDirty();\n }\n });\n }\n\n expandList() {\n const dialogRef = this.dialog.open(PopoutListEditorDialogComponent, {\n width: '670px',\n data: <PopoutListEditorDialogData>{\n comparisonValueList: this.getRawValue(),\n comparator: this.formGroup.controls.comparator.value,\n featureFlagLimitations: this.featureFlagLimitations,\n readOnly: this.readOnly\n }\n });\n dialogRef.afterClosed().subscribe((data: { comparisonValueList: IComparisonValueListModel[] }) => {\n if (data?.comparisonValueList) {\n const oldValue =\n this.formGroup.controls.comparisonValue.controls.listValue.value\n .map(l => { return { value: l.value, hint: l.hint }; });\n const newValue = data.comparisonValueList\n .map(l => { return { value: l.value, hint: l.hint }; });\n if (JSON.stringify(oldValue) === JSON.stringify(newValue)) {\n return;\n }\n const validators =\n this.formGenerator.getComparisonValueType(this.formGroup.controls.comparator.value) === UserComparatorType.SemverList\n ? this.formGenerator.getComparisonValueSemverListItemValidators(this.featureFlagLimitations)\n : this.formGenerator.getComparisonValueStringListItemValidators(this.featureFlagLimitations);\n const formArray = this.formGenerator.generateComparisonValueListValueArray(data.comparisonValueList, this.readOnly, this.featureFlagLimitations, validators);\n this.formGroup.controls.comparisonValue.setControl('listValue', formArray);\n this.formGroup.controls.comparisonValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.markAsDirty();\n }\n });\n }\n\n removeAll() {\n this.formGroup.controls.comparisonValue.controls.listValue.controls.splice(0, this.formGroup.controls.comparisonValue.controls.listValue.controls.length);\n this.formGroup.controls.comparisonValue.controls.listValue.updateValueAndValidity();\n this.formGroup.controls.comparisonValue.controls.listValue.markAllAsTouched();\n this.formGroup.controls.comparisonValue.controls.listValue.markAsDirty();\n }\n\n copyValuesAsCsv() {\n this.copyToClipboard(this.comparisonValueListHelper.formatValuesAsCsv(this.getRawValue()));\n }\n\n copyToClipboard(value: string) {\n if (value) {\n try {\n this.clipboard.copy(value);\n this.messagingService.showSuccessSnack(\"Copied to clipboard.\");\n } catch {\n this.messagingService.showSuccessSnack(\"Clipboard unavailable.\");\n }\n\n } else {\n this.messagingService.showWarningSnack(\"Nothing to be copied.\");\n }\n }\n\n getRawValue(): IComparisonValueListModel[] {\n return this.formGroup.controls.comparisonValue.controls.listValue.value.map(v => { return { value: v.value, hint: v.hint } });\n }\n\n isValueInvalid(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n return listValueItemControl.controls.value.touched && listValueItemControl.controls.value.invalid;\n }\n\n isHintInvalid(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n return listValueItemControl.controls.hint.touched && listValueItemControl.controls.hint.invalid;\n }\n\n isListValueItemInvalid(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n return this.isValueInvalid(listValueItemControl) || this.isHintInvalid(listValueItemControl);\n }\n\n getListValueItemTooltipMessage(listValueItemControl: FormGroup<ComparisonValueListForm>) {\n if (this.isValueInvalid(listValueItemControl)) {\n return FormHelper.getErrorMessage(listValueItemControl.controls.value);\n } else if (this.isHintInvalid(listValueItemControl)) {\n return \"Hint:\" + FormHelper.getErrorMessage(listValueItemControl.controls.hint);\n }\n if (listValueItemControl.controls.hint.value) {\n return listValueItemControl.controls.hint.value;\n }\n return \"No hint\";\n }\n\n calcComparators(resetVal = false): void {\n if (!this.formGroup.controls.comparisonAttribute.value) {\n return;\n }\n this.buildComparatorSuggestions(defaultComparatorIds, resetVal);\n }\n\n buildComparatorSuggestions(ids: number[], resetVal: boolean): void {\n let comps = ids.map(id => allComparators[id]);\n const selected = allComparators.find(val => val.value === this.formGroup.controls.comparator.value);\n if (resetVal && !ids.includes(selected.index) && this.isNullCompVal(this.formGroup.controls.comparisonValue.value)) {\n this.comparatorChanged(comps[0].value);\n } else if (!ids.includes(selected.index)) {\n if (selected.value === UserComparator.ContainsAnyOf || selected.value === UserComparator.DoesNotContainAnyOf) {\n comps = [allComparators[2], allComparators[3], ...comps]\n } else {\n const selectedGroup = allComparators.filter(val => val.group === selected.group);\n comps = [...selectedGroup, ...comps]\n }\n }\n comps = this.dedupComps(comps);\n this.comparatorSuggestions = comps.reduce((entryMap, e) => entryMap.set(e.group, [...entryMap.get(e.group) || [], e]), new Map());\n this.comparatorSeparator = this.genSeparator(comps);\n }\n\n dedupComps(comps: IComparatorValue[]): IComparatorValue[] {\n const result: IComparatorValue[] = [];\n comps.forEach(val => {\n if (!result.find(e => e.index === val.index)) {\n result.push(val);\n }\n });\n return result;\n }\n\n genSeparator(comps: IComparatorValue[]): string {\n let max = 0;\n comps.forEach(val => {\n if (val.label.length > max) {\n max = val.label.length;\n }\n });\n return Array(max).join(\"─\");\n }\n\n isNumberArr(val: any): boolean {\n if (!Array.isArray(val)) {\n return false;\n }\n\n return val.length > 0 && val.every(item => typeof item === 'number');\n }\n\n isNullCompVal(compVal: Partial<{ stringValue?: string; doubleValue?: number; listValue?: Partial<{ value: string; hint?: string; index: number; }>[]; }>): boolean {\n return !compVal.doubleValue && !compVal.listValue && !compVal.stringValue;\n }\n\n\n isClearTextComparator(comparator: UserComparator): boolean {\n switch (comparator) {\n case UserComparator.IsOneOf:\n case UserComparator.IsNotOneOf:\n case UserComparator.TextStartsWithAnyOf:\n case UserComparator.TextEndsWithAnyOf:\n case UserComparator.TextNotStartsWithAnyOf:\n case UserComparator.TextNotEndsWithAnyOf:\n case UserComparator.ArrayContainsAnyOf:\n case UserComparator.ArrayDoesNotContainAnyOf:\n case UserComparator.ContainsAnyOf:\n case UserComparator.DoesNotContainAnyOf:\n case UserComparator.TextEquals:\n case UserComparator.TextDoesNotEqual: return true;\n default: return false;\n }\n }\n\n openCleartextInfoDialog() {\n this.dialog.open(InfoDialogComponent, {\n width: '600px',\n data: {\n title: `Consider using confidential comparators`,\n body: `Comparison value will be presented as plain text \n in the <i>config JSON</i>. If you have sensitive data, consider using one of the confidential (hashed) comparators.<br/><br/>\n See the <a href=\"https://configcat.com/docs/targeting/targeting-rule/user-condition/#confidential-text-comparators\" target=\"_blank\">documentation</a> for more information.`,\n secondaryButtonLabel: 'Open comparator selector',\n secondaryButtonAction: () => this.compDialog()\n }\n });\n }\n}\n","<div class=\"targeting-rule-line smallest-form-field\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"conditionIndex\"></app-condition-chip>\n\n <div class=\"explanation\"><a href=\"https://configcat.com/docs/targeting/targeting-rule/user-condition/\"\n target=\"_blank\" rel=\"noopener noreferrer\" class=\"user-link\">user's</a></div>\n </div>\n\n <div class=\"wrapper-group\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component pad-right\"\n [ngClass]=\"{'small': defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) === -1}\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl (change)=\"attributeChanged($event)\"\n [disabled]=\"formGroup.controls.comparisonAttribute.disabled\" matTooltip=\"Comparison attribute\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\n [selected]=\"comparisonAttribute === formGroup.controls.comparisonAttribute.value\">\n {{comparisonAttribute}}</option>\n <option\n [selected]=\"defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) === -1\">\n Custom\n </option>\n </select>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right small\"\n [hidden]=\"defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) !== -1\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" (blur)=\"calcComparators(true)\"\n [formControl]=\"formGroup.controls.comparisonAttribute\" matTooltip=\"Custom comparison attribute\">\n <mat-error *ngIf=\"formGroup.controls.comparisonAttribute.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonAttribute)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"targeting-rule-component pad-right comparator\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl (change)=\"comparatorChanged(selectedComparator)\"\n [(ngModel)]=\"selectedComparator\" [disabled]=\"readOnly\" matTooltip=\"Comparator\">\n <optgroup *ngFor=\"let group of comparatorSuggestions | keyvalue: keepOrder\"\n [label]=\"'&nbsp;' + group.key\">\n <option *ngFor=\"let comparator of group.value\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup [label]=\"comparatorSeparator\"></optgroup>\n <option value=\"showall\">&nbsp;&nbsp;SHOW ALL COMPARATORS&nbsp;&nbsp;</option>\n </select>\n <button matSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"All comparators\"\n (click)=\"compDialog()\"><mat-icon>list_alt</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <ng-container [ngSwitch]=\"rolloutRuleComparatorType\">\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.String\"\n [ngTemplateOutlet]=\"textTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.Semver\"\n [ngTemplateOutlet]=\"semverTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.StringList\"\n [ngTemplateOutlet]=\"listTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.SemverList\"\n [ngTemplateOutlet]=\"listTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.Number\"\n [ngTemplateOutlet]=\"numberTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.DateTime\"\n [ngTemplateOutlet]=\"dateTimeTemplate\"></ng-container>\n </ng-container>\n\n</div>\n\n<ng-template #textTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.comparisonValue.controls.stringValue\"\n matTooltip=\"Comparison value (text)\" placeholder=\"Add text ...\" />\n <button matPrefix class=\"prefix-button\" type=\"button\" mat-icon-button *ngIf=\"isClearTextComparatorSelected\"\n (click)=\"openCleartextInfoDialog()\"\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"><mat-icon>lock_open_right</mat-icon></button>\n <button matSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandText()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n\n<ng-template #semverTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.comparisonValue.controls.stringValue\"\n matTooltip=\"Comparison value (semantic version)\" placeholder=\"Add semantic version ... (1.2.3)\" />\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #listTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.listValue\"\n class=\"targeting-rule-component grow small-chip-input top-icon-suffix\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-chip-grid #chipGrid [formControl]=\"fakeFormControl\" [errorStateMatcher]=\"errorStateMatcher\">\n <span class=\"chip-container\"\n *ngFor=\"let listValueItem of formGroup.controls.comparisonValue.controls.listValue.controls | slice:0:20; let i = index\"\n [matTooltip]=\"getListValueItemTooltipMessage(listValueItem)\">\n <mat-chip-row (removed)=\"remove(i)\" [disabled]=\"readOnly\" [removable]=\"!readOnly\" class=\"chip\"\n [editable]=\"!readOnly\" (edited)=\"edit(i, $event)\"\n [ngClass]=\"{'invalid': isListValueItemInvalid(listValueItem)}\">\n\n {{listValueItem.controls.value.value}}\n\n <button type=\"button\" matChipRemove *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n </span>\n <button mat-stroked-button class=\"show-all\" type=\"button\"\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.controls.length > 20\"\n (click)=\"expandList()\">\n show all {{formGroup.controls.comparisonValue.controls.listValue.controls.length}}\n items</button>\n <input [disabled]=\"readOnly\" [placeholder]=\"!readOnly ? 'Add item to list ...' : ''\"\n [matChipInputFor]=\"chipGrid\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n matChipInputAddOnBlur (matChipInputTokenEnd)=\"add($event)\" matTooltip=\"Comparison values (list)\" />\n </mat-chip-grid>\n <button matIconPrefix class=\"prefix-button\" type=\"button\" mat-icon-button *ngIf=\"isClearTextComparatorSelected\"\n (click)=\"openCleartextInfoDialog()\"\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"><mat-icon>lock_open_right</mat-icon></button>\n <button matIconSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"More...\"\n [matMenuTriggerFor]=\"moreMenu\"><mat-icon>more_vert</mat-icon></button>\n <button matIconSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandList()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.invalid && formGroup.controls.comparisonValue.controls.listValue.errors\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.listValue)}}\n </mat-error>\n <mat-error\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.invalid && !formGroup.controls.comparisonValue.controls.listValue.errors\">\n Invalid items\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #numberTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"number\" [formControl]=\"formGroup.controls.comparisonValue.controls.doubleValue\"\n matTooltip=\"Comparison value (number)\" placeholder=\"Add number ...\" inputDisplayNormalizer />\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.doubleValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #dateTimeTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue\" class=\"targeting-rule-component datetime\">\n <app-date-time-picker [formControl]=\"formGroup.controls.comparisonValue.controls.doubleValue\"\n dateTooltip=\"Comparison value (date)\" timeTooltip=\"Comparison value (time)\" />\n </div>\n</ng-template>\n\n\n<mat-menu #moreMenu>\n <a mat-menu-item (click)=\"expandList()\"><mat-icon>edit_note</mat-icon>Advanced editor</a>\n <a mat-menu-item (click)=\"copyValuesAsCsv()\"><mat-icon>content_copy</mat-icon>Copy as CSV (values only)</a>\n <a mat-menu-item (click)=\"removeAll()\" [disabled]=\"readOnly\"><mat-icon>delete_outline</mat-icon>Remove\n all</a>\n</mat-menu>","import { Directive, Input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[track]'\n})\nexport class TrackingDirective {\n @Input() track: string[];\n // Intentionally empty class, to be easier to copy the source from the Dashboard, we had to create this directive, but we do not want to track in integrations.\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FormHelper, SegmentConditionForm, ISegment, SegmentComparator } from '../../../../../../bootstrap';\n\n@Component({\n selector: 'app-segment-condition',\n templateUrl: './segment-condition.component.html',\n styleUrls: [\n '../../../components.scss',\n './segment-condition.component.scss'\n ]\n})\nexport class SegmentConditionComponent {\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n @Input() formGroup: FormGroup<SegmentConditionForm>;\n @Input() segments: ISegment[];\n @Input() canManageSegments: boolean;\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n\n FormHelper = FormHelper;\n\n segmentComparators = [\n { value: SegmentComparator.IsIn, label: 'IS IN SEGMENT' },\n { value: SegmentComparator.IsNotIn, label: 'IS NOT IN SEGMENT' },\n ];\n\n createSegment() {\n this.createSegmentRequested.emit();\n }\n}\n","<div class=\"targeting-rule-line smallest-form-field\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"conditionIndex\"></app-condition-chip>\n\n <div class=\"explanation\"><a href=\"https://configcat.com/docs/targeting/targeting-rule/segment-condition/\" target=\"_blank\"\n rel=\"noopener noreferrer\" class=\"user-link\">user</a></div>\n </div>\n\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.comparator\" matTooltip=\"Segment comparator\">\n <option *ngFor=\"let comparator of segmentComparators\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.segmentId\" matTooltip=\"Segment\">\n <option [ngValue]=\"null\" disabled selected hidden *ngIf=\"segments.length\">Select segment ...\n </option>\n <option *ngFor=\"let segment of segments\" [ngValue]=\"segment.segmentId\"\n [title]=\"segment.description\">\n {{segment.name}}\n </option>\n <option *ngIf=\"segments.length === 0\" disabled>\n no segments available\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.segmentId.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.segmentId)}}\n </mat-error>\n </mat-form-field>\n </div>\n <button class=\"segment-more\" type=\"button\" mat-icon-button *ngIf=\"canManageSegments\"\n matTooltip=\"Create and manage segments\" [matMenuTriggerFor]=\"segmentMenu\"\n [track]=\"['segment menu click', 'feature flags and settings']\">\n <mat-icon [inline]=\"true\">more_vert</mat-icon>\n </button>\n </div>\n</div>\n\n<mat-menu #segmentMenu=\"matMenu\">\n <ng-template matMenuContent>\n <a mat-menu-item (click)=\"createSegmentRequested.emit()\"\n [track]=\"['create segment click', 'Feature flags & settings V2 page']\">\n <mat-icon>add</mat-icon><span>Create new segment</span>\n </a>\n <a mat-menu-item (click)=\"manageSegmentsRequested.emit()\"\n [track]=\"['manage segment click', 'Feature flags & settings V2 page']\">\n <mat-icon>pie_chart</mat-icon><span>Manage segments</span>\n </a>\n </ng-template>\n</mat-menu>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n FormHelper, PrerequisiteComparator, IFeatureFlagLimitations,\n PrerequisiteFlagConditionForm, IPrerequisiteSetting,\n IValueModel, FormGenerator, SettingType\n} from '../../../../../../bootstrap';\n\n@Component({\n selector: 'app-prerequisite-flag-condition',\n templateUrl: './prerequisite-flag-condition.component.html',\n styleUrls: [\n '../../../components.scss',\n './prerequisite-flag-condition.component.scss'\n ]\n})\nexport class PrerequisiteFlagConditionComponent implements OnInit {\n @Input() targetingRuleIndex: number;\n @Input() conditionIndex: number;\n @Input() formGroup: FormGroup<PrerequisiteFlagConditionForm>;\n @Input() prerequisiteSettings: IPrerequisiteSetting[];\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Output() prerequisiteConditionChanged = new EventEmitter();\n SettingType = SettingType;\n prerequisiteSettingType: SettingType;\n\n FormHelper = FormHelper;\n\n prerequisiteComparators = [\n { value: PrerequisiteComparator.Equals, label: 'EQUALS' },\n { value: PrerequisiteComparator.DoesNotEqual, label: 'NOT EQUALS' },\n ];\n\n booleanPrerequisiteComparators = [\n { value: PrerequisiteComparator.Equals, label: 'IS ON' },\n { value: PrerequisiteComparator.DoesNotEqual, label: 'IS OFF' },\n ];\n\n constructor(private formGenerator: FormGenerator) { }\n\n ngOnInit() {\n this.prerequisiteSettingType = this.getSettingType();\n }\n\n getSettingType() {\n const prerequisiteSetting = this.prerequisiteSettings.filter(s => s.settingId == this.formGroup.controls.prerequisiteSettingId.value)[0];\n return prerequisiteSetting?.settingType ?? SettingType.Boolean;\n }\n\n prerequisiteSettingChanged() {\n const oldPrerequisiteSettingType = this.prerequisiteSettingType;\n this.prerequisiteSettingType = this.getSettingType();\n if (oldPrerequisiteSettingType !== this.prerequisiteSettingType) {\n this.formGroup.setControl('prerequisiteComparisonValue',\n this.formGenerator.generateValueFormGroup(\n this.getDefaultValueModel(this.prerequisiteSettingType), this.prerequisiteSettingType, false, this.featureFlagLimitations\n )\n );\n }\n this.prerequisiteConditionChanged.emit();\n }\n\n getDefaultValueModel(settingType: SettingType): IValueModel {\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: true };\n case SettingType.String:\n return { stringValue: '' };\n case SettingType.Int:\n return { intValue: 0 };\n case SettingType.Double:\n return { doubleValue: 0 };\n default:\n throw new Error('Invalid SettingType');\n }\n }\n}\n","<div class=\"targeting-rule-line smallest-form-field\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"conditionIndex\"></app-condition-chip>\n <div class=\"explanation\"><a href=\"https://configcat.com/docs/targeting/targeting-rule/flag-condition/\"\n target=\"_blank\" rel=\"noopener noreferrer\" class=\"user-link\">flag</a></div>\n </div>\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component pad-right\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.prerequisiteSettingId\"\n (change)=\"prerequisiteSettingChanged()\" matTooltip=\"Prerequisite feature flag or setting key\">\n <option [ngValue]=\"null\" disabled selected hidden *ngIf=\"prerequisiteSettings.length\">Select feature\n flag ...</option>\n <option *ngFor=\"let setting of prerequisiteSettings\" [ngValue]=\"setting.settingId\">\n {{setting.key}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.prerequisiteSettingId.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.prerequisiteSettingId)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right\" *ngIf=\"prerequisiteSettingType === SettingType.Boolean\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.comparator\"\n matTooltip=\"Prerequisite feature flag comparison value\">\n <option *ngFor=\"let prerequisiteComparator of booleanPrerequisiteComparators\"\n [ngValue]=\"prerequisiteComparator.value\">\n {{prerequisiteComparator.label}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right\" *ngIf=\"prerequisiteSettingType !== SettingType.Boolean\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl [formControl]=\"formGroup.controls.comparator\" matTooltip=\"Comparator\">\n <option *ngFor=\"let prerequisiteComparator of prerequisiteComparators\"\n [ngValue]=\"prerequisiteComparator.value\">\n {{prerequisiteComparator.label}}\n </option>\n </select>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <app-feature-flag-value class=\"wrapper-group grow\" *ngIf=\"prerequisiteSettingType !== SettingType.Boolean\"\n tooltip=\"Prerequisite feature flag comparison value\"\n [formGroup]=\"formGroup.controls.prerequisiteComparisonValue\" [isPrerequisite]=\"true\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport {\n IFlagState, IFeatureFlagLimitations,\n ConditionForm, FormGenerator, UserComparator, ISegment, SegmentComparator\n} from '../../../../../bootstrap';\n\n@Component({\n selector: 'app-conditions',\n templateUrl: './conditions.component.html',\n styleUrls: [\n '../../components.scss',\n './conditions.component.scss',\n '../../add-btn.scss'\n ]\n})\nexport class ConditionsComponent {\n @Input() formArray: FormArray<FormGroup<ConditionForm>>;\n @Input() segments: ISegment[];\n @Input() flagState: IFlagState;\n @Input() targetingRuleIndex: number;\n @Input() canManageSegments: boolean;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n @Output() lastConditionDeleted = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter();\n\n constructor(private formGenerator: FormGenerator) {\n }\n\n addUserCondition() {\n if (!this.checkLimitations()) return;\n\n const f = this.formGenerator.generateConditionFormGroup({\n userCondition: { comparisonAttribute: 'Identifier', comparator: UserComparator.SensitiveTextEquals, comparisonValue: { stringValue: '' } }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations);\n this.formArray.push(f);\n f.markAsDirty();\n }\n\n addSegmentCondition() {\n if (!this.checkLimitations()) return;\n\n if (this.segments.length === 0) {\n this.addSegmentConditionRequestedWithoutSegments.emit();\n return;\n }\n const f = this.formGenerator.generateConditionFormGroup({\n segmentCondition: { comparator: SegmentComparator.IsIn, segmentId: null }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations);\n this.formArray.push(f);\n f.markAsDirty();\n }\n\n addPrerequisiteFlagCondition() {\n if (!this.checkLimitations()) return;\n\n const f = new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: this.formGenerator.generateEmptyPrerequisiteFlagConditionFormGroup(this.featureFlagLimitations)\n });\n this.formArray.push(f);\n f.markAsDirty();\n }\n\n remove(index: number): void {\n const shouldEmit = !!this.formArray.controls[index].controls.prerequisiteFlagCondition;\n this.formArray.removeAt(index);\n this.formArray.markAsDirty();\n if (!this.formArray.controls.length) {\n this.lastConditionDeleted.emit();\n }\n if (shouldEmit) {\n this.prerequisiteConditionChanged.emit();\n }\n }\n\n checkLimitations() {\n if (this.formArray.controls.length >= this.featureFlagLimitations.maxConditionPerTargetingRuleCount) {\n this.subscriptionLimitReached.emit();\n return false;\n }\n return true;\n }\n}\n","<div *ngFor=\"let condition of formArray.controls; let i = index\" class=\"condition\">\n <app-user-condition class=\"grow\" *ngIf=\"condition.controls.userCondition\" [readOnly]=\"flagState.readOnly\"\n [formGroup]=\"condition.controls.userCondition\" [featureFlagLimitations]=\"featureFlagLimitations\"\n [targetingRuleIndex]=\"targetingRuleIndex\" [conditionIndex]=\"i\"></app-user-condition>\n <app-segment-condition class=\"grow\" *ngIf=\"condition.controls.segmentCondition\"\n [formGroup]=\"condition.controls.segmentCondition\" [segments]=\"segments\" [canManageSegments]=\"canManageSegments\"\n (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\" [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"i\"></app-segment-condition>\n <app-prerequisite-flag-condition class=\"grow\" *ngIf=\"condition.controls.prerequisiteFlagCondition\"\n [formGroup]=\"condition.controls.prerequisiteFlagCondition\"\n [prerequisiteSettings]=\"flagState.prerequisiteSettings\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"i\"></app-prerequisite-flag-condition>\n <div class=\"delete-button\" *ngIf=\"formArray.controls.length > 1 && !flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove condition\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n</div>\n\n<div class=\"add-cond\" *ngIf=\"formArray.controls.length && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div [matMenuTriggerFor]=\"andmenu\" matTooltip=\"Add AND condition\" class=\"add-btn add-and\">+ AND</div>\n</div>\n\n<mat-menu #andmenu class=\"menu-long-text-and\">\n <a mat-menu-item (click)=\"addUserCondition()\"><mat-icon>track_changes</mat-icon>Add user condition</a>\n <a mat-menu-item (click)=\"addSegmentCondition()\"><mat-icon>pie_chart</mat-icon>Add segment condition</a>\n <div matTooltip=\"There's no other flag in the Config to select as a prerequisite.\"\n [matTooltipDisabled]=\"flagState.prerequisiteSettings.length > 0\">\n <a mat-menu-item (click)=\"addPrerequisiteFlagCondition()\" [disabled]=\"!flagState.prerequisiteSettings.length\">\n <mat-icon>account_tree</mat-icon>Add flag condition (prerequisite)\n </a>\n </div>\n</mat-menu>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormArray } from '@angular/forms';\nimport {\n ISegment, TargetingRuleForm, \n FormGenerator, IFeatureFlagLimitations, IFlagState,\n PercentageOptionForm, IValueModel, SettingType\n} from '../../../../bootstrap'\n\n\n@Component({\n selector: 'app-targeting-rule',\n templateUrl: './targeting-rule.component.html',\n styleUrls: [\n './targeting-rule.component.scss',\n '../chips.scss',\n '../add-btn.scss'\n ]\n})\nexport class TargetingRuleComponent {\n @Input() formGroup: FormGroup<TargetingRuleForm>;\n @Input() segments: ISegment[];\n @Input() flagState: IFlagState;\n @Input() targetingRuleIndex: number;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() canManageSegments: boolean;\n @Input() showPercentageEvaluationAttribute: boolean;\n @Input() percentageEvaluationAttribute: string;\n\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n @Output() removedAllRules = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() changePercentageEvaluationAttributeRequested = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter();\n\n constructor(private formGenerator: FormGenerator) { }\n\n convertToPercentage() {\n if (!this.formGroup.controls.value || this.formGroup.controls.value.disabled) {\n return;\n }\n\n const currentValue: IValueModel = this.formGroup.controls.value.value;\n\n switch (this.flagState.settingValue.setting.settingType) {\n case SettingType.Boolean: {\n this.formGroup.setControl('percentageOptions',\n new FormArray<FormGroup<PercentageOptionForm>>([\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: currentValue.boolValue ? 100 : 0, value: { boolValue: true } }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations),\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: currentValue.boolValue ? 0 : 100, value: { boolValue: false } }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations)\n ], [this.formGenerator.validatePercentageSum]))\n this.formGroup.removeControl('value');\n this.formGroup.markAsDirty();\n break;\n }\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double: {\n this.formGroup.setControl('percentageOptions',\n new FormArray<FormGroup<PercentageOptionForm>>([\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: 100, value: currentValue }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations),\n this.formGenerator.generatePercentageOptionFormGroup({ percentage: 0, value: {} }, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations)\n ], [this.formGenerator.validatePercentageSum]))\n this.formGroup.removeControl('value');\n this.formGroup.markAsDirty();\n break;\n }\n\n default:\n throw new Error('Invalid SettingType');\n }\n }\n\n isPercentageOnly(): boolean {\n return this.formGenerator.isPercentageOnlyTargetingRule(this.formGroup);\n }\n\n showBadge(): boolean {\n return this.targetingRuleIndex !== 0 || !this.isPercentageOnly();\n }\n\n getChipText(): string {\n return this.targetingRuleIndex !== 0\n && this.isPercentageOnly()\n ? 'OTHERWISE'\n : 'THEN';\n }\n\n getChipTooltip(): string {\n return this.targetingRuleIndex !== 0\n && this.isPercentageOnly()\n ? 'This value will be served to all identified users who do not match the targeting rules above.'\n : '';\n }\n\n lastPercentageOptionLeft() {\n if (this.formGroup.controls.conditions.length === 0) {\n this.removedAllRules.emit();\n return;\n }\n const lastValue = this.formGroup.controls.percentageOptions.controls[0].controls.value.getRawValue();\n this.formGroup.setControl('value', this.formGenerator.generateValueFormGroup(lastValue, this.flagState.settingValue.setting.settingType, false, this.featureFlagLimitations));\n this.formGroup.removeControl('percentageOptions');\n this.formGroup.markAsDirty();\n }\n\n lastConditionDeleted() {\n if (!this.formGroup.controls.percentageOptions?.controls?.length) {\n this.removedAllRules.emit();\n }\n }\n\n subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n}\n","<div class=\"side-padd conditions\" *ngIf=\"formGroup.controls.conditions?.length\">\n <app-conditions [formArray]=\"formGroup.controls.conditions\" [segments]=\"segments\" [flagState]=\"flagState\"\n [targetingRuleIndex]=\"targetingRuleIndex\" (lastConditionDeleted)=\"lastConditionDeleted()\"\n [canManageSegments]=\"canManageSegments\" (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\"></app-conditions>\n</div>\n\n<mat-divider *ngIf=\"formGroup.controls.conditions?.length\"></mat-divider>\n\n<div class=\"served-value\">\n <div class=\"flex side-padd\">\n <div class=\"chip-container fixed-width\" *ngIf=\"showBadge()\" [matTooltip]=\"getChipTooltip()\">\n <mat-chip-set>\n <mat-chip disabled>{{getChipText()}}</mat-chip>\n </mat-chip-set>\n </div>\n\n <app-percentage-options class=\"grow\" *ngIf=\"formGroup.controls.percentageOptions?.length\"\n [formArray]=\"formGroup.controls.percentageOptions\" [flagState]=\"flagState\"\n (lastPercentageOptionLeft)=\"lastPercentageOptionLeft()\"\n (subscriptionLimitReached)=\"subscriptionLimitReached.emit()\"\n [featureFlagLimitations]=\"featureFlagLimitations\" [isPercentageOnlyTargetingRule]=\"isPercentageOnly()\"\n [showPercentageEvaluationAttribute]=\"showPercentageEvaluationAttribute\"\n [percentageEvaluationAttribute]=\"percentageEvaluationAttribute\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\">\n </app-percentage-options>\n <app-feature-flag-value class=\"grow\" *ngIf=\"formGroup.controls.value\" [flagState]=\"flagState\"\n [formGroup]=\"formGroup.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\" tooltip=\"Served value\"></app-feature-flag-value>\n </div>\n\n <div class=\"add-perc flex side-padd bot-padd\" *ngIf=\"formGroup.controls.value && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"convertToPercentage()\" matTooltip=\"Target a percentage of users to whom this rule applies\"\n class=\"add-btn add-perc-btn\">+ % OPTION</div>\n </div>\n</div>","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormArray } from '@angular/forms';\nimport {\n UserComparator, ISegment, SegmentComparator,\n UpdateSettingValueForm, TargetingRuleForm, ConditionForm,\n FormGenerator, IFeatureFlagLimitations, IPrerequisiteChanged, IFlagState\n} from '../../../bootstrap';\n\n@Component({\n selector: 'app-evaluation-formula',\n templateUrl: './evaluation-formula.component.html',\n styleUrls: [\n './evaluation-formula.component.scss',\n './chips.scss',\n './add-btn.scss'\n ]\n})\nexport class EvaluationFormulaComponent {\n @Input() formGroup: FormGroup<UpdateSettingValueForm>;\n @Input() segments: ISegment[];\n @Input() flagState: IFlagState;\n @Input() showVariationId: boolean;\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() canManageSegments: boolean;\n @Input() showPercentageEvaluationAttribute: boolean;\n\n @Output() createSegmentRequested = new EventEmitter();\n @Output() manageSegmentsRequested = new EventEmitter();\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n @Output() changePercentageEvaluationAttributeRequested = new EventEmitter();\n\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter<IPrerequisiteChanged>();\n @Output() recalcAddButtons = new EventEmitter();\n\n constructor(private formGenerator: FormGenerator) { }\n\n addUserCondition() {\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = new FormGroup<TargetingRuleForm>({\n conditions: new FormArray<FormGroup<ConditionForm>>([\n this.formGenerator.generateConditionFormGroup({\n userCondition: { comparisonAttribute: 'Identifier', comparator: UserComparator.SensitiveTextEquals, comparisonValue: { stringValue: '' } }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations)\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.featureFlagLimitations)\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addSegmentCondition() {\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n if (this.segments.length === 0) {\n this.addSegmentConditionRequestedWithoutSegments.emit();\n return false;\n }\n\n const formGroup = new FormGroup<TargetingRuleForm>({\n conditions: new FormArray<FormGroup<ConditionForm>>([\n this.formGenerator.generateConditionFormGroup({\n segmentCondition: { comparator: SegmentComparator.IsIn, segmentId: null }\n }, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations)\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.featureFlagLimitations)\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addPrerequisiteFlagCondition() {\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = new FormGroup<TargetingRuleForm>({\n conditions: new FormArray<FormGroup<ConditionForm>>([\n new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: this.formGenerator.generateEmptyPrerequisiteFlagConditionFormGroup(this.featureFlagLimitations)\n })\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.featureFlagLimitations)\n });\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addPercentageOptions() {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return false;\n }\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = this.formGenerator.generateTargetingRuleWithEmptyPercentageOptions(\n this.flagState.settingValue.setting.settingType, this.flagState.readOnly, this.flagState.prerequisiteSettings, this.featureFlagLimitations\n )\n this.addTargetingRuleFormGroup(formGroup);\n formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n return true;\n }\n\n addTargetingRuleFormGroup(formGroup: FormGroup<TargetingRuleForm>) {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n this.formGroup.controls.targetingRules.insert(this.formGroup.controls.targetingRules.controls.length - 1, formGroup);\n } else {\n this.formGroup.controls.targetingRules.push(formGroup);\n }\n this.recalcAddButtons.emit();\n return true;\n }\n\n checkFeatureFlagLimitations() {\n if (this.formGroup.controls.targetingRules.length >= this.featureFlagLimitations.maxTargetingRuleCount) {\n this.subscriptionLimitReached.emit();\n return false;\n }\n return true;\n }\n\n trackByIndex(index: number): any {\n return index;\n }\n\n onDrop(event: CdkDragDrop<any>) {\n const targetingRules = this.formGroup.controls.targetingRules.controls;\n moveItemInArray(targetingRules, event.previousIndex, event.currentIndex);\n this.formGroup.markAsDirty();\n this.recalcAddButtons.emit();\n }\n\n isDragDisabled(targetingRule: FormGroup<TargetingRuleForm>) {\n // If the last targeting rule has only percentage options, we should not allow moving anything before/after it.\n return this.flagState.readOnly || this.formGenerator.isPercentageOnlyTargetingRule(targetingRule);\n }\n\n sortPredicate() {\n return (index: number) => this.sortPredicateFunction(index);\n }\n\n sortPredicateFunction(index: number) {\n // If the last targeting rule has only percentage options, we should not allow moving anything before/after it.\n return index < this.formGroup.controls.targetingRules.controls.length - 1 ||\n !this.formGenerator.isPercentageOnlyTargetingRule(this.formGroup.controls.targetingRules.controls[index])\n }\n\n getChipText(): string {\n if (this.formGroup.controls.targetingRules.controls.length > 0) {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return 'To unidentified:';\n } else {\n return 'To all others:';\n }\n }\n\n return 'To all users:';\n }\n\n getChipTooltip(): string {\n if (this.formGroup.controls.targetingRules.controls.length > 0) {\n if (this.flagState.addButtonRenderState.hasPercentageOnlyRule) {\n return 'This fallback value will be served in case the user can\\'t be identified.';\n } else {\n return 'This value will be served to all users who the above rules don\\'t apply.';\n }\n }\n\n return '';\n }\n\n remove(index: number): void {\n const shouldEmitPrerequisiteChanged = this.formGroup.controls\n .targetingRules.controls[index].controls\n .conditions?.controls\n .some(c => c.controls.prerequisiteFlagCondition);\n this.formGroup.controls.targetingRules.removeAt(index);\n this.formGroup.controls.targetingRules.markAsDirty();\n this.recalcAddButtons.emit();\n if (shouldEmitPrerequisiteChanged) {\n this.recalcPrerequisiteReferences();\n }\n }\n\n subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n\n recalcPrerequisiteReferences(): void {\n const prerequisiteIds = []\n for (const rule of this.formGroup.controls.targetingRules.controls) {\n for (const condition of rule.controls.conditions.controls) {\n if (condition.controls.prerequisiteFlagCondition) {\n prerequisiteIds.push(condition.controls.prerequisiteFlagCondition.controls.prerequisiteSettingId.value)\n }\n }\n }\n this.prerequisiteConditionChanged.emit({\n settingId: this.flagState.settingValue.setting.settingId,\n prerequisiteIds: prerequisiteIds\n });\n }\n}\n","<div class=\"targeting-rule-outer\" *ngIf=\"flagState.addButtonRenderState.renderTopAddButtons && !flagState.readOnly\">\n <div class=\"grow vertical-center add-box pad-bottom left-align\">\n <div class=\"add-btn add-if\" [matMenuTriggerFor]=\"ormenu\" \n matTooltip=\"Add targeting rule\">+ IF</div>\n <div class=\"add-btn add-if pad-left\" (click)=\"addPercentageOptions()\" matTooltip=\"Target a percentage of users\" \n *ngIf=\"!flagState.addButtonRenderState.hasPercentageOnlyRule\">+ %</div>\n </div>\n</div>\n\n<div cdkDropList (cdkDropListDropped)=\"onDrop($event)\" [cdkDropListDisabled]=\"flagState.readOnly\" [cdkDropListSortPredicate]=\"sortPredicate()\">\n <div *ngFor=\"let targetingRule of formGroup.controls.targetingRules.controls; trackBy: trackByIndex; let i = index\">\n <div class=\"targeting-rule-outer grow\" cdkDrag [cdkDragDisabled]=\"isDragDisabled(targetingRule)\"\n [cdkDragData]=\"targetingRule\">\n <div class=\"drag-handle\">\n <div *ngIf=\"!isDragDisabled(targetingRule)\" cdkDragHandle matTooltip=\"Drag here to reorder\"\n matTooltipPosition=\"above\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n <div class=\"white-box grow\">\n <app-targeting-rule class=\"grow\" [formGroup]=\"targetingRule\" [segments]=\"segments\"\n [flagState]=\"flagState\" [targetingRuleIndex]=\"i\"\n (removedAllRules)=\"remove(i)\" [featureFlagLimitations]=\"featureFlagLimitations\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n [canManageSegments]=\"canManageSegments\" (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [showPercentageEvaluationAttribute]=\"showPercentageEvaluationAttribute\"\n [percentageEvaluationAttribute]=\"formGroup.controls.percentageEvaluationAttribute.value\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisiteReferences()\"></app-targeting-rule>\n <div class=\"delete\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove targeting rule\" (click)=\"remove(i)\"\n *ngIf=\"!flagState.readOnly\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"targeting-rule-outer\" *ngIf=\"flagState.addButtonRenderState.addRuleButtonTracker[i]?.showAddRuleButtons && !flagState.readOnly\">\n <div class=\"grow vertical-center add-box pad-bottom pad-top center-shift\">\n <div class=\"add-btn add-if\" \n [matMenuTriggerFor]=\"ormenu\" \n matTooltip=\"Add targeting rule\" \n *ngIf=\"!flagState.readOnly\">+ OR</div>\n <div class=\"add-btn add-if pad-left\" (click)=\"addPercentageOptions()\" \n matTooltip=\"Target a percentage of users\" \n *ngIf=\"!flagState.addButtonRenderState.hasPercentageOnlyRule\">+ %</div>\n </div>\n </div>\n <div class=\"or-chip\" *ngIf=\"flagState.addButtonRenderState.addRuleButtonTracker[i]?.showOrChip\">\n <div class=\"chip-container\">\n <mat-chip-set>\n <mat-chip disabled>OR</mat-chip>\n </mat-chip-set>\n </div>\n </div>\n <div class=\"or-chip\" *ngIf=\"flagState.addButtonRenderState.addRuleButtonTracker[i]?.renderSeparationArea\"></div>\n </div>\n</div>\n\n<div class=\"targeting-rule-outer\">\n <div class=\"drag-handle\"></div>\n <div class=\"white-box grow side-padd vertical-center\">\n <div class=\"chip-container fixed-width\" [ngClass]=\"flagState.addButtonRenderState.hasPercentageOnlyRule ? 'fixed-width-wide' : ''\">\n <mat-chip-set matTooltipPosition=\"above\" [matTooltip]=\"getChipTooltip()\">\n <mat-chip disabled>{{getChipText()}}</mat-chip>\n </mat-chip-set>\n </div>\n <app-feature-flag-value class=\"value grow\" [flagState]=\"flagState\"\n tooltip=\"Served value\" [formGroup]=\"formGroup.controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n </div>\n</div>\n\n<mat-menu #ormenu class=\"menu-long-text-or\">\n <a mat-menu-item (click)=\"addUserCondition()\"><mat-icon>track_changes</mat-icon>Add rule with user condition</a>\n <a mat-menu-item (click)=\"addSegmentCondition()\"><mat-icon>pie_chart</mat-icon>Add rule with segment condition</a>\n <div matTooltip=\"There's no other flag in the Config to select as a prerequisite.\"\n [matTooltipDisabled]=\"flagState.prerequisiteSettings.length > 0\">\n <a mat-menu-item (click)=\"addPrerequisiteFlagCondition()\" [disabled]=\"!flagState.prerequisiteSettings.length\">\n <mat-icon>account_tree</mat-icon>Add rule with flag condition (prerequisite)\n </a>\n </div>\n</mat-menu>","import { Component, Inject, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormHelper, FormGenerator } from '../../../bootstrap';\n\n@Component({\n selector: 'app-percentage-evaluation-attribute-dialog',\n templateUrl: './percentage-evaluation-attribute-dialog.component.html',\n styleUrls: ['./percentage-evaluation-attribute-dialog.component.scss']\n})\nexport class PercentageEvaluationAttributeDialogComponent implements OnInit {\n\n FormHelper = FormHelper;\n readOnly: boolean;\n defaultComparisonAttributes = ['Identifier', 'Email', 'Country'];\n formControl: FormControl<string>;\n\n constructor(\n public dialogRef: MatDialogRef<PercentageEvaluationAttributeDialogComponent>,\n private formGenerator: FormGenerator,\n @Inject(MAT_DIALOG_DATA) public data: { percentageEvaluationAttribute: string, readOnly: boolean }\n ) {\n }\n\n ngOnInit(): void {\n this.formControl = this.formGenerator.generatePercentageEvaluationAttributeFormControl(this.data.percentageEvaluationAttribute, this.data.readOnly)\n }\n\n close() {\n this.dialogRef.close();\n }\n\n attributeChanged(event: Event): void {\n const value = (event.target as HTMLSelectElement).value;\n if (this.defaultComparisonAttributes.indexOf(value) === 0) {\n if (this.formControl.value !== null) {\n this.formControl.setValue(null);\n this.formControl.markAsDirty();\n }\n } else if (this.isDefault(value)) {\n if (this.formControl.value !== value) {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n }\n } else if (this.formControl.value !== '') {\n this.formControl.setValue('');\n this.formControl.markAsDirty();\n }\n }\n\n isDefault(attribute: string): boolean {\n return attribute === null || this.defaultComparisonAttributes.indexOf(attribute) !== -1;\n }\n\n set() {\n if (this.formControl.invalid) {\n this.formControl.markAsTouched();\n return;\n }\n\n this.dialogRef.close({ percentageEvaluationAttribute: this.formControl.value });\n }\n}\n\n","<h1 mat-dialog-title>Change percentage evaluation attribute</h1>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n When evaluating percentage-based user targeting, ConfigCat should use a specific user attribute as the basis for\n determining whether a user falls within the targeted percentage group.</p>\n\n <div class=\"components\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Evaluation attribute</mat-label>\n <mat-hint>This attribute will be used in all percentage based targeting within this feature flag.</mat-hint>\n <select matNativeControl (change)=\"attributeChanged($event)\" [disabled]=\"formControl.disabled\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes; let i = index\"\n [selected]=\"comparisonAttribute === formControl.value || (formControl.value === null && i === 0)\">\n {{comparisonAttribute}}</option>\n <option [selected]=\"!isDefault(formControl.value)\">\n Custom\n </option>\n </select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"isDefault(formControl.value)\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\">\n <mat-error *ngIf=\"formControl.invalid\">\n {{FormHelper.getErrorMessage(formControl)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\"> <a\n href=\"https://configcat.com/docs/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\" rel=\"noopener noreferrer\">\n Read more </a> about percentage-based targeting in the docs.</p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n</div>","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { IDependeeSetting } from '../../../_models/setting-value-formgroup';\nimport { Router } from '@angular/router';\nimport { PublicApiService } from '../../../_services';\n\n@Component({\n selector: 'app-dependees-dialog',\n templateUrl: './dependees-dialog.component.html'\n})\nexport class DependeesDialogComponent {\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: {\n dependees: IDependeeSetting[],\n name: string,\n organizationId: string,\n productId: string,\n configId: string,\n environmentId: string\n },\n\n private router: Router,\n private publicApiService: PublicApiService\n ) { }\n\n getDashboardUrl(settingId: number) {\n const urlTree = this.router.createUrlTree(['v2', this.data.organizationId,\n this.data.productId, this.data.configId, this.data.environmentId, settingId]);\n return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);\n }\n}\n","<h1 mat-dialog-title>Prerequisite references</h1>\n<div mat-dialog-content>\n <p>\n <strong>{{data.name}}</strong> is the prerequisite of the following feature flags:\n </p>\n <ul *ngFor=\"let dependee of data.dependees\">\n <li><a [href]=\"getDashboardUrl(dependee.settingId)\" rel=\"noopener noreferrer\" target=\"_blank\">{{dependee.name}}\n ({{dependee.key}})</a></li>\n </ul>\n</div>\n\n<div mat-dialog-actions>\n <button type=\"button\" mat-stroked-button mat-dialog-close>Close</button>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n MessagingService, ISegment,\n IPrerequisiteChanged, IFeatureFlagLimitations, UpdateSettingValueForm,\n FormGenerator, SettingType, IFlagState\n} from '../../bootstrap';\nimport { PercentageEvaluationAttributeDialogComponent } from './percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component';\nimport { Router } from '@angular/router';\nimport { PublicApiService } from '../../_services';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { DependeesDialogComponent } from './dependees-dialog/dependees-dialog.component';\n\nexport interface IGlance {\n ruleText: string\n percentageText: string\n class: string\n}\n\n@Component({\n selector: 'app-feature-flag',\n templateUrl: './feature-flag.component.html',\n styleUrls: [\n './feature-flag.component.scss'\n ]\n})\nexport class FeatureFlagComponent {\n @Input() formGroup: FormGroup<UpdateSettingValueForm>;\n @Input() flagState: IFlagState;\n @Input() segments: ISegment[];\n @Input() featureFlagLimitations: IFeatureFlagLimitations;\n @Input() hasOtherEnvironment: boolean;\n @Input() environmentName = \"\";\n @Input() showEnvironmentName = false;\n @Input() deleteSettingText = 'Delete setting';\n @Input() canDeleteSetting = false;\n\n @Output() addSegmentConditionRequestedWithoutSegments = new EventEmitter();\n\n @Output() expandedChanged = new EventEmitter<boolean>();\n @Output() deleteSettingRequested = new EventEmitter();\n @Output() subscriptionLimitReached = new EventEmitter();\n @Output() prerequisiteConditionChanged = new EventEmitter<IPrerequisiteChanged>();\n @Output() recalcAddButtons = new EventEmitter();\n\n constructor(\n private dialog: MatDialog,\n private messagingService: MessagingService,\n private formGenerator: FormGenerator,\n private router: Router,\n private publicApiService: PublicApiService,\n private clipboard: Clipboard) {\n }\n\n setExpanded(expanded: boolean) {\n this.expandedChanged.emit(expanded);\n }\n\n deleteSetting() {\n this.deleteSettingRequested.emit({ setting: this.flagState.settingValue.setting });\n }\n\n keyCopied() {\n this.messagingService.showSuccessSnack('Copied.');\n }\n\n subscriptionLimitReachedCalled() {\n this.subscriptionLimitReached.emit();\n }\n\n changePercentageEvaluationAttribute() {\n if (this.flagState.readOnly) {\n return;\n }\n\n const dialogRef = this.dialog.open(PercentageEvaluationAttributeDialogComponent, {\n width: '500px',\n data: {\n percentageEvaluationAttribute: this.formGroup.controls.percentageEvaluationAttribute.value,\n readOnly: this.flagState.readOnly\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result && result.percentageEvaluationAttribute !== this.formGroup.controls.percentageEvaluationAttribute.value) {\n this.formGroup.controls.percentageEvaluationAttribute.setValue(result.percentageEvaluationAttribute);\n this.formGroup.controls.percentageEvaluationAttribute.updateValueAndValidity();\n this.formGroup.controls.percentageEvaluationAttribute.markAsDirty();\n this.formGroup.controls.percentageEvaluationAttribute.markAsTouched();\n }\n });\n }\n\n getGlance(): IGlance {\n if (this.formGroup.controls.targetingRules.length === 0 || this.flagState.panelExpanded) {\n return null;\n }\n\n const glance: IGlance = { ruleText: this.getRuleText(), percentageText: '', class: 'default' }\n\n const hasTrueRule = this.formGroup.controls.targetingRules.controls.some(r => r.controls.value?.controls?.boolValue?.value === true);\n const lastFormulaTerm = this.formGroup.controls.targetingRules.controls[this.formGroup.controls.targetingRules.controls.length - 1];\n if (this.formGenerator.isPercentageOnlyTargetingRule(lastFormulaTerm)) {\n if (this.flagState.settingValue.setting.settingType === SettingType.Boolean) {\n const boolRule = lastFormulaTerm.controls.percentageOptions.controls.filter(p => p.controls.value.controls?.boolValue?.value)[0];\n if (boolRule.controls.percentage.value > 0) {\n glance.percentageText = 'ON for ' + boolRule.controls.percentage.value + '%';\n glance.class = 'on';\n }\n else {\n glance.percentageText = 'OFF (%)';\n glance.class = hasTrueRule ? 'on' : 'off'\n }\n } else {\n glance.percentageText = lastFormulaTerm.controls.percentageOptions.controls.map(p => p.controls.percentage.value + '%').join(' / ');\n glance.class = 'other';\n }\n } else {\n switch (this.flagState.settingValue.setting.settingType) {\n case SettingType.Double:\n glance.percentageText = this.formGroup.controls.defaultValue.value.doubleValue?.toString() ?? '';\n break;\n case SettingType.Int:\n glance.percentageText = this.formGroup.controls.defaultValue.value.intValue?.toString() ?? '';\n break;\n case SettingType.String:\n glance.percentageText = this.formGroup.controls.defaultValue.value.stringValue;\n break;\n case SettingType.Boolean:\n glance.percentageText = this.formGroup.controls.defaultValue.value.boolValue === true ? 'ON' : 'OFF';\n break;\n }\n\n if (this.flagState.settingValue.setting.settingType === SettingType.Boolean) {\n glance.class = this.formGroup.controls.defaultValue.value.boolValue === true || hasTrueRule ? 'on' : 'off';\n } else {\n glance.class = 'other';\n }\n }\n\n return glance;\n }\n\n getRuleText(): string {\n const count = this.formGroup.controls.targetingRules.controls.filter(tr => !this.formGenerator.isPercentageOnlyTargetingRule(tr)).length;\n if (count === 0) {\n return '';\n }\n\n return '+ ' + count + ' rule' + (count > 1 ? 's' : '');\n }\n\n copyDirectLink() {\n try {\n this.clipboard.copy(this.getDashboardUrl());\n this.messagingService.showSuccessSnack(\"Copied direct link to clipboard.\");\n } catch {\n this.messagingService.showSuccessSnack(\"Clipboard unavailable.\");\n }\n }\n\n getDashboardUrl() {\n const urlTree = this.router.createUrlTree(['v2', this.flagState.settingValue.config.product.organization.organizationId,\n this.flagState.settingValue.config.product.productId, this.flagState.settingValue.config.configId, this.flagState.settingValue.environment.environmentId, this.flagState.settingValue.setting.settingId]);\n return this.publicApiService.getDashboardBasePath() + this.router.serializeUrl(urlTree);\n }\n\n openDependeesDialog() {\n this.dialog.open(DependeesDialogComponent, {\n data: {\n dependees: this.flagState.dependeeSettings,\n name: this.flagState.settingValue.setting.name,\n organizationId: this.flagState.settingValue.config.product.organization.organizationId,\n productId: this.flagState.settingValue.config.product.productId,\n configId: this.flagState.settingValue.config.configId,\n environmentId: this.flagState.settingValue.environment.environmentId\n }\n });\n }\n}\n","<div class=\"outer\">\n <div class=\"mat-elevation-z0 feature-flag\" [ngClass]=\"{'invalid': formGroup.touched && formGroup.invalid}\">\n <div class=\"expandcollapse\">\n <div *ngIf=\"flagState.panelExpanded\" matTooltip=\"Collapse\" (click)=\"setExpanded(!flagState.panelExpanded)\"\n class=\"btn\">\n <mat-icon>arrow_drop_up</mat-icon>\n </div>\n <div *ngIf=\"!flagState.panelExpanded\" matTooltip=\"Expand\" (click)=\"setExpanded(!flagState.panelExpanded)\"\n class=\"btn\">\n <mat-icon>arrow_drop_down</mat-icon>\n </div>\n </div>\n <div class=\"header\">\n <div class=\"top\">\n <div class=\"left\">\n <div class=\"name-key\">\n <span class=\"name\"\n [matTooltip]=\"flagState.settingValue.setting.name\">{{flagState.settingValue.setting.name}}</span>\n <span *ngIf=\"showEnvironmentName\" class=\"environment-name\" [matTooltip]=\"environmentName\">({{environmentName}})</span>\n <span class=\"key-outer\" matTooltip=\"Copy feature flag key to clipboard\"\n [cdkCopyToClipboard]=\"flagState.settingValue.setting.key\"\n (cdkCopyToClipboardCopied)=\"keyCopied()\">\n <span class=\"key\">\n <code>{{flagState.settingValue.setting.key}}</code>\n </span>\n <mat-icon>content_copy</mat-icon>\n </span>\n </div>\n </div>\n\n <div class=\"right\">\n <div class=\"line\">\n <button type=\"button\" class=\"prereq-button\" mat-icon-button\n *ngIf=\"flagState.dependeeSettings && flagState.dependeeSettings.length\"\n [track]=\"['prerequisite button click', 'Feature flags & settings V2 page']\"\n [matTooltip]=\"'Prerequisite of '+flagState.dependeeSettings.length+' other flag(s).'\"\n (click)=\"openDependeesDialog()\">\n <mat-icon>account_tree</mat-icon>\n </button>\n <button type=\"button\" class=\"more-button\" [matMenuTriggerFor]=\"moreMenu\" mat-icon-button\n [track]=\"['more menu button click', 'Feature flags & settings V2 page']\" matTooltip=\"More\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"hint-container\">\n <div class=\"hint\" *ngIf=\"flagState.settingValue.setting.hint\">\n {{flagState.settingValue.setting.hint}}\n </div>\n\n <app-feature-flag-value class=\"glance\"\n [class.text-glance]=\"flagState.settingValue.setting.settingType !== 'boolean'\"\n *ngIf=\"!flagState.panelExpanded && !formGroup.controls.targetingRules.length\"\n [flagState]=\"flagState\" [formGroup]=\"formGroup.controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations\" tooltip=\"Served value\"></app-feature-flag-value>\n\n <div class=\"quick-glance\" *ngIf=\"getGlance() as glance\" (click)=\"setExpanded(!flagState.panelExpanded)\">\n <div class=\"container\" [class]=\"glance.class\">\n <div class=\"quick-glance-item\" *ngIf=\"glance.percentageText\">{{glance.percentageText}}</div>\n <div class=\"quick-glance-item\" *ngIf=\"glance.ruleText\">{{glance.ruleText}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"flagState.panelExpanded\">\n <div class=\"eval-formula-wrapper\">\n <app-evaluation-formula [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n [featureFlagLimitations]=\"featureFlagLimitations\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\" [canManageSegments]=\"false\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n [showPercentageEvaluationAttribute]=\"!!formGroup.controls.percentageEvaluationAttribute.value\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttribute()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit($event)\"\n (recalcAddButtons)=\"recalcAddButtons.emit()\">\n </app-evaluation-formula>\n </div>\n </ng-container>\n </div>\n</div>\n<mat-menu #moreMenu=\"matMenu\">\n <div mat-menu-item data-robot=\"history\" (click)=\"changePercentageEvaluationAttribute()\"\n [track]=\"['change percentage attribute click', 'Feature flags & settings V2 page']\"\n [disabled]=\"this.flagState.readOnly\">\n <mat-icon>percent</mat-icon>\n <span>Change percentage attribute</span>\n </div>\n <a href=\"{{getDashboardUrl()}}\" target=\"_blank\" rel=\"noopener noreferrer\">\n <div mat-menu-item data-robot=\"history\">\n <mat-icon>open_in_new</mat-icon>\n <span>Open in ConfigCat</span>\n </div>\n </a>\n <div mat-menu-item data-robot=\"renameSetting\"\n [track]=\"['copy direct link click', 'Feature flags & settings V2 page']\" (click)=\"copyDirectLink()\">\n <mat-icon>content_copy</mat-icon>\n <span>Copy direct link</span>\n </div>\n <div *ngIf=\"canDeleteSetting\">\n <mat-divider></mat-divider>\n <div mat-menu-item data-robot=\"deleteSetting\"\n [track]=\"['delete feature flag click', 'Feature flags & settings V2 page']\" (click)=\"deleteSetting()\">\n <mat-icon>delete_outline</mat-icon>\n <span>{{deleteSettingText}}</span>\n </div>\n </div>\n</mat-menu>","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { BaseComponent } from '../base/base.component';\nimport { SegmentListModel, SettingDataModel, SettingFormulaModel, UpdateEvaluationFormulaModel } from 'ng-configcat-publicapi';\nimport { IFlagState } from '../_models/flag-state';\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { IPrerequisiteSetting, TargetingRuleForm, UpdateSettingValueForm } from '../_models/setting-value-formgroup';\nimport { PublicApiService } from '../_services';\nimport { Subscription, forkJoin, throwError } from 'rxjs';\nimport { ConfirmationDialogComponent } from '../dialogs/confirmation-dialog/confirmation-dialog';\nimport { ReasonDialogComponent } from '../dialogs/reason-dialog/reason-dialog.component';\nimport { FormGenerator } from '../_services/form-generator';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { SaveSnackbarComponent } from '../dialogs/save-snackbar/save-snackbar.component';\nimport { DeleteSettingModel } from '../_models';\nimport { RerouteDialogComponent } from '../bootstrap';\n\n@Component({\n selector: 'configcat-feature-flag-item',\n templateUrl: './feature-flag-item.component.html',\n styleUrls: ['./feature-flag-item.component.scss']\n})\nexport class FeatureFlagItemComponent extends BaseComponent implements OnInit, OnDestroy {\n\n @Input() productId!: string;\n @Input() environmentId!: string;\n @Input() configId!: string;\n @Input() settingId!: number;\n\n @Input() canDeleteSetting = true;\n @Input() deleteSettingText = 'Delete setting';\n @Input() showEnvironmentName = true;\n\n @Output() deleteSettingRequested = new EventEmitter();\n\n @Output() loadSucceeded = new EventEmitter();\n @Output() loadFailed = new EventEmitter();\n @Output() saveSucceeded = new EventEmitter();\n @Output() saveFailed = new EventEmitter();\n @Output() expandedStateChanged = new EventEmitter();\n @Output() formValuesChanged = new EventEmitter();\n\n segments!: SegmentListModel[];\n dashboardBasePath: string;\n loading = true;\n\n formGroup: FormGroup<UpdateSettingValueForm>;\n formValueChangesSubscription: Subscription;\n\n settings: SettingDataModel[];\n\n flagState: IFlagState;\n\n settingFormula: SettingFormulaModel;\n prerequisiteSettings: IPrerequisiteSetting[];\n\n showFeedBackMessage = false;\n\n hasSettingValues = false;\n\n hasOtherEnvironment = false;\n\n constructor(\n private formGenerator: FormGenerator,\n private dialog: MatDialog,\n private snackBar: MatSnackBar,\n publicApiService: PublicApiService\n ) {\n super(publicApiService);\n this.dashboardBasePath = publicApiService.getDashboardBasePath();\n }\n\n\n ngOnInit() {\n this.reloadSettingValues();\n }\n\n ngOnDestroy(): void {\n this.unsubscribeFormValueChangesSubscription();\n }\n\n reloadSettingValues() {\n\n this.loading = true;\n this.createSettingValuesV2Service()\n\n forkJoin({\n segments: this.createSegmentsService().getSegments(this.productId),\n settings: this.createSettingsService().getSettings(this.configId),\n settingFormula: this.createSettingValuesV2Service().getSettingValueV2(this.environmentId, this.settingId)\n }).subscribe(result => {\n this.settings = result.settings;\n this.prerequisiteSettings = this.settings.map(sv => {\n return {\n settingId: sv.settingId,\n key: sv.key,\n name: sv.name,\n settingType: sv.settingType\n }\n });\n this.segments = result.segments;\n this.handleFetchedSettingValues(result.settingFormula);\n this.loading = false;\n this.loadSucceeded.emit();\n },\n (error) => {\n this.loadFailed.emit(error);\n return throwError(error);\n });\n }\n\n handleFetchedSettingValues(model: SettingFormulaModel) {\n this.settingFormula = model;\n // when we have less we had previously\n this.flagState = {\n addButtonRenderState: {\n hasPercentageOnlyRule: false,\n renderTopAddButtons: false,\n addRuleButtonTracker: []\n },\n readOnly: model.readOnly,\n dependeeSettings: [],\n settingValue: model,\n panelExpanded: true,\n prerequisiteSettings: this.getAvailablePrerequisiteSettings(model.setting.settingId)\n }\n\n this.unsubscribeFormValueChangesSubscription();\n\n this.createFormGroupFromState(this.settingFormula);\n\n this.formValueChangesSubscription = this.formGroup.valueChanges.subscribe(() => {\n this.formValuesChanged.emit();\n })\n\n this.recalcAddButtons();\n this.recalcPrerequisites();\n }\n\n unsubscribeFormValueChangesSubscription() {\n if (this.formValueChangesSubscription) {\n this.formValueChangesSubscription.unsubscribe();\n this.formValueChangesSubscription = null;\n }\n }\n\n private createFormGroupFromState(model: SettingFormulaModel) {\n this.formGroup = this.formGenerator.generateSettingValuesFormGroup(model, model.readOnly, this.prerequisiteSettings, model.featureFlagLimitations);\n }\n\n getAvailablePrerequisiteSettings(settingId: number) {\n return this.prerequisiteSettings.filter(ds => ds.settingId !== settingId);\n }\n\n revert() {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'Revert to last saved state?',\n body: 'All changes will be lost.',\n yesButtonLabel: 'Revert',\n noButtonLabel: 'No'\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result === 'yes') {\n this.revertDirtyValuesFromState();\n }\n });\n }\n\n revertDirtyValuesFromState() {\n\n if (this.formGroup.dirty) {\n this.formGroup.setControl('defaultValue',\n this.formGenerator.generateValueFormGroup(this.settingFormula.defaultValue, this.settingFormula.setting.settingType, this.settingFormula.readOnly, this.settingFormula.featureFlagLimitations));\n this.formGroup.setControl('percentageEvaluationAttribute',\n new FormControl({ value: this.settingFormula.percentageEvaluationAttribute, disabled: this.settingFormula.readOnly }, { validators: [Validators.max(1000)] }),);\n this.formGroup.setControl('targetingRules',\n new FormArray<FormGroup<TargetingRuleForm>>(\n this.settingFormula.targetingRules.map(ft => this.formGenerator.generateTargetingRuleFormGroup(ft, this.settingFormula.setting.settingType, this.settingFormula.readOnly, this.prerequisiteSettings, this.settingFormula.featureFlagLimitations))\n ));\n this.recalcAddButtons();\n }\n\n this.formGroup.markAsPristine();\n this.formGroup.markAsUntouched();\n this.recalcPrerequisites();\n this.showFeedBackMessage = false;\n }\n\n submit() {\n if (!this.formGroup) {\n return;\n }\n\n if (!this.formGroup.valid) {\n this.showFeedBackMessage = true;\n this.formGroup.markAllAsTouched();\n return;\n }\n\n this.showFeedBackMessage = false;\n const value: UpdateEvaluationFormulaModel = {\n ...this.formGroup.getRawValue(),\n };\n\n this.updateSettingValues(value);\n }\n\n updateSettingValues(updateModel: UpdateEvaluationFormulaModel, reason: string = null) {\n\n this.createSettingValuesV2Service().replaceSettingValueV2(this.environmentId, this.settingId, updateModel, reason)\n .subscribe({\n next: settingValues => {\n this.handleFetchedSettingValues(settingValues);\n\n this.snackBar.openFromComponent(SaveSnackbarComponent, { duration: 5000, panelClass: 'green-snackbar' });\n this.saveSucceeded.emit();\n },\n error: (error) => {\n\n if (error.status === 400 && error.error && error.error.Reason && error.error.Reason[0] === 'Reason required.') {\n const dialogRef = this.dialog.open(ReasonDialogComponent, {\n width: '450px'\n });\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result && result.button === 'save' && result.reason) {\n this.updateSettingValues(updateModel, result.reason);\n }\n });\n return;\n }\n\n if (error.status === 400 && error.error && error.error.SegmentCondition && error.error.SegmentCondition[0] === 'Segment not found.') {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n width: '450px',\n data: {\n title: 'Cannot save feature flags',\n body: 'A segment referenced by one of your feature flags has been deleted. Reload the config to see its latest state, apply your changes and try the save again.',\n yesButtonLabel: 'Reload',\n hideNoButton: true\n }\n });\n dialogRef.afterClosed()\n .subscribe(() => {\n this.reloadSettingValues();\n });\n return;\n }\n\n if (error.status === 400 && error.error && ('' + error.error).startsWith('Circular dependency detected.')) {\n const errorMessage = ('' + error.error).slice('Circular dependency detected.'.length + 1);\n this.dialog.open(ConfirmationDialogComponent, {\n width: '450px',\n data: {\n title: 'Cannot save feature flags.',\n body: 'Circular dependency detected between the following feature flags:<p>' + errorMessage + '</p>Please <strong>eliminate the circular dependency</strong> before saving your feature flags.',\n yesButtonLabel: 'I understand',\n hideNoButton: true\n }\n });\n return;\n }\n\n this.formGroup.setErrors({ internalServerError: 'Internal server error' });\n this.formGroup.markAsTouched();\n this.showFeedBackMessage = true;\n this.saveFailed.emit();\n }\n });\n }\n\n onDeleteSettingRequested(setting) {\n if (this.formGroup.dirty) {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'Discard changes?',\n body: 'You have unsaved feature flag changes. If you continue, unsaved changes will be lost.',\n yesButtonLabel: 'Discard changes',\n noButtonLabel: 'No'\n }\n });\n\n dialogRef.afterClosed()\n .subscribe(result => {\n if (result === 'yes') {\n this.revertDirtyValuesFromState();\n this.deleteSettingInternal(setting);\n }\n });\n } else {\n this.deleteSettingInternal(setting);\n }\n }\n\n private deleteSettingInternal(setting) {\n this.deleteSettingRequested.emit(<DeleteSettingModel>{ config: this.settingFormula.config, environment: this.settingFormula.environment, setting: setting.setting })\n }\n\n subscriptionLimitReachedCalled() {\n this.dialog.open(RerouteDialogComponent, {\n data: {\n title: 'You have reached the limits of your plan',\n body: ` Upgrade your plan or join our <a href=\"https://configcat.com/referrals\" target=\"_blank\" rel=\"noopener noreferrer\">referral program</a> to increase your limits.`,\n yesButtonLabel: `See plans`,\n yesButtonLink: this.dashboardBasePath + \"/organization/plans\",\n noButtonLabel: `Close`\n }\n });\n }\n\n addSegmentConditionRequestedWithoutSegments() {\n this.dialog.open(RerouteDialogComponent, {\n data: {\n title: 'There are no segments in this product yet.',\n body: `Go ahead to the ConfiCat Dashboard and create your first user segment before adding it to a targeting rule.`,\n yesButtonLabel: `Go to the dashboard`,\n yesButtonLink: this.dashboardBasePath + \"/product/\" + this.productId + \"/segments\"\n }\n });\n }\n\n trackByIndex(index: number): any {\n return index;\n }\n\n recalcPrerequisites(): void {\n const settingValue = this.settingFormula;\n this.flagState.dependeeSettings = this.settings.filter(s => settingValue.settingIdsWherePrerequisite?.includes(s.settingId))\n .map(s => { return { key: s.key, name: s.name, settingId: s.settingId } });\n return;\n }\n\n recalcAddButtons(): void {\n const state = this.flagState;\n const group = this.formGroup;\n\n state.addButtonRenderState.renderTopAddButtons = !group.controls.targetingRules.controls.length ||\n this.hasOnlyPercentageRule(group);\n\n if (!group.controls.targetingRules.controls.length) {\n state.addButtonRenderState.addRuleButtonTracker = [];\n state.addButtonRenderState.hasPercentageOnlyRule = false;\n } else {\n const hasPercOnly = state.addButtonRenderState.hasPercentageOnlyRule = group.controls.targetingRules.controls.length > 0\n && this.formGenerator.isPercentageOnlyTargetingRule(group.controls.targetingRules.controls[group.controls.targetingRules.controls.length - 1]);\n state.addButtonRenderState.addRuleButtonTracker = group.controls.targetingRules.controls.map((item, i, rules) => {\n const isLastRule = i === group.controls.targetingRules.controls.length - 1;\n const isBeforeLast = i === group.controls.targetingRules.controls.length - 2;\n return {\n showAddRuleButtons: hasPercOnly ? i === rules.length - 2 : i === rules.length - 1,\n showOrChip: hasPercOnly ? i < rules.length - 2 : i < rules.length - 1,\n renderSeparationArea: this.formGenerator.isPercentageOnlyTargetingRule(item) ||\n (this.settingFormula.readOnly && (isLastRule || (hasPercOnly && isBeforeLast))),\n }\n });\n }\n }\n\n hasOnlyPercentageRule(group: FormGroup<UpdateSettingValueForm>): boolean {\n return group.controls.targetingRules.controls.length === 1 &&\n this.formGenerator.isPercentageOnlyTargetingRule(group.controls.targetingRules.controls[0])\n }\n\n expandedChanged(expandedState: boolean): void {\n this.flagState.panelExpanded = expandedState;\n this.expandedStateChanged.emit();\n }\n}\n","<div class=\"container\">\n <ng-container *ngIf=\"!loading\">\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" id=\"feature-flag-form\">\n <div [ngClass]=\"{'invalid-flag': formGroup.invalid}\">\n <app-feature-flag [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n [featureFlagLimitations]=\"settingFormula.featureFlagLimitations\" [hasOtherEnvironment]=\"false\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisites()\" (recalcAddButtons)=\"recalcAddButtons()\"\n (expandedChanged)=\"expandedChanged($event)\"\n [showEnvironmentName]=\"showEnvironmentName\" [environmentName]=\"settingFormula.environment.name\"\n [deleteSettingText]=\"deleteSettingText\" [canDeleteSetting]=\"canDeleteSetting\">\n </app-feature-flag>\n </div>\n <div class=\"save\" *ngIf=\"!settingFormula.readOnly && formGroup?.dirty\">\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [class.animate]=\"formGroup.dirty\"\n [track]=\"['save & publish click', 'feature flags and settings']\">\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\n </button>\n <button type=\"button\" class=\"revert-button\" mat-stroked-button (click)=\"revert()\"\n [track]=\"['revert click', 'feature flags and settings']\">\n <span>Revert</span>\n </button>\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\n <span>Something went wrong and we could not save your settings. You can try again or <a\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact\n us.</a></span>\n </div>\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\n <span>Oh no! A feature flag has invalid or missing data.&nbsp;</span>\n </div>\n </div>\n </div>\n </form>\n\n </ng-container>\n</div>","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { SettingItemComponent } from './setting-item/setting-item.component';\nimport { SettingSelectComponent } from './selects/setting-select/setting-select.component';\nimport { ProductSelectComponent } from './selects/product-select/product-select.component';\nimport { ConfigSelectComponent } from './selects/config-select/config-select.component';\nimport { EnvironmentSelectComponent } from './selects/environment-select/environment-select.component';\nimport { Configuration } from './configuration';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AuthorizationComponent } from './authorization/authorization.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { ExpandDialogComponent } from './dialogs/expand-dialog/expand-dialog.component';\nimport { ReasonDialogComponent } from './dialogs/reason-dialog/reason-dialog.component';\nimport { SaveSnackbarComponent } from './dialogs/save-snackbar/save-snackbar.component';\nimport { RolloutPercentageItemsComponent } from './setting-list/setting/rollout-percentage-items/rollout-percentage-items.component';\nimport { RolloutRulesComponent } from './setting-list/setting/rollout-rules/rollout-rules.component';\nimport { ValueComponent } from './setting-list/setting/value/value.component';\nimport { SettingListComponent } from './setting-list/setting-list.component';\nimport { SettingComponent } from './setting-list/setting/setting.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipModule } from '@angular/material/tooltip';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { RouterModule } from '@angular/router';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { BaseComponent } from './base/base.component';\nimport { BaseSelectComponent } from './base/base-select.component';\nimport { ApiModule } from 'ng-configcat-publicapi';\nimport { InputDisplayNormalizerDirective } from './_directives/input-display-normalizer.directive';\nimport { DeleteSettingDialogComponent } from './dialogs/delete-setting-dialog/delete-setting-dialog.component';\nimport { EvaluationFormulaComponent } from './v2/feature-flag/evaluation-formula/evaluation-formula.component';\nimport { FeatureFlagValueComponent } from './v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component';\nimport { PopoutTextEditorDialogComponent } from './v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component';\nimport { ConditionChipComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component';\nimport { ConditionsComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component';\nimport { PrerequisiteFlagConditionComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component';\nimport { SegmentConditionComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component';\nimport { ComparatorDialogComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component';\nimport { PopoutListEditorDialogComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component';\nimport { UserConditionComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component';\nimport { PercentageOptionsComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component';\nimport { TargetingRuleComponent } from './v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component';\nimport { FeatureFlagComponent } from './v2/feature-flag/feature-flag.component';\nimport { PercentageEvaluationAttributeDialogComponent } from './v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component';\nimport { ConfirmationDialogComponent } from './dialogs/confirmation-dialog/confirmation-dialog';\nimport { FormGenerator } from './_services/form-generator';\nimport { ComparisonValueListHelper } from './_services/comparison-value-list-helper';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { TrackingDirective } from './_services/tracking.directive';\nimport { ClipboardModule } from \"@angular/cdk/clipboard\";\nimport { AceEditorComponent } from './ace-editor/ace-editor.component';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatRadioModule } from \"@angular/material/radio\";\nimport { FeatureFlagItemComponent } from './v2/feature-flag-item.component';\nimport { MessagingService } from './_services/messaging.service';\nimport { DateTimePickerComponent } from './v2/feature-flag/date-time-picker/date-time-picker.component';\nimport { DependeesDialogComponent } from './v2/feature-flag/dependees-dialog/dependees-dialog.component';\nimport { InfoDialogComponent } from './dialogs/info-dialog/info-dialog';\nimport { RerouteDialogComponent } from './dialogs/reroute-dialog/reroute-dialog';\n\n@NgModule({\n declarations: [\n BaseComponent,\n BaseSelectComponent,\n ProductSelectComponent,\n ConfigSelectComponent,\n EnvironmentSelectComponent,\n SettingSelectComponent,\n SettingItemComponent,\n AuthorizationComponent,\n SettingListComponent,\n SettingComponent,\n RolloutPercentageItemsComponent,\n RolloutRulesComponent,\n ValueComponent,\n ReasonDialogComponent,\n SaveSnackbarComponent,\n ExpandDialogComponent,\n DeleteSettingDialogComponent,\n InputDisplayNormalizerDirective,\n FeatureFlagComponent,\n EvaluationFormulaComponent,\n FeatureFlagValueComponent,\n TargetingRuleComponent,\n PercentageOptionsComponent,\n ConditionsComponent,\n UserConditionComponent,\n SegmentConditionComponent,\n PrerequisiteFlagConditionComponent,\n PopoutListEditorDialogComponent,\n PopoutTextEditorDialogComponent,\n PercentageEvaluationAttributeDialogComponent,\n ConditionChipComponent,\n ComparatorDialogComponent,\n ConfirmationDialogComponent,\n InfoDialogComponent,\n TrackingDirective,\n AceEditorComponent,\n FeatureFlagItemComponent,\n DateTimePickerComponent,\n DependeesDialogComponent,\n RerouteDialogComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n BrowserAnimationsModule,\n MatFormFieldModule,\n MatOptionModule,\n MatSelectModule,\n MatButtonModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n MatChipsModule,\n MatAutocompleteModule,\n DragDropModule,\n RouterModule,\n MatSnackBarModule,\n MatDialogModule,\n MatMenuModule,\n ApiModule,\n MatButtonToggleModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatDividerModule,\n ClipboardModule,\n MatPaginatorModule,\n MatTableModule,\n MatRadioModule\n ],\n exports: [\n AuthorizationComponent,\n ProductSelectComponent,\n ConfigSelectComponent,\n EnvironmentSelectComponent,\n SettingSelectComponent,\n SettingItemComponent,\n InputDisplayNormalizerDirective,\n DeleteSettingDialogComponent,\n FeatureFlagItemComponent\n ],\n providers: [\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: { disableTooltipInteractivity: true },\n },\n\n FormGenerator,\n ComparisonValueListHelper,\n MessagingService\n ]\n})\nexport class NgConfigCatPublicApiUIModule {\n public static forRoot(configurationFactory: () => Configuration): ModuleWithProviders<NgConfigCatPublicApiUIModule> {\n return {\n ngModule: NgConfigCatPublicApiUIModule,\n providers: [{ provide: Configuration, useFactory: configurationFactory }]\n };\n }\n\n constructor() { }\n}\n","/*\n * Public API Surface of ng-configcat-publicapi-ui\n */\n\nexport * from './lib/ng-configcat-publicapi-ui.module';\nexport * from './lib/_directives';\nexport * from './lib/_services';\nexport * from './lib/setting-item/setting-item.component';\nexport * from './lib/authorization/authorization.component';\nexport * from './lib/selects/product-select/product-select.component';\nexport * from './lib/selects/config-select/config-select.component';\nexport * from './lib/selects/environment-select/environment-select.component';\nexport * from './lib/selects/setting-select/setting-select.component';\nexport * from './lib/dialogs/delete-setting-dialog/delete-setting-dialog.component';\nexport * from './lib/v2/feature-flag-item.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PublicApiConfiguration","i2.Configuration","i1.PublicApiService","i1","i2","i3","i8","i4","i5","i6.InputDisplayNormalizerDirective","i6.ValueComponent","i2.SettingListFormHelper","i9","i11","i12.ValueComponent","i13.InputDisplayNormalizerDirective","i1.SettingListFormHelper","i6","i7.RolloutPercentageItemsComponent","i8.RolloutRulesComponent","i9.ValueComponent","i8.SettingComponent","i2.SettingListComponent","i7","i2.PublicApiService","UserComparator","i9.AceEditorComponent","i2.FormGenerator","i10.InputDisplayNormalizerDirective","i1.FormGenerator","i9.InputDisplayNormalizerDirective","i10.FeatureFlagValueComponent","ComparatorGroup","i10","i12","i15.AceEditorComponent","i1.ComparisonValueListHelper","i1.MessagingService","i14.ConditionChipComponent","i15.DateTimePickerComponent","i9.ConditionChipComponent","i10.TrackingDirective","i7.FeatureFlagValueComponent","i8.ConditionChipComponent","i8.UserConditionComponent","i9.SegmentConditionComponent","i10.PrerequisiteFlagConditionComponent","i8.FeatureFlagValueComponent","i9.PercentageOptionsComponent","i10.ConditionsComponent","i11.TargetingRuleComponent","i2.MessagingService","i4.PublicApiService","i13.EvaluationFormulaComponent","i14.FeatureFlagValueComponent","i15.TrackingDirective","i9.FeatureFlagComponent"],"mappings":"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"}
1
+ {"version":3,"file":"ng-configcat-publicapi-ui.mjs","sources":["../../../projects/ng-configcat-publicapi-ui/src/lib/_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/date-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/app-data-adapter.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/confirmation-dialog/confirmation-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/confirmation-dialog/confirmation-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reroute-dialog/reroute-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/reroute-dialog/reroute-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/info-dialog/info-dialog.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/dialogs/info-dialog/info-dialog.html","../../../projects/ng-configcat-publicapi-ui/src/lib/_services/comparison-value-list-helper.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/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/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/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/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/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/popout-text-editor-dialog/popout-text-editor-dialog.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.ts","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.html","../../../projects/ng-configcat-publicapi-ui/src/lib/v2/feature-flag/evaluation-formula/targeting-rule/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/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/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 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 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(\"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","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 formatDate(date: Date, formatString: string): string {\n if (!date) {\n return \"\";\n }\n const dateObj = new Date(date);\n\n return Object.entries({\n YYYY: dateObj.getFullYear(),\n YY: dateObj.getFullYear().toString().substring(2),\n yyyy: dateObj.getFullYear(),\n yy: dateObj.getFullYear().toString().substring(2),\n MMMM: dateObj.toLocaleString(\"default\", { month: \"long\" }),\n MMM: dateObj.toLocaleString(\"default\", { month: \"short\" }),\n MM: (dateObj.getMonth() + 1).toString().padStart(2, \"0\"),\n M: dateObj.getMonth() + 1,\n DDDD: dateObj.toLocaleDateString(\"default\", { weekday: \"long\" }),\n DDD: dateObj.toLocaleDateString(\"default\", { weekday: \"short\" }),\n DD: dateObj.getDate().toString().padStart(2, \"0\"),\n D: dateObj.getDate(),\n dddd: dateObj.toLocaleDateString(\"default\", { weekday: \"long\" }),\n ddd: dateObj.toLocaleDateString(\"default\", { weekday: \"short\" }),\n dd: dateObj.getDate().toString().padStart(2, \"0\"),\n d: dateObj.getDate(),\n HH: dateObj.getHours().toString().padStart(2, \"0\"), // military\n H: dateObj.getHours().toString(), // military\n hh: (dateObj.getHours() % 12).toString().padStart(2, \"0\"),\n h: (dateObj.getHours() % 12).toString(),\n mm: dateObj.getMinutes().toString().padStart(2, \"0\"),\n m: dateObj.getMinutes(),\n SS: dateObj.getSeconds().toString().padStart(2, \"0\"),\n S: dateObj.getSeconds(),\n ss: dateObj.getSeconds().toString().padStart(2, \"0\"),\n s: dateObj.getSeconds(),\n TTT: dateObj.getMilliseconds().toString().padStart(3, \"0\"),\n ttt: dateObj.getMilliseconds().toString().padStart(3, \"0\"),\n AMPM: dateObj.getHours() < 13 ? \"AM\" : \"PM\",\n ampm: dateObj.getHours() < 13 ? \"am\" : \"pm\",\n }).reduce((acc, entry) => {\n return acc.replace(entry[0], entry[1].toString());\n }, formatString);\n }\n\n public static offsetDate(date: Date, offsetMins: number): Date {\n return new Date(date.getTime() + offsetMins * 60000);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { NativeDateAdapter } from \"@angular/material/core\";\nimport { DateHelper } from \"./date-helper\";\n\n@Injectable()\nexport class AppDateAdapter extends NativeDateAdapter {\n override format(date: Date, displayFormat: Record<string, string>): string {\n if (!displayFormat?.[\"hour\"]) {\n return DateHelper.formatDate(date, \"yyyy. MM. dd\");\n } else if (!displayFormat?.[\"year\"]) {\n return DateHelper.formatDate(date, \"HH:mm\");\n } else {\n return DateHelper.formatDate(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 { Injectable } from \"@angular/core\";\nimport Papa from \"papaparse\";\nimport { IComparisonValueListModel } from \"../bootstrap\";\n\nexport interface ComparisonValueListParseResult {\n error?: string;\n comparisonValueList: IComparisonValueListModel[];\n}\n\n@Injectable()\nexport class ComparisonValueListHelper {\n formatValuesAndHintAsJson(comparisonValueList: IComparisonValueListModel[]): string {\n return JSON.stringify(comparisonValueList, null, 2);\n }\n\n formatValuesAndHintAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueListItem => {\n return [\n this.formatCsvStringValue(comparisonValueListItem.value),\n this.formatCsvStringValue(comparisonValueListItem.hint ?? \"\"),\n ].join(\",\");\n });\n return data.join(\"\\r\\n\");\n }\n\n formatValuesAsCsv(comparisonValueList: IComparisonValueListModel[]): string {\n const data = comparisonValueList.map(comparisonValueList =>\n this.formatCsvStringValue(comparisonValueList.value)\n );\n return data.join(\",\");\n }\n\n formatCsvStringValue(value: string): string {\n if (!value) {\n return \"\";\n }\n const escaped = value.replaceAll('\"', '\"\"');\n return '\"' + escaped + '\"';\n }\n\n parseValuesAndHintsFromJson(value: string): ComparisonValueListParseResult {\n if (value === \"\") {\n return { comparisonValueList: [] };\n }\n try {\n const parsed: IComparisonValueListModel[] = JSON.parse(value) as IComparisonValueListModel[];\n return { comparisonValueList: parsed.filter(v => !!v.value) };\n } catch {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n }\n\n parseValuesAndHintsFromCsv(value: string): ComparisonValueListParseResult {\n if (value === \"\") {\n return { comparisonValueList: [] };\n }\n const parseResult = Papa.parse<string[]>(value, { delimiter: \",\", skipEmptyLines: true });\n if (parseResult.errors.length) {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n if (parseResult?.data.length === 0) {\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\n parseValuesFromCsv(value: string): ComparisonValueListParseResult {\n if (value === \"\") {\n return { comparisonValueList: [] };\n }\n const parseResult = Papa.parse<string[]>(value + \",\", { delimiter: \",\", skipEmptyLines: true });\n if (parseResult.errors?.length) {\n return { comparisonValueList: [], error: \"Parse error.\" };\n }\n if (!parseResult?.data?.length) {\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}\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 { AbstractControl, FormControl, ValidationErrors, Validators } from \"@angular/forms\";\nimport { valid } from \"semver\";\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 && 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","import { Injectable } from \"@angular/core\";\nimport { AbstractControl, FormArray, FormControl, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\nimport { 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\n@Injectable()\nexport class FormGenerator {\n public generateSettingValuesFormGroup(\n model: ISettingValueModel,\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n ): FormGroup<UpdateSettingValueForm> {\n return new FormGroup<UpdateSettingValueForm>({\n defaultValue: this.generateValueFormGroup(\n model.defaultValue,\n model.setting.settingType,\n readOnly,\n featureFlagLimitations\n ),\n percentageEvaluationAttribute: this.generatePercentageEvaluationAttributeFormControl(\n model.percentageEvaluationAttribute,\n readOnly\n ),\n targetingRules: new FormArray<FormGroup<TargetingRuleForm>>(\n model.targetingRules.map(ft =>\n this.generateTargetingRuleFormGroup(ft, model.setting.settingType, readOnly, settings, featureFlagLimitations)\n )\n ),\n });\n }\n\n public 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\n public generateTargetingRuleFormGroup(\n model: ITargetingRuleModel,\n settingType: SettingType,\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n ): FormGroup<TargetingRuleForm> {\n const conditions = new FormArray<FormGroup<ConditionForm>>(\n model.conditions.map(tr => this.generateConditionFormGroup(tr, readOnly, settings, featureFlagLimitations))\n );\n\n if (model.percentageOptions.length > 0) {\n return new FormGroup<TargetingRuleForm>({\n conditions,\n percentageOptions: new FormArray<FormGroup<PercentageOptionForm>>(\n model.percentageOptions.map(pr =>\n this.generatePercentageOptionFormGroup(pr, settingType, readOnly, featureFlagLimitations)\n ),\n [validatePercentageSum]\n ),\n });\n } else if (model.value) {\n return new FormGroup<TargetingRuleForm>({\n conditions,\n value: this.generateValueFormGroup(model.value, settingType, readOnly, featureFlagLimitations),\n });\n }\n\n throw Error(\"Invalid model\");\n }\n\n public generateTargetingRuleWithEmptyPercentageOptions(\n settingType: SettingType,\n readOnly: boolean,\n settings: IPrerequisiteSetting[],\n featureFlagLimitations: IFeatureFlagLimitations\n ): FormGroup<TargetingRuleForm> {\n return this.generateTargetingRuleFormGroup(\n {\n conditions: [],\n percentageOptions: this.getEmptyPercentageOptions(settingType),\n value: null,\n },\n settingType,\n readOnly,\n settings,\n featureFlagLimitations\n );\n }\n\n public getEmptyPercentageOptions(settingType: SettingType): IPercentageOptionModel[] {\n switch (settingType) {\n case SettingType.Boolean:\n return [\n { percentage: 50, value: { boolValue: true, intValue: null, doubleValue: null, stringValue: null } },\n { percentage: 50, value: { boolValue: false, intValue: null, doubleValue: null, stringValue: 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 } },\n { percentage: 50, value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null } },\n ];\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n public generatePercentageOptionFormGroup(\n model: IPercentageOptionModel,\n settingType: SettingType,\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: this.generateValueFormGroup(\n model.value,\n settingType,\n readOnly || settingType === SettingType.Boolean,\n featureFlagLimitations\n ),\n });\n }\n\n public 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: this.generateUserConditionFormGroup(model.userCondition, readOnly, featureFlagLimitations),\n });\n } else if (model.segmentCondition) {\n return new FormGroup<ConditionForm>({\n segmentCondition: this.generateSegmentConditionFormGroup(model.segmentCondition, readOnly),\n });\n } else if (model.prerequisiteFlagCondition) {\n return new FormGroup<ConditionForm>({\n prerequisiteFlagCondition: this.generatePrerequisiteFlagConditionFormGroup(\n model.prerequisiteFlagCondition,\n readOnly,\n settings,\n featureFlagLimitations\n ),\n });\n } else {\n throw new Error(\"\");\n }\n }\n\n public 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: this.generateComparisonValueFormGroup(\n value.comparisonValue,\n value.comparator,\n readOnly,\n featureFlagLimitations\n ),\n });\n }\n\n public 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\n public 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.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: this.generateValueFormGroup(\n { boolValue: true, intValue: null, doubleValue: null, stringValue: null },\n setting.settingType,\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: this.generateValueFormGroup(\n value.prerequisiteComparisonValue,\n setting.settingType,\n readOnly,\n featureFlagLimitations\n ),\n });\n }\n }\n\n public 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\n public 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: this.generateValueFormGroup(\n { boolValue: true, intValue: null, doubleValue: null, stringValue: null },\n SettingType.Boolean,\n false,\n featureFlagLimitations\n ),\n });\n }\n\n public getNextIndex(formArray: FormArray<FormGroup<ComparisonValueListForm>>) {\n if (formArray.controls.length === 0) {\n return 0;\n }\n return Math.max(...formArray.controls.map(c => c.controls.index.value)) + 1;\n }\n\n public generateComparisonValueListFormGroup(\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\n public generateComparisonValueFormGroup(\n value: IComparisonValueModel,\n comparator: UserComparator,\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n ): FormGroup<ComparisonValueForm> {\n switch (this.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: this.getComparisonValueStringValidators(featureFlagLimitations) }\n ),\n });\n case UserComparatorType.StringList:\n return new FormGroup<ComparisonValueForm>({\n listValue: this.generateComparisonValueListValueArray(\n value.listValue ?? [],\n readOnly,\n featureFlagLimitations,\n this.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: this.getComparisonValueSemverValidators(featureFlagLimitations) }\n ),\n });\n case UserComparatorType.SemverList:\n return new FormGroup<ComparisonValueForm>({\n listValue: this.generateComparisonValueListValueArray(\n value.listValue ?? [],\n readOnly,\n featureFlagLimitations,\n this.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\n public 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 this.generateComparisonValueListFormGroup(lv, readOnly, itemValidators, index);\n }),\n [\n Validators.required,\n Validators.minLength(1),\n Validators.maxLength(featureFlagLimitations.maxComparisonValueListLength),\n ]\n );\n }\n\n public getComparisonValueStringValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength)];\n }\n\n public getComparisonValueStringListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength)];\n }\n\n public getComparisonValueSemverValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [Validators.required, Validators.maxLength(featureFlagLimitations.maxComparisonValueLength), validateSemVer];\n }\n\n public getComparisonValueSemverListItemValidators(featureFlagLimitations: IFeatureFlagLimitations) {\n return [\n Validators.required,\n Validators.maxLength(featureFlagLimitations.maxComparisonValueListItemLength),\n validateSemVer,\n ];\n }\n\n public generateDefaultValue(settingType: SettingType): IValueModel {\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: false, intValue: null, doubleValue: null, stringValue: null };\n case SettingType.String:\n case SettingType.Int:\n case SettingType.Double:\n return { boolValue: null, intValue: null, doubleValue: null, stringValue: null };\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n public generateDefaultValueFormGroup(\n settingType: SettingType,\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n ): FormGroup<ValueForm> {\n return this.generateValueFormGroup(\n this.generateDefaultValue(settingType),\n settingType,\n readOnly,\n featureFlagLimitations\n );\n }\n\n public generateValueFormGroup(\n value: IValueModel,\n settingType: SettingType,\n readOnly: boolean,\n featureFlagLimitations: IFeatureFlagLimitations\n ): FormGroup<ValueForm> {\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: this.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: this.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: this.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: this.getValidatorsForSettingType(settingType, featureFlagLimitations) }\n ),\n });\n\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\n\n public 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\n 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\n isPercentageOnlyTargetingRule(formGroup: FormGroup<TargetingRuleForm>): boolean {\n return (\n !formGroup.controls.value\n && !formGroup.controls.conditions.length\n && !!formGroup.controls.percentageOptions?.length\n );\n }\n\n addComparisonValueListValueItems(\n userComparator: UserComparator,\n listValueFormArray: FormArray<FormGroup<ComparisonValueListForm>>,\n comparisonValueList: IComparisonValueListModel[],\n featureFlagLimitations: IFeatureFlagLimitations\n ) {\n const validators =\n this.getComparisonValueType(userComparator) === UserComparatorType.SemverList\n ? this.getComparisonValueSemverListItemValidators(featureFlagLimitations)\n : this.getComparisonValueStringListItemValidators(featureFlagLimitations);\n\n const maxIndex = this.getNextIndex(listValueFormArray);\n\n comparisonValueList.forEach((comparisonValueListItem, index) => {\n const formGroup = this.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}\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 };\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 } from \"@angular/cdk/overlay\";\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 } from \"@angular/material/tooltip\";\nimport { PublicApiService } from \"./_services\";\nimport { ComparisonValueListHelper } from \"./_services/comparison-value-list-helper\";\nimport { FormGenerator } from \"./_services/form-generator\";\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: { overlayPanelClass: \"select-overlay-panel\" },\n },\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: { disableTooltipInteractivity: true },\n },\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 AppDateAdapter,\n FormGenerator,\n ComparisonValueListHelper,\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 getDashboardBasePath() {\n return this.publicApiService.getDashboardBasePath();\n }\n}\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 } 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 ngAfterContentInit() {\n setTimeout(() => {\n this.host.nativeElement.focus();\n }, 200);\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 | undefined) => void;\n private _value = \"\";\n\n readonly editor = viewChild<ElementRef<HTMLElement>>(\"aceEditor\");\n\n readonly value = model<string>();\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 | undefined) => 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.toString() : \"\";\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 round\"></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 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 { FormHelper, MessagingService, RerouteDialogComponent } from \"../bootstrap\";\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\n formValuesChangedSubscription!: Subscription | null;\n\n loading = true;\n\n settingValues!: SettingValuesModel;\n segments!: SegmentListModel[];\n formGroup!: FormGroup<SettingValuesFormGroup>;\n\n submitting = false;\n showRevertQuestion = 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(\"Ooops. We could not load your Feature Flags and Settings. Please try again or contact us.\", 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 && 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 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 && result.button === \"save\" && result.reason) {\n updateSettingValuesModel.reason = result.reason;\n this.updateSettingValues(updateSettingValuesModel);\n } else {\n this.submitting = false;\n }\n });\n return;\n }\n\n this.formGroup.setErrors({ internalServerError: \"Internal server error\" });\n this.showFeedBackMessage = true;\n },\n });\n }\n\n handleRevertYes() {\n this.showRevertQuestion = false;\n this.reloadSettingValues();\n }\n\n handleRevertCancel() {\n this.showRevertQuestion = false;\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","@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 && !submitting && 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 @if (!showRevertQuestion) {\n <button type=\"button\" class=\"revert-button\" mat-stroked-button (click)=\"showRevertQuestion = true\">\n <span>Revert changes</span>\n </button>\n }\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 @if (showRevertQuestion) {\n <div>\n <span class=\"revert\">Revert to last saved state?</span>\n <button type=\"button\" class=\"yes\" mat-stroked-button (click)=\"handleRevertYes()\">Yes</button>\n <button type=\"button\" mat-stroked-button (click)=\"handleRevertCancel()\">No</button>\n </div>\n }\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 segments!: SegmentListModel[];\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 loadSegments = (): Observable<SegmentListModel[]> => {\n return this.createSegmentsService()\n .getSegments(this.productId())\n .pipe(\n map(segments => {\n this.segments = 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 catchError((error: Error) => {\n this.saveFailed.emit(error);\n throw error;\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 (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 { Component, input, OnInit } from \"@angular/core\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { ProductModel } from \"ng-configcat-publicapi\";\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: [MatFormField, MatLabel, MatSelect, FormsModule, ReactiveFormsModule, RxReactiveFormsModule, MatOption, MatTooltip],\n})\nexport class ProductSelectComponent extends BaseSelectComponent implements OnInit {\n readonly valueFormControl = input.required<FormControl>();\n products: ProductModel[] = [];\n\n ngOnInit(): void {\n this.products = [];\n this.createProductsService()\n .getProducts()\n .subscribe(products => {\n this.products = products;\n if (this.products.length > 0) {\n this.valueFormControl().setValue(this.products[0].productId, {\n emitEvent: true,\n emitModelToViewChange: true,\n emitViewToModelChange: true,\n });\n } else {\n this.valueFormControl().setValue(\"\");\n }\n });\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 @for (product of products; track product.productId) {\n <mat-option [value]=\"product.productId\" [matTooltip]=\"product.name\" [matTooltipShowDelay]=\"1000\">\n {{ product.name }}\n </mat-option>\n }\n </mat-select>\n</mat-form-field>\n","import { Component, forwardRef, input, OnChanges, OnInit } from \"@angular/core\";\nimport { FormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { ConfigModel } from \"ng-configcat-publicapi\";\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: [MatFormField, MatLabel, MatSelect, FormsModule, ReactiveFormsModule, RxReactiveFormsModule, MatOption, MatTooltip],\n})\nexport class ConfigSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n readonly valueFormControl = input.required<FormControl>();\n readonly productId = input.required<string>();\n configs: ConfigModel[] = [];\n\n ngOnInit(): void {\n this.configs = [];\n this.reloadConfigs();\n }\n\n ngOnChanges() {\n this.reloadConfigs();\n }\n\n reloadConfigs() {\n const productId = this.productId();\n if (productId) {\n this.createConfigsService()\n .getConfigs(productId)\n .subscribe(configs => {\n this.configs = configs;\n if (this.configs.length > 0) {\n this.valueFormControl().setValue(this.configs[0].configId);\n } else {\n this.valueFormControl().setValue(\"\");\n }\n });\n }\n }\n}\n","@if (configs) {\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 @for (config of configs; track config.configId) {\n <mat-option [value]=\"config.configId\" [matTooltip]=\"config.name\" [matTooltipShowDelay]=\"1000\">\n {{ config.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n}\n","import { Component, input, OnChanges, OnInit } from \"@angular/core\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { EnvironmentModel } from \"ng-configcat-publicapi\";\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: [MatFormField, MatLabel, MatSelect, FormsModule, ReactiveFormsModule, RxReactiveFormsModule, MatOption, MatTooltip],\n})\nexport class EnvironmentSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n readonly valueFormControl = input.required<FormControl>();\n readonly productId = input.required<string>();\n environments: EnvironmentModel[] = [];\n\n ngOnInit(): void {\n this.environments = [];\n this.reloadEnvironments();\n }\n\n ngOnChanges() {\n this.reloadEnvironments();\n }\n\n reloadEnvironments() {\n const productId = this.productId();\n if (productId) {\n this.createEnvironmentsService()\n .getEnvironments(productId)\n .subscribe(environments => {\n this.environments = environments;\n if (this.environments.length > 0) {\n this.valueFormControl().setValue(this.environments[0].environmentId);\n } else {\n this.valueFormControl().setValue(\"\");\n }\n });\n }\n }\n}\n","@if (environments) {\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 @for (environment of environments; track environment.environmentId) {\n <mat-option [value]=\"environment.environmentId\" [matTooltip]=\"environment.name\" [matTooltipShowDelay]=\"1000\">\n {{ environment.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n}\n","import { Component, input, OnChanges, OnInit } from \"@angular/core\";\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { SettingModel } from \"ng-configcat-publicapi\";\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: [MatFormField, MatLabel, MatSelect, FormsModule, ReactiveFormsModule, RxReactiveFormsModule, MatOption, MatTooltip],\n})\nexport class SettingSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {\n readonly valueFormControl = input.required<FormControl>();\n readonly configId = input.required<string>();\n settings: SettingModel[] = [];\n\n ngOnInit(): void {\n this.settings = [];\n this.reloadSettings();\n }\n\n ngOnChanges() {\n this.reloadSettings();\n }\n\n reloadSettings() {\n const configId = this.configId();\n if (configId) {\n this.createSettingsService()\n .getSettings(configId)\n .subscribe(settings => {\n this.settings = settings;\n if (this.settings.length > 0) {\n this.valueFormControl().setValue(this.settings[0].settingId);\n } else {\n this.valueFormControl().setValue(\"\");\n }\n });\n }\n }\n}\n","@if (settings) {\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 @for (setting of settings; track setting.settingId) {\n <mat-option [value]=\"setting.settingId\" [matTooltip]=\"setting.name\" [matTooltipShowDelay]=\"1000\">\n {{ setting.name }}\n </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 { 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 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=\"Copy to clipboard\"\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 { 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 { 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 { AutofocusDirective } from \"../../../../_directives/autofocus.directive\";\nimport { AceEditorComponent } from \"../../../../ace-editor/ace-editor.component\";\nimport { FormHelper } from \"../../../../bootstrap\";\n\nexport interface PopoutTextEditorDialogData {\n value: string;\n readOnly: boolean;\n validators: ValidatorFn[];\n maxValueLength: number;\n description: string;\n}\n\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 ],\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;\n format = \"text\";\n formHelper = FormHelper;\n control!: FormControl<string>;\n\n ngOnInit(): void {\n this.jsonData = this.data.value;\n this.control = new FormControl<string>(\n { value: this.data.value, disabled: this.data.readOnly },\n { nonNullable: true, validators: [...this.data.validators] }\n );\n\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 <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 @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]=\"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 > -1) {\n <mat-hint>\n Remaining characters:\n {{ data.maxValueLength - control.value.length }}\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 { Component, inject, input } from \"@angular/core\";\nimport { 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 { 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 FormGenerator,\n FormHelper,\n IFeatureFlagLimitations,\n IFlagState,\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\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 ],\n})\nexport class FeatureFlagValueComponent {\n private readonly dialog = inject(MatDialog);\n private readonly formGenerator = inject(FormGenerator);\n\n readonly formGroup = input.required<FormGroup<ValueForm>>();\n readonly flagState = input<IFlagState>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly isPrerequisite = input(false);\n readonly tooltip = input<string>();\n\n FormHelper = FormHelper;\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: this.formGenerator.getValidatorsForSettingType(SettingType.String, this.featureFlagLimitations()),\n maxValueLength: this.featureFlagLimitations().maxStringFlagValueLength ?? 100000,\n description: this.isPrerequisite()\n ? \"Modify the text within the editor to change the prerequisite feature flag comparison value. The editor supports JSON syntax highlighting.\"\n : \"Modify the text within the editor to change the feature flag value. The editor supports JSON syntax highlighting.\",\n } 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","@let formGroupValue = formGroup();\n\n<div class=\"feature-flag-value\">\n @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 [formControl]=\"formGroupValue.controls.stringValue\"\n [matTooltip]=\"tooltip()\" />\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()\" />\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()\" />\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]=\"flagState()!.readOnly\">\n <label class=\"switch\" [matTooltip]=\"tooltip()\">\n <input type=\"checkbox\" [formControl]=\"formGroupValue.controls.boolValue\" />\n <span class=\"slider round\"></span>\n </label>\n </div>\n }\n</div>\n","import { Component, input, OnChanges } from \"@angular/core\";\nimport { MatChip, MatChipSet } from \"@angular/material/chips\";\nimport { MatIcon } from \"@angular/material/icon\";\n\n@Component({\n selector: \"app-condition-chip\",\n templateUrl: \"./condition-chip.component.html\",\n styleUrl: \"../../../chips.scss\",\n imports: [MatIcon, 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 <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 { Component, inject, input, OnChanges, output } from \"@angular/core\";\nimport { FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatError, MatFormField } from \"@angular/material/form-field\";\nimport { MatOption, MatSelect } from \"@angular/material/select\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport {\n FormGenerator,\n FormHelper,\n IFeatureFlagLimitations,\n IPrerequisiteSetting,\n IValueModel,\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\"],\n imports: [\n ConditionChipComponent,\n MatFormField,\n FormsModule,\n MatTooltip,\n MatSelect,\n MatOption,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n FeatureFlagValueComponent,\n ],\n})\nexport class PrerequisiteFlagConditionComponent implements OnChanges {\n private readonly formGenerator = inject(FormGenerator);\n\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 prerequisiteConditionChanged = output();\n SettingType = SettingType;\n prerequisiteSettingType!: SettingType;\n\n FormHelper = FormHelper;\n\n prerequisiteComparators = [\n { value: PrerequisiteComparator.Equals, label: \"EQUALS\" },\n { value: PrerequisiteComparator.DoesNotEqual, label: \"NOT EQUALS\" },\n ];\n\n booleanPrerequisiteComparators = [\n { value: PrerequisiteComparator.Equals, label: \"IS ON\" },\n { value: PrerequisiteComparator.DoesNotEqual, label: \"IS OFF\" },\n ];\n\n ngOnChanges() {\n this.prerequisiteSettingType = this.getSettingType();\n }\n\n getSettingType() {\n const prerequisiteSetting = this.prerequisiteSettings().find(\n s => s.settingId === this.formGroup().controls.prerequisiteSettingId.value\n );\n return prerequisiteSetting?.settingType ?? SettingType.Boolean;\n }\n\n prerequisiteSettingChanged() {\n const oldPrerequisiteSettingType = this.prerequisiteSettingType;\n this.prerequisiteSettingType = this.getSettingType();\n if (oldPrerequisiteSettingType !== this.prerequisiteSettingType) {\n this.formGroup().setControl(\n \"prerequisiteComparisonValue\",\n this.formGenerator.generateValueFormGroup(\n this.getDefaultValueModel(this.prerequisiteSettingType),\n this.prerequisiteSettingType,\n false,\n this.featureFlagLimitations()\n )\n );\n }\n this.prerequisiteConditionChanged.emit();\n }\n\n getDefaultValueModel(settingType: SettingType): IValueModel {\n switch (settingType) {\n case SettingType.Boolean:\n return { boolValue: true, intValue: null, doubleValue: null, stringValue: null };\n case SettingType.String:\n return { stringValue: \"\", intValue: null, doubleValue: null, boolValue: null };\n case SettingType.Int:\n return { intValue: 0, boolValue: null, doubleValue: null, stringValue: null };\n case SettingType.Double:\n return { doubleValue: 0, intValue: null, boolValue: null, stringValue: null };\n default:\n throw new Error(\"Invalid SettingType\");\n }\n }\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\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-select\n placeholder=\"Select feature flag ...\"\n matTooltip=\"Prerequisite feature flag or setting key\"\n [formControl]=\"formGroup().controls.prerequisiteSettingId\"\n (selectionChange)=\"prerequisiteSettingChanged()\">\n @for (setting of prerequisiteSettings(); track $index) {\n <mat-option [value]=\"setting.settingId\">\n {{ setting.key }}\n </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 (prerequisiteSettingType === SettingType.Boolean) {\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=\"Prerequisite feature flag comparison value\"\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 (prerequisiteSettingType !== SettingType.Boolean) {\n <app-feature-flag-value\n class=\"wrapper-group grow\"\n tooltip=\"Prerequisite feature flag comparison value\"\n [formGroup]=\"formGroup().controls.prerequisiteComparisonValue\"\n [isPrerequisite]=\"true\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n }\n</div>\n","import { Component, input, output } from \"@angular/core\";\nimport { FormGroup, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatError, MatFormField } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\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\"],\n imports: [\n ConditionChipComponent,\n MatFormField,\n FormsModule,\n MatTooltip,\n ReactiveFormsModule,\n RxReactiveFormsModule,\n MatError,\n MatIconButton,\n MatMenuTrigger,\n TrackingDirective,\n MatIcon,\n MatMenu,\n MatMenuContent,\n MatMenuItem,\n MatSelect,\n MatOption,\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 createSegment() {\n this.createSegmentRequested.emit();\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=\"Segment 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 @for (segment of segments(); track $index) {\n <mat-option [value]=\"segment.segmentId\" [title]=\"segment.description\">\n {{ segment.name }}\n </mat-option>\n } @empty {\n <mat-option disabled>no segments available</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","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&#64;foo.com</span>\n EQUALS\n <span class=\"comp-val match-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;foo.com</span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextDoesNotEqual) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">alice&#64;foo.com</span>\n NOT EQUALS\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">bob&#64;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&#64;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&#64;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&#64;foo.com</span>\n ENDS WITH ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">\n [\n <span class=\"match-val\">&#64;foo.com</span>\n , &#64;bar.com ]\n </span>\n <span class=\"arrow\">➔</span>\n true\n }\n @case (UserComparator.TextNotEndsWithAnyOf) {\n <span class=\"comp-attr\" [matTooltip]=\"comparisonAttributeTooltip\">bob&#64;example.com</span>\n NOT ENDS WITH ANY OF\n <span class=\"comp-val\" [matTooltip]=\"comparisonValueTooltip\">[ &#64;foo.com, &#64;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 &lt;\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 &lt;=\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 &gt;\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 &gt;=\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 &lt;\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 &lt;=\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 &gt;\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 &gt;=\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 {\n ComparisonValueListForm,\n ComparisonValueListHelper,\n ComparisonValueListParseResult,\n FormGenerator,\n FormHelper,\n IComparisonValueListModel,\n IFeatureFlagLimitations,\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 ],\n})\nexport class PopoutListEditorDialogComponent implements OnInit, AfterViewInit {\n private readonly formGenerator = inject(FormGenerator);\n dialogRef = inject<MatDialogRef<PopoutListEditorDialogComponent, PopoutListEditorDialogResult>>(MatDialogRef);\n private readonly comparisonValueListHelper = inject(ComparisonValueListHelper);\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 = this.formGenerator.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 this.formGenerator.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 = this.comparisonValueListHelper.formatValuesAndHintAsJson(this.getRawValue());\n break;\n case VisualizationType.Csv:\n this.plainText = this.comparisonValueListHelper.formatValuesAndHintAsCsv(this.getRawValue());\n break;\n case VisualizationType.Csl:\n this.plainText = this.comparisonValueListHelper.formatValuesAsCsv(this.getRawValue());\n break;\n case VisualizationType.Table:\n if (this.dataSource.paginator) {\n this.focusIndex = 0;\n this.dataSource.paginator.firstPage();\n }\n break;\n }\n this.recalculate();\n }\n\n textValueChanged() {\n this.valueChanged = true;\n this.recalculate();\n if (this.comparisonValueListParseResult && !this.comparisonValueListParseResult.error) {\n this.setFormGroup(this.comparisonValueListParseResult.comparisonValueList);\n this.setDataSource();\n }\n }\n\n recalculate() {\n switch (this.visualizationType) {\n case VisualizationType.Json:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesAndHintsFromJson(\n this.plainText\n );\n break;\n case VisualizationType.Csv:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesAndHintsFromCsv(this.plainText);\n break;\n case VisualizationType.Csl:\n this.comparisonValueListParseResult = this.comparisonValueListHelper.parseValuesFromCsv(this.plainText);\n break;\n default:\n this.comparisonValueListParseResult = { comparisonValueList: [] };\n break;\n }\n if (this.visualizationType !== VisualizationType.Table && !this.comparisonValueListParseResult.error) {\n this.currentlyHasHints = !!this.comparisonValueListParseResult.comparisonValueList.find(r => !!r.hint);\n } else if (this.visualizationType !== VisualizationType.Table) {\n this.checkHasHints();\n }\n }\n\n loadFile(event: 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 [formControl]=\"row.controls.value\" />\n } @else {\n <input matInput [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 && listValueFormArray.errors) {\n <mat-error class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Invalid items.&nbsp;</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 { InputDisplayNormalizerDirective } from \"../../../../../../_directives/input-display-normalizer.directive\";\nimport { isClearTextComparator } from \"../../../../../../_models/user-comparator\";\nimport {\n AppDateAdapter,\n ComparisonValueListForm,\n ComparisonValueListHelper,\n ConfirmationDialogComponent,\n FormGenerator,\n FormHelper,\n IComparisonValueListModel,\n IComparisonValueModel,\n IFeatureFlagLimitations,\n InfoDialogComponent,\n MessagingService,\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 ],\n})\nexport class UserConditionComponent implements OnChanges {\n private readonly formGenerator = inject(FormGenerator);\n private readonly dialog = inject(MatDialog);\n private readonly comparisonValueListHelper = inject(ComparisonValueListHelper);\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 = this.formGenerator.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 = this.formGenerator.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 this.formGenerator.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 this.formGenerator.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 = this.comparisonValueListHelper.parseValuesFromCsv(value);\n if (comparisonValueListParseResult.error) {\n this.messagingService.showErrorSnack(\"Parse error\");\n } else if (comparisonValueListParseResult.comparisonValueList.length > 0) {\n this.formGenerator.addComparisonValueListValueItems(\n this.formGroup().controls.comparator.value,\n this.formGroup().controls.comparisonValue.controls.listValue!,\n comparisonValueListParseResult.comparisonValueList,\n this.featureFlagLimitations()\n );\n }\n } else {\n this.formGenerator.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 ? this.formGenerator.getComparisonValueSemverValidators(this.featureFlagLimitations())\n : this.formGenerator.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 this.formGenerator.getComparisonValueType(this.formGroup().controls.comparator.value) ===\n UserComparatorType.SemverList\n ? this.formGenerator.getComparisonValueSemverListItemValidators(this.featureFlagLimitations())\n : this.formGenerator.getComparisonValueStringListItemValidators(this.featureFlagLimitations());\n const formArray = this.formGenerator.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 }\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(this.comparisonValueListHelper.formatValuesAsCsv(this.getRawValue()));\n }\n\n copyToClipboard(value: string) {\n if (value) {\n try {\n this.clipboard.copy(value);\n this.messagingService.showSuccessSnack(\"Copied to clipboard.\");\n } catch {\n this.messagingService.showSuccessSnack(\"Clipboard unavailable.\");\n }\n } 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 [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, inject, 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 FormGenerator,\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 private readonly formGenerator = inject(FormGenerator);\n\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 createSegmentRequested = output();\n readonly manageSegmentsRequested = output();\n readonly addSegmentConditionRequestedWithoutSegments = output();\n readonly lastConditionDeleted = output();\n readonly subscriptionLimitReached = output();\n readonly prerequisiteConditionChanged = output();\n\n addUserCondition() {\n if (!this.checkLimitations()) return;\n\n const f = this.formGenerator.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: this.formGenerator.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: this.formGenerator.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 (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\" />\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 <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, inject, input, 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 FormGenerator,\n FormHelper,\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 private readonly formGenerator = inject(FormGenerator);\n\n readonly formArray = input.required<FormArray<FormGroup<PercentageOptionForm>>>();\n readonly flagState = input.required<IFlagState>();\n readonly featureFlagLimitations = input.required<IFeatureFlagLimitations>();\n readonly showPercentageEvaluationAttribute = input.required<boolean>();\n readonly percentageEvaluationAttribute = input.required<string | null>();\n readonly isPercentageOnlyTargetingRule = input.required<boolean>();\n\n readonly lastPercentageOptionLeft = output();\n readonly subscriptionLimitReached = output();\n readonly changePercentageEvaluationAttributeRequested = output();\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 this.formArray().push(\n this.formGenerator.generatePercentageOptionFormGroup(\n {\n percentage: 0,\n value: this.formGenerator.generateDefaultValue(this.flagState().settingValue.setting.settingType),\n },\n this.flagState().settingValue.setting.settingType,\n false,\n this.featureFlagLimitations()\n )\n );\n this.formArray().markAsDirty();\n }\n\n remove(index: number): void {\n this.formArray().removeAt(index);\n this.formArray().markAsDirty();\n if (this.formArray().length < 2) {\n this.lastPercentageOptionLeft.emit();\n }\n }\n\n percentageChanged(index: number) {\n 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 getPercentageEvaluationAttribute() {\n const percentageEvaluationAttribute = this.percentageEvaluationAttribute();\n return !percentageEvaluationAttribute ? \"Identifier\" : percentageEvaluationAttribute;\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 (!showPercentageEvaluationAttribute()) {\n <div class=\"attribute-wrapper flex\">\n of&nbsp;\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 {{ getPercentageEvaluationAttribute() }}\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 [flagState]=\"flagState()\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\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 (showPercentageEvaluationAttribute()) {\n @if (isPercentageOnlyTargetingRule()) {\n <div class=\"small small-pad-bottom\">\n If the {{ getPercentageEvaluationAttribute() }} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">\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 {{ getPercentageEvaluationAttribute() }} 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 (flagState().settingValue.setting.settingType !== SettingType.Boolean && !flagState().readOnly) {\n <div class=\"add-perc\">\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, inject, 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 { MatIcon } from \"@angular/material/icon\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { RxReactiveFormsModule } from \"@rxweb/reactive-form-validators\";\nimport { getRawSettiongValue, validatePercentageSum } from \"../../../../_services/form-generator\";\nimport {\n FormGenerator,\n IFeatureFlagLimitations,\n IFlagState,\n ISegment,\n IValueModel,\n PercentageOptionForm,\n SettingType,\n TargetingRuleForm,\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 MatIcon,\n ],\n})\nexport class TargetingRuleComponent {\n private readonly formGenerator = inject(FormGenerator);\n\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 showPercentageEvaluationAttribute = 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\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 switch (flagState.settingValue.setting.settingType) {\n case SettingType.Boolean: {\n formGroup.setControl(\n \"percentageOptions\",\n new FormArray<FormGroup<PercentageOptionForm>>(\n [\n this.formGenerator.generatePercentageOptionFormGroup(\n { percentage: currentValue.boolValue ? 100 : 0, value: { boolValue: true, intValue: null, doubleValue: null, stringValue: null } },\n flagState.settingValue.setting.settingType,\n false,\n this.featureFlagLimitations()\n ),\n this.formGenerator.generatePercentageOptionFormGroup(\n { percentage: currentValue.boolValue ? 0 : 100, value: { boolValue: false, intValue: null, doubleValue: null, stringValue: null } },\n flagState.settingValue.setting.settingType,\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 this.formGenerator.generatePercentageOptionFormGroup(\n { percentage: 100, value: currentValue },\n flagState.settingValue.setting.settingType,\n false,\n this.featureFlagLimitations()\n ),\n this.formGenerator.generatePercentageOptionFormGroup(\n { percentage: 0, value: { boolValue: null, intValue: null, doubleValue: null, stringValue: null } },\n flagState.settingValue.setting.settingType,\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 this.formGenerator.isPercentageOnlyTargetingRule(this.formGroup());\n }\n\n showBadge(): boolean {\n return this.targetingRuleIndex() !== 0 || !this.isPercentageOnly();\n }\n\n getChipText(): string {\n return this.targetingRuleIndex() !== 0 && 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 this.formGenerator.generateValueFormGroup(\n lastValue,\n this.flagState().settingValue.setting.settingType,\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 (lastConditionDeleted)=\"lastConditionDeleted()\"\n (createSegmentRequested)=\"createSegmentRequested.emit()\"\n (manageSegmentsRequested)=\"manageSegmentsRequested.emit()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit()\" />\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 [showPercentageEvaluationAttribute]=\"showPercentageEvaluationAttribute()\"\n [percentageEvaluationAttribute]=\"percentageEvaluationAttribute()\"\n (lastPercentageOptionLeft)=\"lastPercentageOptionLeft()\"\n (subscriptionLimitReached)=\"subscriptionLimitReached.emit()\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttributeRequested.emit()\" />\n }\n @if (formGroupValue.controls.value) {\n <app-feature-flag-value\n class=\"grow\"\n tooltip=\"Served value\"\n [flagState]=\"flagState()\"\n [formGroup]=\"formGroupValue.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\n }\n </div>\n\n @if (formGroupValue.controls.value && !flagState().readOnly) {\n <div class=\"add-perc flex side-padd bot-padd\">\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, inject, 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 {\n ConditionForm,\n FormGenerator,\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 private readonly formGenerator = inject(FormGenerator);\n\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 showPercentageEvaluationAttribute = 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\n addUserCondition() {\n if (!this.checkFeatureFlagLimitations()) {\n return false;\n }\n\n const formGroup = new FormGroup<TargetingRuleForm>({\n conditions: new FormArray<FormGroup<ConditionForm>>([\n this.formGenerator.generateConditionFormGroup(\n {\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: this.formGenerator.generateDefaultValueFormGroup(\n this.flagState().settingValue.setting.settingType,\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: this.formGenerator.generateEmptySegmentConditionFormGroup(),\n }),\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(\n this.flagState().settingValue.setting.settingType,\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: this.formGenerator.generateEmptyPrerequisiteFlagConditionFormGroup(\n this.featureFlagLimitations()\n ),\n }),\n ]),\n value: this.formGenerator.generateDefaultValueFormGroup(\n this.flagState().settingValue.setting.settingType,\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 = this.formGenerator.generateTargetingRuleWithEmptyPercentageOptions(\n flagState.settingValue.setting.settingType,\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 || this.formGenerator.isPercentageOnlyTargetingRule(targetingRule);\n }\n\n sortPredicate() {\n return (index: number) => this.sortPredicateFunction(index);\n }\n\n sortPredicateFunction(index: number) {\n // If the last targeting rule has only percentage options, we should not allow moving anything before/after it.\n return (\n index < this.formGroup().controls.targetingRules.controls.length - 1\n || !this.formGenerator.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 [showPercentageEvaluationAttribute]=\"showPercentageEvaluationAttribute()\"\n [percentageEvaluationAttribute]=\"formGroup().controls.percentageEvaluationAttribute.value\"\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 <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 [flagState]=\"flagState()\"\n [formGroup]=\"formGroup().controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\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 { FormGenerator, 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 private readonly formGenerator = inject(FormGenerator);\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 = this.formGenerator.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 { PublicApiService } from \"../../_services\";\nimport { TrackingDirective } from \"../../_services/tracking.directive\";\nimport {\n FormGenerator,\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 formGenerator = inject(FormGenerator);\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\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\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 hasTrueRule = formGroup.controls.targetingRules.controls.some(\n r => r.controls.value?.controls?.boolValue?.value\n );\n const lastFormulaTerm =\n formGroup.controls.targetingRules.controls[formGroup.controls.targetingRules.controls.length - 1];\n if (this.formGenerator.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 );\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.percentageOptions!.controls\n .map(p => p.controls.percentage.value + \"%\")\n .join(\" / \");\n glance.class = \"other\";\n }\n } else {\n switch (flagState.settingValue.setting.settingType) {\n case SettingType.Double:\n glance.percentageText = formGroup.controls.defaultValue.value.doubleValue?.toString() ?? \"\";\n break;\n case SettingType.Int:\n glance.percentageText = formGroup.controls.defaultValue.value.intValue?.toString() ?? \"\";\n break;\n case SettingType.String:\n glance.percentageText = formGroup.controls.defaultValue.value.stringValue ?? \"\";\n break;\n case SettingType.Boolean:\n glance.percentageText = formGroup.controls.defaultValue.value.boolValue ? \"ON\" : \"OFF\";\n break;\n }\n\n if (flagState.settingValue.setting.settingType === SettingType.Boolean) {\n glance.class = formGroup.controls.defaultValue.value.boolValue || hasTrueRule ? \"on\" : \"off\";\n } else {\n glance.class = \"other\";\n }\n }\n\n return glance;\n }\n\n getRuleText(): string {\n const count = this.formGroup().controls.targetingRules.controls.filter(\n tr => !this.formGenerator.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 [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 [flagState]=\"flagStateValue\"\n [formGroup]=\"formGroup().controls.defaultValue\"\n [featureFlagLimitations]=\"featureFlagLimitations()\" />\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 [showPercentageEvaluationAttribute]=\"!!formGroup().controls.percentageEvaluationAttribute.value\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments.emit()\"\n (changePercentageEvaluationAttributeRequested)=\"changePercentageEvaluationAttribute()\"\n (prerequisiteConditionChanged)=\"prerequisiteConditionChanged.emit($event)\"\n (recalcAddButtons)=\"recalcAddButtons.emit()\" />\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</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 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 { FormGenerator, getRawValue } from \"../_services/form-generator\";\nimport { TrackingDirective } from \"../_services/tracking.directive\";\nimport { BaseComponent } from \"../base/base.component\";\nimport { FormHelper, MessagingService, RerouteDialogComponent } from \"../bootstrap\";\nimport { ConfirmationDialogComponent, ConfirmationDialogData } from \"../dialogs/confirmation-dialog/confirmation-dialog\";\nimport { ReasonDialogComponent, ReasonDialogComponentResult } from \"../dialogs/reason-dialog/reason-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 formGenerator = inject(FormGenerator);\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\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 };\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 = this.formGenerator.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 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.revertDirtyValuesFromState();\n }\n });\n }\n\n revertDirtyValuesFromState() {\n if (this.formGroup.dirty) {\n this.formGroup.setControl(\n \"defaultValue\",\n this.formGenerator.generateValueFormGroup(\n this.settingFormula.defaultValue,\n this.settingFormula.setting.settingType,\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 this.formGenerator.generateTargetingRuleFormGroup(\n ft,\n this.settingFormula.setting.settingType,\n this.settingFormula.readOnly,\n this.prerequisiteSettings,\n this.settingFormula.featureFlagLimitations\n )\n )\n )\n );\n this.recalcAddButtons();\n }\n\n this.formGroup.markAsPristine();\n this.formGroup.markAsUntouched();\n this.recalcPrerequisites();\n this.showFeedBackMessage = false;\n }\n\n submit() {\n if (!this.formGroup) {\n return;\n }\n\n if (!this.formGroup.valid) {\n this.showFeedBackMessage = true;\n this.formGroup.markAllAsTouched();\n return;\n }\n\n this.showFeedBackMessage = false;\n const value: UpdateEvaluationFormulaModel = {\n ...getRawValue(this.formGroup),\n };\n\n this.updateSettingValues(value);\n }\n\n updateSettingValues(updateModel: UpdateEvaluationFormulaModel, reason?: string) {\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.saveSucceeded.emit();\n },\n error: (error: Error) => {\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 && 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, \"Segment\") === \"Segment 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 segment referenced by one of your feature flags has been deleted. Reload the config to see its latest state, apply your changes and try the save again.\",\n yesButtonLabel: \"Reload\",\n 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 && error.error && (\"\" + error.error).startsWith(\"Circular dependency detected.\")) {\n const errorMessage = (\"\" + error.error).slice(\"Circular dependency detected.\".length + 1);\n this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\n width: \"450px\",\n data: {\n title: \"Cannot save feature flags\",\n body:\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 yesButtonLabel: \"I understand\",\n hideCancelButton: true,\n },\n }\n );\n return;\n }\n\n this.formGroup.setErrors({ internalServerError: \"Internal server error\" });\n this.formGroup.markAsTouched();\n this.showFeedBackMessage = true;\n this.saveFailed.emit();\n },\n });\n }\n\n onDeleteSettingRequested(setting: { setting: SettingDataModel }) {\n if (this.formGroup.dirty) {\n const dialogRef = this.dialog.open<ConfirmationDialogComponent, ConfirmationDialogData, string>(\n ConfirmationDialogComponent,\n {\n data: {\n title: \"Discard changes?\",\n body: \"You have unsaved feature flag changes. If you continue, unsaved changes will be lost.\",\n yesButtonLabel: \"Discard changes\",\n cancelButtonLabel: \"No\",\n },\n });\n\n dialogRef.afterClosed().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 && this.formGenerator.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 this.formGenerator.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 && this.formGenerator.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","<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 (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisites()\"\n (recalcAddButtons)=\"recalcAddButtons()\"\n (expandedChanged)=\"expandedChanged($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 [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 [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.&nbsp;</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </form>\n }\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\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PublicApiConfiguration","MatOption","ComparatorGroup"],"mappings":"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"}