@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,22 +1,27 @@
1
- import { Component, OnInit, Input, forwardRef, OnDestroy } from '@angular/core';
1
+ import { Component, OnInit, Input, OnDestroy } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormGroup } from '@angular/forms';
4
4
  import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
5
- import { ComponentMapperComponent } from '@pega/angular-sdk-components';
5
+ import { getDataReferenceInfo, isLinkTextEmpty } from '@pega/angular-sdk-components';
6
6
  import { Utils } from '@pega/angular-sdk-components';
7
7
  import { PConnFieldProps } from '@pega/angular-sdk-components';
8
8
 
9
9
  interface SemanticLinkProps extends PConnFieldProps {
10
10
  // If any, enter additional props that only exist on SemanticLink here
11
11
  text: string;
12
+ resourcePayload: any;
13
+ resourceParams: any;
14
+ previewKey: string;
15
+ referenceType: string;
16
+ dataRelationshipContext: string;
17
+ contextPage: any;
12
18
  }
13
19
 
14
20
  @Component({
15
21
  selector: 'app-semantic-link',
16
22
  templateUrl: './semantic-link.component.html',
17
23
  styleUrls: ['./semantic-link.component.scss'],
18
- standalone: true,
19
- imports: [CommonModule, forwardRef(() => ComponentMapperComponent)]
24
+ imports: [CommonModule]
20
25
  })
