@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,13 +1,13 @@
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 { ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatFormFieldModule } from '@angular/material/form-field';
5
- import { interval } from 'rxjs';
6
- import { NgxMatIntlTelInputComponent } from 'ngx-mat-intl-tel-input';
7
- import { Utils } from '@pega/angular-sdk-components';
8
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
9
- import { handleEvent } from '@pega/angular-sdk-components';
5
+ import { MatTelInput } from 'mat-tel-input';
6
+ import { parsePhoneNumberFromString } from 'libphonenumber-js';
7
+
8
+ import { FieldBase } from '@pega/angular-sdk-components';
10
9
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
10
+ import { handleEvent } from '@pega/angular-sdk-components';
11
11
  import { PConnFieldProps } from '@pega/angular-sdk-components';
12
12
 
13
13
  interface PhoneProps extends PConnFieldProps {
@@ -18,182 +18,71 @@ interface PhoneProps extends PConnFieldProps {
18
18
  selector: 'app-phone',
19
19
  templateUrl: './phone.component.html',
20
20
  styleUrls: ['./phone.component.scss'],
21
- standalone: true,
22
- imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, NgxMatIntlTelInputComponent, forwardRef(() => ComponentMapperComponent)]
21
+ imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatTelInput, forwardRef(() => ComponentMapperComponent)]
23
22
  })
