@pega/angular-sdk-overrides 0.24.9 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/lib/designSystemExtension/alert/alert.component.scss +3 -3
  2. package/lib/designSystemExtension/alert/alert.component.ts +0 -1
  3. package/lib/designSystemExtension/alert-banner/alert-banner.component.ts +1 -2
  4. package/lib/designSystemExtension/banner/banner.component.scss +12 -2
  5. package/lib/designSystemExtension/banner/banner.component.ts +0 -1
  6. package/lib/designSystemExtension/case-create-stage/case-create-stage.component.ts +1 -2
  7. package/lib/designSystemExtension/field-group/field-group.component.ts +0 -1
  8. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.html +6 -3
  9. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.scss +7 -35
  10. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.ts +0 -2
  11. package/lib/designSystemExtension/material-details/material-details.component.scss +0 -5
  12. package/lib/designSystemExtension/material-details/material-details.component.ts +0 -1
  13. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +4 -4
  14. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +4 -3
  15. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.ts +10 -2
  16. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.scss +2 -17
  17. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.ts +0 -1
  18. package/lib/designSystemExtension/material-summary-list/material-summary-list.component.ts +0 -1
  19. package/lib/designSystemExtension/material-utility/material-utility.component.scss +1 -2
  20. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss +1 -1
  21. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.ts +0 -1
  22. package/lib/designSystemExtension/operator/operator.component.html +2 -2
  23. package/lib/designSystemExtension/operator/operator.component.scss +13 -12
  24. package/lib/designSystemExtension/operator/operator.component.ts +5 -6
  25. package/lib/designSystemExtension/pulse/pulse.component.scss +2 -2
  26. package/lib/designSystemExtension/pulse/pulse.component.ts +7 -8
  27. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +0 -1
  28. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.ts +0 -1
  29. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.scss +16 -8
  30. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.ts +0 -1
  31. package/lib/field/auto-complete/auto-complete.component.html +0 -2
  32. package/lib/field/auto-complete/auto-complete.component.ts +56 -178
  33. package/lib/field/cancel-alert/cancel-alert.component.html +8 -12
  34. package/lib/field/cancel-alert/cancel-alert.component.scss +2 -3
  35. package/lib/field/cancel-alert/cancel-alert.component.ts +24 -37
  36. package/lib/field/check-box/check-box.component.html +17 -6
  37. package/lib/field/check-box/check-box.component.scss +0 -1
  38. package/lib/field/check-box/check-box.component.ts +32 -157
  39. package/lib/field/currency/currency.component.html +4 -4
  40. package/lib/field/currency/currency.component.ts +65 -175
  41. package/lib/field/date/date.component.html +4 -8
  42. package/lib/field/date/date.component.ts +39 -177
  43. package/lib/field/date-time/date-time.component.html +3 -4
  44. package/lib/field/date-time/date-time.component.ts +46 -146
  45. package/lib/field/decimal/decimal.component.html +4 -3
  46. package/lib/field/decimal/decimal.component.ts +66 -166
  47. package/lib/field/dropdown/dropdown.component.html +1 -0
  48. package/lib/field/dropdown/dropdown.component.ts +158 -153
  49. package/lib/field/email/email.component.ts +28 -148
  50. package/lib/field/field.base.ts +149 -0
  51. package/lib/field/group/group.component.ts +9 -7
  52. package/lib/field/integer/integer.component.ts +30 -152
  53. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.html +1 -1
  54. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.ts +3 -3
  55. package/lib/field/location/config-ext.json +8 -0
  56. package/lib/field/location/location.component.html +45 -0
  57. package/lib/field/location/location.component.scss +18 -0
  58. package/lib/field/location/location.component.spec.ts +22 -0
  59. package/lib/field/location/location.component.ts +385 -0
  60. package/lib/field/multiselect/multiselect.component.ts +56 -151
  61. package/lib/field/multiselect/utils.ts +55 -47
  62. package/lib/field/object-reference/object-reference.component.html +17 -0
  63. package/lib/field/object-reference/object-reference.component.scss +0 -0
  64. package/lib/field/object-reference/object-reference.component.spec.ts +22 -0
  65. package/lib/field/object-reference/object-reference.component.ts +237 -0
  66. package/lib/field/percentage/percentage.component.html +3 -3
  67. package/lib/field/percentage/percentage.component.ts +68 -161
  68. package/lib/field/phone/config-ext.json +1 -1
  69. package/lib/field/phone/phone.component.html +9 -6
  70. package/lib/field/phone/phone.component.scss +9 -0
  71. package/lib/field/phone/phone.component.ts +48 -159
  72. package/lib/field/radio-buttons/radio-buttons.component.html +17 -12
  73. package/lib/field/radio-buttons/radio-buttons.component.scss +4 -2
  74. package/lib/field/radio-buttons/radio-buttons.component.ts +39 -162
  75. package/lib/field/rich-text/rich-text.component.ts +32 -93
  76. package/lib/field/scalar-list/scalar-list.component.ts +20 -77
  77. package/lib/field/selectable-card/selectable-card.component.html +70 -0
  78. package/lib/field/selectable-card/selectable-card.component.scss +11 -0
  79. package/lib/field/selectable-card/selectable-card.component.spec.ts +22 -0
  80. package/lib/field/selectable-card/selectable-card.component.ts +219 -0
  81. package/lib/field/semantic-link/semantic-link.component.html +4 -8
  82. package/lib/field/semantic-link/semantic-link.component.scss +0 -13
  83. package/lib/field/semantic-link/semantic-link.component.ts +165 -6
  84. package/lib/field/text/text.component.scss +0 -1
  85. package/lib/field/text/text.component.ts +8 -5
  86. package/lib/field/text-area/text-area.component.html +4 -1
  87. package/lib/field/text-area/text-area.component.ts +30 -148
  88. package/lib/field/text-content/text-content.component.ts +0 -1
  89. package/lib/field/text-input/text-input.component.ts +28 -150
  90. package/lib/field/time/time.component.html +2 -2
  91. package/lib/field/time/time.component.ts +39 -145
  92. package/lib/field/url/url.component.ts +28 -149
  93. package/lib/field/user-reference/user-reference.component.html +40 -46
  94. package/lib/field/user-reference/user-reference.component.scss +0 -1
  95. package/lib/field/user-reference/user-reference.component.ts +110 -21
  96. package/lib/infra/Containers/flow-container/flow-container.component.html +1 -1
  97. package/lib/infra/Containers/flow-container/flow-container.component.ts +29 -54
  98. package/lib/infra/Containers/flow-container/helpers.ts +2 -2
  99. package/lib/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts +0 -1
  100. package/lib/infra/Containers/modal-view-container/modal-view-container.component.html +1 -11
  101. package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +6 -19
  102. package/lib/infra/Containers/preview-view-container/preview-view-container.component.ts +1 -1
  103. package/lib/infra/Containers/view-container/helper.ts +55 -0
  104. package/lib/infra/Containers/view-container/view-container.component.ts +6 -19
  105. package/lib/infra/action-buttons/action-buttons.component.html +13 -8
  106. package/lib/infra/action-buttons/action-buttons.component.scss +23 -0
  107. package/lib/infra/action-buttons/action-buttons.component.ts +1 -3
  108. package/lib/infra/assignment/assignment.component.html +1 -1
  109. package/lib/infra/assignment/assignment.component.ts +90 -47
  110. package/lib/infra/assignment-card/assignment-card.component.html +2 -2
  111. package/lib/infra/assignment-card/assignment-card.component.scss +0 -4
  112. package/lib/infra/assignment-card/assignment-card.component.ts +21 -5
  113. package/lib/infra/dashboard-filter/dashboard-filter.component.ts +0 -1
  114. package/lib/infra/defer-load/defer-load.component.html +6 -2
  115. package/lib/infra/defer-load/defer-load.component.ts +24 -16
  116. package/lib/infra/error-boundary/error-boundary.component.ts +0 -1
  117. package/lib/infra/multi-step/multi-step.component.scss +1 -21
  118. package/lib/infra/multi-step/multi-step.component.ts +0 -1
  119. package/lib/infra/navbar/navbar.component.html +25 -28
  120. package/lib/infra/navbar/navbar.component.scss +16 -4
  121. package/lib/infra/navbar/navbar.component.ts +11 -9
  122. package/lib/infra/reference/reference.component.ts +77 -90
  123. package/lib/infra/region/region.component.ts +0 -1
  124. package/lib/infra/root-container/root-container.component.html +2 -15
  125. package/lib/infra/root-container/root-container.component.scss +0 -1
  126. package/lib/infra/root-container/root-container.component.ts +28 -35
  127. package/lib/infra/stages/stages.component.html +2 -2
  128. package/lib/infra/stages/stages.component.scss +9 -37
  129. package/lib/infra/stages/stages.component.ts +4 -3
  130. package/lib/infra/view/view.component.html +7 -20
  131. package/lib/infra/view/view.component.ts +20 -5
  132. package/lib/template/advanced-search/advanced-search.component.html +12 -0
  133. package/lib/template/advanced-search/advanced-search.component.scss +0 -0
  134. package/lib/template/advanced-search/advanced-search.component.spec.ts +0 -0
  135. package/lib/template/advanced-search/advanced-search.component.ts +112 -0
  136. package/lib/template/advanced-search/advanced-search.service.ts +27 -0
  137. package/lib/template/advanced-search/search-group/persist-utils.ts +56 -0
  138. package/lib/template/advanced-search/search-groups/search-groups.component.html +32 -0
  139. package/lib/template/advanced-search/search-groups/search-groups.component.scss +0 -0
  140. package/lib/template/advanced-search/search-groups/search-groups.component.spec.ts +0 -0
  141. package/lib/template/advanced-search/search-groups/search-groups.component.ts +294 -0
  142. package/lib/template/advanced-search/search-groups/utils.ts +29 -0
  143. package/lib/template/app-shell/app-shell.component.html +4 -1
  144. package/lib/template/app-shell/app-shell.component.scss +0 -3
  145. package/lib/template/app-shell/app-shell.component.ts +66 -10
  146. package/lib/template/banner-page/banner-page.component.ts +0 -1
  147. package/lib/template/base/details-template-base.ts +67 -0
  148. package/lib/template/base/form-template-base.ts +16 -0
  149. package/lib/template/case-summary/case-summary.component.scss +0 -2
  150. package/lib/template/case-summary/case-summary.component.ts +7 -23
  151. package/lib/template/case-view/case-view.component.html +7 -7
  152. package/lib/template/case-view/case-view.component.scss +18 -10
  153. package/lib/template/case-view/case-view.component.ts +9 -15
  154. package/lib/template/confirmation/confirmation.component.html +1 -1
  155. package/lib/template/confirmation/confirmation.component.ts +1 -2
  156. package/lib/template/data-reference/data-reference-advanced-search.service.ts +16 -0
  157. package/lib/template/data-reference/data-reference.component.html +11 -8
  158. package/lib/template/data-reference/data-reference.component.ts +377 -148
  159. package/lib/template/data-reference/search-form/search-form.component.html +39 -0
  160. package/lib/template/data-reference/search-form/search-form.component.scss +11 -0
  161. package/lib/template/data-reference/search-form/search-form.component.spec.ts +0 -0
  162. package/lib/template/data-reference/search-form/search-form.component.ts +167 -0
  163. package/lib/template/data-reference/search-form/tabsData.ts +160 -0
  164. package/lib/template/data-reference/utils.ts +92 -0
  165. package/lib/template/default-form/default-form.component.html +0 -4
  166. package/lib/template/default-form/default-form.component.ts +50 -26
  167. package/lib/template/default-page/default-page.component.html +34 -0
  168. package/lib/template/default-page/default-page.component.scss +31 -0
  169. package/lib/template/default-page/default-page.component.spec.ts +24 -0
  170. package/lib/template/default-page/default-page.component.ts +64 -0
  171. package/lib/template/details/details.component.ts +7 -42
  172. package/lib/template/details-narrow-wide/details-narrow-wide.component.ts +6 -40
  173. package/lib/template/details-one-column/details-one-column.component.ts +7 -43
  174. package/lib/template/details-sub-tabs/details-sub-tabs.component.html +1 -2
  175. package/lib/template/details-sub-tabs/details-sub-tabs.component.ts +5 -38
  176. package/lib/template/details-three-column/details-three-column.component.ts +7 -44
  177. package/lib/template/details-two-column/details-two-column.component.ts +8 -45
  178. package/lib/template/details-wide-narrow/details-wide-narrow.component.ts +7 -43
  179. package/lib/template/dynamic-tabs/dynamic-tabs.component.html +3 -0
  180. package/lib/template/dynamic-tabs/dynamic-tabs.component.ts +8 -4
  181. package/lib/template/field-group-list/field-group-list.component.scss +0 -1
  182. package/lib/template/field-group-list/field-group-list.component.ts +0 -1
  183. package/lib/template/field-group-template/field-group-template.component.html +7 -7
  184. package/lib/template/field-group-template/field-group-template.component.scss +8 -0
  185. package/lib/template/field-group-template/field-group-template.component.ts +68 -48
  186. package/lib/template/field-value-list/field-value-list.component.html +2 -2
  187. package/lib/template/field-value-list/field-value-list.component.scss +6 -1
  188. package/lib/template/field-value-list/field-value-list.component.ts +0 -1
  189. package/lib/template/inline-dashboard/inline-dashboard.component.ts +0 -1
  190. package/lib/template/inline-dashboard-page/inline-dashboard-page.component.ts +2 -3
  191. package/lib/template/list-page/list-page.component.ts +0 -1
  192. package/lib/template/list-view/list-view.component.html +14 -4
  193. package/lib/template/list-view/list-view.component.scss +30 -19
  194. package/lib/template/list-view/list-view.component.ts +179 -95
  195. package/lib/template/list-view/listViewHelpers.ts +4 -10
  196. package/lib/template/list-view/utils.ts +27 -7
  197. package/lib/template/multi-reference-readonly/multi-reference-readonly.component.ts +0 -1
  198. package/lib/template/narrow-wide-form/narrow-wide-form.component.ts +1 -2
  199. package/lib/template/object-page/object-page.component.html +1 -0
  200. package/lib/template/object-page/object-page.component.scss +0 -0
  201. package/lib/template/object-page/object-page.component.spec.ts +22 -0
  202. package/lib/template/object-page/object-page.component.ts +14 -0
  203. package/lib/template/one-column/one-column.component.ts +4 -4
  204. package/lib/template/one-column-page/one-column-page.component.ts +0 -1
  205. package/lib/template/one-column-tab/one-column-tab.component.scss +1 -1
  206. package/lib/template/one-column-tab/one-column-tab.component.ts +1 -2
  207. package/lib/template/page/page.component.ts +1 -2
  208. package/lib/template/promoted-filters/promoted-filters.component.ts +1 -2
  209. package/lib/template/repeating-structures/repeating-structures.component.ts +1 -3
  210. package/lib/template/self-service-case-view/self-service-case-view.component.html +80 -0
  211. package/lib/template/self-service-case-view/self-service-case-view.component.scss +124 -0
  212. package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +24 -0
  213. package/lib/template/self-service-case-view/self-service-case-view.component.ts +216 -0
  214. package/lib/template/simple-table/simple-table.component.ts +0 -2
  215. package/lib/template/simple-table-manual/helpers.ts +127 -11
  216. package/lib/template/simple-table-manual/simple-table-manual.component.html +27 -8
  217. package/lib/template/simple-table-manual/simple-table-manual.component.scss +16 -17
  218. package/lib/template/simple-table-manual/simple-table-manual.component.ts +118 -58
  219. package/lib/template/simple-table-select/simple-table-select.component.ts +3 -4
  220. package/lib/template/single-reference-readonly/single-reference-readonly.component.html +4 -1
  221. package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +21 -0
  222. package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +104 -4
  223. package/lib/template/sub-tabs/sub-tabs.component.ts +0 -1
  224. package/lib/template/three-column/three-column.component.ts +4 -4
  225. package/lib/template/three-column-page/three-column-page.component.ts +0 -1
  226. package/lib/template/two-column/two-column.component.ts +4 -4
  227. package/lib/template/two-column-page/two-column-page.component.ts +0 -1
  228. package/lib/template/two-column-tab/two-column-tab.component.ts +1 -2
  229. package/lib/template/utils.ts +58 -0
  230. package/lib/template/wide-narrow-form/wide-narrow-form.component.ts +4 -4
  231. package/lib/template/wide-narrow-page/wide-narrow-page.component.ts +1 -2
  232. package/lib/template/wss-nav-bar/wss-nav-bar.component.html +5 -4
  233. package/lib/template/wss-nav-bar/wss-nav-bar.component.scss +2 -8
  234. package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +3 -11
  235. package/lib/widget/app-announcement/app-announcement.component.html +1 -2
  236. package/lib/widget/app-announcement/app-announcement.component.scss +2 -2
  237. package/lib/widget/app-announcement/app-announcement.component.ts +0 -1
  238. package/lib/widget/attachment/Attachment.types.ts +92 -0
  239. package/lib/widget/attachment/AttachmentUtils.ts +287 -0
  240. package/lib/widget/attachment/attachment.component.html +3 -3
  241. package/lib/widget/attachment/attachment.component.scss +2 -5
  242. package/lib/widget/attachment/attachment.component.ts +256 -259
  243. package/lib/widget/case-history/case-history.component.ts +0 -1
  244. package/lib/widget/feed-container/feed-container.component.scss +3 -9
  245. package/lib/widget/feed-container/feed-container.component.ts +9 -12
  246. package/lib/widget/file-utility/file-utility.component.html +3 -3
  247. package/lib/widget/file-utility/file-utility.component.scss +5 -16
  248. package/lib/widget/file-utility/file-utility.component.ts +2 -6
  249. package/lib/widget/list-utility/list-utility.component.scss +3 -5
  250. package/lib/widget/list-utility/list-utility.component.ts +0 -1
  251. package/lib/widget/quick-create/quick-create.component.ts +0 -1
  252. package/lib/widget/todo/todo.component.html +13 -11
  253. package/lib/widget/todo/todo.component.scss +19 -11
  254. package/lib/widget/todo/todo.component.ts +101 -87
  255. package/lib/widget/utility/utility.component.ts +0 -1
  256. package/package.json +1 -1
