@pega/angular-sdk-overrides 24.2.12 → 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 (237) 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 -1
  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 +2 -2
  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 +0 -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 +1 -1
  24. package/lib/designSystemExtension/operator/operator.component.scss +3 -10
  25. package/lib/designSystemExtension/operator/operator.component.ts +0 -2
  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 -1
  34. package/lib/field/auto-complete/auto-complete.component.ts +35 -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 +14 -7
  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 +36 -169
  42. package/lib/field/date/date.component.html +2 -2
  43. package/lib/field/date/date.component.ts +30 -151
  44. package/lib/field/date-time/date-time.component.html +1 -1
  45. package/lib/field/date-time/date-time.component.ts +34 -149
  46. package/lib/field/decimal/decimal.component.ts +38 -164
  47. package/lib/field/dropdown/dropdown.component.ts +29 -152
  48. package/lib/field/email/email.component.ts +16 -156
  49. package/lib/field/field.base.ts +149 -0
  50. package/lib/field/group/group.component.ts +7 -5
  51. package/lib/field/integer/integer.component.ts +18 -158
  52. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.ts +0 -1
  53. package/lib/field/location/config-ext.json +8 -0
  54. package/lib/field/location/location.component.html +45 -0
  55. package/lib/field/location/location.component.scss +18 -0
  56. package/lib/field/location/location.component.spec.ts +22 -0
  57. package/lib/field/location/location.component.ts +280 -0
  58. package/lib/field/multiselect/multiselect.component.ts +47 -152
  59. package/lib/field/multiselect/utils.ts +55 -47
  60. package/lib/field/object-reference/object-reference.component.html +17 -0
  61. package/lib/field/object-reference/object-reference.component.scss +0 -0
  62. package/lib/field/object-reference/object-reference.component.spec.ts +22 -0
  63. package/lib/field/object-reference/object-reference.component.ts +237 -0
  64. package/lib/field/percentage/percentage.component.ts +37 -155
  65. package/lib/field/phone/phone.component.html +18 -19
  66. package/lib/field/phone/phone.component.scss +4 -0
  67. package/lib/field/phone/phone.component.ts +43 -145
  68. package/lib/field/radio-buttons/radio-buttons.component.html +14 -6
  69. package/lib/field/radio-buttons/radio-buttons.component.scss +4 -2
  70. package/lib/field/radio-buttons/radio-buttons.component.ts +37 -160
  71. package/lib/field/rich-text/rich-text.component.html +2 -0
  72. package/lib/field/rich-text/rich-text.component.scss +172 -0
  73. package/lib/field/rich-text/rich-text.component.ts +21 -91
  74. package/lib/field/scalar-list/scalar-list.component.ts +17 -73
  75. package/lib/field/selectable-card/selectable-card.component.html +70 -0
  76. package/lib/field/selectable-card/selectable-card.component.scss +11 -0
  77. package/lib/field/selectable-card/selectable-card.component.spec.ts +22 -0
  78. package/lib/field/selectable-card/selectable-card.component.ts +219 -0
  79. package/lib/field/semantic-link/semantic-link.component.html +4 -8
  80. package/lib/field/semantic-link/semantic-link.component.scss +0 -13
  81. package/lib/field/semantic-link/semantic-link.component.ts +165 -6
  82. package/lib/field/text/text.component.scss +0 -1
  83. package/lib/field/text/text.component.ts +0 -1
  84. package/lib/field/text-area/text-area.component.ts +18 -153
  85. package/lib/field/text-content/text-content.component.ts +0 -1
  86. package/lib/field/text-input/text-input.component.ts +16 -156
  87. package/lib/field/time/time.component.ts +17 -152
  88. package/lib/field/url/url.component.ts +16 -155
  89. package/lib/field/user-reference/user-reference.component.scss +0 -1
  90. package/lib/field/user-reference/user-reference.component.ts +2 -4
  91. package/lib/infra/Containers/flow-container/flow-container.component.html +2 -2
  92. package/lib/infra/Containers/flow-container/flow-container.component.ts +8 -9
  93. package/lib/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts +0 -1
  94. package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +5 -11
  95. package/lib/infra/Containers/view-container/helper.ts +35 -2
  96. package/lib/infra/Containers/view-container/view-container.component.ts +1 -2
  97. package/lib/infra/action-buttons/action-buttons.component.html +13 -8
  98. package/lib/infra/action-buttons/action-buttons.component.scss +23 -0
  99. package/lib/infra/action-buttons/action-buttons.component.ts +1 -3
  100. package/lib/infra/assignment/assignment.component.ts +21 -10
  101. package/lib/infra/assignment-card/assignment-card.component.html +1 -2
  102. package/lib/infra/assignment-card/assignment-card.component.scss +0 -4
  103. package/lib/infra/assignment-card/assignment-card.component.ts +21 -5
  104. package/lib/infra/dashboard-filter/dashboard-filter.component.ts +0 -1
  105. package/lib/infra/defer-load/defer-load.component.html +6 -2
  106. package/lib/infra/defer-load/defer-load.component.ts +22 -12
  107. package/lib/infra/error-boundary/error-boundary.component.ts +0 -1
  108. package/lib/infra/multi-step/multi-step.component.html +22 -38
  109. package/lib/infra/multi-step/multi-step.component.scss +14 -27
  110. package/lib/infra/multi-step/multi-step.component.ts +0 -1
  111. package/lib/infra/navbar/navbar.component.html +36 -41
  112. package/lib/infra/navbar/navbar.component.scss +22 -4
  113. package/lib/infra/navbar/navbar.component.ts +8 -4
  114. package/lib/infra/reference/reference.component.ts +5 -0
  115. package/lib/infra/region/region.component.ts +0 -1
  116. package/lib/infra/root-container/root-container.component.scss +0 -1
  117. package/lib/infra/root-container/root-container.component.ts +1 -5
  118. package/lib/infra/stages/stages.component.html +4 -3
  119. package/lib/infra/stages/stages.component.scss +12 -36
  120. package/lib/infra/stages/stages.component.ts +4 -3
  121. package/lib/infra/view/view.component.html +1 -1
  122. package/lib/infra/view/view.component.ts +3 -7
  123. package/lib/template/advanced-search/advanced-search.component.html +12 -0
  124. package/lib/template/advanced-search/advanced-search.component.scss +0 -0
  125. package/lib/template/advanced-search/advanced-search.component.spec.ts +0 -0
  126. package/lib/template/advanced-search/advanced-search.component.ts +112 -0
  127. package/lib/template/advanced-search/advanced-search.service.ts +27 -0
  128. package/lib/template/advanced-search/search-group/persist-utils.ts +56 -0
  129. package/lib/template/advanced-search/search-groups/search-groups.component.html +32 -0
  130. package/lib/template/advanced-search/search-groups/search-groups.component.scss +0 -0
  131. package/lib/template/advanced-search/search-groups/search-groups.component.spec.ts +0 -0
  132. package/lib/template/advanced-search/search-groups/search-groups.component.ts +294 -0
  133. package/lib/template/advanced-search/search-groups/utils.ts +29 -0
  134. package/lib/template/app-shell/app-shell.component.html +4 -1
  135. package/lib/template/app-shell/app-shell.component.scss +0 -3
  136. package/lib/template/app-shell/app-shell.component.ts +46 -8
  137. package/lib/template/banner-page/banner-page.component.ts +0 -1
  138. package/lib/template/case-summary/case-summary.component.scss +0 -2
  139. package/lib/template/case-summary/case-summary.component.ts +6 -22
  140. package/lib/template/case-view/case-view.component.html +4 -4
  141. package/lib/template/case-view/case-view.component.scss +18 -10
  142. package/lib/template/case-view/case-view.component.ts +1 -11
  143. package/lib/template/confirmation/confirmation.component.html +1 -1
  144. package/lib/template/confirmation/confirmation.component.ts +0 -1
  145. package/lib/template/data-reference/data-reference.component.html +11 -8
  146. package/lib/template/data-reference/data-reference.component.ts +346 -113
  147. package/lib/template/data-reference/search-form/search-form.component.html +39 -0
  148. package/lib/template/data-reference/search-form/search-form.component.scss +11 -0
  149. package/lib/template/data-reference/search-form/search-form.component.spec.ts +0 -0
  150. package/lib/template/data-reference/search-form/search-form.component.ts +167 -0
  151. package/lib/template/data-reference/search-form/tabsData.ts +160 -0
  152. package/lib/template/data-reference/utils.ts +92 -0
  153. package/lib/template/default-form/default-form.component.ts +10 -3
  154. package/lib/template/default-page/default-page.component.html +34 -0
  155. package/lib/template/default-page/default-page.component.scss +31 -0
  156. package/lib/template/default-page/default-page.component.spec.ts +24 -0
  157. package/lib/template/default-page/default-page.component.ts +64 -0
  158. package/lib/template/details/details.component.ts +0 -1
  159. package/lib/template/details-narrow-wide/details-narrow-wide.component.ts +0 -1
  160. package/lib/template/details-one-column/details-one-column.component.ts +0 -1
  161. package/lib/template/details-sub-tabs/details-sub-tabs.component.ts +0 -1
  162. package/lib/template/details-three-column/details-three-column.component.ts +0 -1
  163. package/lib/template/details-two-column/details-two-column.component.ts +0 -1
  164. package/lib/template/details-wide-narrow/details-wide-narrow.component.ts +0 -1
  165. package/lib/template/dynamic-tabs/dynamic-tabs.component.ts +0 -1
  166. package/lib/template/field-group-list/field-group-list.component.scss +0 -1
  167. package/lib/template/field-group-list/field-group-list.component.ts +0 -1
  168. package/lib/template/field-group-template/field-group-template.component.ts +14 -28
  169. package/lib/template/field-value-list/field-value-list.component.ts +0 -1
  170. package/lib/template/inline-dashboard/inline-dashboard.component.ts +0 -1
  171. package/lib/template/inline-dashboard-page/inline-dashboard-page.component.ts +1 -2
  172. package/lib/template/list-page/list-page.component.ts +0 -1
  173. package/lib/template/list-view/list-view.component.html +170 -162
  174. package/lib/template/list-view/list-view.component.scss +25 -21
  175. package/lib/template/list-view/list-view.component.ts +207 -119
  176. package/lib/template/list-view/listViewHelpers.ts +1 -4
  177. package/lib/template/list-view/utils.ts +25 -2
  178. package/lib/template/multi-reference-readonly/multi-reference-readonly.component.ts +0 -1
  179. package/lib/template/narrow-wide-form/narrow-wide-form.component.ts +0 -1
  180. package/lib/template/object-page/object-page.component.html +1 -0
  181. package/lib/template/object-page/object-page.component.scss +0 -0
  182. package/lib/template/object-page/object-page.component.spec.ts +22 -0
  183. package/lib/template/object-page/object-page.component.ts +14 -0
  184. package/lib/template/one-column/one-column.component.ts +0 -1
  185. package/lib/template/one-column-page/one-column-page.component.ts +0 -1
  186. package/lib/template/one-column-tab/one-column-tab.component.scss +1 -1
  187. package/lib/template/one-column-tab/one-column-tab.component.ts +0 -1
  188. package/lib/template/page/page.component.ts +0 -1
  189. package/lib/template/promoted-filters/promoted-filters.component.ts +0 -1
  190. package/lib/template/repeating-structures/repeating-structures.component.ts +0 -2
  191. package/lib/template/self-service-case-view/self-service-case-view.component.html +78 -0
  192. package/lib/template/self-service-case-view/self-service-case-view.component.scss +132 -0
  193. package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +24 -0
  194. package/lib/template/self-service-case-view/self-service-case-view.component.ts +207 -0
  195. package/lib/template/simple-table/simple-table.component.ts +0 -2
  196. package/lib/template/simple-table-manual/helpers.ts +117 -3
  197. package/lib/template/simple-table-manual/simple-table-manual.component.html +4 -4
  198. package/lib/template/simple-table-manual/simple-table-manual.component.scss +4 -14
  199. package/lib/template/simple-table-manual/simple-table-manual.component.ts +45 -25
  200. package/lib/template/simple-table-select/simple-table-select.component.ts +0 -1
  201. package/lib/template/single-reference-readonly/single-reference-readonly.component.html +4 -1
  202. package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +21 -0
  203. package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +104 -4
  204. package/lib/template/sub-tabs/sub-tabs.component.ts +0 -1
  205. package/lib/template/three-column/three-column.component.ts +0 -1
  206. package/lib/template/three-column-page/three-column-page.component.ts +0 -1
  207. package/lib/template/two-column/two-column.component.ts +0 -1
  208. package/lib/template/two-column-page/two-column-page.component.ts +0 -1
  209. package/lib/template/two-column-tab/two-column-tab.component.ts +0 -1
  210. package/lib/template/utils.ts +42 -0
  211. package/lib/template/wide-narrow-form/wide-narrow-form.component.ts +0 -1
  212. package/lib/template/wide-narrow-page/wide-narrow-page.component.ts +0 -1
  213. package/lib/template/wss-nav-bar/wss-nav-bar.component.html +6 -5
  214. package/lib/template/wss-nav-bar/wss-nav-bar.component.scss +8 -17
  215. package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +1 -9
  216. package/lib/widget/app-announcement/app-announcement.component.html +1 -2
  217. package/lib/widget/app-announcement/app-announcement.component.scss +2 -2
  218. package/lib/widget/app-announcement/app-announcement.component.ts +0 -1
  219. package/lib/widget/attachment/Attachment.types.ts +92 -0
  220. package/lib/widget/attachment/AttachmentUtils.ts +287 -0
  221. package/lib/widget/attachment/attachment.component.html +3 -3
  222. package/lib/widget/attachment/attachment.component.scss +9 -12
  223. package/lib/widget/attachment/attachment.component.ts +267 -254
  224. package/lib/widget/case-history/case-history.component.ts +0 -1
  225. package/lib/widget/feed-container/feed-container.component.scss +3 -9
  226. package/lib/widget/feed-container/feed-container.component.ts +2 -3
  227. package/lib/widget/file-utility/file-utility.component.html +3 -3
  228. package/lib/widget/file-utility/file-utility.component.scss +6 -17
  229. package/lib/widget/file-utility/file-utility.component.ts +24 -9
  230. package/lib/widget/list-utility/list-utility.component.scss +4 -5
  231. package/lib/widget/list-utility/list-utility.component.ts +0 -1
  232. package/lib/widget/quick-create/quick-create.component.ts +41 -23
  233. package/lib/widget/todo/todo.component.html +8 -5
  234. package/lib/widget/todo/todo.component.scss +11 -10
  235. package/lib/widget/todo/todo.component.ts +7 -4
  236. package/lib/widget/utility/utility.component.ts +0 -1
  237. package/package.json +1 -1
