@pega/angular-sdk-overrides 24.2.10 → 25.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/lib/designSystemExtension/alert/alert.component.scss +3 -3
  2. package/lib/designSystemExtension/alert/alert.component.ts +0 -1
  3. package/lib/designSystemExtension/alert-banner/alert-banner.component.ts +0 -1
  4. package/lib/designSystemExtension/banner/banner.component.html +1 -1
  5. package/lib/designSystemExtension/banner/banner.component.scss +17 -3
  6. package/lib/designSystemExtension/banner/banner.component.ts +0 -1
  7. package/lib/designSystemExtension/case-create-stage/case-create-stage.component.ts +0 -1
  8. package/lib/designSystemExtension/field-group/field-group.component.ts +0 -1
  9. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.html +6 -3
  10. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.scss +5 -34
  11. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.ts +0 -2
  12. package/lib/designSystemExtension/material-details/material-details.component.scss +0 -5
  13. package/lib/designSystemExtension/material-details/material-details.component.ts +0 -1
  14. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +3 -3
  15. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +4 -3
  16. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.ts +6 -1
  17. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.scss +4 -17
  18. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.ts +0 -1
  19. package/lib/designSystemExtension/material-summary-list/material-summary-list.component.ts +0 -1
  20. package/lib/designSystemExtension/material-utility/material-utility.component.scss +1 -2
  21. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss +1 -1
  22. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.ts +0 -1
  23. package/lib/designSystemExtension/operator/operator.component.html +2 -2
  24. package/lib/designSystemExtension/operator/operator.component.scss +13 -12
  25. package/lib/designSystemExtension/operator/operator.component.ts +4 -5
  26. package/lib/designSystemExtension/pulse/pulse.component.scss +2 -2
  27. package/lib/designSystemExtension/pulse/pulse.component.ts +0 -1
  28. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.html +4 -17
  29. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +0 -1
  30. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.ts +30 -1
  31. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.scss +16 -9
  32. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.ts +0 -1
  33. package/lib/field/auto-complete/auto-complete.component.html +0 -2
  34. package/lib/field/auto-complete/auto-complete.component.ts +48 -173
  35. package/lib/field/cancel-alert/cancel-alert.component.html +8 -12
  36. package/lib/field/cancel-alert/cancel-alert.component.scss +2 -3
  37. package/lib/field/cancel-alert/cancel-alert.component.ts +24 -37
  38. package/lib/field/check-box/check-box.component.html +17 -6
  39. package/lib/field/check-box/check-box.component.scss +0 -1
  40. package/lib/field/check-box/check-box.component.ts +25 -151
  41. package/lib/field/currency/currency.component.ts +54 -181
  42. package/lib/field/date/date.component.html +4 -3
  43. package/lib/field/date/date.component.ts +30 -151
  44. package/lib/field/date-time/date-time.component.html +2 -2
  45. package/lib/field/date-time/date-time.component.ts +47 -148
  46. package/lib/field/decimal/decimal.component.html +1 -0
  47. package/lib/field/decimal/decimal.component.ts +61 -164
  48. package/lib/field/dropdown/dropdown.component.html +1 -0
  49. package/lib/field/dropdown/dropdown.component.ts +43 -152
  50. package/lib/field/email/email.component.ts +28 -158
  51. package/lib/field/field.base.ts +149 -0
  52. package/lib/field/group/group.component.ts +7 -5
  53. package/lib/field/integer/integer.component.html +1 -1
  54. package/lib/field/integer/integer.component.ts +30 -160
  55. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.html +1 -1
  56. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.ts +3 -3
  57. package/lib/field/location/config-ext.json +8 -0
  58. package/lib/field/location/location.component.html +45 -0
  59. package/lib/field/location/location.component.scss +18 -0
  60. package/lib/field/location/location.component.spec.ts +22 -0
  61. package/lib/field/location/location.component.ts +280 -0
  62. package/lib/field/multiselect/multiselect.component.ts +47 -152
  63. package/lib/field/multiselect/utils.ts +55 -47
  64. package/lib/field/object-reference/object-reference.component.html +17 -0
  65. package/lib/field/object-reference/object-reference.component.scss +0 -0
  66. package/lib/field/object-reference/object-reference.component.spec.ts +22 -0
  67. package/lib/field/object-reference/object-reference.component.ts +237 -0
  68. package/lib/field/percentage/percentage.component.html +1 -1
  69. package/lib/field/percentage/percentage.component.ts +62 -170
  70. package/lib/field/phone/config-ext.json +1 -1
  71. package/lib/field/phone/phone.component.html +18 -17
  72. package/lib/field/phone/phone.component.scss +4 -0
  73. package/lib/field/phone/phone.component.ts +47 -156
  74. package/lib/field/radio-buttons/radio-buttons.component.html +17 -12
  75. package/lib/field/radio-buttons/radio-buttons.component.scss +4 -2
  76. package/lib/field/radio-buttons/radio-buttons.component.ts +37 -160
  77. package/lib/field/rich-text/rich-text.component.html +2 -0
  78. package/lib/field/rich-text/rich-text.component.scss +172 -0
  79. package/lib/field/rich-text/rich-text.component.ts +32 -93
  80. package/lib/field/scalar-list/scalar-list.component.ts +17 -73
  81. package/lib/field/selectable-card/selectable-card.component.html +70 -0
  82. package/lib/field/selectable-card/selectable-card.component.scss +11 -0
  83. package/lib/field/selectable-card/selectable-card.component.spec.ts +22 -0
  84. package/lib/field/selectable-card/selectable-card.component.ts +219 -0
  85. package/lib/field/semantic-link/semantic-link.component.html +4 -8
  86. package/lib/field/semantic-link/semantic-link.component.scss +0 -13
  87. package/lib/field/semantic-link/semantic-link.component.ts +165 -6
  88. package/lib/field/text/text.component.scss +0 -1
  89. package/lib/field/text/text.component.ts +6 -5
  90. package/lib/field/text-area/text-area.component.html +4 -2
  91. package/lib/field/text-area/text-area.component.ts +30 -155
  92. package/lib/field/text-content/text-content.component.ts +0 -1
  93. package/lib/field/text-input/text-input.component.html +1 -1
  94. package/lib/field/text-input/text-input.component.ts +28 -158
  95. package/lib/field/time/time.component.html +2 -2
  96. package/lib/field/time/time.component.ts +34 -154
  97. package/lib/field/url/url.component.html +1 -1
  98. package/lib/field/url/url.component.ts +28 -157
  99. package/lib/field/user-reference/user-reference.component.html +40 -38
  100. package/lib/field/user-reference/user-reference.component.scss +0 -1
  101. package/lib/field/user-reference/user-reference.component.ts +70 -9
  102. package/lib/infra/Containers/flow-container/flow-container.component.html +2 -2
  103. package/lib/infra/Containers/flow-container/flow-container.component.ts +24 -51
  104. package/lib/infra/Containers/flow-container/helpers.ts +2 -2
  105. package/lib/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts +0 -1
  106. package/lib/infra/Containers/modal-view-container/modal-view-container.component.html +1 -11
  107. package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +5 -18
  108. package/lib/infra/Containers/view-container/helper.ts +35 -2
  109. package/lib/infra/Containers/view-container/view-container.component.ts +1 -2
  110. package/lib/infra/action-buttons/action-buttons.component.html +13 -8
  111. package/lib/infra/action-buttons/action-buttons.component.scss +23 -0
  112. package/lib/infra/action-buttons/action-buttons.component.ts +1 -3
  113. package/lib/infra/assignment/assignment.component.html +1 -1
  114. package/lib/infra/assignment/assignment.component.ts +100 -46
  115. package/lib/infra/assignment-card/assignment-card.component.html +2 -2
  116. package/lib/infra/assignment-card/assignment-card.component.scss +0 -4
  117. package/lib/infra/assignment-card/assignment-card.component.ts +21 -5
  118. package/lib/infra/dashboard-filter/dashboard-filter.component.ts +0 -1
  119. package/lib/infra/defer-load/defer-load.component.html +6 -2
  120. package/lib/infra/defer-load/defer-load.component.ts +25 -12
  121. package/lib/infra/error-boundary/error-boundary.component.ts +0 -1
  122. package/lib/infra/multi-step/multi-step.component.html +22 -38
  123. package/lib/infra/multi-step/multi-step.component.scss +14 -27
  124. package/lib/infra/multi-step/multi-step.component.ts +0 -1
  125. package/lib/infra/navbar/navbar.component.html +36 -41
  126. package/lib/infra/navbar/navbar.component.scss +22 -4
  127. package/lib/infra/navbar/navbar.component.ts +8 -6
  128. package/lib/infra/reference/reference.component.ts +82 -90
  129. package/lib/infra/region/region.component.ts +0 -1
  130. package/lib/infra/root-container/root-container.component.html +2 -15
  131. package/lib/infra/root-container/root-container.component.scss +0 -1
  132. package/lib/infra/root-container/root-container.component.ts +25 -32
  133. package/lib/infra/stages/stages.component.html +4 -3
  134. package/lib/infra/stages/stages.component.scss +12 -36
  135. package/lib/infra/stages/stages.component.ts +4 -3
  136. package/lib/infra/view/view.component.html +1 -1
  137. package/lib/infra/view/view.component.ts +3 -7
  138. package/lib/template/advanced-search/advanced-search.component.html +12 -0
  139. package/lib/template/advanced-search/advanced-search.component.scss +0 -0
  140. package/lib/template/advanced-search/advanced-search.component.spec.ts +0 -0
  141. package/lib/template/advanced-search/advanced-search.component.ts +112 -0
  142. package/lib/template/advanced-search/advanced-search.service.ts +27 -0
  143. package/lib/template/advanced-search/search-group/persist-utils.ts +56 -0
  144. package/lib/template/advanced-search/search-groups/search-groups.component.html +32 -0
  145. package/lib/template/advanced-search/search-groups/search-groups.component.scss +0 -0
  146. package/lib/template/advanced-search/search-groups/search-groups.component.spec.ts +0 -0
  147. package/lib/template/advanced-search/search-groups/search-groups.component.ts +294 -0
  148. package/lib/template/advanced-search/search-groups/utils.ts +29 -0
  149. package/lib/template/app-shell/app-shell.component.html +4 -1
  150. package/lib/template/app-shell/app-shell.component.scss +0 -3
  151. package/lib/template/app-shell/app-shell.component.ts +46 -8
  152. package/lib/template/banner-page/banner-page.component.ts +0 -1
  153. package/lib/template/base/form-template-base.ts +6 -0
  154. package/lib/template/case-summary/case-summary.component.scss +0 -2
  155. package/lib/template/case-summary/case-summary.component.ts +6 -22
  156. package/lib/template/case-view/case-view.component.html +4 -4
  157. package/lib/template/case-view/case-view.component.scss +18 -10
  158. package/lib/template/case-view/case-view.component.ts +1 -11
  159. package/lib/template/confirmation/confirmation.component.html +2 -2
  160. package/lib/template/confirmation/confirmation.component.ts +0 -1
  161. package/lib/template/data-reference/data-reference.component.html +11 -8
  162. package/lib/template/data-reference/data-reference.component.ts +346 -113
  163. package/lib/template/data-reference/search-form/search-form.component.html +39 -0
  164. package/lib/template/data-reference/search-form/search-form.component.scss +11 -0
  165. package/lib/template/data-reference/search-form/search-form.component.spec.ts +0 -0
  166. package/lib/template/data-reference/search-form/search-form.component.ts +167 -0
  167. package/lib/template/data-reference/search-form/tabsData.ts +160 -0
  168. package/lib/template/data-reference/utils.ts +92 -0
  169. package/lib/template/default-form/default-form.component.ts +45 -5
  170. package/lib/template/default-page/default-page.component.html +34 -0
  171. package/lib/template/default-page/default-page.component.scss +31 -0
  172. package/lib/template/default-page/default-page.component.spec.ts +24 -0
  173. package/lib/template/default-page/default-page.component.ts +64 -0
  174. package/lib/template/details/details.component.ts +0 -1
  175. package/lib/template/details-narrow-wide/details-narrow-wide.component.ts +0 -1
  176. package/lib/template/details-one-column/details-one-column.component.ts +0 -1
  177. package/lib/template/details-sub-tabs/details-sub-tabs.component.ts +0 -1
  178. package/lib/template/details-three-column/details-three-column.component.ts +0 -1
  179. package/lib/template/details-two-column/details-two-column.component.ts +0 -1
  180. package/lib/template/details-wide-narrow/details-wide-narrow.component.ts +0 -1
  181. package/lib/template/dynamic-tabs/dynamic-tabs.component.ts +0 -1
  182. package/lib/template/field-group-list/field-group-list.component.scss +0 -1
  183. package/lib/template/field-group-list/field-group-list.component.ts +0 -1
  184. package/lib/template/field-group-template/field-group-template.component.html +7 -7
  185. package/lib/template/field-group-template/field-group-template.component.scss +8 -0
  186. package/lib/template/field-group-template/field-group-template.component.ts +64 -55
  187. package/lib/template/field-value-list/field-value-list.component.html +2 -2
  188. package/lib/template/field-value-list/field-value-list.component.scss +4 -0
  189. package/lib/template/field-value-list/field-value-list.component.ts +0 -1
  190. package/lib/template/inline-dashboard/inline-dashboard.component.ts +0 -1
  191. package/lib/template/inline-dashboard-page/inline-dashboard-page.component.ts +1 -2
  192. package/lib/template/list-page/list-page.component.ts +0 -1
  193. package/lib/template/list-view/list-view.component.html +170 -160
  194. package/lib/template/list-view/list-view.component.scss +25 -21
  195. package/lib/template/list-view/list-view.component.ts +208 -122
  196. package/lib/template/list-view/listViewHelpers.ts +3 -9
  197. package/lib/template/list-view/utils.ts +27 -7
  198. package/lib/template/multi-reference-readonly/multi-reference-readonly.component.ts +0 -1
  199. package/lib/template/narrow-wide-form/narrow-wide-form.component.ts +0 -1
  200. package/lib/template/object-page/object-page.component.html +1 -0
  201. package/lib/template/object-page/object-page.component.scss +0 -0
  202. package/lib/template/object-page/object-page.component.spec.ts +22 -0
  203. package/lib/template/object-page/object-page.component.ts +14 -0
  204. package/lib/template/one-column/one-column.component.ts +0 -1
  205. package/lib/template/one-column-page/one-column-page.component.ts +0 -1
  206. package/lib/template/one-column-tab/one-column-tab.component.scss +1 -1
  207. package/lib/template/one-column-tab/one-column-tab.component.ts +0 -1
  208. package/lib/template/page/page.component.ts +0 -1
  209. package/lib/template/promoted-filters/promoted-filters.component.ts +0 -1
  210. package/lib/template/repeating-structures/repeating-structures.component.ts +0 -2
  211. package/lib/template/self-service-case-view/self-service-case-view.component.html +78 -0
  212. package/lib/template/self-service-case-view/self-service-case-view.component.scss +132 -0
  213. package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +24 -0
  214. package/lib/template/self-service-case-view/self-service-case-view.component.ts +207 -0
  215. package/lib/template/simple-table/simple-table.component.ts +0 -2
  216. package/lib/template/simple-table-manual/helpers.ts +126 -10
  217. package/lib/template/simple-table-manual/simple-table-manual.component.html +27 -8
  218. package/lib/template/simple-table-manual/simple-table-manual.component.scss +15 -17
  219. package/lib/template/simple-table-manual/simple-table-manual.component.ts +103 -45
  220. package/lib/template/simple-table-select/simple-table-select.component.ts +0 -1
  221. package/lib/template/single-reference-readonly/single-reference-readonly.component.html +4 -1
  222. package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +21 -0
  223. package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +104 -4
  224. package/lib/template/sub-tabs/sub-tabs.component.ts +0 -1
  225. package/lib/template/three-column/three-column.component.ts +0 -1
  226. package/lib/template/three-column-page/three-column-page.component.ts +0 -1
  227. package/lib/template/two-column/two-column.component.ts +0 -1
  228. package/lib/template/two-column-page/two-column-page.component.ts +0 -1
  229. package/lib/template/two-column-tab/two-column-tab.component.ts +0 -1
  230. package/lib/template/utils.ts +58 -0
  231. package/lib/template/wide-narrow-form/wide-narrow-form.component.ts +0 -1
  232. package/lib/template/wide-narrow-page/wide-narrow-page.component.ts +0 -1
  233. package/lib/template/wss-nav-bar/wss-nav-bar.component.html +6 -5
  234. package/lib/template/wss-nav-bar/wss-nav-bar.component.scss +8 -17
  235. package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +1 -9
  236. package/lib/widget/app-announcement/app-announcement.component.html +1 -2
  237. package/lib/widget/app-announcement/app-announcement.component.scss +2 -2
  238. package/lib/widget/app-announcement/app-announcement.component.ts +0 -1
  239. package/lib/widget/attachment/Attachment.types.ts +92 -0
  240. package/lib/widget/attachment/AttachmentUtils.ts +287 -0
  241. package/lib/widget/attachment/attachment.component.html +3 -3
  242. package/lib/widget/attachment/attachment.component.scss +9 -12
  243. package/lib/widget/attachment/attachment.component.ts +267 -254
  244. package/lib/widget/case-history/case-history.component.ts +0 -1
  245. package/lib/widget/feed-container/feed-container.component.scss +3 -9
  246. package/lib/widget/feed-container/feed-container.component.ts +2 -5
  247. package/lib/widget/file-utility/file-utility.component.html +3 -3
  248. package/lib/widget/file-utility/file-utility.component.scss +6 -17
  249. package/lib/widget/file-utility/file-utility.component.ts +24 -9
  250. package/lib/widget/list-utility/list-utility.component.scss +4 -5
  251. package/lib/widget/list-utility/list-utility.component.ts +0 -1
  252. package/lib/widget/quick-create/quick-create.component.ts +41 -23
  253. package/lib/widget/todo/todo.component.html +12 -10
  254. package/lib/widget/todo/todo.component.scss +20 -10
  255. package/lib/widget/todo/todo.component.ts +11 -7
  256. package/lib/widget/utility/utility.component.ts +0 -1
  257. package/package.json +1 -1
