@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,16 +1,49 @@
1
- import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
1
+ import { Component, OnInit, forwardRef, OnDestroy, Output, EventEmitter } 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 { MatOptionModule } from '@angular/material/core';
5
5
  import { MatSelectModule } from '@angular/material/select';
6
6
  import { MatFormFieldModule } from '@angular/material/form-field';
7
- import { interval } from 'rxjs';
8
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
9
- import { Utils } from '@pega/angular-sdk-components';
7
+ import isEqual from 'fast-deep-equal';
8
+
9
+ import { FieldBase } from '@pega/angular-sdk-components';
10
10
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
11
11
  import { handleEvent } from '@pega/angular-sdk-components';
12
12
  import { PConnFieldProps } from '@pega/angular-sdk-components';
13
13
 
14
+ function flattenParameters(params = {}) {
15
+ const flatParams = {};
16
+ Object.keys(params).forEach(key => {
17
+ const { name, value: theVal } = params[key];
18
+ flatParams[name] = theVal;
19
+ });
20
+
21
+ return flatParams;
22
+ }
23
+
24
+ function preProcessColumns(columnList) {
25
+ return columnList.map(col => {
26
+ const tempColObj = { ...col };
27
+ tempColObj.value = col.value && col.value.startsWith('.') ? col.value.substring(1) : col.value;
28
+ return tempColObj;
29
+ });
30
+ }
31
+
32
+ function getDisplayFieldsMetaData(columnList) {
33
+ const displayColumns = columnList.filter(col => col.display === 'true');
34
+ const metaDataObj: any = { key: '', primary: '', secondary: [] };
35
+ const keyCol = columnList.filter(col => col.key === 'true');
36
+ metaDataObj.key = keyCol.length > 0 ? keyCol[0].value : 'auto';
37
+ for (let index = 0; index < displayColumns.length; index += 1) {
38
+ if (displayColumns[index].primary === 'true') {
39
+ metaDataObj.primary = displayColumns[index].value;
40
+ } else {
41
+ metaDataObj.secondary.push(displayColumns[index].value);
42
+ }
43
+ }
44
+ return metaDataObj;
45
+ }
46
+
14
47
  interface IOption {
15
48
  key: string;
16
49
  value: string;
@@ -22,156 +55,89 @@ interface DropdownProps extends PConnFieldProps {
22
55
  datasource?: any[];
23
56
  onRecordChange?: any;
24
57
  fieldMetadata?: any;
58
+ listType?: string;
59
+ columns?: any[];
60
+ deferDatasource?: boolean;
61
+ datasourceMetadata?: any;
62
+ parameters?: any;
25
63
  }
26
64
 
27
65
  @Component({
28
66
  selector: 'app-dropdown',
29
67
  templateUrl: './dropdown.component.html',
30
68
  styleUrls: ['./dropdown.component.scss'],
31
- standalone: true,
32
69
  imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatSelectModule, MatOptionModule, forwardRef(() => ComponentMapperComponent)]
33
70
  })