@@ -3,6 +3,10 @@ import { CommonModule } from '@angular/common';
3
3
  import { FormGroup } from '@angular/forms';
4
4
  import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
5
5
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
6
+ import { getMappedKey } from '@pega/angular-sdk-components';
7
+ import { componentCachePersistUtils } from '@pega/angular-sdk-components';
8
+ import { getFirstChildConfig } from '@pega/angular-sdk-components';
9
+ import { DataReferenceAdvancedSearchService } from '@pega/angular-sdk-components';
6
10
 
7
11
  const SELECTION_MODE = { SINGLE: 'single', MULTI: 'multi' };
8
12
 
@@ -10,7 +14,6 @@ const SELECTION_MODE = { SINGLE: 'single', MULTI: 'multi' };
10
14
  selector: 'app-data-reference',
11
15
  templateUrl: './data-reference.component.html',
12
16
  styleUrls: ['./data-reference.component.scss'],
13
- standalone: true,
14
17
  imports: [CommonModule, forwardRef(() => ComponentMapperComponent)]
15
18
  })
16
19
  export class DataReferenceComponent implements OnInit, OnDestroy {
@@ -39,46 +42,71 @@ export class DataReferenceComponent implements OnInit, OnDestroy {
39
42
  displaySingleRef: boolean;
40
43
  displayMultiRef: boolean;
41
44
  refList: any;
45
+ displayAs: any;
46
+ isDDSourceDeferred: any;
47
+ showPromotedFilters: any;
48
+ displayMode: any;
49
+ refFieldMetadata: any;
50
+ contextClass: any;
51
+ selectionList: any;
52
+ inline: any;
53
+ isCreationOfNewRecordAllowedForReference: any;
54
+ showAdvancedSearch: boolean;
55
+ pyID: any;
56
+ allowImplicitRefresh: any;
57
+ displayChild = false;
58
+ dataRelationshipContext: any;
59
+ imagePosition: any;
60
+ showImageDescription: any;
42
61
 
43
- constructor(private angularPConnect: AngularPConnectService) {}
62
+ constructor(
63
+ private angularPConnect: AngularPConnectService,
64
+ private advancedSearchService: DataReferenceAdvancedSearchService
65
+ ) {}
44
66
 
45
67
  ngOnInit(): void {
46
68
  // First thing in initialization is registering and subscribing to the AngularPConnect service
47
69
  this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
48
70
  this.children = this.pConn$.getChildren();
49
71
  this.updateSelf();
50
- if (this.firstChildMeta?.type === 'Dropdown' && this.rawViewMetadata.config?.parameters) {
72
+
73
+ if (
74
+ this.rawViewMetadata.config?.parameters &&
75
+ !this.isDDSourceDeferred &&
76
+ ['Checkbox', 'Dropdown', 'RadioButtons'].includes(this.firstChildMeta?.type)
77
+ ) {
51
78
  const { value, key, text } = this.firstChildMeta.config.datasource.fields;
52
- PCore.getDataApiUtils()
53
- .getData(
54
- this.refList,
55
- {
79
+
80
+ if (this.firstChildMeta.config.variant !== 'card' || this.firstChildMeta.config.variant === 'card') {
81
+ PCore.getDataApiUtils()
82
+ .getData(this.refList, {
56
83
  dataViewParameters: this.parameters
57
- },
58
- ''
59
- )
60
- .then(res => {
61
- if (res.data.data !== null) {
62
- const ddDataSource = res.data.data
63
- .map(listItem => ({
64
- key: listItem[key.split(' .', 2)[1]],
65
- text: listItem[text.split(' .', 2)[1]],
66
- value: listItem[value.split(' .', 2)[1]]
67
- }))
68
- .filter(item => item.key);
69
- // Filtering out undefined entries that will break preview
70
- this.dropDownDataSource = ddDataSource;
71
- this.updateSelf();
72
- } else {
73
- const ddDataSource: any = [];
74
- this.dropDownDataSource = ddDataSource;
75
- }
76
- })
77
- .catch(() => {
78
- return Promise.resolve({
79
- data: { data: [] }
84
+ })
85
+ .then(res => {
86
+ if (res.data.data !== null) {
87
+ const ddDataSource = this.firstChildMeta.config.datasource.filterDownloadedFields
88
+ ? res.data.data
89
+ : res.data.data
90
+ .map(listItem => ({
91
+ key: listItem[key.split(' .', 2)[1]],
92
+ text: listItem[text.split(' .', 2)[1]],
93
+ value: listItem[value.split(' .', 2)[1]]
94
+ }))
95
+ .filter(item => item.key); // Filtering out undefined entries
96
+ this.dropDownDataSource = ddDataSource;
97
+ this.updateSelf();
98
+ } else {
99
+ const ddDataSource: any = [];
100
+ this.dropDownDataSource = ddDataSource;
101
+ }
102
+ })
103
+ .catch(err => {
104
+ console.error(err?.stack);
105
+ return Promise.resolve({
106
+ data: { data: [] }
107
+ });
80
108
  });
81
- });
109
+ }
82
110
  }
83
111
  }
84
112
 
@@ -105,47 +133,59 @@ export class DataReferenceComponent implements OnInit, OnDestroy {
105
133
  const theConfigProps = this.pConn$.getConfigProps();
106
134
  this.updatePropertiesFromProps(theConfigProps);
107
135
 
108
- const displayAs = theConfigProps.displayAs;
109
- const displayMode = theConfigProps.displayMode;
136
+ const { displayAs, displayMode } = theConfigProps;
110
137
  this.rawViewMetadata = this.pConn$.getRawMetadata();
111
138
  this.viewName = this.rawViewMetadata.name;
112
139
  this.firstChildMeta = this.rawViewMetadata.children[0];
113
140
  this.refList = this.rawViewMetadata.config.referenceList;
114
- this.canBeChangedInReviewMode = theConfigProps.allowAndPersistChangesInReviewMode && (displayAs === 'autocomplete' || displayAs === 'dropdown');
115
- // this.childrenToRender = this.children;
141
+ this.dataRelationshipContext =
142
+ this.rawViewMetadata.config.contextClass && this.rawViewMetadata.config.name ? this.rawViewMetadata.config.name : null;
143
+ this.canBeChangedInReviewMode = theConfigProps.allowAndPersistChangesInReviewMode && ['autocomplete', 'dropdown'].includes(displayAs);
116
144
  this.isDisplayModeEnabled = ['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(displayMode);
145
+ this.refFieldMetadata = this.pConn$.getFieldMetadata(this.rawViewMetadata?.config?.authorContext);
146
+ this.pyID = getMappedKey('pyID');
147
+ // @ts-ignore
148
+ const { allowImplicitRefresh } = PCore.getFieldDefaultUtils().fieldDefaults?.DataReference || {};
117
149
 
118
- if (this.firstChildMeta?.type !== 'Region') {
119
- this.firstChildPConnect = this.pConn$.getChildren()[0].getPConnect;
150
+ this.allowImplicitRefresh = allowImplicitRefresh;
151
+ this.isDDSourceDeferred =
152
+ (this.firstChildMeta?.type === 'Dropdown' && this.selectionMode === SELECTION_MODE.SINGLE && this.refFieldMetadata?.descriptors) ||
153
+ this.firstChildMeta.config.deferDatasource;
120
154
 
121
- /* remove refresh When condition from those old view so that it will not be used for runtime */
122
- if (this.firstChildMeta.config?.readOnly) {
123
- delete this.firstChildMeta.config.readOnly;
124
- }
125
- if (this.firstChildMeta?.type === 'Dropdown') {
126
- this.firstChildMeta.config.datasource.source = this.rawViewMetadata.config?.parameters
127
- ? this.dropDownDataSource
128
- : '@DATASOURCE '.concat(this.refList).concat('.pxResults');
129
- } else if (this.firstChildMeta?.type === 'AutoComplete') {
130
- this.firstChildMeta.config.datasource = this.refList;
131
-
132
- /* Insert the parameters to the component only if present */
133
- if (this.rawViewMetadata.config?.parameters) {
134
- this.firstChildMeta.config.parameters = this.parameters;
135
- }
136
- }
137
- // set displayMode conditionally
138
- if (!this.canBeChangedInReviewMode) {
139
- this.firstChildMeta.config.displayMode = displayMode;
140
- }
141
- if (this.firstChildMeta.type === 'SimpleTableSelect' && this.selectionMode === SELECTION_MODE.MULTI) {
142
- this.propName = PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.selectionList);
143
- } else {
144
- this.propName = PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.value);
145
- }
155
+ if (this.firstChildMeta?.type === 'Region') {
156
+ return;
157
+ }
158
+
159
+ this.firstChildPConnect = this.pConn$.getChildren()[0].getPConnect;
146
160
 
147
- this.generateChildrenToRender();
161
+ /* remove refresh When condition from those old view so that it will not be used for runtime */
162
+ if (this.firstChildMeta.config?.readOnly) {
163
+ delete this.firstChildMeta.config.readOnly;
164
+ }
165
+ if (this.firstChildMeta?.type === 'Dropdown') {
166
+ this.firstChildMeta.config.datasource.source = this.rawViewMetadata.config?.parameters
167
+ ? this.dropDownDataSource
168
+ : '@DATASOURCE '.concat(this.refList).concat('.pxResults');
169
+ } else if (this.firstChildMeta?.type === 'AutoComplete') {
170
+ this.firstChildMeta.config.datasource = this.refList;
171
+
172
+ /* Insert the parameters to the component only if present */
173
+ if (this.rawViewMetadata.config?.parameters) {
174
+ this.firstChildMeta.config.parameters = this.parameters;
175
+ }
176
+ }
177
+ // set displayMode conditionally
178
+ if (!this.canBeChangedInReviewMode) {
179
+ this.firstChildMeta.config.displayMode = displayMode;
180
+ }
181
+ if (this.firstChildMeta.type === 'SimpleTableSelect' && this.selectionMode === SELECTION_MODE.MULTI) {
182
+ this.propName = PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.selectionList);
183
+ } else {
184
+ this.propName = PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.value);
148
185
  }
186
+
187
+ this.generateChildrenToRender();
188
+ this.displayChild = !(this.displaySingleRef || this.displayMultiRef);
149
189
  }
150
190
 
151
191
  updatePropertiesFromProps(theConfigProps) {
@@ -155,38 +195,81 @@ export class DataReferenceComponent implements OnInit, OnDestroy {
155
195
  this.selectionMode = theConfigProps.selectionMode;
156
196
  this.parameters = theConfigProps.parameters;
157
197
  this.hideLabel = theConfigProps.hideLabel;
158
-
198
+ this.displayAs = theConfigProps.displayAs;
199
+ this.showPromotedFilters = theConfigProps.showPromotedFilters;
200
+ this.displayMode = theConfigProps.displayMode;
159
201
  this.propsToUse = { label, showLabel, ...this.pConn$.getInheritedProps() };
202
+ this.contextClass = theConfigProps.contextClass;
203
+ this.selectionList = theConfigProps.selectionList;
204
+ this.inline = theConfigProps.inline;
205
+ this.isCreationOfNewRecordAllowedForReference = theConfigProps.isCreationOfNewRecordAllowedForReference;
160
206
  if (this.propsToUse.showLabel === false) {
161
207
  this.propsToUse.label = '';
162
208
  }
209
+ this.imagePosition = theConfigProps.imagePosition;
210
+ this.showImageDescription = theConfigProps.showImageDescription;
163
211
  }
164
212
 
165
213
  generateChildrenToRender() {
166
214
  const theRecreatedFirstChild = this.recreatedFirstChild();
167
- const viewsRegion = this.rawViewMetadata.children[1];
168
- if (viewsRegion?.name === 'Views' && viewsRegion.children.length) {
169
- this.childrenToRender = [theRecreatedFirstChild, ...this.children.slice(1)];
170
- } else {
215
+ if (this.firstChildMeta?.type !== 'Region') {
216
+ const viewsRegion = this.rawViewMetadata.children[1];
217
+
218
+ if (viewsRegion?.name === 'Views' && viewsRegion.children.length) {
219
+ viewsRegion.children.map(child => {
220
+ child.config.isEmbeddedInDataReference = true;
221
+ return child;
222
+ });
223
+ this.childrenToRender = [theRecreatedFirstChild, ...this.children.slice(1)];
224
+ } else {
225
+ this.childrenToRender = [theRecreatedFirstChild];
226
+ }
227
+ } else if (this.displayAs === 'advancedSearch') {
171
228
  this.childrenToRender = [theRecreatedFirstChild];
172
229
  }
230
+
231
+ // Render
232
+ if (this.childrenToRender.length === 1) {
233
+ return this.childrenToRender[0] ?? null;
234
+ }
173
235
  }
174
236
 
175
237
  handleSelection(event) {
176
238
  const caseKey = this.pConn$.getCaseInfo().getKey();
177
- const refreshOptions = { autoDetectRefresh: true };
178
- if (this.canBeChangedInReviewMode && this.pConn$.getValue('__currentPageTabViewName')) {
179
- this.pConn$.getActionsApi().refreshCaseView(caseKey, this.pConn$.getValue('__currentPageTabViewName'), '', refreshOptions);
180
- PCore.getDeferLoadManager().refreshActiveComponents(this.pConn$.getContextName());
181
- } else {
182
- const pgRef = this.pConn$.getPageReference().replace('caseInfo.content', '');
183
- this.pConn$.getActionsApi().refreshCaseView(caseKey, this.viewName, pgRef, refreshOptions);
239
+ const refreshOptions: any = { autoDetectRefresh: true, propertyName: '' };
240
+
241
+ if ((this.pConn$?.getRawMetadata()?.children as Array<any>)?.length > 0 && this.pConn$?.getRawMetadata()?.children?.[0].config?.value) {
242
+ refreshOptions.propertyName = this.pConn$?.getRawMetadata()?.children?.[0].config.value;
243
+ refreshOptions.classID = (this.pConn$.getRawMetadata() as any).classID;
184
244
  }
185
245
 
186
- // AutoComplete sets value on event.id whereas Dropdown sets it on event.target.value
246
+ // AutoComplete sets value on event.id whereas Dropdown sets it on event.target.value if event.id is unset
247
+ // When value is empty propValue will be undefined here and no value will be set for the reference
187
248
  const propValue = event?.id || event?.target?.value;
188
- if (propValue && this.canBeChangedInReviewMode && this.isDisplayModeEnabled) {
189
- PCore.getDataApiUtils()
249
+ const propName =
250
+ this.firstChildMeta.type === 'SimpleTableSelect' && this.selectionMode === SELECTION_MODE.MULTI
251
+ ? PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.selectionList)
252
+ : PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.value);
253
+
254
+ const hasAssociatedViewConfigured = this.rawViewMetadata.children[1].children?.length;
255
+
256
+ if (this.pConn$.getContextName().includes('modal') || this.pConn$.getContextName().includes('workarea')) {
257
+ if (hasAssociatedViewConfigured || this.allowImplicitRefresh) {
258
+ const pageReference = this.pConn$.getPageReference();
259
+ let pgRef: any = null;
260
+ if (pageReference.startsWith('objectInfo')) {
261
+ pgRef = pageReference.replace('objectInfo.content', '');
262
+ } else {
263
+ pgRef = pageReference.replace('caseInfo.content', '');
264
+ }
265
+ const viewName = this.rawViewMetadata.name;
266
+ this.pConn$
267
+ .getActionsApi()
268
+ .refreshCaseView(caseKey, viewName, pgRef, refreshOptions)
269
+ .catch(() => {});
270
+ }
271
+ } else if (propValue && this.canBeChangedInReviewMode && this.isDisplayModeEnabled) {
272
+ PCore.getCaseUtils()
190
273
  .getCaseEditLock(caseKey, '')
191
274
  .then(caseResponse => {
192
275
  const pageTokens = this.pConn$.getPageReference().replace('caseInfo.content', '').split('.');
@@ -201,7 +284,7 @@ export class DataReferenceComponent implements OnInit, OnDestroy {
201
284
  });
202
285
 
203
286
  // expecting format like {Customer: {pyID:"C-100"}}
204
- const propArr = this.propName.split('.');
287
+ const propArr = propName.split('.');
205
288
  propArr.forEach((element, idx) => {
206
289
  if (idx + 1 === propArr.length) {
207
290
  curr[element] = propValue;
@@ -221,49 +304,199 @@ export class DataReferenceComponent implements OnInit, OnDestroy {
221
304
  }
222
305
  }
223
306
 
224
- // Re-create first child with overridden props
225
- // Memoized child in order to stop unmount and remount of the child component when data reference
226
- // rerenders without any actual change
227
307
  recreatedFirstChild() {
228
- const { type, config } = this.firstChildMeta;
229
- if (this.firstChildMeta?.type !== 'Region') {
230
- this.pConn$.clearErrorMessages({
231
- property: this.propName,
232
- category: '',
233
- context: ''
308
+ if (this.firstChildMeta?.type === 'Region' && this.displayAs !== 'advancedSearch') {
309
+ return;
310
+ }
311
+ const { type } = this.firstChildMeta;
312
+ this.firstChildPConnect = this.pConn$.getChildren()[0].getPConnect;
313
+
314
+ this.setReadOnlyDisplayFlags();
315
+
316
+ if (type === 'Dropdown' && this.dropDownDataSource === null && !this.isDDSourceDeferred && this.rawViewMetadata.config?.parameters) {
317
+ return null;
318
+ }
319
+
320
+ this.prepareFirstChildMeta();
321
+
322
+ const dataReferenceConfigToChild = this.buildDataReferenceConfig();
323
+ const { disableStartingFieldsForReference = false } = PCore.getEnvironmentInfo().environmentInfoObject?.features?.form || ({} as any);
324
+
325
+ if (this.displayAs === 'advancedSearch') {
326
+ this.showAdvancedSearch = true;
327
+ const searchSelectCacheKey = componentCachePersistUtils.getComponentStateKey(this.pConn$, this.rawViewMetadata.config.name);
328
+ this.advancedSearchService.setConfig({
329
+ dataReferenceConfigToChild,
330
+ isCreateNewReferenceEnabled: !!dataReferenceConfigToChild.createNewRecord,
331
+ disableStartingFieldsForReference,
332
+ pyID: this.pyID,
333
+ searchSelectCacheKey
234
334
  });
235
- if (!this.canBeChangedInReviewMode && this.isDisplayModeEnabled && this.selectionMode === SELECTION_MODE.SINGLE) {
236
- this.displaySingleRef = true;
335
+ return;
336
+ }
337
+
338
+ return this.firstChildPConnect().createComponent({
339
+ type,
340
+ config: {
341
+ ...getFirstChildConfig({
342
+ firstChildMeta: this.firstChildMeta,
343
+ getPConnect: this.pConn$,
344
+ rawViewMetadata: this.rawViewMetadata,
345
+ contextClass: this.contextClass,
346
+ dataReferenceConfigToChild,
347
+ isCreateNewReferenceEnabled: !!dataReferenceConfigToChild.createNewRecord,
348
+ disableStartingFieldsForReference,
349
+ pyID: this.pyID
350
+ })
237
351
  }
352
+ });
353
+ }
354
+
355
+ private setReadOnlyDisplayFlags() {
356
+ const isSingleMode = this.selectionMode === SELECTION_MODE.SINGLE;
357
+ const isMultiMode = this.selectionMode === SELECTION_MODE.MULTI;
358
+
359
+ if (isSingleMode && (this.displayAs === 'readonly' || this.isDisplayModeEnabled) && !this.canBeChangedInReviewMode) {
360
+ this.displaySingleRef = true;
361
+ }
362
+
363
+ if (isMultiMode && (['readonly', 'readonlyMulti', 'map'].includes(this.displayAs) || this.isDisplayModeEnabled)) {
364
+ this.displayMultiRef = true;
365
+ }
366
+ }
367
+
368
+ private prepareFirstChildMeta() {
369
+ // Cleanup
370
+ if (this.firstChildMeta.config?.readOnly) {
371
+ delete this.firstChildMeta.config.readOnly;
372
+ }
373
+
374
+ // Set datasource
375
+ this.setChildDatasource();
238
376
 
239
- if (this.isDisplayModeEnabled && this.selectionMode === SELECTION_MODE.MULTI) {
240
- this.displayMultiRef = true;
377
+ // Pass through configs
378
+ if (this.firstChildMeta.config) {
379
+ this.firstChildMeta.config.showPromotedFilters = this.showPromotedFilters;
380
+ if (!this.canBeChangedInReviewMode) {
381
+ this.firstChildMeta.config.displayMode = this.displayMode;
241
382
  }
383
+ }
384
+ }
385
+
386
+ private setChildDatasource() {
387
+ const { type, config } = this.firstChildMeta;
388
+
389
+ if (['Dropdown', 'Checkbox', 'RadioButtons'].includes(type) && !config.deferDatasource && config.datasource) {
390
+ const isCardVariant = config.variant === 'card';
391
+ const hasParameters = this.rawViewMetadata.config?.parameters;
392
+ // @ts-ignore
393
+ const isDeferDataPageCallEnabled = isCardVariant && hasParameters && !this.firstChildPConnect()?.getSharedDataPageForReferenceList();
394
+
395
+ const useDropDownDataSource = (isCardVariant && (this.dropDownDataSource || isDeferDataPageCallEnabled)) || (!isCardVariant && hasParameters);
242
396
 
243
- // In the case of a datasource with parameters you cannot load the dropdown before the parameters
244
- if (type === 'Dropdown' && this.rawViewMetadata.config?.parameters && this.dropDownDataSource === null) {
245
- return null;
397
+ config.datasource.source = useDropDownDataSource ? this.dropDownDataSource : `@DATASOURCE ${this.refList}.pxResults`;
398
+ if (isCardVariant) {
399
+ config.imagePosition = this.imagePosition;
400
+ config.showImageDescription = this.showImageDescription;
246
401
  }
402
+ } else if (type === 'AutoComplete') {
403
+ config.datasource = this.refList;
404
+ if (this.rawViewMetadata.config?.parameters) {
405
+ config.parameters = this.parameters;
406
+ }
407
+ }
408
+ }
247
409
 
248
- return this.firstChildPConnect().createComponent({
249
- type,
250
- config: {
251
- ...config,
252
- required: this.propsToUse.required,
253
- visibility: this.propsToUse.visibility,
254
- disabled: this.propsToUse.disabled,
255
- label: this.propsToUse.label,
256
- viewName: this.pConn$.getCurrentView(),
257
- parameters: this.rawViewMetadata.config.parameters,
258
- readOnly: false,
259
- localeReference: this.rawViewMetadata.config.localeReference,
260
- ...(this.selectionMode === SELECTION_MODE.SINGLE ? { referenceType: this.referenceType } : ''),
261
- dataRelationshipContext:
262
- this.rawViewMetadata.config.contextClass && this.rawViewMetadata.config.name ? this.rawViewMetadata.config.name : null,
263
- hideLabel: this.hideLabel,
264
- onRecordChange: this.handleSelection.bind(this)
410
+ private buildDataReferenceConfig() {
411
+ const fieldMetaData = this.buildFieldMetaData();
412
+ const isCreateNewReferenceEnabled = this.isCreateNewRecordEnabled();
413
+
414
+ const config: any = {
415
+ selectionMode: this.selectionMode,
416
+ additionalInfo: this.refFieldMetadata?.additionalInformation ? { content: this.refFieldMetadata.additionalInformation } : undefined,
417
+ descriptors: this.selectionMode === SELECTION_MODE.SINGLE ? this.refFieldMetadata?.descriptors : null,
418
+ datasourceMetadata: fieldMetaData?.datasourceMetadata,
419
+ required: this.propsToUse.required,
420
+ visibility: this.propsToUse.visibility,
421
+ disabled: this.propsToUse.disabled,
422
+ label: this.propsToUse.label,
423
+ displayAs: this.displayAs,
424
+ readOnly: false,
425
+ dataRelationshipContext: this.dataRelationshipContext,
426
+ hideLabel: this.hideLabel,
427
+ onRecordChange: this.handleSelection.bind(this),
428
+ createNewRecord: isCreateNewReferenceEnabled ? this.getCreateNewRecordFn() : undefined,
429
+ inline: this.inline
430
+ };
431
+
432
+ if (this.selectionMode === SELECTION_MODE.SINGLE) {
433
+ config.referenceType = this.referenceType;
434
+ if (this.displayAs === 'advancedSearch') {
435
+ config.value = this.rawViewMetadata.config.value;
436
+ config.contextPage = this.rawViewMetadata.config.contextPage;
437
+ }
438
+ } else if (this.displayAs === 'advancedSearch') {
439
+ config.selectionList = this.selectionList;
440
+ config.readonlyContextList = this.rawViewMetadata.config.readonlyContextList;
441
+ }
442
+
443
+ return config;
444
+ }
445
+
446
+ private buildFieldMetaData() {
447
+ if (!this.isDDSourceDeferred || this.firstChildMeta.config.deferDatasource) {
448
+ return null;
449
+ }
450
+
451
+ const { text, value } = this.firstChildMeta?.config?.datasource?.fields || {};
452
+ const getProp = (prop: string) => (prop?.startsWith('@P') ? prop.substring(3) : prop);
453
+
454
+ const fieldMetaData = {
455
+ datasourceMetadata: {
456
+ ...this.refFieldMetadata,
457
+ datasource: {
458
+ name: this.rawViewMetadata.config?.referenceList,
459
+ propertyForDisplayText: getProp(text),
460
+ propertyForValue: getProp(value)
265
461
  }
266
- });
462
+ }
463
+ };
464
+
465
+ if (this.rawViewMetadata.config?.parameters) {
466
+ fieldMetaData.datasourceMetadata.datasource['parameters'] = this.parameters;
267
467
  }
468
+
469
+ return fieldMetaData;
470
+ }
471
+
472
+ private isCreateNewRecordEnabled() {
473
+ const { features } = (PCore.getEnvironmentInfo().environmentInfoObject || {}) as any;
474
+ const isEnvLP = features?.form;
475
+ const isCreateNewRefEnabledInAuthoring = this.isCreationOfNewRecordAllowedForReference ?? isEnvLP?.isCreateNewReferenceEnabled;
476
+ const isCaseRef = this.referenceType === 'Case' || this.firstChildMeta?.config?.referenceType === 'Case';
477
+ const hasAccess = PCore.getAccessPrivilege().hasCreateAccess(this.contextClass);
478
+ const isCreateNewRefEnabledForUser = isEnvLP ? isEnvLP.isCreateNewReferenceEnabled && hasAccess : isCaseRef;
479
+
480
+ return isCreateNewRefEnabledInAuthoring && isCreateNewRefEnabledForUser;
481
+ }
482
+
483
+ private getCreateNewRecordFn() {
484
+ const { disableStartingFieldsForReference = false } = PCore.getEnvironmentInfo().environmentInfoObject?.features?.form || ({} as any);
485
+ const isCaseRef = this.referenceType === 'Case' || this.firstChildMeta?.config?.referenceType === 'Case';
486
+
487
+ return () => {
488
+ if (isCaseRef) {
489
+ const startingFields: any = {};
490
+ if (!disableStartingFieldsForReference) {
491
+ startingFields.pyAddCaseContextPage = { pyID: this.pConn$.getCaseInfo().getKey()?.split(' ')?.pop() };
492
+ }
493
+ return this.pConn$.getActionsApi().createWork(this.contextClass, {
494
+ openCaseViewAfterCreate: false,
495
+ startingFields
496
+ });
497
+ }
498
+ // Assumes Data reference type otherwise
499
+ return getPConnect().getActionsApi().showDataObjectCreateView(this.contextClass);
500
+ };
268
501
  }
269
502
  }
@@ -0,0 +1,39 @@
1
+ <div class="search-form" style="display: flex; flex-direction: column">
2
+ <h5>{{ propsToUse.label }}</h5>
3
+ <div *ngIf="searchCategoriesComp === 'dropdown'">
4
+ <mat-form-field class="psdk-full-width">
5
+ <mat-select [value]="currentTabId" (selectionChange)="handleTabClick($event.value)">
6
+ <mat-option *ngFor="let tab of tabItems" [value]="tab.id">{{ tab.name }}</mat-option>
7
+ </mat-select>
8
+ </mat-form-field>
9
+ </div>
10
+ <div *ngIf="searchCategoriesComp === 'radio'">
11
+ <mat-radio-group [value]="currentTabId">
12
+ <mat-radio-button *ngFor="let tab of tabItems" [value]="tab.id" (click)="handleTabClick($event)">{{ tab.name }}</mat-radio-button>
13
+ </mat-radio-group>
14
+ </div>
15
+
16
+ <!-- Tab Content -->
17
+ <div>
18
+ <div *ngFor="let tab of tabItems; let index = index">
19
+ <div *ngIf="tab.id === currentTabId" class="psdk-sub-tabs">
20
+ <component-mapper
21
+ *ngIf="tab.content?.getPConnect() as tabPConn"
22
+ [name]="tabPConn.getComponentName()"
23
+ [props]="{ pConn$: tabPConn, formGroup$ }"
24
+ ></component-mapper>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ <!-- Dialog -->
29
+ <ng-template #dialogTemplate>
30
+ <h2 mat-dialog-title>Discard selections?</h2>
31
+ <mat-dialog-content>
32
+ <p>When changing search categories, any previous selections will be lost.</p>
33
+ </mat-dialog-content>
34
+ <mat-dialog-actions>
35
+ <button mat-stroked-button type="button" (click)="onDialogClose()">Go back</button>
36
+ <button mat-raised-button color="primary" (click)="clearSelectionAndSwitchTab()">Discard</button>
37
+ </mat-dialog-actions>
38
+ </ng-template>
39
+ </div>
@@ -0,0 +1,11 @@
1
+ .psdk-full-width {
2
+ width: 100%;
3
+ }
4
+
5
+ ::ng-deep {
6
+ mat-tab-group {
7
+ .mat-mdc-tab-header .mat-mdc-tab-label-container .mat-mdc-tab-list {
8
+ display: none;
9
+ }
10
+ }
11
+ }