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