34
- export class DropdownComponent implements OnInit, OnDestroy {
35
- @Input() pConn$: typeof PConnect;
36
- @Input() formGroup$: FormGroup;
71
+ export class DropdownComponent extends FieldBase implements OnInit, OnDestroy {
72
+ @Output() onRecordChange: EventEmitter<any> = new EventEmitter();
37
73
 
38
- // Used with AngularPConnect
39
- angularPConnectData: AngularPConnectData = {};
40
74
  configProps$: DropdownProps;
41
75
 
42
- label$ = '';
43
- value$ = '';
44
- bRequired$ = false;
45
- bReadonly$ = false;
46
- bDisabled$ = false;
47
- bVisible$ = true;
48
- displayMode$?: string = '';
49
- controlName$: string;
50
- bHasForm$ = true;
51
76
  options$: IOption[];
52
- componentReference = '';
53
- testId = '';
54
- helperText: string;
55
- hideLabel: any;
56
-
57
- fieldControl = new FormControl('', null);
58
- fieldMetadata: any[];
77
+ theDatasource: any[] | null;
59
78
  localeContext = '';
60
79
  localeClass = '';
61
80
  localeName = '';
62
81
  localePath = '';
63
82
  localizedValue = '';
64
83
 
65
- constructor(
66
- private angularPConnect: AngularPConnectService,
67
- private cdRef: ChangeDetectorRef,
68
- private utils: Utils
69
- ) {}
70
-
71
- ngOnInit(): void {
72
- // First thing in initialization is registering and subscribing to the AngularPConnect service
73
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
74
- this.controlName$ = this.angularPConnect.getComponentID(this);
75
-
76
- // Then, continue on with other initialization
77
-
78
- // call updateSelf when initializing
79
- // this.updateSelf();
80
- this.checkAndUpdate();
81
-
82
- if (this.formGroup$) {
83
- // add control to formGroup
84
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
85
- this.fieldControl.setValue(this.value$);
86
- this.bHasForm$ = true;
87
- } else {
88
- this.bReadonly$ = true;
89
- this.bHasForm$ = false;
90
- }
91
- }
92
-
93
- ngOnDestroy(): void {
94
- if (this.formGroup$) {
95
- this.formGroup$.removeControl(this.controlName$);
96
- }
97
-
98
- if (this.angularPConnectData.unsubscribeFn) {
99
- this.angularPConnectData.unsubscribeFn();
84
+ set options(options: IOption[]) {
85
+ this.options$ = options;
86
+ if (this.displayMode$) {
87
+ this.value$ = this.options$?.find(option => option.key === this.value$)?.value || this.value$;
88
+ this.localizedValue = this.pConn$.getLocalizedValue(
89
+ this.value$ === 'Select...' ? '' : this.value$,
90
+ this.localePath,
91
+ this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName)
92
+ );
100
93
  }
101
94
  }
102
95
 
103
- // Callback passed when subscribing to store change
104
- onStateChange() {
105
- this.checkAndUpdate();
106
- }
96
+ /**
97
+ * Updates the component when there are changes in the state.
98
+ */
99
+ override updateSelf(): void {
100
+ // Resolve configuration properties
101
+ this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DropdownProps;
107
102
 
108
- checkAndUpdate() {
109
- // Should always check the bridge to see if the component should
110
- // update itself (re-render)
111
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
103
+ // Update component common properties
104
+ this.updateComponentCommonProperties(this.configProps$);
112
105
 
113
- // ONLY call updateSelf when the component should update
114
- if (bUpdateSelf) {
115
- this.updateSelf();
116
- }
106
+ // Set component specific properties
107
+ this.updateDropdownProperties(this.configProps$);
117
108
  }
118
109
 
119
- // updateSelf
120
- updateSelf(): void {
121
- // moved this from ngOnInit() and call this from there instead...
122
- this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DropdownProps;
110
+ /**
111
+ * Updates dropdown properties based on the provided configuration.
112
+ * @param configProps - Configuration properties
113
+ */
114
+ updateDropdownProperties(configProps) {
115
+ const { value, fieldMetadata, datasource } = configProps;
123
116
 
124
- if (this.configProps$.value != undefined) {
125
- this.value$ = this.configProps$.value;
126
- }
127
-
128
- this.testId = this.configProps$.testId;
129
- this.displayMode$ = this.configProps$.displayMode;
130
- this.label$ = this.configProps$.label;
131
- this.helperText = this.configProps$.helperText;
132
- this.hideLabel = this.configProps$.hideLabel;
133
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
134
- setTimeout(() => {
135
- if (this.configProps$.required != null) {
136
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
137
- }
138
- this.cdRef.detectChanges();
139
- });
117
+ this.value$ = value;
140
118
 
141
- if (this.configProps$.visibility != null) {
142
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
119
+ if (!isEqual(datasource, this.theDatasource)) {
120
+ // inbound datasource is different, so update theDatasource
121
+ this.theDatasource = datasource || null;
143
122
  }
144
123
 
145
- // disabled
146
- if (this.configProps$.disabled != undefined) {
147
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
148
- }
149
-
150
- if (this.bDisabled$) {
151
- this.fieldControl.disable();
152
- } else {
153
- this.fieldControl.enable();
124
+ if (this.value$ === '' && !this.bReadonly$) {
125
+ this.value$ = 'Select';
154
126
  }
155
127
 
156
- if (this.configProps$.readOnly != null) {
157
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
128
+ if (this.theDatasource) {
129
+ const optionsList = [...this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject())];
130
+ optionsList?.unshift({ key: 'Select', value: this.pConn$.getLocalizedValue('Select...', '', '') });
131
+ this.options = optionsList;
158
132
  }
159
133
 
160
- this.componentReference = (this.pConn$.getStateProps() as any).value;
161
-
162
- const optionsList = [...this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject())];
163
- optionsList?.unshift({ key: 'Select', value: this.pConn$.getLocalizedValue('Select...', '', '') });
164
- this.options$ = optionsList;
165
- if (this.value$ === '' && !this.bReadonly$) {
166
- this.value$ = 'Select';
167
- }
134
+ this.actionsApi = this.pConn$.getActionsApi();
168
135
 
169
- const propName = (this.pConn$.getStateProps() as any).value;
136
+ this.propName = this.pConn$.getStateProps().value;
170
137
  const className = this.pConn$.getCaseInfo().getClassName();
171
- const refName = propName?.slice(propName.lastIndexOf('.') + 1);
138
+ const refName = this.propName?.slice(this.propName.lastIndexOf('.') + 1);
172
139
 
173
- this.fieldMetadata = this.configProps$.fieldMetadata;
174
- const metaData = Array.isArray(this.fieldMetadata) ? this.fieldMetadata.filter(field => field?.classID === className)[0] : this.fieldMetadata;
140
+ const metaData = Array.isArray(fieldMetadata) ? fieldMetadata.filter(field => field?.classID === className)[0] : fieldMetadata;
175
141
 
176
142
  let displayName = metaData?.datasource?.propertyForDisplayText;
177
143
  displayName = displayName?.slice(displayName.lastIndexOf('.') + 1);
@@ -185,17 +151,76 @@ export class DropdownComponent implements OnInit, OnDestroy {
185
151
  this.localePath,
186
152
  this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName)
187
153
  );
188
- // trigger display of error message with field control
189
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
190
- const timer = interval(100).subscribe(() => {
191
- this.fieldControl.setErrors({ message: true });
192
- this.fieldControl.markAsTouched();
193
154
 
194
- timer.unsubscribe();
195
- });
155
+ this.localizedValue = this.options$?.find(opt => opt.key === this.value$)?.value || this.localizedValue;
156
+
157
+ this.getDatapageData();
158
+ }
159
+
160
+ getDatapageData() {
161
+ const configProps = this.pConn$.getConfigProps() as DropdownProps;
162
+ let { listType, parameters, datasource = [], columns = [] } = configProps;
163
+ const { deferDatasource, datasourceMetadata } = configProps;
164
+ const context = this.pConn$.getContextName();
165
+ if (deferDatasource && datasourceMetadata?.datasource?.name) {
166
+ listType = 'datapage';
167
+ datasource = datasourceMetadata.datasource.name;
168
+ const { parameters: dataSourceParameters, propertyForDisplayText, propertyForValue } = datasourceMetadata.datasource;
169
+ parameters = flattenParameters(dataSourceParameters);
170
+ const displayProp = propertyForDisplayText?.startsWith('@P') ? propertyForDisplayText.substring(3) : propertyForDisplayText;
171
+ const valueProp = propertyForValue?.startsWith('@P') ? propertyForValue.substring(3) : propertyForValue;
172
+ columns = [
173
+ {
174
+ key: 'true',
175
+ setProperty: 'Associated property',
176
+ value: valueProp
177
+ },
178
+ {
179
+ display: 'true',
180
+ primary: 'true',
181
+ useForSearch: true,
182
+ value: displayProp
183
+ }
184
+ ];
185
+ }
186
+
187
+ columns = preProcessColumns(columns) || [];
188
+ if (listType !== 'associated' && typeof datasource === 'string') {
189
+ this.getData(datasource, parameters, columns, context, listType);
196
190
  }
197
191
  }
198
192
 
193
+ getData(dataSource, parameters, columns, context, listType) {
194
+ const dataConfig: any = {
195
+ columns,
196
+ dataSource,
197
+ deferDatasource: true,
198
+ listType,
199
+ parameters,
200
+ matchPosition: 'contains',
201
+ maxResultsDisplay: '5000',
202
+ cacheLifeSpan: 'form'
203
+ };
204
+ PCore.getDataApi()
205
+ .init(dataConfig, context)
206
+ .then((dataApiObj: any) => {
207
+ const optionsData: any[] = [];
208
+ const displayColumn = getDisplayFieldsMetaData(columns);
209
+ dataApiObj?.fetchData('').then(response => {
210
+ response.data?.forEach(element => {
211
+ const val = element[displayColumn.primary]?.toString();
212
+ const obj = {
213
+ key: element[displayColumn.key] || element.pyGUID,
214
+ value: val
215
+ };
216
+ optionsData.push(obj);
217
+ });
218
+ optionsData?.unshift({ key: 'Select', value: this.pConn$.getLocalizedValue('Select...', '', '') });
219
+ this.options = optionsData;
220
+ });
221
+ });
222
+ }
223
+
199
224
  isSelected(buttonValue: string): boolean {
200
225
  return this.value$ === buttonValue;
201
226
  }
@@ -204,17 +229,14 @@ export class DropdownComponent implements OnInit, OnDestroy {
204
229
  if (event?.value === 'Select') {
205
230
  event.value = '';
206
231
  }
207
- const actionsApi = this.pConn$?.getActionsApi();
208
- const propName = (this.pConn$?.getStateProps() as any).value;
209
- handleEvent(actionsApi, 'changeNblur', propName, event.value);
210
- if (this.configProps$?.onRecordChange) {
211
- this.configProps$.onRecordChange(event);
212
- }
213
- }
232
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, event.value);
214
233
 
215
- fieldOnBlur(event: any) {
216
- // PConnect wants to use eventHandler for onBlur
217
- this.angularPConnectData.actions?.onBlur(this, event);
234
+ this.pConn$.clearErrorMessages({
235
+ property: this.propName
236
+ });
237
+ if (this.onRecordChange) {
238
+ this.onRecordChange.emit(event.value);
239
+ }
218
240
  }
219
241
 
220
242
  getLocalizedOptionValue(opt: IOption) {
@@ -224,21 +246,4 @@ export class DropdownComponent implements OnInit, OnDestroy {
224
246
  this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName)
225
247
  );
226
248
  }
227
-
228
- getErrorMessage() {
229
- let errMessage = '';
230
-
231
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
232
- if (this.fieldControl.hasError('message')) {
233
- errMessage = this.angularPConnectData.validateMessage ?? '';
234
- return errMessage;
235
- }
236
- if (this.fieldControl.hasError('required')) {
237
- errMessage = 'You must enter a value';
238
- } else if (this.fieldControl.errors) {
239
- errMessage = this.fieldControl.errors.toString();
240
- }
241
-
242
- return errMessage;
243
- }
244
249
  }
@@ -1,12 +1,12 @@
1
- import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
1
+ import { Component, OnInit, forwardRef, OnDestroy } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
4
  import { 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 EmailProps extends PConnFieldProps {
@@ -17,164 +17,44 @@ interface EmailProps extends PConnFieldProps {
17
17
  selector: 'app-email',
18
18
  templateUrl: './email.component.html',
19
19
  styleUrls: ['./email.component.scss'],
20
- standalone: true,
21
20
  imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
22
21
  })
23
- export class EmailComponent implements OnInit, OnDestroy {
24
- @Input() pConn$: typeof PConnect;
25
- @Input() formGroup$: FormGroup;
26
-
27
- // Used with AngularPConnect
28
- angularPConnectData: AngularPConnectData = {};
22
+ export class EmailComponent extends FieldBase implements OnInit, OnDestroy {
29
23
  configProps$: EmailProps;
30
24
 
31
- label$ = '';
32
- value$: string;
33
- bRequired$ = false;
34
- bReadonly$ = false;
35
- bDisabled$ = false;
36
- bVisible$ = true;
37
- displayMode$?: string = '';
38
- controlName$: string;
39
- bHasForm$ = true;
40
- componentReference = '';
41
- testId: string;
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 configuration properties
104
30
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as EmailProps;
105
- this.testId = this.configProps$.testId;
106
- this.label$ = this.configProps$.label;
107
- this.displayMode$ = this.configProps$.displayMode;
108
-
109
- if (this.configProps$.value != undefined) {
110
- this.value$ = this.configProps$.value;
111
- }
112
- this.helperText = this.configProps$.helperText;
113
- this.placeholder = this.configProps$.placeholder || '';
114
-
115
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
116
- setTimeout(() => {
117
- if (this.configProps$.required != null) {
118
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
119
- }
120
- this.cdRef.detectChanges();
121
- });
122
-
123
- if (this.configProps$.visibility != null) {
124
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
125
- }
126
-
127
- // disabled
128
- if (this.configProps$.disabled != undefined) {
129
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
130
- }
131
-
132
- if (this.bDisabled$) {
133
- this.fieldControl.disable();
134
- } else {
135
- this.fieldControl.enable();
136
- }
137
31
 
138
- if (this.configProps$.readOnly != null) {
139
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
140
- }
32
+ // Update component common properties
33
+ this.updateComponentCommonProperties(this.configProps$);
141
34
 
142
- this.componentReference = (this.pConn$.getStateProps() as any).value;
35
+ // Set component specific properties
36
+ const { value } = this.configProps$;
37
+ this.value$ = value;
38
+ }
143
39
 
144
- // trigger display of error message with field control
145
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
146
- const timer = interval(100).subscribe(() => {
147
- this.fieldControl.setErrors({ message: true });
148
- this.fieldControl.markAsTouched();
40
+ fieldOnChange(event: any) {
41
+ const oldVal = this.value$ ?? '';
42
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
149
43
 
150
- timer.unsubscribe();
44
+ if (isValueChanged) {
45
+ this.pConn$.clearErrorMessages({
46
+ property: this.propName
151
47
  });
152
48
  }
153
49
  }
154
50
 
155
- fieldOnChange(event: any) {
156
- this.angularPConnectData.actions?.onChange(this, event);
157
- }
158
-
159
51
  fieldOnBlur(event: any) {
160
- // PConnect wants to use eventHandler for onBlur
161
- this.angularPConnectData.actions?.onBlur(this, event);
162
- }
163
-
164
- getErrorMessage() {
165
- let errMessage = '';
52
+ const oldVal = this.value$ ?? '';
53
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
166
54
 
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;
55
+ if (isValueChanged) {
56
+ const value = event?.target?.value;
57
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
171
58
  }
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();
176
- }
177
-
178
- return errMessage;
179
59
  }
180
60
  }