@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,12 @@
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 { MatInputModule } from '@angular/material/input';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
- import { interval } from 'rxjs';
7
- import { AngularPConnectService, AngularPConnectData } from '@pega/angular-sdk-components';
8
- import { Utils } from '@pega/angular-sdk-components';
6
+
7
+ import { FieldBase } from '@pega/angular-sdk-components';
9
8
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
9
+ import { handleEvent } from '@pega/angular-sdk-components';
10
10
  import { PConnFieldProps } from '@pega/angular-sdk-components';
11
11
 
12
12
  interface TextInputProps extends PConnFieldProps {
@@ -18,166 +18,44 @@ interface TextInputProps extends PConnFieldProps {
18
18
  selector: 'app-text-input',
19
19
  templateUrl: './text-input.component.html',
20
20
  styleUrls: ['./text-input.component.scss'],
21
- standalone: true,
22
21
  imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
23
22
  })
24
- export class TextInputComponent implements OnInit, OnDestroy {
25
- @Input() pConn$: typeof PConnect;
26
- @Input() formGroup$: FormGroup;
27
-
28
- // For interaction with AngularPConnect
29
- angularPConnectData: AngularPConnectData = {};
23
+ export class TextInputComponent extends FieldBase {
30
24
  configProps$: TextInputProps;
31
25
 
32
- label$ = '';
33
- value$ = '';
34
- bRequired$ = false;
35
- bReadonly$ = false;
36
- bDisabled$ = false;
37
- bVisible$ = true;
38
- displayMode$?: string = '';
39
- controlName$: string;
40
- testId = '';
41
- bHasForm$ = true;
42
- componentReference = '';
43
- helperText: string;
44
- placeholder: string;
45
-
46
- fieldControl = new FormControl('', null);
47
-
48
- constructor(
49
- private angularPConnect: AngularPConnectService,
50
- private cdRef: ChangeDetectorRef,
51
- private utils: Utils
52
- ) {}
53
-
54
- ngOnInit(): void {
55
- // First thing in initialization is registering and subscribing to the AngularPConnect service
56
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
57
- this.controlName$ = this.angularPConnect.getComponentID(this);
58
-
59
- // Then, continue on with other initialization
60
-
61
- // call updateSelf when initializing
62
- // this.updateSelf();
63
- this.checkAndUpdate();
64
-
65
- if (this.formGroup$) {
66
- // add control to formGroup
67
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
68
- this.fieldControl.setValue(this.value$);
69
- this.bHasForm$ = true;
70
- } else {
71
- this.bReadonly$ = true;
72
- this.bHasForm$ = false;
73
- }
74
- }
75
-
76
- ngOnDestroy(): void {
77
- if (this.formGroup$) {
78
- this.formGroup$.removeControl(this.controlName$);
79
- }
80
-
81
- if (this.angularPConnectData.unsubscribeFn) {
82
- this.angularPConnectData.unsubscribeFn();
83
- }
84
- }
85
-
86
- // Callback passed when subscribing to store change
87
- onStateChange() {
88
- this.checkAndUpdate();
89
- }
90
-
91
- checkAndUpdate() {
92
- // Should always check the bridge to see if the component should
93
- // update itself (re-render)
94
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
95
-
96
- // ONLY call updateSelf when the component should update
97
- if (bUpdateSelf) {
98
- this.updateSelf();
99
- }
100
- }
101
-
102
- // updateSelf
103
- updateSelf(): void {
104
- // moved this from ngOnInit() and call this from there instead...
26
+ /**
27
+ * Updates the component when there are changes in the state.
28
+ */
29
+ override updateSelf(): void {
30
+ // Resolve configuration properties
105
31
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as TextInputProps;
106
32
 
107
- if (this.configProps$.value != undefined) {
108
- this.value$ = this.configProps$.value;
109
- }
110
-
111
- this.testId = this.configProps$.testId;
112
-
113
- this.label$ = this.configProps$.label;
114
- this.displayMode$ = this.configProps$.displayMode;
115
-
116
- this.componentReference = (this.pConn$.getStateProps() as any).value;
117
-
118
- if (this.configProps$.visibility != null) {
119
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
120
- }
121
- this.helperText = this.configProps$.helperText;
122
- this.placeholder = this.configProps$.placeholder || '';
123
-
124
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
125
- setTimeout(() => {
126
- if (this.configProps$.required != null) {
127
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
128
- }
129
- this.cdRef.detectChanges();
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
- }
33
+ // Update component common properties
34
+ this.updateComponentCommonProperties(this.configProps$);
142
35
 
143
- if (this.configProps$.readOnly != null) {
144
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
145
- }
36
+ // Get and set component specific properties
37
+ const { value } = this.configProps$;
38
+ this.value$ = value;
39
+ }
146
40
 
147
- // trigger display of error message with field control
148
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
149
- const timer = interval(100).subscribe(() => {
150
- this.fieldControl.setErrors({ message: true });
151
- this.fieldControl.markAsTouched();
41
+ fieldOnChange(event: any) {
42
+ const oldVal = this.value$ ?? '';
43
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
152
44
 
153
- timer.unsubscribe();
45
+ if (isValueChanged) {
46
+ this.pConn$.clearErrorMessages({
47
+ property: this.propName
154
48
  });
155
49
  }
156
50
  }
157
51
 
158
- fieldOnChange(event: any) {
159
- this.angularPConnectData.actions?.onChange(this, event);
160
- }
161
-
162
52
  fieldOnBlur(event: any) {
163
- // PConnect wants to use eventHandler for onBlur
164
- this.angularPConnectData.actions?.onBlur(this, event);
165
- }
166
-
167
- getErrorMessage() {
168
- let errMessage = '';
53
+ const oldVal = this.value$ ?? '';
54
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
169
55
 
170
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
171
- if (this.fieldControl.hasError('message')) {
172
- errMessage = this.angularPConnectData.validateMessage ?? '';
173
- return errMessage;
56
+ if (isValueChanged) {
57
+ const value = event?.target?.value;
58
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
174
59
  }
175
- if (this.fieldControl.hasError('required')) {
176
- errMessage = 'You must enter a value';
177
- } else if (this.fieldControl.errors) {
178
- errMessage = this.fieldControl.errors.toString();
179
- }
180
-
181
- return errMessage;
182
60
  }
183
61
  }
@@ -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="!bReadonly$ && bHasForm$; else noEdit">
@@ -23,5 +23,5 @@
23
23
  </div>
24
24
  </ng-template>
25
25
  <ng-template #noEdit>
26
- <component-mapper *ngIf="bVisible$ !== false" name="Text" [props]="{ pConn$, formatAs$: 'text' }"></component-mapper>
26
+ <component-mapper *ngIf="bVisible$ !== false" name="Text" [props]="{ pConn$, formatAs$: 'time' }"></component-mapper>
27
27
  </ng-template>
@@ -1,12 +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 { MatInputModule } from '@angular/material/input';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
- import { interval } from 'rxjs';
7
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
8
- import { Utils } from '@pega/angular-sdk-components';
6
+
7
+ import { FieldBase } from '@pega/angular-sdk-components';
9
8
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
9
+ import { handleEvent } from '@pega/angular-sdk-components';
10
+ import { format } from '@pega/angular-sdk-components';
10
11
  import { PConnFieldProps } from '@pega/angular-sdk-components';
11
12
 
12
13
  interface TimeProps extends PConnFieldProps {
@@ -17,163 +18,56 @@ interface TimeProps extends PConnFieldProps {
17
18
  selector: 'app-time',
18
19
  templateUrl: './time.component.html',
19
20
  styleUrls: ['./time.component.scss'],
20
- standalone: true,
21
21
  imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
22
22
  })
23
- export class TimeComponent implements OnInit, OnDestroy {
24
- @Input() pConn$: typeof PConnect;
25
- @Input() formGroup$: FormGroup;
26
-
27
- // Used with AngularPConnect
28
- angularPConnectData: AngularPConnectData = {};
23
+ export class TimeComponent extends FieldBase {
29
24
  configProps$: TimeProps;
25
+ formattedValue$: any;
30
26
 
31
- label$ = '';
32
- value$: string;
33
- bRequired$ = false;
34
- bReadonly$ = false;
35
- bDisabled$ = false;
36
- bVisible$ = true;
37
- displayMode$?: string = '';
38
- controlName$: string;
39
- testId = '';
40
- bHasForm$ = true;
41
- componentReference = '';
42
- helperText: string;
43
- placeholder: string;
44
-
45
- fieldControl = new FormControl('', null);
46
-
47
- constructor(
48
- private angularPConnect: AngularPConnectService,
49
- private cdRef: ChangeDetectorRef,
50
- private utils: Utils
51
- ) {}
52
-
53
- ngOnInit(): void {
54
- // First thing in initialization is registering and subscribing to the AngularPConnect service
55
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
56
- this.controlName$ = this.angularPConnect.getComponentID(this);
57
-
58
- // Then, continue on with other initialization
59
- // call updateSelf when initializing
60
- // this.updateSelf();
61
- this.checkAndUpdate();
62
-
63
- if (this.formGroup$) {
64
- // add control to formGroup
65
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
66
- this.fieldControl.setValue(this.value$);
67
- this.bHasForm$ = true;
68
- } else {
69
- this.bReadonly$ = true;
70
- this.bHasForm$ = false;
71
- }
72
- }
73
-
74
- ngOnDestroy(): void {
75
- if (this.formGroup$) {
76
- this.formGroup$.removeControl(this.controlName$);
77
- }
78
- if (this.angularPConnectData.unsubscribeFn) {
79
- this.angularPConnectData.unsubscribeFn();
80
- }
81
- }
82
-
83
- // Callback passed when subscribing to store change
84
- onStateChange() {
85
- this.checkAndUpdate();
86
- }
87
-
88
- checkAndUpdate() {
89
- // Should always check the bridge to see if the component should
90
- // update itself (re-render)
91
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
92
-
93
- // ONLY call updateSelf when the component should update
94
- if (bUpdateSelf) {
95
- this.updateSelf();
96
- }
97
- }
98
-
99
- // updateSelf
100
- updateSelf(): void {
101
- // moved this from ngOnInit() and call this from there instead...
27
+ /**
28
+ * Updates the component when there are changes in the state.
29
+ */
30
+ override updateSelf(): void {
31
+ // Resolve config properties
102
32
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as TimeProps;
103
33
 
104
- this.testId = this.configProps$.testId;
105
- this.label$ = this.configProps$.label;
106
- this.displayMode$ = this.configProps$.displayMode;
34
+ // Update component common properties
35
+ this.updateComponentCommonProperties(this.configProps$);
107
36
 
108
- if (this.configProps$.value != undefined) {
109
- this.value$ = this.configProps$.value;
110
- }
111
- this.helperText = this.configProps$.helperText;
112
- this.placeholder = this.configProps$.placeholder || '';
113
-
114
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
115
- setTimeout(() => {
116
- if (this.configProps$.required != null) {
117
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
118
- }
119
- this.cdRef.detectChanges();
120
- });
121
-
122
- if (this.configProps$.visibility != null) {
123
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
124
- }
37
+ // Extract the value property
38
+ const { value } = this.configProps$;
39
+ this.value$ = value;
125
40
 
126
- // disabled
127
- if (this.configProps$.disabled != undefined) {
128
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
129
- }
130
-
131
- if (this.bDisabled$) {
132
- this.fieldControl.disable();
133
- } else {
134
- this.fieldControl.enable();
135
- }
136
-
137
- if (this.configProps$.readOnly != null) {
138
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
139
- }
140
-
141
- this.componentReference = (this.pConn$.getStateProps() as any).value;
142
-
143
- // trigger display of error message with field control
144
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
145
- const timer = interval(100).subscribe(() => {
146
- this.fieldControl.setErrors({ message: true });
147
- this.fieldControl.markAsTouched();
148
-
149
- timer.unsubscribe();
41
+ if (['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(this.displayMode$)) {
42
+ this.formattedValue$ = format(this.value$, 'timeonly', {
43
+ format: 'hh:mm A'
150
44
  });
151
45
  }
152
46
  }
153
47
 
154
48
  fieldOnChange(event: any) {
155
- event.value = event.target.value;
156
- this.angularPConnectData.actions?.onChange(this, event);
49
+ const oldVal = this.value$ ?? '';
50
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
51
+
52
+ if (isValueChanged) {
53
+ this.pConn$.clearErrorMessages({
54
+ property: this.propName
55
+ });
56
+ }
157
57
  }
158
58
 
159
59
  fieldOnBlur(event: any) {
160
- // PConnect wants to use eventHandler for onBlur
161
- event.value = event.target.value;
162
- this.angularPConnectData.actions?.onBlur(this, event);
163
- }
60
+ const oldVal = this.value$ ?? '';
61
+ const isValueChanged = event?.target?.value.toString() !== oldVal.toString();
62
+
63
+ if (isValueChanged) {
64
+ let value = event?.target?.value;
65
+ const hhmmPattern = /^\d{2}:\d{2}$/;
66
+ if (hhmmPattern.test(value)) {
67
+ value = `${value}:00`; // append ":00"
68
+ }
164
69
 
165
- getErrorMessage() {
166
- let errMessage = '';
167
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
168
- if (this.fieldControl.hasError('message')) {
169
- errMessage = this.angularPConnectData.validateMessage ?? '';
170
- return errMessage;
171
- }
172
- if (this.fieldControl.hasError('required')) {
173
- errMessage = 'You must enter a value';
174
- } else if (this.fieldControl.errors) {
175
- errMessage = this.fieldControl.errors.toString();
70
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
176
71
  }
177
- return errMessage;
178
72
  }
179
73
  }
@@ -1,12 +1,12 @@
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 { MatInputModule } from '@angular/material/input';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
- import { interval } from 'rxjs';
7
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
8
- import { Utils } from '@pega/angular-sdk-components';
6
+
7
+ import { FieldBase } from '@pega/angular-sdk-components';
9
8
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
9
+ import { handleEvent } from '@pega/angular-sdk-components';
10
10
  import { PConnFieldProps } from '@pega/angular-sdk-components';
11
11
 
12
12
  interface URLProps extends PConnFieldProps {
@@ -17,165 +17,44 @@ interface URLProps extends PConnFieldProps {
17
17
  selector: 'app-url',
18
18
  templateUrl: './url.component.html',
19
19
  styleUrls: ['./url.component.scss'],
20
- standalone: true,
21
20
  imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
22
21
  })
23
- export class UrlComponent implements OnInit, OnDestroy {
24
- @Input() pConn$: typeof PConnect;
25
- @Input() formGroup$: FormGroup;
26
-
27
- // Used with AngularPConnect
28
- angularPConnectData: AngularPConnectData = {};
22
+ export class UrlComponent extends FieldBase {
29
23
  configProps$: URLProps;
30
24
 
31
- label$ = '';
32
- value$ = '';
33
- bRequired$ = false;
34
- bReadonly$ = false;
35
- bDisabled$ = false;
36
- bVisible$ = true;
37
- displayMode$?: string = '';
38
- controlName$: string;
39
- testId = '';
40
- bHasForm$ = true;
41
- componentReference = '';
42
- helperText: string;
43
- placeholder: string;
44
-
45
- fieldControl = new FormControl('', null);
46
-
47
- constructor(
48
- private angularPConnect: AngularPConnectService,
49
- private cdRef: ChangeDetectorRef,
50
- private utils: Utils
51
- ) {}
52
-
53
- ngOnInit(): void {
54
- // First thing in initialization is registering and subscribing to the AngularPConnect service
55
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
56
- this.controlName$ = this.angularPConnect.getComponentID(this);
57
-
58
- // Then, continue on with other initialization
59
-
60
- // call updateSelf when initializing
61
- // this.updateSelf();
62
- this.checkAndUpdate();
63
-
64
- if (this.formGroup$) {
65
- // add control to formGroup
66
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
67
- this.fieldControl.setValue(this.value$);
68
- this.bHasForm$ = true;
69
- } else {
70
- this.bReadonly$ = true;
71
- this.bHasForm$ = false;
72
- }
73
- }
74
-
75
- ngOnDestroy(): void {
76
- if (this.formGroup$) {
77
- this.formGroup$.removeControl(this.controlName$);
78
- }
79
-
80
- if (this.angularPConnectData.unsubscribeFn) {
81
- this.angularPConnectData.unsubscribeFn();
82
- }
83
- }
84
-
85
- // Callback passed when subscribing to store change
86
- onStateChange() {
87
- this.checkAndUpdate();
88
- }
89
-
90
- checkAndUpdate() {
91
- // Should always check the bridge to see if the component should
92
- // update itself (re-render)
93
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
94
-
95
- // ONLY call updateSelf when the component should update
96
- if (bUpdateSelf) {
97
- this.updateSelf();
98
- }
99
- }
100
-
101
- // updateSelf
102
- updateSelf(): void {
103
- // moved this from ngOnInit() and call this from there instead...
25
+ /**
26
+ * Updates the component when there are changes in the state.
27
+ */
28
+ override updateSelf(): void {
29
+ // Resolve config properties
104
30
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as URLProps;
105
31
 
106
- if (this.configProps$.value != undefined) {
107
- this.value$ = this.configProps$.value;
108
- }
109
-
110
- this.testId = this.configProps$.testId;
111
- this.label$ = this.configProps$.label;
112
- this.displayMode$ = this.configProps$.displayMode;
113
- this.helperText = this.configProps$.helperText;
114
- this.placeholder = this.configProps$.placeholder || '';
115
-
116
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
117
- setTimeout(() => {
118
- if (this.configProps$.required != null) {
119
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
120
- }
121
- this.cdRef.detectChanges();
122
- });
123
-
124
- if (this.configProps$.visibility != null) {
125
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
126
- }
32
+ // Update component common properties
33
+ this.updateComponentCommonProperties(this.configProps$);
127
34
 
128
- // disabled
129
- if (this.configProps$.disabled != undefined) {
130
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
131
- }
132
-
133
- if (this.bDisabled$) {
134
- this.fieldControl.disable();
135
- } else {
136
- this.fieldControl.enable();
137
- }
138
-
139
- if (this.configProps$.readOnly != null) {
140
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
141
- }
142
-
143
- this.componentReference = (this.pConn$.getStateProps() as any).value;
35
+ // Extract and normalize the value property
36
+ const { value } = this.configProps$;
37
+ this.value$ = value;
38
+ }
144
39
 
145
- // trigger display of error message with field control
146
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
147
- const timer = interval(100).subscribe(() => {
148
- this.fieldControl.setErrors({ message: true });
149
- this.fieldControl.markAsTouched();
40
+ fieldOnChange(event: any) {
41
+ const oldVal = this.value$ ?? '';
42
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
150
43
 
151
- timer.unsubscribe();
44
+ if (isValueChanged) {
45
+ this.pConn$.clearErrorMessages({
46
+ property: this.propName
152
47
  });
153
48
  }
154
49
  }
155
50
 
156
- fieldOnChange(event: any) {
157
- this.angularPConnectData.actions?.onChange(this, event);
158
- }
159
-
160
51
  fieldOnBlur(event: any) {
161
- // PConnect wants to use eventHandler for onBlur
162
- this.angularPConnectData.actions?.onBlur(this, event);
163
- }
164
-
165
- getErrorMessage() {
166
- let errMessage = '';
52
+ const oldVal = this.value$ ?? '';
53
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
167
54
 
168
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
169
- if (this.fieldControl.hasError('message')) {
170
- errMessage = this.angularPConnectData.validateMessage ?? '';
171
- return errMessage;
55
+ if (isValueChanged) {
56
+ const value = event?.target?.value;
57
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
172
58
  }
173
- if (this.fieldControl.hasError('required')) {
174
- errMessage = 'You must enter a value';
175
- } else if (this.fieldControl.errors) {
176
- errMessage = this.fieldControl.errors.toString();
177
- }
178
-
179
- return errMessage;
180
59
  }
181
60
  }