@pega/angular-sdk-overrides 24.2.12 → 25.1.11

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 +19 -10
  39. package/lib/field/check-box/check-box.component.scss +6 -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 +46 -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
@@ -1,4 +1,5 @@
1
1
  import { Component, OnInit, Input, ViewChild, forwardRef, OnDestroy } from '@angular/core';
2
+ import { SelectionModel } from '@angular/cdk/collections';
2
3
  import { CommonModule } from '@angular/common';
3
4
  import { MatDatepickerModule } from '@angular/material/datepicker';
4
5
  import { MatOptionModule } from '@angular/material/core';
@@ -42,6 +43,10 @@ interface ListViewProps {
42
43
  value: any;
43
44
  readonlyContextList: any;
44
45
  label?: string;
46
+ displayAs?: string;
47
+ showRecords: boolean;
48
+ viewName?: string;
49
+ localeReference?: any;
45
50
  }
46
51
 
47
52
  export class Group {
@@ -58,7 +63,6 @@ export class Group {
58
63
  selector: 'app-list-view',
59
64
  templateUrl: './list-view.component.html',
60
65
  styleUrls: ['./list-view.component.scss'],
61
- standalone: true,
62
66
  imports: [
63
67
  CommonModule,
64
68
  MatFormFieldModule,
@@ -89,6 +93,7 @@ export class ListViewComponent implements OnInit, OnDestroy {
89
93
  @Input() payload;
90
94
 
91
95
  repeatList$: MatTableDataSource<any>;
96
+ selection = new SelectionModel<any>(true, []);
92
97
  fields$: any[];
93
98
 
94
99
  displayedColumns$ = Array<any>();
@@ -156,11 +161,13 @@ export class ListViewComponent implements OnInit, OnDestroy {
156
161
  query: any = null;
157
162
  paging: any;
158
163
  fieldDefs: any;
159
- xRayApis = PCore.getDebugger().getXRayRuntime();
160
- xRayUid = this.xRayApis.startXRay();
161
164
  checkBoxValue: string;
162
165
  label?: string = '';
163
-
166
+ uniqueId = crypto.randomUUID();
167
+ displayAs: any;
168
+ showRecords: any;
169
+ identifier: string;
170
+ promotedFiltersId: string;
164
171
  constructor(
165
172
  private psService: ProgressSpinnerService,
166
173
  public utils: Utils
@@ -172,12 +179,13 @@ export class ListViewComponent implements OnInit, OnDestroy {
172
179
  const defRowID = this.configProps$?.referenceType === 'Case' ? 'pyID' : 'pyGUID';
173
180
  /** If compositeKeys is defined, use dynamic value, else fallback to pyID or pyGUID. */
174
181
  this.compositeKeys = this.configProps$?.compositeKeys;
175
- this.rowID = this.compositeKeys && this.compositeKeys?.length === 1 ? this.compositeKeys[0] : defRowID;
182
+ this.rowID = this.payload?.compositeKeys?.length === 1 ? this.payload?.compositeKeys[0] : defRowID;
176
183
  this.bShowSearch$ = this.utils.getBooleanValue(this.configProps$?.globalSearch ? this.configProps$.globalSearch : this.payload?.globalSearch);
177
184
  this.bColumnReorder$ = this.utils.getBooleanValue(this.configProps$.reorderFields);
178
185
  this.bGrouping$ = this.utils.getBooleanValue(this.configProps$.grouping);
179
186
  this.showDynamicFields = this.configProps$?.showDynamicFields;
180
-
187
+ this.displayAs = this.configProps$.displayAs;
188
+ this.showRecords = this.configProps$.showRecords;
181
189
  this.menuSvgIcon$ = this.utils.getImageSrc('more', this.utils.getSDKStaticContentUrl());
182
190
  this.arrowDownSvgIcon$ = this.utils.getImageSrc('arrow-down', this.utils.getSDKStaticContentUrl());
183
191
  this.arrowUpSvgIcon$ = this.utils.getImageSrc('arrow-up', this.utils.getSDKStaticContentUrl());
@@ -206,6 +214,7 @@ export class ListViewComponent implements OnInit, OnDestroy {
206
214
  this.label = title;
207
215
 
208
216
  this.searchIcon$ = this.utils.getImageSrc('search', this.utils.getSDKStaticContentUrl());
217
+ this.promotedFiltersId = `promoted-filters-queryable-${this.uniqueId}`;
209
218
  setTimeout(() => {
210
219
  PCore.getPubSubUtils().subscribe(
211
220
  PCore.getConstants().PUB_SUB_EVENTS.EVENT_DASHBOARD_FILTER_CHANGE,
@@ -226,6 +235,15 @@ export class ListViewComponent implements OnInit, OnDestroy {
226
235
  false,
227
236
  this.pConn$.getContextName()
228
237
  );
238
+ PCore.getPubSubUtils().subscribe(
239
+ PCore.getEvents().getTransientEvent().UPDATE_PROMOTED_FILTERS,
240
+ data => {
241
+ this.showRecords = data.showRecords;
242
+ const filterData = this.prepareFilters(data);
243
+ this.processFilterChange(filterData);
244
+ },
245
+ this.promotedFiltersId
246
+ );
229
247
  }, 0);
230
248
  if (this.configProps$) {
231
249
  if (!this.payload) {
@@ -238,7 +256,6 @@ export class ListViewComponent implements OnInit, OnDestroy {
238
256
  listContext: this.listContext,
239
257
  ref: this.ref,
240
258
  showDynamicFields: this.showDynamicFields,
241
- xRayUid: this.xRayUid,
242
259
  cosmosTableRef: this.cosmosTableRef,
243
260
  selectionMode: this.selectionMode
244
261
  }).then(response => {
@@ -246,6 +263,29 @@ export class ListViewComponent implements OnInit, OnDestroy {
246
263
  this.getListData();
247
264
  });
248
265
  }
266
+ this.clearSelectionsAndUpdateTable(this.pConn$, this.uniqueId, this.configProps$?.viewName);
267
+ }
268
+
269
+ clearSelectionsAndUpdateTable(getPConnect: any, uniqueId: string, viewName): void {
270
+ const clearSelectionsAndRefreshList = ({ viewName: name, clearSelections }: any) => {
271
+ if (name === viewName) {
272
+ const { selectionMode } = getPConnect.getRawConfigProps();
273
+ if (!selectionMode) {
274
+ return;
275
+ }
276
+ if (clearSelections) {
277
+ if (selectionMode === 'single') {
278
+ getPConnect.getListActions().setSelectedRows({});
279
+ } else {
280
+ getPConnect.getListActions().clearSelectedRows();
281
+ }
282
+ }
283
+ }
284
+ };
285
+
286
+ this.identifier = `clear-and-update-advanced-search-selections-${uniqueId}`;
287
+
288
+ PCore.getPubSubUtils().subscribe('update-advanced-search-selections', clearSelectionsAndRefreshList, this.identifier);
249
289
  }
250
290
 
251
291
  getFieldFromFilter(filter, dateRange = false) {
@@ -260,82 +300,22 @@ export class ListViewComponent implements OnInit, OnDestroy {
260
300
 
261
301
  // Will be triggered when EVENT_DASHBOARD_FILTER_CHANGE fires
262
302
  processFilterChange(data) {
263
- const { filterId, filterExpression } = data;
264
- let dashboardFilterPayload: any = {
265
- query: {
266
- filter: {},
267
- select: []
268
- }
269
- };
270
-
271
- this.filters[filterId] = filterExpression;
272
- let isDateRange = !!data.filterExpression?.AND;
273
- // Will be AND by default but making it dynamic in case we support dynamic relational ops in future
274
- const relationalOp = 'AND';
275
-
276
- let field = this.getFieldFromFilter(filterExpression, isDateRange);
277
- const selectParam: any[] = [];
278
- // Constructing the select parameters list (will be sent in dashboardFilterPayload)
279
- this.displayedColumns$?.forEach(col => {
280
- selectParam.push({
281
- field: col
282
- });
283
- });
284
-
285
- // Checking if the triggered filter is applicable for this list
286
- if (data.filterExpression !== null && !(this.displayedColumns$?.length && this.displayedColumns$?.includes(field))) {
287
- return;
288
- }
289
- // This is a flag which will be used to reset dashboardFilterPayload in case we don't find any valid filters
290
- let validFilter = false;
291
-
292
- let index = 1;
293
- // Iterating over the current filters list to create filter data which will be POSTed
294
- const filterKeys: any[] = Object.keys(this.filters);
295
- const filterValues: any[] = Object.values(this.filters);
296
- for (let filterIndex = 0; filterIndex < filterKeys.length; filterIndex++) {
297
- const filter = filterValues[filterIndex];
298
- // If the filter is null then we can skip this iteration
299
- if (filter === null) {
300
- // eslint-disable-next-line no-continue
301
- continue;
302
- }
303
+ this.updateFiltersFromData(data);
303
304
 
304
- // Checking if the filter is of type- Date Range
305
- isDateRange = !!filter?.AND;
306
- field = this.getFieldFromFilter(filter, isDateRange);
305
+ const selectParam = this.displayedColumns$?.map(col => ({ field: col })) || [];
307
306
 
308
- if (!(this.displayedColumns$?.length && this.displayedColumns$?.includes(field))) {
309
- // eslint-disable-next-line no-continue
310
- continue;
311
- }
312
- // If we reach here that implies we've at least one valid filter, hence setting the flag
313
- validFilter = true;
314
- /** Below are the 2 cases for- Text & Date-Range filter types where we'll construct filter data which will be sent in the dashboardFilterPayload
315
- * In Constellation DX Components, through Repeating Structures they might be using several APIs to do it. We're doing it here
316
- */
317
- if (isDateRange) {
318
- dashboardFilterPayload = this.filterBasedOnDateRange(dashboardFilterPayload, filter, relationalOp, selectParam, index);
319
- } else {
320
- dashboardFilterPayload.query.filter.filterConditions = {
321
- ...dashboardFilterPayload.query.filter.filterConditions,
322
- [`T${index++}`]: { ...filter.condition, ignoreCase: true }
323
- };
307
+ if (this.displayAs !== 'advancedSearch') {
308
+ const { filterExpression } = data;
309
+ const isDateRange = !!filterExpression?.AND;
310
+ const field = this.getFieldFromFilter(filterExpression, isDateRange);
324
311
 
325
- if (dashboardFilterPayload.query.filter.logic) {
326
- dashboardFilterPayload.query.filter.logic = `${dashboardFilterPayload.query.filter.logic} ${relationalOp} T${index - 1}`;
327
- } else {
328
- dashboardFilterPayload.query.filter.logic = `T${index - 1}`;
329
- }
330
-
331
- dashboardFilterPayload.query.select = selectParam;
312
+ if (filterExpression !== null && !this.displayedColumns$?.includes(field)) {
313
+ return;
332
314
  }
333
315
  }
334
316
 
335
- // Reset the dashboardFilterPayload if we end up with no valid filters for the list
336
- if (!validFilter) {
337
- dashboardFilterPayload = undefined;
338
- }
317
+ const dashboardFilterPayload = this.buildFilterPayload(selectParam);
318
+
339
319
  this.filterPayload = dashboardFilterPayload;
340
320
  this.getListData();
341
321
  }
@@ -370,10 +350,22 @@ export class ListViewComponent implements OnInit, OnDestroy {
370
350
  return PCore.getAnalyticsUtils().getDataViewMetadata(refList, this.showDynamicFields);
371
351
  }
372
352
 
353
+ getValue(col) {
354
+ return this.fieldDefs.find(f => f.name === col)?.label;
355
+ }
356
+
373
357
  getListData() {
358
+ this.preparePayload();
374
359
  const componentConfig = this.pConn$.getComponentConfig();
375
- if (this.configProps$) {
376
- this.preparePayload();
360
+ const columnFields = componentConfig.presets[0].children[0].children;
361
+ const columns = this.getHeaderCells(columnFields, this.fieldDefs);
362
+ this.fields$ = this.configProps$.presets[0].children[0].children;
363
+ this.displayedColumns$ = columns.map(col => {
364
+ return col.id;
365
+ });
366
+ if (this.displayAs === 'advancedSearch' && !this.showRecords) {
367
+ Promise.resolve({ data: null });
368
+ } else if (this.configProps$) {
377
369
  const refList = this.configProps$.referenceList;
378
370
  const fieldsMetaDataPromise = this.getFieldsMetadata(refList);
379
371
  // returns a promise
@@ -399,17 +391,9 @@ export class ListViewComponent implements OnInit, OnDestroy {
399
391
  const fieldsMetaData = results[0];
400
392
  const workListData = results[1];
401
393
 
402
- this.fields$ = this.configProps$.presets[0].children[0].children;
403
- // this is an unresovled version of this.fields$, need unresolved, so can get the property reference
404
- const columnFields = componentConfig.presets[0].children[0].children;
405
-
406
394
  const tableDataResults = !this.bInForm$ ? workListData.data.data : workListData.data;
407
395
 
408
- const columns = this.getHeaderCells(columnFields, this.fieldDefs);
409
396
  this.fields$ = this.updateFields(this.fields$, fieldsMetaData.data.fields, columns);
410
- this.displayedColumns$ = columns.map(col => {
411
- return col.id;
412
- });
413
397
  this.response = tableDataResults;
414
398
  this.updatedRefList = this.updateData(tableDataResults, this.fields$);
415
399
  if (this.selectionMode === SELECTION_MODE.SINGLE && this.updatedRefList?.length > 0) {
@@ -421,6 +405,14 @@ export class ListViewComponent implements OnInit, OnDestroy {
421
405
  }
422
406
 
423
407
  this.repeatList$ = new MatTableDataSource(this.updatedRefList);
408
+
409
+ if (this.configProps$?.readonlyContextList?.length > 0) {
410
+ const readonlyIds = new Set(this.configProps$.readonlyContextList.map(element => element[this.rowID]));
411
+ const rowsToSelect = this.repeatList$.data.filter(row => readonlyIds.has(row[this.rowID]));
412
+ if (rowsToSelect.length > 0) {
413
+ this.selection.select(...rowsToSelect);
414
+ }
415
+ }
424
416
  this.repeatList$.filterPredicate = this.customFilterPredicate.bind(this);
425
417
 
426
418
  // keeping an original copy to get back after possible sorts, filters and groupBy
@@ -437,6 +429,33 @@ export class ListViewComponent implements OnInit, OnDestroy {
437
429
  }
438
430
  }
439
431
 
432
+ prepareFilters(data) {
433
+ return Object.entries(data.payload).reduce((acc, [field, value]) => {
434
+ if (value) {
435
+ let comparator = 'EQ';
436
+ const filterRecord = this.listContext.meta.fieldDefs.filter(item => item.id === field);
437
+ if (filterRecord?.[0]?.meta.type === 'TextInput') {
438
+ comparator = 'CONTAINS';
439
+ }
440
+ acc[field] = {
441
+ filterExpression: {
442
+ condition: {
443
+ lhs: {
444
+ field
445
+ },
446
+ comparator,
447
+ rhs: {
448
+ value
449
+ }
450
+ }
451
+ },
452
+ filterId: field
453
+ };
454
+ }
455
+ return acc;
456
+ }, {});
457
+ }
458
+
440
459
  preparePayload() {
441
460
  const { fieldDefs, itemKey, patchQueryFields } = this.listContext.meta;
442
461
  this.fieldDefs = fieldDefs;
@@ -478,6 +497,8 @@ export class ListViewComponent implements OnInit, OnDestroy {
478
497
  `dashboard-component-${'id'}`,
479
498
  this.pConn$.getContextName()
480
499
  );
500
+ PCore.getPubSubUtils().unsubscribe('update-advanced-search-selections', this.identifier);
501
+ PCore.getPubSubUtils().unsubscribe(PCore.getEvents().getTransientEvent().UPDATE_PROMOTED_FILTERS, this.promotedFiltersId);
481
502
  }
482
503
 
483
504
  // ngAfterViewInit() {
@@ -496,6 +517,7 @@ export class ListViewComponent implements OnInit, OnDestroy {
496
517
  const arReturn = arFields;
497
518
  arReturn.forEach((field, i) => {
498
519
  field.config = { ...field.config, ...fields[i], name: fields[i].id };
520
+ field.config.label = PCore.getLocaleUtils().getLocaleValue(field.config.label, this.configProps$.localeReference);
499
521
  });
500
522
  return arReturn;
501
523
  }
@@ -521,13 +543,6 @@ export class ListViewComponent implements OnInit, OnDestroy {
521
543
  }
522
544
  }
523
545
 
524
- isChecked(rowIn): any {
525
- const initialVal = false;
526
- return this.configProps$?.readonlyContextList?.reduce((acc, currRow) => {
527
- return acc || rowIn[this.rowID] === currRow[this.rowID];
528
- }, initialVal);
529
- }
530
-
531
546
  fieldOnChange(row) {
532
547
  const value = row[this.rowID];
533
548
  const reqObj = {};
@@ -544,32 +559,31 @@ export class ListViewComponent implements OnInit, OnDestroy {
544
559
  this.pConn$?.getListActions?.()?.setSelectedRows([reqObj]);
545
560
  }
546
561
 
547
- onCheckboxClick(row, event) {
548
- const value = row[this.rowID];
549
- const checked = event?.checked;
550
- const reqObj: any = {};
551
- if (this.compositeKeys?.length > 1) {
552
- const index = this.response.findIndex(element => element[this.rowID] === value);
553
- const selectedRow = this.response[index];
554
- this.compositeKeys.forEach(element => {
555
- reqObj[element] = selectedRow[element];
556
- });
557
- reqObj.$selected = checked;
558
- } else {
559
- reqObj[this.rowID] = value;
560
- reqObj.$selected = checked;
561
- }
562
- this.pConn$?.getListActions()?.setSelectedRows([reqObj]);
562
+ onCheckboxClick(row) {
563
+ this.selection.toggle(row);
564
+ const requiredValue = this.getSelectedValue(row);
565
+ this.pConn$?.getListActions()?.setSelectedRows([requiredValue]);
563
566
  }
564
567
 
565
- // rowClick(row) {
566
- // switch (this.configProps$.rowClickAction) {
567
- // case 'openAssignment':
568
- // this.psService.sendMessage(true);
569
- // this.openAssignment(row);
570
- // break;
571
- // }
572
- // }
568
+ isAllSelected() {
569
+ const numSelected = this.selection.selected.length;
570
+ const numRows = this.repeatList$.data.length;
571
+ return numSelected === numRows;
572
+ }
573
+
574
+ toggleAllRows() {
575
+ if (this.isAllSelected()) {
576
+ this.selection.clear();
577
+ this.pConn$?.getListActions()?.clearSelectedRows();
578
+ return;
579
+ }
580
+ if (this.selection.hasValue() && !this.isAllSelected()) {
581
+ this.pConn$?.getListActions()?.clearSelectedRows();
582
+ }
583
+ this.selection.select(...this.repeatList$.data);
584
+ const requiredValues = this.repeatList$.data.map(row => this.getSelectedValue(row));
585
+ this.pConn$?.getListActions()?.setSelectedRows(requiredValues);
586
+ }
573
587
 
574
588
  _getIconStyle(level): string {
575
589
  let sReturn = '';
@@ -1157,7 +1171,7 @@ export class ListViewComponent implements OnInit, OnDestroy {
1157
1171
  const seen = {};
1158
1172
  return a.filter(item => {
1159
1173
  const k = key(item);
1160
- // eslint-disable-next-line no-return-assign, no-prototype-builtins
1174
+ // eslint-disable-next-line no-prototype-builtins
1161
1175
  return seen.hasOwnProperty(k) ? false : (seen[k] = true);
1162
1176
  });
1163
1177
  }
@@ -1431,4 +1445,78 @@ export class ListViewComponent implements OnInit, OnDestroy {
1431
1445
 
1432
1446
  return select;
1433
1447
  }
1448
+
1449
+ private getSelectedValue(row) {
1450
+ const value = row[this.rowID];
1451
+ const checked = this.selection.isSelected(row);
1452
+ const reqObj: any = {};
1453
+ if (this.compositeKeys?.length > 1) {
1454
+ const index = this.response.findIndex(element => element[this.rowID] === value);
1455
+ const selectedRow = this.response[index];
1456
+ this.compositeKeys.forEach(element => {
1457
+ reqObj[element] = selectedRow[element];
1458
+ });
1459
+ reqObj.$selected = checked;
1460
+ } else {
1461
+ reqObj[this.rowID] = value;
1462
+ reqObj.$selected = checked;
1463
+ }
1464
+ return reqObj;
1465
+ }
1466
+
1467
+ private updateFiltersFromData(data) {
1468
+ if (this.displayAs === 'advancedSearch') {
1469
+ this.filters = {};
1470
+ Object.values(data).forEach((value: any) => {
1471
+ this.filters[value.filterId] = value.filterExpression;
1472
+ });
1473
+ } else {
1474
+ const { filterId, filterExpression } = data;
1475
+ this.filters[filterId] = filterExpression;
1476
+ }
1477
+ }
1478
+
1479
+ private buildFilterPayload(selectParam: any[]) {
1480
+ const filterConditions = {};
1481
+ let logic = '';
1482
+ let index = 1;
1483
+ const relationalOp = 'AND';
1484
+
1485
+ for (const currentFilter of Object.values(this.filters)) {
1486
+ const filter: any = currentFilter;
1487
+ if (!filter) continue;
1488
+
1489
+ const isDateRange = !!filter.AND;
1490
+ const field = this.getFieldFromFilter(filter, isDateRange);
1491
+
1492
+ if (!this.displayedColumns$?.includes(field)) continue;
1493
+
1494
+ if (logic) {
1495
+ logic += ` ${relationalOp} `;
1496
+ }
1497
+
1498
+ if (isDateRange) {
1499
+ const dateRelationalOp = filter.AND ? 'AND' : 'OR';
1500
+ filterConditions[`T${index}`] = { ...filter[relationalOp][0].condition };
1501
+ filterConditions[`T${index + 1}`] = { ...filter[relationalOp][1].condition };
1502
+ logic += `(T${index} ${dateRelationalOp} T${index + 1})`;
1503
+ index += 2;
1504
+ } else {
1505
+ filterConditions[`T${index}`] = { ...filter.condition, ...(filter.condition.comparator === 'CONTAINS' && { ignoreCase: true }) };
1506
+ logic += `T${index}`;
1507
+ index++;
1508
+ }
1509
+ }
1510
+
1511
+ if (!logic) {
1512
+ return undefined;
1513
+ }
1514
+
1515
+ return {
1516
+ query: {
1517
+ filter: { filterConditions, logic },
1518
+ select: selectParam
1519
+ }
1520
+ };
1521
+ }
1434
1522
  }
@@ -12,7 +12,6 @@ export function init(props) {
12
12
  ref,
13
13
  showDynamicFields,
14
14
  isDataObject,
15
- xRayUid,
16
15
  cosmosTableRef
17
16
  } = props;
18
17
  let { editing, selectionMode } = props;
@@ -67,8 +66,7 @@ export function init(props) {
67
66
  pConn$,
68
67
  compositeKeys,
69
68
  isSearchable,
70
- isCacheable: true,
71
- xRayUid
69
+ isCacheable: true
72
70
  }).then(async context => {
73
71
  return readContextResponse(context, {
74
72
  ...props,
@@ -76,7 +74,6 @@ export function init(props) {
76
74
  selectionCountThreshold,
77
75
  ref,
78
76
  selectionMode,
79
- xRayUid,
80
77
  cosmosTableRef
81
78
  });
82
79
  });
@@ -550,6 +550,27 @@ function populateRenderingOptions(name, config, field) {
550
550
  config.cellRenderer = formatConstants.Integer;
551
551
  }
552
552
  }
553
+ function isFLProperty(label) {
554
+ return label?.startsWith('@FL');
555
+ }
556
+
557
+ function getFieldLabel(fieldConfig) {
558
+ const { label, classID, caption } = fieldConfig;
559
+ let fieldLabel = (label ?? caption)?.substring(4);
560
+ const labelSplit = fieldLabel?.split('.');
561
+ const propertyName = labelSplit?.pop();
562
+ const fieldMetaData: any = PCore.getMetadataUtils().getPropertyMetadata(propertyName, classID) ?? {};
563
+ fieldLabel = fieldMetaData.label ?? fieldMetaData.caption ?? propertyName;
564
+
565
+ const definedOnClassID = fieldMetaData.definedOnClassID;
566
+ const localeValue = PCore.getLocaleUtils().getLocaleValue(
567
+ fieldLabel,
568
+ `${definedOnClassID ?? fieldMetaData.classID ?? classID}.${propertyName}`,
569
+ PCore.getLocaleUtils().FIELD_LABELS_BUNDLE_KEY,
570
+ null
571
+ );
572
+ return localeValue || fieldLabel;
573
+ }
553
574
  export function initializeColumns(fields: any[] = [], getMappedProperty: any = null) {
554
575
  return fields.map((field, originalColIndex) => {
555
576
  let name = field.config.value;
@@ -562,7 +583,9 @@ export function initializeColumns(fields: any[] = [], getMappedProperty: any = n
562
583
 
563
584
  let label = field.config.label || field.config.caption;
564
585
  const { show = true, displayAs } = field.config;
565
- if (label.startsWith('@')) {
586
+ if (isFLProperty(label)) {
587
+ label = getFieldLabel(field.config);
588
+ } else if (label.startsWith('@')) {
566
589
  label = label.substring(3);
567
590
  }
568
591
 
@@ -653,7 +676,7 @@ export const readContextResponse = async (context, params) => {
653
676
  const { pConn$, apiContext, children, showDynamicFields, referenceList, isDataObject } = params;
654
677
  // let { listContext } = params;
655
678
  const { promisesResponseArray, apiContext: otherContext } = context;
656
- // eslint-disable-next-line sonarjs/no-unused-collection
679
+
657
680
  const listOfComponents: any[] = [];
658
681
  const {
659
682
  data: { fields: metaFields, classID, isQueryable }
@@ -12,7 +12,6 @@ interface MultiReferenceReadOnlyProps {
12
12
  selector: 'app-multi-reference-readonly',
13
13
  templateUrl: './multi-reference-readonly.component.html',
14
14
  styleUrls: ['./multi-reference-readonly.component.scss'],
15
- standalone: true,
16
15
  imports: [forwardRef(() => ComponentMapperComponent)]
17
16
  })
18
17
  export class MultiReferenceReadonlyComponent implements OnInit, OnDestroy {
@@ -7,7 +7,6 @@ import { ComponentMapperComponent } from '@pega/angular-sdk-components';
7
7
  selector: 'app-narrow-wide-form',
8
8
  templateUrl: './narrow-wide-form.component.html',
9
9
  styleUrls: ['./narrow-wide-form.component.scss'],
10
- standalone: true,
11
10
  imports: [CommonModule, forwardRef(() => ComponentMapperComponent)]
12
11
  })
13
12
  export class NarrowWideFormComponent implements OnInit, OnChanges {
@@ -0,0 +1 @@
1
+ <component-mapper name="CaseView" [props]="{ pConn$, formGroup$ }"></component-mapper>
@@ -0,0 +1,22 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { ObjectPageComponent } from './object-page.component';
4
+
5
+ describe('ObjectPageComponent', () => {
6
+ let component: ObjectPageComponent;
7
+ let fixture: ComponentFixture<ObjectPageComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ imports: [ObjectPageComponent]
12
+ }).compileComponents();
13
+
14
+ fixture = TestBed.createComponent(ObjectPageComponent);
15
+ component = fixture.componentInstance;
16
+ fixture.detectChanges();
17
+ });
18
+
19
+ it('should create', () => {
20
+ expect(component).toBeTruthy();
21
+ });
22
+ });
@@ -0,0 +1,14 @@
1
+ import { Component, forwardRef, Input } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { ComponentMapperComponent } from '@pega/angular-sdk-components';
4
+
5
+ @Component({
6
+ selector: 'lib-object-page',
7
+ imports: [forwardRef(() => ComponentMapperComponent)],
8
+ templateUrl: './object-page.component.html',
9
+ styleUrl: './object-page.component.scss'
10
+ })
11
+ export class ObjectPageComponent {
12
+ @Input() pConn$: typeof PConnect;
13
+ @Input() formGroup$: FormGroup;
14
+ }
@@ -8,7 +8,6 @@ import { FormTemplateBase } from '@pega/angular-sdk-components';
8
8
  selector: 'app-one-column',
9
9
  templateUrl: './one-column.component.html',
10
10
  styleUrls: ['./one-column.component.scss'],
11
- standalone: true,
12
11
  imports: [CommonModule, forwardRef(() => ComponentMapperComponent)]
13
12
  })
14
13
  export class OneColumnComponent extends FormTemplateBase implements OnInit, OnChanges {
@@ -6,7 +6,6 @@ import { ComponentMapperComponent } from '@pega/angular-sdk-components';
6
6
  selector: 'app-one-column-page',
7
7
  templateUrl: './one-column-page.component.html',
8
8
  styleUrls: ['./one-column-page.component.scss'],
9
- standalone: true,
10
9
  imports: [forwardRef(() => ComponentMapperComponent)]
11
10
  })
12
11
  export class OneColumnPageComponent {
@@ -1,5 +1,5 @@
1
1
  .psdk-one-column-tab {
2
- background-color: var(--app-form-color);
2
+ background-color: var(--mat-sys-surface-container);
3
3
  margin-top: 0.5rem;
4
4
  margin-bottom: 0.5rem;
5
5
  border-radius: 0.3125rem;
@@ -7,7 +7,6 @@ import { ComponentMapperComponent } from '@pega/angular-sdk-components';
7
7
  selector: 'app-one-column-tab',
8
8
  templateUrl: './one-column-tab.component.html',
9
9
  styleUrls: ['./one-column-tab.component.scss'],
10
- standalone: true,
11
10
  imports: [CommonModule, forwardRef(() => ComponentMapperComponent)]
12
11
  })
13
12
  export class OneColumnTabComponent implements OnInit, OnChanges {
@@ -14,7 +14,6 @@ interface PageProps {
14
14
  selector: 'app-page',
15
15
  templateUrl: './page.component.html',
16
16
  styleUrls: ['./page.component.scss'],
17
- standalone: true,
18
17
  imports: [CommonModule, forwardRef(() => ComponentMapperComponent)]
19
18
  })
20
19
  export class PageComponent implements OnInit, OnDestroy {
@@ -26,7 +26,6 @@ const SUPPORTED_TYPES_IN_PROMOTED_FILTERS = [
26
26
  selector: 'app-promoted-filters',
27
27
  templateUrl: './promoted-filters.component.html',
28
28
  styleUrls: ['./promoted-filters.component.scss'],
29
- standalone: true,
30
29
  imports: [CommonModule, MatButtonModule, forwardRef(() => ComponentMapperComponent)]
31
30
  })
32
31
  export class PromotedFiltersComponent implements OnInit, OnDestroy {