@@ -9,7 +9,6 @@ declare let tinymce: any;
9
9
  selector: 'app-rich-text-editor',
10
10
  templateUrl: './rich-text-editor.component.html',
11
11
  styleUrls: ['./rich-text-editor.component.scss'],
12
- standalone: true,
13
12
  imports: [CommonModule, EditorModule, ReactiveFormsModule],
14
13
  providers: [{ provide: TINYMCE_SCRIPT_SRC, useValue: 'tinymce/tinymce.min.js' }]
15
14
  })
@@ -28,6 +27,7 @@ export class RichTextEditorComponent implements OnChanges {
28
27
  @Output() onChange: EventEmitter<any> = new EventEmitter();
29
28
 
30
29
  richText = new FormControl();
30
+ editorConfig: any = {};
31
31
 
32
32
  ngOnChanges() {
33
33
  if (this.required) {
@@ -43,6 +43,35 @@ export class RichTextEditorComponent implements OnChanges {
43
43
  if (this.value) {
44
44
  this.richText.setValue(this.value);
45
45
  }
46
+
47
+ const themeElement = document.querySelector('.dark') || document.body;
48
+ let textColor = getComputedStyle(themeElement).getPropertyValue('--mat-sys-on-surface').trim();
49
+ if (!textColor) textColor = '#000000';
50
+
51
+ this.editorConfig = {
52
+ base_url: '/tinymce',
53
+ suffix: '.min',
54
+ menubar: false,
55
+ placeholder: this.placeholder,
56
+ statusbar: false,
57
+ min_height: 130,
58
+ plugins: ['lists', 'advlist', 'autolink', 'image', 'link', 'autoresize'],
59
+ autoresize_bottom_margin: 0,
60
+ toolbar: this.disabled ? false : 'blocks | bold italic strikethrough | bullist numlist outdent indent | link image',
61
+ toolbar_location: 'bottom',
62
+ content_style: `
63
+ body {
64
+ font-family: Helvetica, Arial, sans-serif;
65
+ font-size: 14px;
66
+ color: ${textColor} !important;
67
+ background: transparent !important;
68
+ }
69
+ `,
70
+ branding: false,
71
+ paste_data_images: true,
72
+ file_picker_types: 'image',
73
+ file_picker_callback: this.filePickerCallback
74
+ };
46
75
  }
47
76
 
48
77
  filePickerCallback = cb => {
@@ -1,24 +1,31 @@
1
+ .quick-link-button:hover .quick-link-icon {
2
+ transform: scale(1.2) rotateZ(10deg);
3
+ }
4
+
5
+ .wss-quick-create-header {
6
+ background-color: var(--mat-sys-surface-container);
7
+ }
8
+
1
9
  .quick-link-ul-list {
2
10
  list-style: none;
3
11
  padding: 0;
4
- grid-template-columns: repeat(auto-fill, minmax(min(40ch, 100%), 1fr));
12
+ grid-template-columns: repeat(auto-fill, minmax(min(20ch, 100%), 1fr));
5
13
  display: grid;
6
14
  gap: calc(1rem);
7
15
  }
8
16
 
9
17
  .quick-link-list {
10
- background-color: var(--app-primary-color);
11
- color: var(--app-form-color);
12
- border-radius: 8px;
18
+ background-color: var(--mat-sys-surface-container);
19
+ border-radius: 16px;
20
+ border: 1px solid var(--mat-sys-primary);
13
21
  }
14
22
 
15
23
  .quick-link-button {
16
24
  text-transform: capitalize !important;
17
25
  font-size: 16px !important;
18
- color: var(--app-form-color) !important;
19
26
  cursor: pointer;
20
27
  padding: calc(0.5rem * 2) !important;
21
- height: 6rem;
28
+ height: 10rem;
22
29
  width: 100%;
23
30
  justify-content: start !important;
24
31
  background-color: transparent;
@@ -26,14 +33,14 @@
26
33
  }
27
34
 
28
35
  .quick-link-icon {
29
- width: 1em;
30
- height: 1em;
36
+ width: 3em;
37
+ height: 3em;
31
38
  flex-shrink: 0;
32
- filter: invert(100%);
33
39
  }
34
40
 
35
41
  .quick-link-button-span {
36
42
  display: flex;
43
+ flex-direction: column;
37
44
  align-items: center;
38
45
  gap: 0.5rem;
39
46
  }
@@ -6,7 +6,6 @@ import { Component, Input } from '@angular/core';
6
6
  selector: 'wss-quick-create',
7
7
  templateUrl: './wss-quick-create.component.html',
8
8
  styleUrls: ['./wss-quick-create.component.scss'],
9
- standalone: true,
10
9
  imports: [CommonModule]
11
10
  })
12
11
  export class WssQuickCreateComponent {
@@ -11,11 +11,9 @@
11
11
  [placeholder]="placeholder"
12
12
  [formControl]="fieldControl"
13
13
  [attr.data-test-id]="testId"
14
- [value]="value$"
15
14
  [required]="bRequired$"
16
15
  [matAutocomplete]="auto"
17
16
  (input)="fieldOnChange($event)"
18
- (blur)="fieldOnBlur($event)"
19
17
  />
20
18
  <mat-autocomplete #auto="matAutocomplete" autoActiveFirstOption (optionSelected)="optionChanged($event)">
21
19
  <mat-option *ngFor="let opt of filteredOptions | async" [value]="opt.value">
@@ -1,19 +1,23 @@
1
- import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
1
+ import { Component, EventEmitter, OnInit, Output, forwardRef, inject } 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 { MatAutocompleteModule } from '@angular/material/autocomplete';
6
6
  import { MatInputModule } from '@angular/material/input';
7
7
  import { MatFormFieldModule } from '@angular/material/form-field';
8
- import { interval, Observable } from 'rxjs';
8
+ import { Observable } from 'rxjs';
9
9
  import { map, startWith } from 'rxjs/operators';
10
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
11
- import { Utils } from '@pega/angular-sdk-components';
10
+
11
+ import { FieldBase } from '@pega/angular-sdk-components';
12
12
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
13
13
  import { DatapageService } from '@pega/angular-sdk-components';
14
14
  import { handleEvent } from '@pega/angular-sdk-components';
15
15
  import { PConnFieldProps } from '@pega/angular-sdk-components';
16
16
 
17
+ interface IOption {
18
+ key: string;
19
+ value: string;
20
+ }
17
21
  interface AutoCompleteProps extends PConnFieldProps {
18
22
  // If any, enter additional props that only exist on AutoComplete here
19
23
  deferDatasource?: boolean;
@@ -30,7 +34,6 @@ interface AutoCompleteProps extends PConnFieldProps {
30
34
  selector: 'app-auto-complete',
31
35
  templateUrl: './auto-complete.component.html',
32
36
  styleUrls: ['./auto-complete.component.scss'],
33
- standalone: true,
34
37
  imports: [
35
38
  CommonModule,
36
39
  ReactiveFormsModule,
@@ -39,68 +42,26 @@ interface AutoCompleteProps extends PConnFieldProps {
39
42
  MatAutocompleteModule,
40
43
  MatOptionModule,
41
44
  forwardRef(() => ComponentMapperComponent)
42
- ]
45
+ ],
46
+ providers: [DatapageService]
43
47
  })
44
- export class AutoCompleteComponent implements OnInit, OnDestroy {
45
- @Input() pConn$: typeof PConnect;
46
- @Input() formGroup$: FormGroup;
48
+ export class AutoCompleteComponent extends FieldBase implements OnInit {
49
+ protected dataPageService = inject(DatapageService);
50
+
51
+ @Output() onRecordChange: EventEmitter<any> = new EventEmitter();
47
52
 
48
- // Used with AngularPConnect
49
- angularPConnectData: AngularPConnectData = {};
50
53
  configProps$: AutoCompleteProps;
51
54
 
52
- label$ = '';
53
- value$ = '';
54
- bRequired$ = false;
55
- bReadonly$ = false;
56
- bDisabled$ = false;
57
- bVisible$ = true;
58
- displayMode$?: string = '';
59
- controlName$: string;
60
- bHasForm$ = true;
61
55
  options$: any[];
62
- componentReference = '';
63
- testId: string;
64
56
  listType: string;
65
57
  columns = [];
66
- helperText: string;
67
- placeholder: string;
68
-
69
- fieldControl = new FormControl('', null);
70
58
  parameters: {};
71
- hideLabel: boolean;
72
59
  filteredOptions: Observable<any[]>;
73
60
  filterValue = '';
74
- actionsApi: Object;
75
- propName: string;
76
-
77
- constructor(
78
- private angularPConnect: AngularPConnectService,
79
- private cdRef: ChangeDetectorRef,
80
- private utils: Utils,
81
- private dataPageService: DatapageService
82
- ) {}
83
-
84
- async ngOnInit(): Promise<void> {
85
- // First thing in initialization is registering and subscribing to the AngularPConnect service
86
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
87
- this.controlName$ = this.angularPConnect.getComponentID(this);
88
61
 
89
- // Then, continue on with other initialization
90
-
91
- // call updateSelf when initializing
92
- // this.updateSelf();
93
- await this.checkAndUpdate();
94
-
95
- if (this.formGroup$) {
96
- // add control to formGroup
97
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
98
- this.fieldControl.setValue(this.value$);
99
- this.bHasForm$ = true;
100
- } else {
101
- this.bReadonly$ = true;
102
- this.bHasForm$ = false;
103
- }
62
+ // Override ngOnInit method
63
+ override async ngOnInit(): Promise<void> {
64
+ super.ngOnInit();
104
65
 
105
66
  this.filteredOptions = this.fieldControl.valueChanges.pipe(
106
67
  startWith(''),
@@ -108,14 +69,11 @@ export class AutoCompleteComponent implements OnInit, OnDestroy {
108
69
  );
109
70
  }
110
71
 
111
- ngOnDestroy(): void {
112
- if (this.formGroup$) {
113
- this.formGroup$.removeControl(this.controlName$);
114
- }
115
-
116
- if (this.angularPConnectData.unsubscribeFn) {
117
- this.angularPConnectData.unsubscribeFn();
118
- }
72
+ setOptions(options: IOption[]) {
73
+ this.options$ = options;
74
+ const index = this.options$?.findIndex(element => element.key === this.configProps$.value);
75
+ this.value$ = index > -1 ? this.options$[index].value : this.configProps$.value;
76
+ this.fieldControl.setValue(this.value$);
119
77
  }
120
78
 
121
79
  private _filter(value: string): string[] {
@@ -123,38 +81,27 @@ export class AutoCompleteComponent implements OnInit, OnDestroy {
123
81
  return this.options$?.filter(option => option.value?.toLowerCase().includes(filterVal));
124
82
  }
125
83
 
126
- // Callback passed when subscribing to store change
127
- async onStateChange() {
128
- await this.checkAndUpdate();
129
- }
130
-
131
- async checkAndUpdate() {
132
- // Should always check the bridge to see if the component should
133
- // update itself (re-render)
134
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
135
-
136
- // ONLY call updateSelf when the component should update
137
- if (bUpdateSelf) {
138
- await this.updateSelf();
139
- }
140
- }
84
+ /**
85
+ * Updates the component when there are changes in the state.
86
+ */
87
+ override async updateSelf(): Promise<void> {
88
+ // Resolve configuration properties
89
+ this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as AutoCompleteProps;
141
90
 
142
- // updateSelf
143
- async updateSelf(): Promise<void> {
144
- // starting very simple...
91
+ // Update component common properties
92
+ this.updateComponentCommonProperties(this.configProps$);
145
93
 
146
- // moved this from ngOnInit() and call this from there instead...
147
- this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as AutoCompleteProps;
94
+ // Set component specific properties
95
+ const { value, listType, parameters } = this.configProps$;
148
96
 
149
- if (this.configProps$.value != undefined) {
150
- const index = this.options$?.findIndex(element => element.key === this.configProps$.value);
151
- this.value$ = index > -1 ? this.options$[index].value : this.configProps$.value;
97
+ if (value != undefined) {
98
+ const index = this.options$?.findIndex(element => element.key === value);
99
+ this.value$ = index > -1 ? this.options$[index].value : value;
100
+ this.fieldControl.setValue(this.value$);
152
101
  }
153
102
 
154
- this.setPropertyValuesFromProps();
155
-
156
- this.actionsApi = this.pConn$.getActionsApi();
157
- this.propName = this.pConn$.getStateProps().value;
103
+ this.listType = listType;
104
+ this.parameters = parameters;
158
105
 
159
106
  const context = this.pConn$.getContextName();
160
107
  const { columns, datasource } = this.generateColumnsAndDataSource();
@@ -162,63 +109,16 @@ export class AutoCompleteComponent implements OnInit, OnDestroy {
162
109
  if (columns) {
163
110
  this.columns = this.preProcessColumns(columns);
164
111
  }
165
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
166
- setTimeout(() => {
167
- if (this.configProps$.required != null) {
168
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
169
- }
170
- this.cdRef.detectChanges();
171
- });
172
-
173
- if (this.configProps$.visibility != null) {
174
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
175
- }
176
-
177
- // disabled
178
- if (this.configProps$.disabled != undefined) {
179
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
180
- }
181
112
 
182
- if (this.bDisabled$) {
183
- this.fieldControl.disable();
184
- } else {
185
- this.fieldControl.enable();
186
- }
187
-
188
- if (this.configProps$.readOnly != null) {
189
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
190
- }
191
-
192
- this.componentReference = this.pConn$.getStateProps().value;
193
113
  if (this.listType === 'associated') {
194
- this.options$ = this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject('')); // 1st arg empty string until typedef marked correctly
114
+ const optionsList = this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject('')); // 1st arg empty string until typedef marked correctly
115
+ this.setOptions(optionsList);
195
116
  }
196
117
 
197
118
  if (!this.displayMode$ && this.listType !== 'associated') {
198
119
  const results = await this.dataPageService.getDataPageData(datasource, this.parameters, context);
199
120
  this.fillOptions(results);
200
121
  }
201
-
202
- // trigger display of error message with field control
203
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
204
- const timer = interval(100).subscribe(() => {
205
- this.fieldControl.setErrors({ message: true });
206
- this.fieldControl.markAsTouched();
207
-
208
- timer.unsubscribe();
209
- });
210
- }
211
- }
212
-
213
- setPropertyValuesFromProps() {
214
- this.testId = this.configProps$.testId;
215
- this.label$ = this.configProps$.label;
216
- this.placeholder = this.configProps$.placeholder || '';
217
- this.displayMode$ = this.configProps$.displayMode;
218
- this.listType = this.configProps$.listType;
219
- this.hideLabel = this.configProps$.hideLabel;
220
- this.helperText = this.configProps$.helperText;
221
- this.parameters = this.configProps$?.parameters;
222
122
  }
223
123
 
224
124
  generateColumnsAndDataSource() {
@@ -263,7 +163,7 @@ export class AutoCompleteComponent implements OnInit, OnDestroy {
263
163
  };
264
164
  optionsData.push(obj);
265
165
  });
266
- this.options$ = optionsData;
166
+ this.setOptions(optionsData);
267
167
  }
268
168
 
269
169
  flattenParameters(params = {}) {
@@ -300,49 +200,24 @@ export class AutoCompleteComponent implements OnInit, OnDestroy {
300
200
  }
301
201
 
302
202
  fieldOnChange(event: Event) {
303
- // this works - this.pConn$.setValue( this.componentReference, `property: ${this.componentReference}`);
304
- // this works - this.pConn$.setValue( this.componentReference, this.fieldControl.value);
305
- // PConnect wants to use changeHandler for onChange
306
- // this.angularPConnect.changeHandler( this, event);
307
203
  const value = (event.target as HTMLInputElement).value;
308
204
  this.filterValue = value;
309
205
  handleEvent(this.actionsApi, 'change', this.propName, value);
310
206
  }
311
207
 
312
208
  optionChanged(event: any) {
313
- const value = event?.option?.value;
314
- handleEvent(this.actionsApi, 'change', this.propName, value);
315
- }
209
+ const val = event?.option?.value;
316
210
 
317
- fieldOnBlur(event: Event) {
318
211
  let key = '';
319
- const el = event?.target as HTMLInputElement;
320
- if (el?.value) {
321
- const index = this.options$?.findIndex(element => element.value === el.value);
322
- key = index > -1 ? (key = this.options$[index].key) : el.value;
212
+ if (val) {
213
+ const index = this.options$?.findIndex(element => element.value === val);
214
+ key = index > -1 ? (key = this.options$[index].key) : val;
323
215
  }
324
216
  const value = key;
325
217
  handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
326
- if (this.configProps$?.onRecordChange) {
327
- el.value = value;
328
- this.configProps$.onRecordChange(event);
329
- }
330
- }
331
-
332
- getErrorMessage() {
333
- let errMessage = '';
334
218
 
335
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
336
- if (this.fieldControl.hasError('message')) {
337
- errMessage = this.angularPConnectData.validateMessage ?? '';
338
- return errMessage;
219
+ if (this.onRecordChange) {
220
+ this.onRecordChange.emit(value);
339
221
  }
340
- if (this.fieldControl.hasError('required')) {
341
- errMessage = 'You must enter a value';
342
- } else if (this.fieldControl.errors) {
343
- errMessage = this.fieldControl.errors.toString();
344
- }
345
-
346
- return errMessage;
347
222
  }
348
223
  }
@@ -1,18 +1,14 @@
1
1
  <div *ngIf="bShowAlert$" class="psdk-cancel-alert-background">
2
2
  <div class="psdk-cancel-alert-top">
3
- <h3 *ngIf="heading$ != ''">{{ heading$ }}</h3>
3
+ <h3>{{ localizedVal('Discard unsaved changes?', localeCategory) }}</h3>
4
4
  <div>
5
- <p>{{ body1$ }}</p>
6
- <p>{{ body2$ }}</p>
5
+ <p>{{ localizedVal('You have unsaved changes. You can discard them or go back to keep working.', localeCategory) }}</p>
7
6
  </div>
8
- <mat-grid-list cols="2" rowHeight="6.25rem">
9
- <mat-grid-tile>
10
- <button mat-raised-button color="secondary" (click)="buttonClick('save')">{{ localizedVal('Save for later', localeCategory) }}</button>
11
- </mat-grid-tile>
12
- <mat-grid-tile>
13
- <button mat-raised-button color="secondary" (click)="buttonClick('continue')">{{ localizedVal('Continue Working', localeCategory) }}</button>
14
- <button mat-raised-button color="primary" (click)="buttonClick('delete')">{{ localizedVal('Delete', localeCategory) }}</button>
15
- </mat-grid-tile>
16
- </mat-grid-list>
7
+ <component-mapper
8
+ name="ActionButtons"
9
+ [props]="{ arMainButtons$: [discardButton], arSecondaryButtons$: [goBackButton] }"
10
+ [parent]="this"
11
+ [outputEvents]="{ actionButtonClick: buttonClick }"
12
+ ></component-mapper>
17
13
  </div>
18
14
  </div>
@@ -5,20 +5,19 @@
5
5
  align-items: center;
6
6
  height: 100%;
7
7
  width: 100%;
8
- background-color: var(--app-dialog-background-color);
9
8
  position: fixed;
10
9
  z-index: 9999;
11
10
  top: 0px;
12
11
  left: 0px;
12
+ background: rgba(0, 0, 0, 0.5);
13
13
  }
14
14
 
15
15
  .psdk-cancel-alert-top {
16
- display: table;
17
16
  margin: auto;
18
17
  min-width: 550px;
19
- background-color: var(--app-form-color);
20
18
  border: 1px solid var(--app-inverse-form-color);
21
19
  border-radius: 10px;
22
20
  padding: 20px;
23
21
  box-shadow: 0 0 10px 3px var(--app-box-shadow-color);
22
+ background-color: var(--mat-sys-surface-container);
24
23
  }
@@ -1,54 +1,44 @@
1
- import { Component, Input, Output, EventEmitter, OnChanges } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, OnChanges, forwardRef } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { MatButtonModule } from '@angular/material/button';
4
4
  import { MatGridListModule } from '@angular/material/grid-list';
5
5
  import { ProgressSpinnerService } from '@pega/angular-sdk-components';
6
+ import { ComponentMapperComponent } from '@pega/angular-sdk-components';
6
7
 
7
8
  @Component({
8
9
  selector: 'app-cancel-alert',
9
10
  templateUrl: './cancel-alert.component.html',
10
11
  styleUrls: ['./cancel-alert.component.scss'],
11
- standalone: true,
12
- imports: [CommonModule, MatGridListModule, MatButtonModule]
12
+ imports: [CommonModule, MatGridListModule, MatButtonModule, forwardRef(() => ComponentMapperComponent)]
13
13
  })
14
14
  export class CancelAlertComponent implements OnChanges {
15
15
  @Input() pConn$: typeof PConnect;
16
16
  @Input() bShowAlert$: boolean;
17
17
  @Output() onAlertState$: EventEmitter<boolean> = new EventEmitter<boolean>();
18
18
 
19
- heading$: string;
20
- body1$: string;
21
- body2$: string;
22
19
  itemKey: string;
23
20
  localizedVal: Function;
24
21
  localeCategory = 'ModalContainer';
22
+ discardButton: any;
23
+ goBackButton: any;
25
24
 
26
25
  constructor(private psService: ProgressSpinnerService) {}
27
26
  ngOnChanges() {
28
27
  if (this.bShowAlert$) {
29
28
  this.psService.sendMessage(false);
30
-
31
29
  const contextName = this.pConn$.getContextName();
32
- const caseInfo = this.pConn$.getCaseInfo();
33
- const caseName = caseInfo.getName();
34
- const ID = caseInfo.getID();
35
30
  this.localizedVal = PCore.getLocaleUtils().getLocaleValue;
36
-
37
31
  this.itemKey = contextName;
38
- this.heading$ = `Delete ${caseName} (${ID})`;
39
- this.body1$ = `${this.localizedVal('Are you sure you want to delete ', this.localeCategory) + caseName} (${ID})?`;
40
- this.body2$ = this.localizedVal('Alternatively, you can continue working or save your work for later.', this.localeCategory);
41
-
42
- // this.onAlertState$.emit(true);
32
+ this.createCancelAlertButtons();
43
33
  }
44
34
  }
45
35
 
46
- dismissAlert() {
36
+ dismissAlertOnly() {
47
37
  this.bShowAlert$ = false;
48
38
  this.onAlertState$.emit(false);
49
39
  }
50
40
 
51
- dismissAlertOnly() {
41
+ dismissAlert() {
52
42
  this.bShowAlert$ = false;
53
43
  this.onAlertState$.emit(true);
54
44
  }
@@ -57,31 +47,28 @@ export class CancelAlertComponent implements OnChanges {
57
47
  alert(sMessage);
58
48
  }
59
49
 
60
- buttonClick(sAction) {
50
+ createCancelAlertButtons() {
51
+ this.discardButton = {
52
+ actionID: 'discard',
53
+ jsAction: 'discard',
54
+ name: this.pConn$.getLocalizedValue('Discard', '', '')
55
+ };
56
+ this.goBackButton = {
57
+ actionID: 'continue',
58
+ jsAction: 'continue',
59
+ name: this.pConn$.getLocalizedValue('Go back', '', '')
60
+ };
61
+ }
62
+
63
+ buttonClick({ action }) {
61
64
  const actionsAPI = this.pConn$.getActionsApi();
62
65
  this.localizedVal = PCore.getLocaleUtils().getLocaleValue;
63
66
 
64
- switch (sAction) {
65
- case 'save':
66
- this.psService.sendMessage(true);
67
- // eslint-disable-next-line no-case-declarations
68
- const savePromise = actionsAPI.saveAndClose(this.itemKey);
69
- savePromise
70
- .then(() => {
71
- this.psService.sendMessage(false);
72
- this.dismissAlert();
73
-
74
- PCore.getPubSubUtils().publish(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.CASE_CREATED);
75
- })
76
- .catch(() => {
77
- this.psService.sendMessage(false);
78
- this.sendMessage(this.localizedVal('Save failed', this.localeCategory));
79
- });
80
- break;
67
+ switch (action) {
81
68
  case 'continue':
82
69
  this.dismissAlertOnly();
83
70
  break;
84
- case 'delete':
71
+ case 'discard':
85
72
  this.psService.sendMessage(true);
86
73
 
87
74
  // eslint-disable-next-line no-case-declarations
@@ -1,9 +1,11 @@
1
- <div *ngIf="displayMode$; else noDisplayMode">
2
- <component-mapper
3
- *ngIf="bVisible$ !== false"
4
- name="FieldValueList"
5
- [props]="{ label$: caption$, value$: value$ ? trueLabel$ : falseLabel$, displayMode$ }"
6
- ></component-mapper>
1
+ <div *ngIf="variant !== 'card'; else cardMode">
2
+ <div *ngIf="displayMode$; else noDisplayMode">
3
+ <component-mapper
4
+ *ngIf="bVisible$ !== false"
5
+ name="FieldValueList"
6
+ [props]="{ label$: caption$, value$: value$ ? trueLabel$ : falseLabel$, displayMode$ }"
7
+ ></component-mapper>
8
+ </div>
7
9
  </div>
8
10
  <ng-template #noDisplayMode>
9
11
  <div *ngIf="bHasForm$; else noEdit">
@@ -18,6 +20,7 @@
18
20
  <mat-checkbox
19
21
  [labelPosition]="'after'"
20
22
  [checked]="item.selected"
23
+ [required]="bRequired$"
21
24
  [attr.data-test-id]="testId + ':' + item.value"
22
25
  (change)="handleChangeMultiMode($event, item)"
23
26
  (blur)="fieldOnBlur($event)"
@@ -29,6 +32,8 @@
29
32
  <mat-checkbox
30
33
  [labelPosition]="'after'"
31
34
  [checked]="isChecked$"
35
+ [disabled]="bDisabled$ || bReadonly$"
36
+ [required]="bRequired$"
32
37
  [attr.data-test-id]="testId"
33
38
  [formControl]="fieldControl"
34
39
  (change)="fieldOnChange($event)"
@@ -44,3 +49,9 @@
44
49
  <ng-template #noEdit>
45
50
  <component-mapper *ngIf="bVisible$ !== false" name="Text" [props]="{ pConn$, formatAs$: 'text' }"></component-mapper>
46
51
  </ng-template>
52
+ <ng-template #cardMode>
53
+ <h4>{{ label$ }}</h4>
54
+ <div>
55
+ <component-mapper name="SelectableCard" [props]="{ pConn$: pConn$, type: 'checkbox' }" [parent]="this"></component-mapper>
56
+ </div>
57
+ </ng-template>
@@ -11,7 +11,6 @@
11
11
  transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);
12
12
  -ms-transform: translateY(-1.28125em) scale(0.75);
13
13
  width: 133.33333%;
14
- color: rgba(0, 0, 0, 0.6);
15
14
  }
16
15
 
17
16
  .psdk-data-readonly {