@pega/angular-sdk-overrides 24.2.10 → 25.1.10

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