21
26
  export class SemanticLinkComponent implements OnInit, OnDestroy {
22
27
  @Input() pConn$: typeof PConnect;
@@ -29,6 +34,15 @@ export class SemanticLinkComponent implements OnInit, OnDestroy {
29
34
  value$ = '';
30
35
  displayMode$?: string = '';
31
36
  bVisible$ = true;
37
+ linkURL = '';
38
+ dataResourcePayLoad: any;
39
+ referenceType: string;
40
+ shouldTreatAsDataReference: boolean;
41
+ previewKey: string;
42
+ resourcePayload: any = {};
43
+ payload: object;
44
+ dataViewName = '';
45
+ isLinkTextEmpty = false;
32
46
 
33
47
  constructor(
34
48
  private angularPConnect: AngularPConnectService,
@@ -38,7 +52,7 @@ export class SemanticLinkComponent implements OnInit, OnDestroy {
38
52
  ngOnInit(): void {
39
53
  // First thing in initialization is registering and subscribing to the AngularPConnect service
40
54
  this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
41
- this.updateSelf();
55
+ this.checkAndUpdate();
42
56
  }
43
57
 
44
58
  ngOnDestroy(): void {
@@ -48,6 +62,10 @@ export class SemanticLinkComponent implements OnInit, OnDestroy {
48
62
  }
49
63
 
50
64
  onStateChange() {
65
+ this.updateSelf();
66
+ }
67
+
68
+ checkAndUpdate() {
51
69
  // Should always check the bridge to see if the component should
52
70
  // update itself (re-render)
53
71
  const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
@@ -59,12 +77,153 @@ export class SemanticLinkComponent implements OnInit, OnDestroy {
59
77
  }
60
78
 
61
79
  updateSelf() {
80
+ this.initializeComponentState();
81
+ const isData = this.buildDataPayload();
82
+ this.linkURL = this.buildLinkURL(isData);
83
+ this.isLinkTextEmpty = isLinkTextEmpty(this.value$);
84
+ }
85
+
86
+ showDataAction() {
87
+ if (this.dataResourcePayLoad && this.dataResourcePayLoad.resourceType === 'DATA') {
88
+ const { content } = this.dataResourcePayLoad;
89
+ const lookUpDataPageInfo = PCore.getDataTypeUtils().getLookUpDataPageInfo(this.dataResourcePayLoad?.className);
90
+ const lookUpDataPage = PCore.getDataTypeUtils().getLookUpDataPage(this.dataResourcePayLoad?.className);
91
+ if (lookUpDataPageInfo) {
92
+ const { parameters } = lookUpDataPageInfo as any;
93
+ this.payload = Object.keys(parameters).reduce((acc, param) => {
94
+ const paramValue = parameters[param];
95
+ return {
96
+ ...acc,
97
+ [param]: PCore.getAnnotationUtils().isProperty(paramValue) ? content[PCore.getAnnotationUtils().getPropertyName(paramValue)] : paramValue
98
+ };
99
+ }, {});
100
+ }
101
+ this.pConn$.getActionsApi().showData('pyDetails', lookUpDataPage, {
102
+ ...this.payload
103
+ });
104
+ }
105
+ if ((this.referenceType && this.referenceType.toUpperCase() === 'DATA') || this.shouldTreatAsDataReference) {
106
+ this.pConn$.getActionsApi().showData('pyDetails', this.dataViewName, {
107
+ ...this.payload
108
+ });
109
+ }
110
+ }
111
+
112
+ openLinkClick(e) {
113
+ if (!e.metaKey && !e.ctrlKey) {
114
+ e.preventDefault();
115
+ if (
116
+ (this.dataResourcePayLoad && this.dataResourcePayLoad.resourceType === 'DATA') ||
117
+ (this.referenceType && this.referenceType.toUpperCase() === 'DATA') ||
118
+ this.shouldTreatAsDataReference
119
+ ) {
120
+ this.showDataAction();
121
+ } else if (this.previewKey) {
122
+ this.pConn$.getActionsApi().openWorkByHandle(this.previewKey, this.resourcePayload.caseClassName);
123
+ }
124
+ }
125
+ }
126
+
127
+ private initializeComponentState() {
62
128
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as SemanticLinkProps;
63
- this.value$ = this.configProps$.text || '---';
129
+ this.value$ = this.configProps$.text || this.configProps$.value || '';
64
130
  this.displayMode$ = this.configProps$.displayMode;
65
131
  this.label$ = this.configProps$.label;
66
132
  if (this.configProps$.visibility) {
67
133
  this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
68
134
  }
135
+ this.referenceType = this.configProps$.referenceType;
136
+ this.previewKey = this.configProps$.previewKey;
137
+ this.resourcePayload = this.configProps$.resourcePayload ?? {};
138
+ this.dataResourcePayLoad = this.resourcePayload?.resourceType === 'DATA' ? this.resourcePayload : null;
139
+ this.shouldTreatAsDataReference = !this.previewKey && this.resourcePayload?.caseClassName;
140
+
141
+ const { contextPage } = this.configProps$;
142
+ if (contextPage?.classID) {
143
+ this.resourcePayload.caseClassName = contextPage.classID;
144
+ }
145
+
146
+ const {
147
+ WORKCLASS,
148
+ CASE_INFO: { CASE_INFO_CLASSID }
149
+ } = PCore.getConstants();
150
+ if (this.resourcePayload.caseClassName === WORKCLASS) {
151
+ this.resourcePayload.caseClassName = this.pConn$.getValue(CASE_INFO_CLASSID);
152
+ }
153
+ }
154
+
155
+ private buildDataPayload() {
156
+ const { dataRelationshipContext = null, contextPage } = this.configProps$;
157
+ const {
158
+ RESOURCE_TYPES: { DATA }
159
+ } = PCore.getConstants();
160
+
161
+ if ((this.referenceType && this.referenceType.toUpperCase() === DATA) || this.shouldTreatAsDataReference) {
162
+ try {
163
+ const dataRefContext = getDataReferenceInfo(this.pConn$, dataRelationshipContext, contextPage);
164
+ this.dataViewName = dataRefContext.dataContext ?? '';
165
+ this.payload = dataRefContext.dataContextParameters ?? {};
166
+ return true;
167
+ } catch (error) {
168
+ console.log('Error in getting the data reference info', error);
169
+ return false;
170
+ }
171
+ }
172
+
173
+ if (this.resourcePayload?.resourceType === 'DATA') {
174
+ this.dataViewName = PCore.getDataTypeUtils().getLookUpDataPage(this.resourcePayload.className);
175
+ const lookUpDataPageInfo: any = PCore.getDataTypeUtils().getLookUpDataPageInfo(this.resourcePayload.className);
176
+ const { content } = this.resourcePayload;
177
+
178
+ if (lookUpDataPageInfo) {
179
+ const { parameters } = lookUpDataPageInfo;
180
+ this.payload = Object.keys(parameters).reduce((acc, param) => {
181
+ const paramValue = parameters[param];
182
+ const propName = PCore.getAnnotationUtils().getPropertyName(paramValue);
183
+ const value = PCore.getAnnotationUtils().isProperty(paramValue) ? content[propName] : paramValue;
184
+ return { ...acc, [param]: value };
185
+ }, {});
186
+ } else {
187
+ const keysInfo = PCore.getDataTypeUtils().getDataPageKeys(this.dataViewName) ?? [];
188
+ this.payload = keysInfo.reduce((acc, curr) => {
189
+ const key = curr.isAlternateKeyStorage ? curr.linkedField : curr.keyName;
190
+ return { ...acc, [curr.keyName]: content[key] };
191
+ }, {});
192
+ }
193
+ return true;
194
+ }
195
+ return false;
196
+ }
197
+
198
+ private buildLinkURL(isData: boolean) {
199
+ const { ACTION_OPENWORKBYHANDLE, ACTION_SHOWDATA, ACTION_GETOBJECT } = PCore.getSemanticUrlUtils().getActions() as any;
200
+
201
+ if (isData && this.dataViewName && this.payload) {
202
+ return PCore.getSemanticUrlUtils().getResolvedSemanticURL(
203
+ ACTION_SHOWDATA,
204
+ { pageName: 'pyDetails', dataViewName: this.dataViewName },
205
+ { ...this.payload }
206
+ );
207
+ }
208
+
209
+ const { resourceParams = {} } = this.configProps$;
210
+ const isObjectType = (PCore.getCaseUtils() as any).isObjectCaseType(this.resourcePayload.caseClassName);
211
+ const idKey = isObjectType ? 'objectID' : 'workID';
212
+
213
+ if (resourceParams.workID === '' && typeof this.previewKey === 'string') {
214
+ resourceParams[idKey] = this.previewKey.split(' ')[1];
215
+ } else {
216
+ resourceParams[idKey] = resourceParams.workID;
217
+ }
218
+
219
+ if (this.previewKey) {
220
+ resourceParams.id = this.previewKey;
221
+ }
222
+
223
+ return PCore.getSemanticUrlUtils().getResolvedSemanticURL(
224
+ isObjectType ? ACTION_GETOBJECT : ACTION_OPENWORKBYHANDLE,
225
+ this.resourcePayload,
226
+ resourceParams
227
+ );
69
228
  }
70
229
  }
@@ -25,6 +25,5 @@
25
25
  }
26
26
 
27
27
  .psdk-details-fields-label {
28
- color: var(--app-label-color);
29
28
  margin: 8px 0px;
30
29
  }
@@ -5,6 +5,7 @@ import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-c
5
5
  import { Utils } from '@pega/angular-sdk-components';
6
6
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
7
7
  import { PConnFieldProps } from '@pega/angular-sdk-components';
8
+ import { format } from '@pega/angular-sdk-components';
8
9
 
9
10
  interface TextProps extends PConnFieldProps {
10
11
  // If any, enter additional props that only exist on Text here
@@ -14,7 +15,6 @@ interface TextProps extends PConnFieldProps {
14
15
  selector: 'app-text',
15
16
  templateUrl: './text.component.html',
16
17
  styleUrls: ['./text.component.scss'],
17
- standalone: true,
18
18
  imports: [CommonModule, forwardRef(() => ComponentMapperComponent)]
19
19
  })
20
20
  export class TextComponent implements OnInit, OnDestroy {
@@ -99,8 +99,9 @@ export class TextComponent implements OnInit, OnDestroy {
99
99
  break;
100
100
  case 'time':
101
101
  if (this.value$) {
102
- const timeParts = this.value$.split(':');
103
- this.formattedValue$ = `${timeParts[0]}:${timeParts[1]}`;
102
+ this.formattedValue$ = format(this.value$, 'timeonly', {
103
+ format: 'hh:mm A'
104
+ });
104
105
  } else {
105
106
  this.formattedValue$ = '';
106
107
  }
@@ -144,7 +145,7 @@ export class TextComponent implements OnInit, OnDestroy {
144
145
  generateDateTime(sVal): string {
145
146
  if (!sVal) return '';
146
147
  if (sVal.length === 10) return this.generateDate(sVal);
147
- const value = sVal.substring(0, sVal.length - 1);
148
+ // const value = sVal.substring(0, sVal.length - 1);
148
149
  // value = new Intl.DateTimeFormat('default', {
149
150
  // year: 'numeric',
150
151
  // month: 'numeric',
@@ -155,6 +156,6 @@ export class TextComponent implements OnInit, OnDestroy {
155
156
  // hour12: true,
156
157
  // }).format(new Date(value))
157
158
 
158
- return this.utils.generateDateTime(value, 'DateTime-Long-YYYY-Custom');
159
+ return this.utils.generateDateTime(sVal, 'DateTime-Long-YYYY-Custom');
159
160
  }
160
161
  }
@@ -2,10 +2,11 @@
2
2
  <component-mapper *ngIf="bVisible$ !== false" name="FieldValueList" [props]="{ label$, value$, displayMode$ }"></component-mapper>
3
3
  </div>
4
4
  <ng-template #noDisplayMode>
5
- <div *ngIf="!bReadonly$ && bHasForm$; else noEdit">
5
+ <div *ngIf="bHasForm$; else noEdit">
6
6
  <div [formGroup]="formGroup$">
7
7
  <div *ngIf="bVisible$">
8
8
  <mat-form-field class="psdk-full-width" subscriptSizing="dynamic" [hintLabel]="helperText">
9
+ <mat-label>{{ label$ }}</mat-label>
9
10
  <textarea
10
11
  matInput
11
12
  rows="5"
@@ -15,8 +16,9 @@
15
16
  [value]="value$"
16
17
  [required]="bRequired$"
17
18
  [disabled]="bDisabled$"
19
+ [readonly]="bReadonly$"
18
20
  [formControl]="fieldControl"
19
- (change)="fieldOnChange()"
21
+ (change)="fieldOnChange($event)"
20
22
  (blur)="fieldOnBlur($event)"
21
23
  ></textarea>
22
24
  <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 TextAreaProps extends PConnFieldProps {
14
13
  // If any, enter additional props that only exist on TextArea here
@@ -19,173 +18,49 @@ interface TextAreaProps extends PConnFieldProps {
19
18
  selector: 'app-text-area',
20
19
  templateUrl: './text-area.component.html',
21
20
  styleUrls: ['./text-area.component.scss'],
22
- standalone: true,
23
21
  imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
24
22
  })
25
- export class TextAreaComponent implements OnInit, OnDestroy {
26
- @Input() pConn$: typeof PConnect;
27
- @Input() formGroup$: FormGroup;
28
-
29
- // Used with AngularPConnect
30
- angularPConnectData: AngularPConnectData = {};
23
+ export class TextAreaComponent extends FieldBase {
31
24
  configProps$: TextAreaProps;
32
25
 
33
- label$ = '';
34
- value$ = '';
35
- bRequired$ = false;
36
- bReadonly$ = false;
37
- bDisabled$ = false;
38
- bVisible$ = true;
39
26
  nMaxLength$: number;
40
- displayMode$?: string = '';
41
- controlName$: string;
42
- bHasForm$ = true;
43
- componentReference = '';
44
- testId: string;
45
- helperText: 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
27
 
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...
28
+ /**
29
+ * Updates the component when there are changes in the state.
30
+ */
31
+ override updateSelf(): void {
32
+ // Resolve config properties
108
33
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as TextAreaProps;
109
34
 
110
- if (this.configProps$.value != undefined) {
111
- this.value$ = this.configProps$.value;
112
- }
113
- this.nMaxLength$ = this.pConn$.getFieldMetadata(this.pConn$.getRawConfigProps()?.value)?.maxLength || 100;
114
- this.testId = this.configProps$.testId;
115
- this.displayMode$ = this.configProps$.displayMode;
116
- this.label$ = this.configProps$.label;
117
- this.helperText = this.configProps$.helperText;
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
- });
35
+ // Update component common properties
36
+ this.updateComponentCommonProperties(this.configProps$);
129
37
 
130
- if (this.configProps$.visibility != null) {
131
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
132
- }
38
+ // Extract properties from config
39
+ const { value } = this.configProps$;
133
40
 
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;
41
+ // Set component specific properties
42
+ this.value$ = value;
43
+ this.nMaxLength$ = this.pConn$.getFieldMetadata(this.pConn$.getRawConfigProps()?.value)?.maxLength || 100;
44
+ }
150
45
 
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();
46
+ fieldOnChange(event: any) {
47
+ const oldVal = this.value$ ?? '';
48
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
156
49
 
157
- timer.unsubscribe();
50
+ if (isValueChanged) {
51
+ this.pConn$.clearErrorMessages({
52
+ property: this.propName
158
53
  });
159
54
  }
160
55
  }
161
56
 
162
- fieldOnChange() {
163
- this.pConn$.clearErrorMessages({
164
- property: this.propName
165
- });
166
- }
167
-
168
57
  fieldOnBlur(event: any) {
169
- const value = event?.target?.value;
170
- handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
171
- }
172
-
173
- getErrorMessage() {
174
- // field control gets error message from here
175
-
176
- let errMessage = '';
58
+ const oldVal = this.value$ ?? '';
59
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
177
60
 
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;
61
+ if (isValueChanged) {
62
+ const value = event?.target?.value;
63
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
182
64
  }
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
65
  }
191
66
  }
@@ -14,7 +14,6 @@ interface TextContentProps extends PConnFieldProps {
14
14
  selector: 'app-text-content',
15
15
  templateUrl: './text-content.component.html',
16
16
  styleUrls: ['./text-content.component.scss'],
17
- standalone: true,
18
17
  imports: [CommonModule]
19
18
  })
20
19
  export class TextContentComponent implements OnInit, OnDestroy {
@@ -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>