@@ -1,12 +1,11 @@
1
- import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
1
+ import { Component, OnInit, forwardRef, OnDestroy } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatCheckboxModule } from '@angular/material/checkbox';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
6
  import { MatOptionModule } from '@angular/material/core';
7
- import { interval } from 'rxjs';
8
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
9
- import { Utils } from '@pega/angular-sdk-components';
7
+
8
+ import { FieldBase } from '@pega/angular-sdk-components';
10
9
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
11
10
  import { PConnFieldProps } from '@pega/angular-sdk-components';
12
11
  import { deleteInstruction, insertInstruction, updateNewInstructions } from '@pega/angular-sdk-components';
@@ -26,38 +25,22 @@ interface CheckboxProps extends Omit<PConnFieldProps, 'value'> {
26
25
  primaryField: string;
27
26
  readonlyContextList: any;
28
27
  referenceList: string;
28
+ variant?: string;
29
+ renderMode: string;
29
30
  }
30
31
 
31
32
  @Component({
32
33
  selector: 'app-check-box',
33
34
  templateUrl: './check-box.component.html',
34
35
  styleUrls: ['./check-box.component.scss'],
35
- standalone: true,
36
36
  imports: [CommonModule, ReactiveFormsModule, MatCheckboxModule, MatFormFieldModule, MatOptionModule, forwardRef(() => ComponentMapperComponent)]
37
37
  })