24
- export class PhoneComponent implements OnInit, OnDestroy {
25
- @Input() pConn$: typeof PConnect;
26
- @Input() formGroup$: FormGroup;
27
-
28
- // Used with AngularPConnect
29
- angularPConnectData: AngularPConnectData = {};
23
+ export class PhoneComponent extends FieldBase {
30
24
  configProps$: PhoneProps;
31
25
 
32
- label$ = '';
33
- value$: string;
34
- bRequired$ = false;
35
- bReadonly$ = false;
36
- bDisabled$ = false;
37
- bVisible$ = true;
38
- displayMode$?: string = '';
39
- controlName$: string;
40
- bHasForm$ = true;
41
- componentReference = '';
42
- testId: string;
43
- separateDialCode = false;
44
- afterBlur: boolean;
45
- helperText: string;
46
-
47
- fieldControl = new FormControl('', null);
48
-
49
- phoneForm = new FormGroup({
50
- phone: new FormControl<string | null>(null)
51
- });
26
+ preferredCountries: string[] = ['us'];
52
27
 
53
- constructor(
54
- private angularPConnect: AngularPConnectService,
55
- private cdRef: ChangeDetectorRef,
56
- private utils: Utils
57
- ) {}
58
-
59
- ngOnInit(): void {
60
- // First thing in initialization is registering and subscribing to the AngularPConnect service
61
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
62
- this.controlName$ = this.angularPConnect.getComponentID(this);
63
-
64
- // Then, continue on with other initialization
28
+ /**
29
+ * Updates the component when there are changes in the state.
30
+ */
31
+ override updateSelf(): void {
32
+ // Resolve config properties
33
+ this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as PhoneProps;
65
34
 
66
- // call updateSelf when initializing
67
- // this.updateSelf();
68
- this.checkAndUpdate();
35
+ // Update component common properties
36
+ this.updateComponentCommonProperties(this.configProps$);
69
37
 
70
- if (this.formGroup$) {
71
- // add control to formGroup
72
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
38
+ // Extract and normalize the value property
39
+ const { value } = this.configProps$;
40
+ if (value) {
41
+ this.value$ = value;
73
42
  this.fieldControl.setValue(this.value$);
74
- this.bHasForm$ = true;
75
- } else {
76
- this.bReadonly$ = true;
77
- this.bHasForm$ = false;
78
- }
79
- }
80
-
81
- ngOnDestroy(): void {
82
- if (this.formGroup$) {
83
- this.formGroup$.removeControl(this.controlName$);
84
- }
85
-
86
- if (this.angularPConnectData.unsubscribeFn) {
87
- this.angularPConnectData.unsubscribeFn();
43
+ this.updatePreferredCountries();
88
44
  }
89
45
  }
90
46
 
91
- // Callback passed when subscribing to store change
92
- onStateChange() {
93
- this.checkAndUpdate();
94
- }
95
-
96
- checkAndUpdate() {
97
- // Should always check the bridge to see if the component should
98
- // update itself (re-render)
99
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
100
-
101
- // ONLY call updateSelf when the component should update
102
- if (bUpdateSelf) {
103
- this.updateSelf();
104
- }
105
- }
106
-
107
- // updateSelf
108
- updateSelf(): void {
109
- // moved this from ngOnInit() and call this from there instead...
110
- this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as PhoneProps;
111
-
112
- this.label$ = this.configProps$.label;
113
- this.displayMode$ = this.configProps$.displayMode;
114
- this.testId = this.configProps$.testId;
115
- if (this.configProps$.value != undefined) {
116
- this.value$ = this.configProps$.value;
117
- }
118
- this.helperText = this.configProps$.helperText;
119
-
120
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
121
- setTimeout(() => {
122
- if (this.configProps$.required != null) {
123
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
124
- }
125
- this.cdRef.detectChanges();
126
- });
127
-
128
- if (this.configProps$.visibility != null) {
129
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
130
- }
131
-
132
- // disabled
133
- if (this.configProps$.disabled != undefined) {
134
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
135
- }
136
-
137
- if (this.bDisabled$) {
138
- this.fieldControl.disable();
139
- } else {
140
- this.fieldControl.enable();
141
- }
142
-
143
- if (this.configProps$.readOnly != null) {
144
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
145
- }
146
-
147
- if (this.bReadonly$) {
148
- this.phoneForm.setValue({ phone: this.value$ });
149
- }
150
-
151
- // trigger display of error message with field control
152
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
153
- const timer = interval(100).subscribe(() => {
154
- this.fieldControl.setErrors({ message: true });
155
- this.fieldControl.markAsTouched();
156
-
157
- timer.unsubscribe();
158
- });
159
- }
47
+ fieldOnBlur() {
48
+ // 'blur' isn't getting fired
160
49
  }
161
50
 
162
51
  fieldOnChange() {
163
- if (this.formGroup$.controls[this.controlName$].value) {
164
- const actionsApi = this.pConn$?.getActionsApi();
165
- const propName = (this.pConn$?.getStateProps() as any).value;
52
+ const oldVal = this.value$ ?? '';
53
+ const newVal = this.formGroup$.controls[this.controlName$].value;
54
+ const isValueChanged = newVal?.toString() !== oldVal.toString();
55
+
56
+ if (isValueChanged) {
166
57
  const value = this.formGroup$.controls[this.controlName$].value;
167
- const eventObj = {
168
- target: {
169
- value
170
- }
171
- };
172
- this.afterBlur = true;
173
- this.angularPConnectData.actions?.onChange(this, eventObj);
174
- handleEvent(actionsApi, 'blur', propName, value);
58
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
175
59
  }
176
60
  }
177
61
 
178
- fieldOnBlur(event: any) {
179
- // PConnect wants to use eventHandler for onBlur
180
- this.angularPConnectData.actions?.onBlur(this, event);
62
+ updatePreferredCountries() {
63
+ if (this.value$ && typeof this.value$ === 'string') {
64
+ const phoneNumber = parsePhoneNumberFromString(this.value$);
65
+ this.preferredCountries =
66
+ phoneNumber?.country && !this.preferredCountries.includes(phoneNumber?.country.toLowerCase())
67
+ ? [phoneNumber?.country?.toLowerCase(), ...this.preferredCountries]
68
+ : this.preferredCountries;
69
+ }
181
70
  }
182
71
 
183
- getErrorMessage() {
184
- let errMessage = '';
185
-
72
+ override getErrorMessage() {
186
73
  // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
187
74
  if (this.fieldControl.hasError('message')) {
188
- errMessage = this.angularPConnectData.validateMessage ?? '';
189
- return errMessage;
75
+ return this.angularPConnectData.validateMessage ?? '';
190
76
  }
77
+
191
78
  if (this.fieldControl.hasError('required')) {
192
- errMessage = 'You must enter a value';
193
- } else if (this.fieldControl.errors) {
194
- errMessage = 'Invalid Phone';
79
+ return 'You must enter a value';
80
+ }
81
+
82
+ if (this.fieldControl.errors) {
83
+ return 'Invalid Phone';
195
84
  }
196
85
 
197
- return errMessage;
86
+ return '';
198
87
  }
199
88
  }
@@ -1,18 +1,17 @@
1
- <div *ngIf="displayMode$; else noDisplayMode">
2
- <component-mapper
3
- *ngIf="bVisible$ !== false"
4
- name="FieldValueList"
5
- [props]="{ label$, value$: this.localizedValue, displayMode$ }"
6
- ></component-mapper>
1
+ <div *ngIf="variant !== 'card'; else cardMode">
2
+ <div *ngIf="displayMode$; else noDisplayMode">
3
+ <component-mapper
4
+ *ngIf="bVisible$ !== false"
5
+ name="FieldValueList"
6
+ [props]="{ label$, value$: this.localizedValue, displayMode$ }"
7
+ ></component-mapper>
8
+ </div>
7
9
  </div>
8
10
  <ng-template #noDisplayMode>
9
11
  <div [formGroup]="formGroup$" *ngIf="bVisible$">
10
12
  <mat-form-field class="psdk-radio-form" subscriptSizing="dynamic" [hintLabel]="helperText">
11
- <span class="psdk-label-wrapper-readonly">
12
- <label class="psdk-label-readonly">{{ label$ }}</label>
13
- </span>
14
- <!-- <mat-label>{{label$}}</mat-label> -->
15
- <input matInput [placeholder]="placeholder" style="display: none" />
13
+ <mat-label>{{ label$ }}</mat-label>
14
+ <input matInput [placeholder]="placeholder" style="display: none" [required]="bRequired$" />
16
15
  <mat-radio-group
17
16
  [value]="value$"
18
17
  [required]="bRequired$"
@@ -24,7 +23,7 @@
24
23
  <mat-radio-button
25
24
  *ngFor="let opt of options$"
26
25
  [checked]="isSelected(opt.key)"
27
- [disabled]="bReadonly$"
26
+ [disabled]="bDisabled$ || bReadonly$"
28
27
  [value]="opt.key"
29
28
  class="psdk-radio-button"
30
29
  >
@@ -35,3 +34,9 @@
35
34
  </mat-form-field>
36
35
  </div>
37
36
  </ng-template>
37
+ <ng-template #cardMode>
38
+ <h4>{{ label$ }}</h4>
39
+ <div>
40
+ <component-mapper name="SelectableCard" [props]="{ pConn$: pConn$, type: 'radio' }" [parent]="this"></component-mapper>
41
+ </div>
42
+ </ng-template>
@@ -15,11 +15,13 @@
15
15
  .psdk-radio-horizontal {
16
16
  display: flex;
17
17
  flex-direction: row;
18
+ margin-top: 1rem;
18
19
  }
19
20
 
20
21
  .psdk-radio-vertical {
21
22
  display: flex;
22
23
  flex-direction: column;
24
+ margin-top: 1rem;
23
25
  }
24
26
 
25
27
  .psdk-radio-button {
@@ -30,8 +32,8 @@
30
32
  width: 100%;
31
33
  }
32
34
 
33
- .psdk-radio-form ::ng-deep .mat-form-field-underline {
34
- background-color: transparent;
35
+ .psdk-radio-form ::ng-deep .mdc-line-ripple {
36
+ display: none;
35
37
  }
36
38
 
37
39
  .psdk-radio-form ::ng-deep .mat-form-field-label {
@@ -1,13 +1,14 @@
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 { ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatRadioModule } from '@angular/material/radio';
5
5
  import { MatInputModule } from '@angular/material/input';
6
6
  import { MatFormFieldModule } from '@angular/material/form-field';
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';
10
+ import { Utils } from '@pega/angular-sdk-components';
11
+ import { handleEvent } from '@pega/angular-sdk-components';
11
12
  import { PConnFieldProps } from '@pega/angular-sdk-components';
12
13
 
13
14
  interface IOption {
@@ -19,6 +20,7 @@ interface RadioButtonsProps extends PConnFieldProps {
19
20
  // If any, enter additional props that only exist on RadioButtons here
20
21
  inline: boolean;
21
22
  fieldMetadata?: any;
23
+ variant?: string;
22
24
  }
23
25
 
24
26
  @Component({
@@ -26,155 +28,60 @@ interface RadioButtonsProps extends PConnFieldProps {
26
28
  templateUrl: './radio-buttons.component.html',
27
29
  styleUrls: ['./radio-buttons.component.scss'],
28
30
  providers: [Utils],
29
- standalone: true,
30
31
  imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatRadioModule, forwardRef(() => ComponentMapperComponent)]
31
32
  })
32
- export class RadioButtonsComponent implements OnInit, OnDestroy {
33
- @Input() pConn$: typeof PConnect;
34
- @Input() formGroup$: FormGroup;
35
-
36
- // Used with AngularPConnect
37
- angularPConnectData: AngularPConnectData = {};
33
+ export class RadioButtonsComponent extends FieldBase {
38
34
  configProps$: RadioButtonsProps;
39
35
 
40
- label$ = '';
41
- value$ = '';
42
- bRequired$ = false;
43
- bReadonly$ = false;
44
- bDisabled$ = false;
45
- bVisible$ = true;
46
36
  bInline$ = false;
47
- displayMode$?: string = '';
48
- controlName$: string;
49
- bHasForm$ = true;
37
+
50
38
  options$: IOption[];
51
39
  componentReference = '';
52
- testId: string;
53
- helperText: string;
54
- placeholder: string;
55
-
56
- fieldControl = new FormControl('', null);
57
40
  fieldMetadata: any[];
58
41
  localeContext = '';
59
42
  localeClass = '';
60
43
  localeName = '';
61
44
  localePath = '';
62
45
  localizedValue = '';
46
+ variant?: string;
63
47
 
64
- constructor(
65
- private angularPConnect: AngularPConnectService,
66
- private cdRef: ChangeDetectorRef,
67
- private utils: Utils
68
- ) {}
69
-
70
- ngOnInit(): void {
71
- // First thing in initialization is registering and subscribing to the AngularPConnect service
72
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
73
- this.controlName$ = this.angularPConnect.getComponentID(this);
74
-
75
- // Then, continue on with other initialization
76
-
77
- // call updateSelf when initializing
78
- // this.updateSelf();
79
- this.checkAndUpdate();
80
-
81
- if (this.formGroup$) {
82
- // add control to formGroup
83
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
84
- this.fieldControl.setValue(this.value$);
85
- this.bHasForm$ = true;
86
- } else {
87
- this.bReadonly$ = true;
88
- this.bHasForm$ = false;
89
- }
90
- }
91
-
92
- ngOnDestroy(): void {
93
- if (this.formGroup$) {
94
- this.formGroup$.removeControl(this.controlName$);
95
- }
96
-
97
- if (this.angularPConnectData.unsubscribeFn) {
98
- this.angularPConnectData.unsubscribeFn();
99
- }
100
- }
101
-
102
- // Callback passed when subscribing to store change
103
- onStateChange() {
104
- this.checkAndUpdate();
105
- }
106
-
107
- checkAndUpdate() {
108
- // Should always check the bridge to see if the component should
109
- // update itself (re-render)
110
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
111
-
112
- // ONLY call updateSelf when the component should update
113
- if (bUpdateSelf) {
114
- this.updateSelf();
115
- }
116
- }
117
-
118
- // updateSelf
119
- updateSelf(): void {
120
- // moved this from ngOnInit() and call this from there instead...
48
+ /**
49
+ * Updates the component when there are changes in the state.
50
+ */
51
+ override updateSelf(): void {
52
+ // Resolve config properties
121
53
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as RadioButtonsProps;
122
54
 
123
- if (this.configProps$.value != undefined) {
124
- this.value$ = this.configProps$.value;
125
- }
126
-
127
- this.testId = this.configProps$.testId;
128
- this.label$ = this.configProps$.label;
129
- this.displayMode$ = this.configProps$.displayMode;
130
- this.helperText = this.configProps$.helperText;
131
- this.placeholder = this.configProps$.placeholder || '';
132
-
133
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
134
- setTimeout(() => {
135
- if (this.configProps$.required != null) {
136
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
137
- }
138
- this.cdRef.detectChanges();
139
- });
140
-
141
- if (this.configProps$.visibility != null) {
142
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
143
- }
144
-
145
- if (this.configProps$.inline != null) {
146
- this.bInline$ = this.utils.getBooleanValue(this.configProps$.inline);
147
- }
148
-
149
- if (this.configProps$.disabled != undefined) {
150
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
151
- }
55
+ // Update component common properties
56
+ this.updateComponentCommonProperties(this.configProps$);
152
57
 
153
- if (this.configProps$.inline != null) {
154
- this.bInline$ = this.utils.getBooleanValue(this.configProps$.inline);
155
- }
58
+ // Extract and normalize the value property
59
+ const { value } = this.configProps$;
60
+ this.value$ = value;
156
61
 
157
- if (this.bDisabled$) {
158
- this.fieldControl.disable();
159
- } else {
160
- this.fieldControl.enable();
161
- }
62
+ // Set component specific properties
63
+ this.updateRadioButtonsProperties(this.configProps$);
64
+ }
162
65
 
163
- if (this.configProps$.readOnly != null) {
164
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
165
- }
66
+ /**
67
+ * Updates radio buttons properties based on the provided config props.
68
+ * @param configProps Configuration properties.
69
+ */
70
+ protected updateRadioButtonsProperties(configProps) {
71
+ const { inline, fieldMetadata, variant } = configProps;
166
72
 
167
- this.componentReference = (this.pConn$.getStateProps() as any).value;
73
+ this.variant = variant;
74
+ this.bInline$ = this.utils.getBooleanValue(inline);
168
75
 
169
- this.options$ = this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject());
76
+ // Get options from config props and data object
77
+ this.options$ = this.utils.getOptionList(configProps, this.pConn$.getDataObject());
170
78
 
171
- const propName = (this.pConn$.getStateProps() as any).value;
79
+ // Extract metadata and locale information
172
80
  const className = this.pConn$.getCaseInfo().getClassName();
173
- const refName = propName?.slice(propName.lastIndexOf('.') + 1);
174
-
175
- this.fieldMetadata = this.configProps$.fieldMetadata;
176
- const metaData = Array.isArray(this.fieldMetadata) ? this.fieldMetadata.filter(field => field?.classID === className)[0] : this.fieldMetadata;
81
+ const refName = this.propName?.slice(this.propName.lastIndexOf('.') + 1);
82
+ const metaData = Array.isArray(fieldMetadata) ? fieldMetadata.filter(field => field?.classID === className)[0] : fieldMetadata;
177
83
 
84
+ // Determine display name and locale context
178
85
  let displayName = metaData?.datasource?.propertyForDisplayText;
179
86
  displayName = displayName?.slice(displayName.lastIndexOf('.') + 1);
180
87
  this.localeContext = metaData?.datasource?.tableType === 'DataPage' ? 'datapage' : 'associated';
@@ -182,20 +89,12 @@ export class RadioButtonsComponent implements OnInit, OnDestroy {
182
89
  this.localeName = this.localeContext === 'datapage' ? metaData?.datasource?.name : refName;
183
90
  this.localePath = this.localeContext === 'datapage' ? displayName : this.localeName;
184
91
 
92
+ // Get localized value
185
93
  this.localizedValue = this.pConn$.getLocalizedValue(
186
94
  this.value$,
187
95
  this.localePath,
188
96
  this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName)
189
97
  );
190
- // trigger display of error message with field control
191
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
192
- const timer = interval(100).subscribe(() => {
193
- this.fieldControl.setErrors({ message: true });
194
- this.fieldControl.markAsTouched();
195
-
196
- timer.unsubscribe();
197
- });
198
- }
199
98
  }
200
99
 
201
100
  isSelected(buttonValue: string): boolean {
@@ -203,12 +102,7 @@ export class RadioButtonsComponent implements OnInit, OnDestroy {
203
102
  }
204
103
 
205
104
  fieldOnChange(event: any) {
206
- this.angularPConnectData.actions?.onChange(this, event);
207
- }
208
-
209
- fieldOnBlur(event: any) {
210
- // PConnect wants to use eventHandler for onBlur
211
- this.angularPConnectData.actions?.onBlur(this, event);
105
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, event.value);
212
106
  }
213
107
 
214
108
  getLocalizedOptionValue(opt: IOption) {
@@ -218,21 +112,4 @@ export class RadioButtonsComponent implements OnInit, OnDestroy {
218
112
  this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName)
219
113
  );
220
114
  }
221
-
222
- getErrorMessage() {
223
- let errMessage = '';
224
-
225
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
226
- if (this.fieldControl.hasError('message')) {
227
- errMessage = this.angularPConnectData.validateMessage ?? '';
228
- return errMessage;
229
- }
230
- if (this.fieldControl.hasError('required')) {
231
- errMessage = 'You must enter a value';
232
- } else if (this.fieldControl.errors) {
233
- errMessage = this.fieldControl.errors.toString();
234
- }
235
-
236
- return errMessage;
237
- }
238
115
  }