38
- export class CheckBoxComponent implements OnInit, OnDestroy {
39
- @Input() pConn$: typeof PConnect;
40
- @Input() formGroup$: FormGroup;
41
-
42
- // Used with AngularPConnect
43
- angularPConnectData: AngularPConnectData = {};
38
+ export class CheckBoxComponent extends FieldBase implements OnInit, OnDestroy {
44
39
  configProps$: CheckboxProps;
45
40
 
46
- label$ = '';
47
- value$: any = '';
48
41
  caption$?: string = '';
49
- testId = '';
50
42
  showLabel$ = false;
51
43
  isChecked$ = false;
52
- bRequired$ = false;
53
- bReadonly$ = false;
54
- bDisabled$ = false;
55
- bVisible$ = true;
56
- displayMode$?: string = '';
57
- controlName$: string;
58
- bHasForm$ = true;
59
- componentReference = '';
60
- helperText: string;
61
44
  trueLabel$?: string;
62
45
  falseLabel$?: string;
63
46
 
@@ -69,84 +52,35 @@ export class CheckBoxComponent implements OnInit, OnDestroy {
69
52
  selectedvalues: any;
70
53
  referenceList: string;
71
54
  listOfCheckboxes: any[] = [];
72
- actionsApi: any;
73
- propName: any;
74
-
75
- fieldControl = new FormControl('', null);
76
-
77
- constructor(
78
- private angularPConnect: AngularPConnectService,
79
- private cdRef: ChangeDetectorRef,
80
- private utils: Utils
81
- ) {}
82
-
83
- ngOnInit(): void {
84
- // First thing in initialization is registering and subscribing to the AngularPConnect service
85
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
86
- this.controlName$ = this.angularPConnect.getComponentID(this);
87
-
88
- // Then, continue on with other initialization
55
+ variant?: string;
89
56
 
90
- // call updateSelf when initializing
91
- // this.updateSelf();
92
- this.checkAndUpdate();
57
+ // Override ngOnInit method
58
+ override ngOnInit(): void {
59
+ super.ngOnInit();
93
60
 
94
- if (this.selectionMode === 'multi' && this.referenceList?.length > 0) {
61
+ if (this.selectionMode === 'multi' && this.referenceList?.length > 0 && !this.bReadonly$) {
95
62
  this.pConn$.setReferenceList(this.selectionList);
96
63
  updateNewInstructions(this.pConn$, this.selectionList);
97
64
  }
98
-
99
- if (this.formGroup$) {
100
- // add control to formGroup
101
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
102
- this.fieldControl.setValue(this.value$);
103
- this.bHasForm$ = true;
104
- } else {
105
- this.bReadonly$ = true;
106
- this.bHasForm$ = false;
107
- }
108
65
  }
109
66
 
110
- ngOnDestroy(): void {
111
- if (this.formGroup$) {
112
- this.formGroup$.removeControl(this.controlName$);
113
- }
114
-
115
- if (this.angularPConnectData.unsubscribeFn) {
116
- this.angularPConnectData.unsubscribeFn();
117
- }
118
- }
119
-
120
- // Callback passed when subscribing to store change
121
- onStateChange() {
122
- this.checkAndUpdate();
123
- }
124
-
125
- checkAndUpdate() {
126
- // Should always check the bridge to see if the component should
127
- // update itself (re-render)
128
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
129
-
130
- // ONLY call updateSelf when the component should update
131
- if (bUpdateSelf) {
132
- this.updateSelf();
133
- }
134
- }
135
-
136
- // updateSelf
137
- updateSelf(): void {
67
+ /**
68
+ * Updates the component when there are changes in the state.
69
+ */
70
+ override updateSelf(): void {
138
71
  // moved this from ngOnInit() and call this from there instead...
139
72
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as CheckboxProps;
140
73
 
141
- this.testId = this.configProps$.testId;
142
- this.displayMode$ = this.configProps$.displayMode;
143
- this.label$ = this.configProps$.label;
74
+ // Update component common properties
75
+ this.updateComponentCommonProperties(this.configProps$);
76
+
144
77
  if (this.label$ != '') {
145
78
  this.showLabel$ = true;
146
79
  }
147
-
148
- this.actionsApi = this.pConn$.getActionsApi();
149
- this.propName = (this.pConn$.getStateProps() as any).value;
80
+ this.variant = this.configProps$.variant;
81
+ if (this.bReadonly$) {
82
+ this.fieldControl?.disable();
83
+ }
150
84
 
151
85
  // multi case
152
86
  this.selectionMode = this.configProps$.selectionMode;
@@ -155,11 +89,12 @@ export class CheckBoxComponent implements OnInit, OnDestroy {
155
89
  this.selectionList = this.configProps$.selectionList;
156
90
  this.selectedvalues = this.configProps$.readonlyContextList;
157
91
  this.primaryField = this.configProps$.primaryField;
92
+ this.bReadonly$ = this.configProps$.renderMode === 'ReadOnly' || this.displayMode$ === 'DISPLAY_ONLY' || this.configProps$.readOnly;
158
93
 
159
94
  this.datasource = this.configProps$.datasource;
160
95
  this.selectionKey = this.configProps$.selectionKey;
161
96
  const listSourceItems = this.datasource?.source ?? [];
162
- const dataField: any = this.selectionKey?.split?.('.')[1];
97
+ const dataField = this.selectionKey?.split?.('.')[1] ?? '';
163
98
  const listToDisplay: any[] = [];
164
99
  listSourceItems.forEach(element => {
165
100
  element.selected = this.selectedvalues?.some?.(data => data[dataField] === element.key);
@@ -172,69 +107,26 @@ export class CheckBoxComponent implements OnInit, OnDestroy {
172
107
  }
173
108
 
174
109
  this.caption$ = this.configProps$.caption;
175
- this.helperText = this.configProps$.helperText;
176
- this.trueLabel$ = this.configProps$.trueLabel;
177
- this.falseLabel$ = this.configProps$.falseLabel;
110
+ this.trueLabel$ = this.configProps$.trueLabel || 'Yes';
111
+ this.falseLabel$ = this.configProps$.falseLabel || 'No';
178
112
 
179
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
180
- setTimeout(() => {
181
- if (this.configProps$.required != null) {
182
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
183
- }
184
- this.cdRef.detectChanges();
185
- });
186
-
187
- if (this.configProps$.visibility != null) {
188
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
189
- }
190
-
191
- // disabled
192
- if (this.configProps$.disabled != undefined) {
193
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
194
- }
195
-
196
- if (this.configProps$.readOnly != null) {
197
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
198
- }
199
-
200
- if (this.bDisabled$ || this.bReadonly$) {
201
- this.fieldControl.disable();
202
- } else {
203
- this.fieldControl.enable();
204
- }
205
-
206
- this.componentReference = (this.pConn$.getStateProps() as any).value;
207
-
208
- // eslint-disable-next-line sonarjs/no-redundant-boolean
209
- if (this.value$ === 'true' || this.value$ == true) {
210
- this.isChecked$ = true;
211
- } else {
212
- this.isChecked$ = false;
213
- }
214
- // trigger display of error message with field control
215
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
216
- const timer = interval(100).subscribe(() => {
217
- this.fieldControl.setErrors({ message: true });
218
- this.fieldControl.markAsTouched();
219
-
220
- timer.unsubscribe();
221
- });
222
- }
113
+ this.isChecked$ = this.value$ === 'true' || this.value$ == true;
223
114
  }
224
115
  }
225
116
 
226
117
  fieldOnChange(event: any) {
227
118
  event.value = event.checked;
228
-
229
119
  handleEvent(this.actionsApi, 'changeNblur', this.propName, event.checked);
120
+ this.pConn$.clearErrorMessages({
121
+ property: this.propName
122
+ });
230
123
  }
231
124
 
232
125
  fieldOnBlur(event: any) {
233
126
  if (this.selectionMode === 'multi') {
234
127
  this.pConn$.getValidationApi().validate(this.selectedvalues, this.selectionList);
235
128
  } else {
236
- event.value = event.checked;
237
- this.angularPConnectData.actions?.onBlur(this, event);
129
+ this.pConn$.getValidationApi().validate(event.target.checked);
238
130
  }
239
131
  }
240
132
 
@@ -256,21 +148,4 @@ export class CheckBoxComponent implements OnInit, OnDestroy {
256
148
  context: ''
257
149
  });
258
150
  }
259
-
260
- getErrorMessage() {
261
- let errMessage = '';
262
-
263
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
264
- if (this.fieldControl.hasError('message')) {
265
- errMessage = this.angularPConnectData.validateMessage ?? '';
266
- return errMessage;
267
- }
268
- if (this.fieldControl.hasError('required')) {
269
- errMessage = 'You must enter a value';
270
- } else if (this.fieldControl.errors) {
271
- errMessage = this.fieldControl.errors.toString();
272
- }
273
-
274
- return errMessage;
275
- }
276
151
  }
@@ -1,5 +1,5 @@
1
1
  <div *ngIf="displayMode$; else noDisplayMode">
2
- <component-mapper *ngIf="bVisible$ !== false" name="FieldValueList" [props]="{ label$, value$, displayMode$ }"></component-mapper>
2
+ <component-mapper *ngIf="bVisible$ !== false" name="FieldValueList" [props]="{ label$, value$: formattedValue, displayMode$ }"></component-mapper>
3
3
  </div>
4
4
  <ng-template #noDisplayMode>
5
5
  <div *ngIf="bHasForm$; else noEdit">
@@ -13,9 +13,9 @@
13
13
  matInput
14
14
  currencyMask
15
15
  [options]="{
16
- prefix: currSym,
17
- thousands: currSep,
18
- decimal: currDec,
16
+ prefix: currencySymbol,
17
+ thousands: thousandSeparator,
18
+ decimal: decimalSeparator,
19
19
  align: 'left',
20
20
  nullable: true,
21
21
  precision: decimalPrecision,
@@ -1,215 +1,105 @@
1
- import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
1
+ import { Component, forwardRef } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
3
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatInputModule } from '@angular/material/input';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
- import { interval } from 'rxjs';
7
6
  import { NgxCurrencyDirective, NgxCurrencyInputMode } from 'ngx-currency';
8
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
9
- import { Utils } from '@pega/angular-sdk-components';
7
+
8
+ import { FieldBase } from '@pega/angular-sdk-components';
10
9
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
11
10
  import { handleEvent } from '@pega/angular-sdk-components';
12
- import { getCurrencyCharacters } from '@pega/angular-sdk-components';
11
+ import { getCurrencyCharacters, getCurrencyOptions } from '@pega/angular-sdk-components';
12
+ import { format } from '@pega/angular-sdk-components';
13
13
  import { PConnFieldProps } from '@pega/angular-sdk-components';
14
14
 
15
15
  interface CurrrencyProps extends PConnFieldProps {
16
16
  // If any, enter additional props that only exist on Currency here
17
17
  currencyISOCode?: string;
18
18
  allowDecimals: boolean;
19
+ formatter?: string;
19
20
  }
20
21
 
21
22
  @Component({
22
23
  selector: 'app-currency',
23
24
  templateUrl: './currency.component.html',
24
25
  styleUrls: ['./currency.component.scss'],
25
- standalone: true,
26
26
  imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, NgxCurrencyDirective, forwardRef(() => ComponentMapperComponent)]
27
27
  })
28
- export class CurrencyComponent implements OnInit, OnDestroy {
29
- @Input() pConn$: typeof PConnect;
30
- @Input() formGroup$: FormGroup;
31
-
32
- // Used with AngularPConnect
33
- angularPConnectData: AngularPConnectData = {};
28
+ export class CurrencyComponent extends FieldBase {
34
29
  configProps$: CurrrencyProps;
30
+ override fieldControl = new FormControl<number | null>(null, { updateOn: 'blur' });
35
31
 
36
- label$ = '';
37
- value$: any;
38
- bRequired$ = false;
39
- bReadonly$ = false;
40
- bDisabled$ = false;
41
- bVisible$ = true;
42
- displayMode$?: string = '';
43
- controlName$: string;
44
- bHasForm$ = true;
45
- componentReference = '';
46
- testId: string;
47
- helperText: string;
48
- placeholder: string;
49
- currencyISOCode = 'USD';
50
- currencyOptions: Object = {};
51
-
52
- fieldControl = new FormControl<number | null>(null, { updateOn: 'blur' });
53
- currSym: string;
54
- currSep: string;
55
- currDec: string;
56
- inputMode: any;
32
+ currencyOptions: object = {};
33
+ currencySymbol: string;
34
+ thousandSeparator: string;
35
+ decimalSeparator: string;
57
36
  decimalPrecision: number | undefined;
37
+ formattedValue: string;
38
+ formatter;
39
+ inputMode = NgxCurrencyInputMode.Natural;
40
+
41
+ /**
42
+ * Updates the component when there are changes in the state.
43
+ */
44
+ override updateSelf(): void {
45
+ // Resolve configuration properties
46
+ this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as CurrrencyProps;
58
47
 
59
- constructor(
60
- private angularPConnect: AngularPConnectService,
61
- private cdRef: ChangeDetectorRef,
62
- private utils: Utils
63
- ) {}
64
-
65
- ngOnInit(): void {
66
- // First thing in initialization is registering and subscribing to the AngularPConnect service
67
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
68
- this.controlName$ = this.angularPConnect.getComponentID(this);
69
-
70
- // Then, continue on with other initialization
71
-
72
- // call updateSelf when initializing
73
- // this.updateSelf();
74
- this.checkAndUpdate();
48
+ // Update component common properties
49
+ this.updateComponentCommonProperties(this.configProps$);
75
50
 
76
- if (this.formGroup$) {
77
- // add control to formGroup
78
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
51
+ // Extract and normalize the value property
52
+ const { value } = this.configProps$;
53
+ if (value) {
54
+ this.value$ = typeof value === 'string' ? parseFloat(value) : value;
79
55
  this.fieldControl.setValue(this.value$);
80
- this.bHasForm$ = true;
81
- } else {
82
- this.bReadonly$ = true;
83
- this.bHasForm$ = false;
84
- }
85
- }
86
-
87
- ngOnDestroy(): void {
88
- if (this.formGroup$) {
89
- this.formGroup$.removeControl(this.controlName$);
90
- }
91
-
92
- if (this.angularPConnectData.unsubscribeFn) {
93
- this.angularPConnectData.unsubscribeFn();
94
56
  }
95
- }
96
-
97
- // Callback passed when subscribing to store change
98
- onStateChange() {
99
- this.checkAndUpdate();
100
- }
101
-
102
- checkAndUpdate() {
103
- // Should always check the bridge to see if the component should
104
- // update itself (re-render)
105
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
106
57
 
107
- // ONLY call updateSelf when the component should update
108
- if (bUpdateSelf) {
109
- this.updateSelf();
110
- }
58
+ // update currency properties
59
+ this.updateCurrencyProperties(this.configProps$);
111
60
  }
112
61
 
113
- // updateSelf
114
- updateSelf(): void {
115
- // starting very simple...
116
-
117
- // moved this from ngOnInit() and call this from there instead...
118
- this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as CurrrencyProps;
119
- this.testId = this.configProps$.testId;
120
- this.label$ = this.configProps$.label;
121
- this.displayMode$ = this.configProps$.displayMode;
122
- this.inputMode = NgxCurrencyInputMode.Natural;
123
- let nValue: any = this.configProps$.value;
124
- if (nValue) {
125
- if (typeof nValue === 'string') {
126
- nValue = parseFloat(nValue);
127
- }
128
- this.value$ = nValue;
129
- }
130
- this.helperText = this.configProps$.helperText;
131
- this.placeholder = this.configProps$.placeholder || '';
132
- const currencyISOCode: any = this.configProps$?.currencyISOCode;
62
+ /**
63
+ * Updates the currency properties
64
+ *
65
+ * @param {Object} configProps - Configuration properties.
66
+ * @param {boolean} configProps.allowDecimals - Whether to allow decimal values.
67
+ * @param {string} configProps.currencyISOCode - The ISO code of the currency.
68
+ * @param {string} configProps.formatter - The formatter type (e.g., 'currency').
69
+ */
70
+ protected updateCurrencyProperties(configProps): void {
71
+ const { allowDecimals, currencyISOCode = 'USD', formatter } = configProps;
133
72
 
134
73
  const theSymbols = getCurrencyCharacters(currencyISOCode);
135
- this.currSym = theSymbols.theCurrencySymbol;
136
- this.currSep = theSymbols.theDigitGroupSeparator;
137
- this.currDec = theSymbols.theDecimalIndicator;
74
+ this.currencySymbol = theSymbols.theCurrencySymbol;
75
+ this.thousandSeparator = theSymbols.theDigitGroupSeparator;
76
+ this.decimalSeparator = theSymbols.theDecimalIndicator;
77
+ this.decimalPrecision = allowDecimals ? 2 : 0;
138
78
 
139
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
140
- setTimeout(() => {
141
- if (this.configProps$.required != null) {
142
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
143
- }
144
- this.cdRef.detectChanges();
145
- });
146
-
147
- if (this.configProps$.visibility != null) {
148
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
149
- }
150
-
151
- // disabled
152
- if (this.configProps$.disabled != undefined) {
153
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
154
- }
155
-
156
- if (this.bDisabled$) {
157
- this.fieldControl.disable();
158
- } else {
159
- this.fieldControl.enable();
160
- }
161
-
162
- if (this.configProps$.readOnly != null) {
163
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
164
- }
165
-
166
- if (this.configProps$.currencyISOCode != null) {
167
- this.currencyISOCode = this.configProps$.currencyISOCode;
168
- }
169
-
170
- this.decimalPrecision = this.configProps$?.allowDecimals ? 2 : 0;
171
-
172
- this.componentReference = (this.pConn$.getStateProps() as any).value;
173
-
174
- // trigger display of error message with field control
175
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
176
- const timer = interval(100).subscribe(() => {
177
- this.fieldControl.setErrors({ message: true });
178
- this.fieldControl.markAsTouched();
179
-
180
- timer.unsubscribe();
181
- });
79
+ if (['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(this.displayMode$)) {
80
+ this.formattedValue = format(this.value$, formatter ? formatter.toLowerCase() : 'currency', getCurrencyOptions(currencyISOCode));
182
81
  }
183
82
  }
184
83
 
185
84
  fieldOnBlur(event: any) {
186
- const actionsApi = this.pConn$?.getActionsApi();
187
- const propName = (this.pConn$?.getStateProps() as any).value;
188
- let value = event?.target?.value;
189
- value = value?.substring(1);
190
- if (this.currSep === ',') {
191
- value = value.replace(/,/g, '');
192
- } else {
193
- value = value?.replace(/\./g, '');
194
- value = value?.replace(/,/g, '.');
195
- }
196
- handleEvent(actionsApi, 'changeNblur', propName, value);
197
- }
198
-
199
- getErrorMessage() {
200
- let errMessage = '';
201
-
202
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
203
- if (this.fieldControl.hasError('message')) {
204
- errMessage = this.angularPConnectData.validateMessage ?? '';
205
- return errMessage;
206
- }
207
- if (this.fieldControl.hasError('required')) {
208
- errMessage = 'You must enter a value';
209
- } else if (this.fieldControl.errors) {
210
- errMessage = this.fieldControl.errors.toString();
85
+ const oldVal = this.value$ ?? '';
86
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
87
+
88
+ if (isValueChanged) {
89
+ const actionsApi = this.pConn$?.getActionsApi();
90
+ const propName = this.pConn$?.getStateProps().value;
91
+ let value = event?.target?.value;
92
+ value = value?.substring(1);
93
+ // replacing thousand separator with empty string as not required in api call
94
+ const thousandSep = this.thousandSeparator === '.' ? '\\.' : this.thousandSeparator;
95
+ let regExp = new RegExp(String.raw`${thousandSep}`, 'g');
96
+ value = value?.replace(regExp, '');
97
+ // replacing decimal separator with '.'
98
+ if (this.decimalSeparator !== '.') {
99
+ regExp = new RegExp(String.raw`${this.decimalSeparator}`, 'g');
100
+ value = value.replace(regExp, '.');
101
+ }
102
+ handleEvent(actionsApi, 'changeNblur', propName, value);
211
103
  }
212
-
213
- return errMessage;
214
104
  }
215
105
  }
@@ -1,9 +1,5 @@
1
1
  <div *ngIf="displayMode$; else noDisplayMode">
2
- <component-mapper
3
- *ngIf="bVisible$ !== false"
4
- name="FieldValueList"
5
- [props]="{ label$, value$: getFormattedValue(), displayMode$ }"
6
- ></component-mapper>
2
+ <component-mapper *ngIf="bVisible$ !== false" name="FieldValueList" [props]="{ label$, value$: formattedValue$, displayMode$ }"></component-mapper>
7
3
  </div>
8
4
  <ng-template #noDisplayMode>
9
5
  <div *ngIf="!bReadonly$ && bHasForm$; else noEdit">
@@ -15,15 +11,15 @@
15
11
  #dateInput
16
12
  [attr.data-test-id]="testId"
17
13
  [matDatepicker]="pegadate"
18
- [placeholder]="dateFormatInfo.dateFormatStringLC"
14
+ [placeholder]="theDateFormat.dateFormatStringLC"
19
15
  type="text"
20
16
  [value]="value$"
21
17
  [required]="bRequired$"
18
+ [disabled]="bDisabled$"
22
19
  [formControl]="fieldControl"
23
20
  (dateChange)="fieldOnDateChange($event)"
24
- (blur)="fieldOnBlur($event)"
25
21
  />
26
- <mat-datepicker-toggle matSuffix [for]="pegadate"></mat-datepicker-toggle>
22
+ <mat-datepicker-toggle matSuffix [for]="pegadate" [disabled]="bDisabled$"></mat-datepicker-toggle>
27
23
  <mat-datepicker #pegadate [startAt]="value$"></mat-datepicker>
28
24
  <mat-error *ngIf="fieldControl.invalid">{{ getErrorMessage() }}</mat-error>
29
25
  </mat-form-field>