@pega/angular-sdk-overrides 0.24.9 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/lib/designSystemExtension/alert/alert.component.scss +3 -3
  2. package/lib/designSystemExtension/alert/alert.component.ts +0 -1
  3. package/lib/designSystemExtension/alert-banner/alert-banner.component.ts +1 -2
  4. package/lib/designSystemExtension/banner/banner.component.scss +12 -2
  5. package/lib/designSystemExtension/banner/banner.component.ts +0 -1
  6. package/lib/designSystemExtension/case-create-stage/case-create-stage.component.ts +1 -2
  7. package/lib/designSystemExtension/field-group/field-group.component.ts +0 -1
  8. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.html +6 -3
  9. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.scss +7 -35
  10. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.ts +0 -2
  11. package/lib/designSystemExtension/material-details/material-details.component.scss +0 -5
  12. package/lib/designSystemExtension/material-details/material-details.component.ts +0 -1
  13. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +4 -4
  14. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +4 -3
  15. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.ts +10 -2
  16. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.scss +2 -17
  17. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.ts +0 -1
  18. package/lib/designSystemExtension/material-summary-list/material-summary-list.component.ts +0 -1
  19. package/lib/designSystemExtension/material-utility/material-utility.component.scss +1 -2
  20. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss +1 -1
  21. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.ts +0 -1
  22. package/lib/designSystemExtension/operator/operator.component.html +2 -2
  23. package/lib/designSystemExtension/operator/operator.component.scss +13 -12
  24. package/lib/designSystemExtension/operator/operator.component.ts +5 -6
  25. package/lib/designSystemExtension/pulse/pulse.component.scss +2 -2
  26. package/lib/designSystemExtension/pulse/pulse.component.ts +7 -8
  27. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +0 -1
  28. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.ts +0 -1
  29. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.scss +16 -8
  30. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.ts +0 -1
  31. package/lib/field/auto-complete/auto-complete.component.html +0 -2
  32. package/lib/field/auto-complete/auto-complete.component.ts +56 -178
  33. package/lib/field/cancel-alert/cancel-alert.component.html +8 -12
  34. package/lib/field/cancel-alert/cancel-alert.component.scss +2 -3
  35. package/lib/field/cancel-alert/cancel-alert.component.ts +24 -37
  36. package/lib/field/check-box/check-box.component.html +17 -6
  37. package/lib/field/check-box/check-box.component.scss +0 -1
  38. package/lib/field/check-box/check-box.component.ts +32 -157
  39. package/lib/field/currency/currency.component.html +4 -4
  40. package/lib/field/currency/currency.component.ts +65 -175
  41. package/lib/field/date/date.component.html +4 -8
  42. package/lib/field/date/date.component.ts +39 -177
  43. package/lib/field/date-time/date-time.component.html +3 -4
  44. package/lib/field/date-time/date-time.component.ts +46 -146
  45. package/lib/field/decimal/decimal.component.html +4 -3
  46. package/lib/field/decimal/decimal.component.ts +66 -166
  47. package/lib/field/dropdown/dropdown.component.html +1 -0
  48. package/lib/field/dropdown/dropdown.component.ts +158 -153
  49. package/lib/field/email/email.component.ts +28 -148
  50. package/lib/field/field.base.ts +149 -0
  51. package/lib/field/group/group.component.ts +9 -7
  52. package/lib/field/integer/integer.component.ts +30 -152
  53. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.html +1 -1
  54. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.ts +3 -3
  55. package/lib/field/location/config-ext.json +8 -0
  56. package/lib/field/location/location.component.html +45 -0
  57. package/lib/field/location/location.component.scss +18 -0
  58. package/lib/field/location/location.component.spec.ts +22 -0
  59. package/lib/field/location/location.component.ts +385 -0
  60. package/lib/field/multiselect/multiselect.component.ts +56 -151
  61. package/lib/field/multiselect/utils.ts +55 -47
  62. package/lib/field/object-reference/object-reference.component.html +17 -0
  63. package/lib/field/object-reference/object-reference.component.scss +0 -0
  64. package/lib/field/object-reference/object-reference.component.spec.ts +22 -0
  65. package/lib/field/object-reference/object-reference.component.ts +237 -0
  66. package/lib/field/percentage/percentage.component.html +3 -3
  67. package/lib/field/percentage/percentage.component.ts +68 -161
  68. package/lib/field/phone/config-ext.json +1 -1
  69. package/lib/field/phone/phone.component.html +9 -6
  70. package/lib/field/phone/phone.component.scss +9 -0
  71. package/lib/field/phone/phone.component.ts +48 -159
  72. package/lib/field/radio-buttons/radio-buttons.component.html +17 -12
  73. package/lib/field/radio-buttons/radio-buttons.component.scss +4 -2
  74. package/lib/field/radio-buttons/radio-buttons.component.ts +39 -162
  75. package/lib/field/rich-text/rich-text.component.ts +32 -93
  76. package/lib/field/scalar-list/scalar-list.component.ts +20 -77
  77. package/lib/field/selectable-card/selectable-card.component.html +70 -0
  78. package/lib/field/selectable-card/selectable-card.component.scss +11 -0
  79. package/lib/field/selectable-card/selectable-card.component.spec.ts +22 -0
  80. package/lib/field/selectable-card/selectable-card.component.ts +219 -0
  81. package/lib/field/semantic-link/semantic-link.component.html +4 -8
  82. package/lib/field/semantic-link/semantic-link.component.scss +0 -13
  83. package/lib/field/semantic-link/semantic-link.component.ts +165 -6
  84. package/lib/field/text/text.component.scss +0 -1
  85. package/lib/field/text/text.component.ts +8 -5
  86. package/lib/field/text-area/text-area.component.html +4 -1
  87. package/lib/field/text-area/text-area.component.ts +30 -148
  88. package/lib/field/text-content/text-content.component.ts +0 -1
  89. package/lib/field/text-input/text-input.component.ts +28 -150
  90. package/lib/field/time/time.component.html +2 -2
  91. package/lib/field/time/time.component.ts +39 -145
  92. package/lib/field/url/url.component.ts +28 -149
  93. package/lib/field/user-reference/user-reference.component.html +40 -46
  94. package/lib/field/user-reference/user-reference.component.scss +0 -1
  95. package/lib/field/user-reference/user-reference.component.ts +110 -21
  96. package/lib/infra/Containers/flow-container/flow-container.component.html +1 -1
  97. package/lib/infra/Containers/flow-container/flow-container.component.ts +29 -54
  98. package/lib/infra/Containers/flow-container/helpers.ts +2 -2
  99. package/lib/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts +0 -1
  100. package/lib/infra/Containers/modal-view-container/modal-view-container.component.html +1 -11
  101. package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +6 -19
  102. package/lib/infra/Containers/preview-view-container/preview-view-container.component.ts +1 -1
  103. package/lib/infra/Containers/view-container/helper.ts +55 -0
  104. package/lib/infra/Containers/view-container/view-container.component.ts +6 -19
  105. package/lib/infra/action-buttons/action-buttons.component.html +13 -8
  106. package/lib/infra/action-buttons/action-buttons.component.scss +23 -0
  107. package/lib/infra/action-buttons/action-buttons.component.ts +1 -3
  108. package/lib/infra/assignment/assignment.component.html +1 -1
  109. package/lib/infra/assignment/assignment.component.ts +90 -47
  110. package/lib/infra/assignment-card/assignment-card.component.html +2 -2
  111. package/lib/infra/assignment-card/assignment-card.component.scss +0 -4
  112. package/lib/infra/assignment-card/assignment-card.component.ts +21 -5
  113. package/lib/infra/dashboard-filter/dashboard-filter.component.ts +0 -1
  114. package/lib/infra/defer-load/defer-load.component.html +6 -2
  115. package/lib/infra/defer-load/defer-load.component.ts +24 -16
  116. package/lib/infra/error-boundary/error-boundary.component.ts +0 -1
  117. package/lib/infra/multi-step/multi-step.component.scss +1 -21
  118. package/lib/infra/multi-step/multi-step.component.ts +0 -1
  119. package/lib/infra/navbar/navbar.component.html +25 -28
  120. package/lib/infra/navbar/navbar.component.scss +16 -4
  121. package/lib/infra/navbar/navbar.component.ts +11 -9
  122. package/lib/infra/reference/reference.component.ts +77 -90
  123. package/lib/infra/region/region.component.ts +0 -1
  124. package/lib/infra/root-container/root-container.component.html +2 -15
  125. package/lib/infra/root-container/root-container.component.scss +0 -1
  126. package/lib/infra/root-container/root-container.component.ts +28 -35
  127. package/lib/infra/stages/stages.component.html +2 -2
  128. package/lib/infra/stages/stages.component.scss +9 -37
  129. package/lib/infra/stages/stages.component.ts +4 -3
  130. package/lib/infra/view/view.component.html +7 -20
  131. package/lib/infra/view/view.component.ts +20 -5
  132. package/lib/template/advanced-search/advanced-search.component.html +12 -0
  133. package/lib/template/advanced-search/advanced-search.component.scss +0 -0
  134. package/lib/template/advanced-search/advanced-search.component.spec.ts +0 -0
  135. package/lib/template/advanced-search/advanced-search.component.ts +112 -0
  136. package/lib/template/advanced-search/advanced-search.service.ts +27 -0
  137. package/lib/template/advanced-search/search-group/persist-utils.ts +56 -0
  138. package/lib/template/advanced-search/search-groups/search-groups.component.html +32 -0
  139. package/lib/template/advanced-search/search-groups/search-groups.component.scss +0 -0
  140. package/lib/template/advanced-search/search-groups/search-groups.component.spec.ts +0 -0
  141. package/lib/template/advanced-search/search-groups/search-groups.component.ts +294 -0
  142. package/lib/template/advanced-search/search-groups/utils.ts +29 -0
  143. package/lib/template/app-shell/app-shell.component.html +4 -1
  144. package/lib/template/app-shell/app-shell.component.scss +0 -3
  145. package/lib/template/app-shell/app-shell.component.ts +66 -10
  146. package/lib/template/banner-page/banner-page.component.ts +0 -1
  147. package/lib/template/base/details-template-base.ts +67 -0
  148. package/lib/template/base/form-template-base.ts +16 -0
  149. package/lib/template/case-summary/case-summary.component.scss +0 -2
  150. package/lib/template/case-summary/case-summary.component.ts +7 -23
  151. package/lib/template/case-view/case-view.component.html +7 -7
  152. package/lib/template/case-view/case-view.component.scss +18 -10
  153. package/lib/template/case-view/case-view.component.ts +9 -15
  154. package/lib/template/confirmation/confirmation.component.html +1 -1
  155. package/lib/template/confirmation/confirmation.component.ts +1 -2
  156. package/lib/template/data-reference/data-reference-advanced-search.service.ts +16 -0
  157. package/lib/template/data-reference/data-reference.component.html +11 -8
  158. package/lib/template/data-reference/data-reference.component.ts +377 -148
  159. package/lib/template/data-reference/search-form/search-form.component.html +39 -0
  160. package/lib/template/data-reference/search-form/search-form.component.scss +11 -0
  161. package/lib/template/data-reference/search-form/search-form.component.spec.ts +0 -0
  162. package/lib/template/data-reference/search-form/search-form.component.ts +167 -0
  163. package/lib/template/data-reference/search-form/tabsData.ts +160 -0
  164. package/lib/template/data-reference/utils.ts +92 -0
  165. package/lib/template/default-form/default-form.component.html +0 -4
  166. package/lib/template/default-form/default-form.component.ts +50 -26
  167. package/lib/template/default-page/default-page.component.html +34 -0
  168. package/lib/template/default-page/default-page.component.scss +31 -0
  169. package/lib/template/default-page/default-page.component.spec.ts +24 -0
  170. package/lib/template/default-page/default-page.component.ts +64 -0
  171. package/lib/template/details/details.component.ts +7 -42
  172. package/lib/template/details-narrow-wide/details-narrow-wide.component.ts +6 -40
  173. package/lib/template/details-one-column/details-one-column.component.ts +7 -43
  174. package/lib/template/details-sub-tabs/details-sub-tabs.component.html +1 -2
  175. package/lib/template/details-sub-tabs/details-sub-tabs.component.ts +5 -38
  176. package/lib/template/details-three-column/details-three-column.component.ts +7 -44
  177. package/lib/template/details-two-column/details-two-column.component.ts +8 -45
  178. package/lib/template/details-wide-narrow/details-wide-narrow.component.ts +7 -43
  179. package/lib/template/dynamic-tabs/dynamic-tabs.component.html +3 -0
  180. package/lib/template/dynamic-tabs/dynamic-tabs.component.ts +8 -4
  181. package/lib/template/field-group-list/field-group-list.component.scss +0 -1
  182. package/lib/template/field-group-list/field-group-list.component.ts +0 -1
  183. package/lib/template/field-group-template/field-group-template.component.html +7 -7
  184. package/lib/template/field-group-template/field-group-template.component.scss +8 -0
  185. package/lib/template/field-group-template/field-group-template.component.ts +68 -48
  186. package/lib/template/field-value-list/field-value-list.component.html +2 -2
  187. package/lib/template/field-value-list/field-value-list.component.scss +6 -1
  188. package/lib/template/field-value-list/field-value-list.component.ts +0 -1
  189. package/lib/template/inline-dashboard/inline-dashboard.component.ts +0 -1
  190. package/lib/template/inline-dashboard-page/inline-dashboard-page.component.ts +2 -3
  191. package/lib/template/list-page/list-page.component.ts +0 -1
  192. package/lib/template/list-view/list-view.component.html +14 -4
  193. package/lib/template/list-view/list-view.component.scss +30 -19
  194. package/lib/template/list-view/list-view.component.ts +179 -95
  195. package/lib/template/list-view/listViewHelpers.ts +4 -10
  196. package/lib/template/list-view/utils.ts +27 -7
  197. package/lib/template/multi-reference-readonly/multi-reference-readonly.component.ts +0 -1
  198. package/lib/template/narrow-wide-form/narrow-wide-form.component.ts +1 -2
  199. package/lib/template/object-page/object-page.component.html +1 -0
  200. package/lib/template/object-page/object-page.component.scss +0 -0
  201. package/lib/template/object-page/object-page.component.spec.ts +22 -0
  202. package/lib/template/object-page/object-page.component.ts +14 -0
  203. package/lib/template/one-column/one-column.component.ts +4 -4
  204. package/lib/template/one-column-page/one-column-page.component.ts +0 -1
  205. package/lib/template/one-column-tab/one-column-tab.component.scss +1 -1
  206. package/lib/template/one-column-tab/one-column-tab.component.ts +1 -2
  207. package/lib/template/page/page.component.ts +1 -2
  208. package/lib/template/promoted-filters/promoted-filters.component.ts +1 -2
  209. package/lib/template/repeating-structures/repeating-structures.component.ts +1 -3
  210. package/lib/template/self-service-case-view/self-service-case-view.component.html +80 -0
  211. package/lib/template/self-service-case-view/self-service-case-view.component.scss +124 -0
  212. package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +24 -0
  213. package/lib/template/self-service-case-view/self-service-case-view.component.ts +216 -0
  214. package/lib/template/simple-table/simple-table.component.ts +0 -2
  215. package/lib/template/simple-table-manual/helpers.ts +127 -11
  216. package/lib/template/simple-table-manual/simple-table-manual.component.html +27 -8
  217. package/lib/template/simple-table-manual/simple-table-manual.component.scss +16 -17
  218. package/lib/template/simple-table-manual/simple-table-manual.component.ts +118 -58
  219. package/lib/template/simple-table-select/simple-table-select.component.ts +3 -4
  220. package/lib/template/single-reference-readonly/single-reference-readonly.component.html +4 -1
  221. package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +21 -0
  222. package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +104 -4
  223. package/lib/template/sub-tabs/sub-tabs.component.ts +0 -1
  224. package/lib/template/three-column/three-column.component.ts +4 -4
  225. package/lib/template/three-column-page/three-column-page.component.ts +0 -1
  226. package/lib/template/two-column/two-column.component.ts +4 -4
  227. package/lib/template/two-column-page/two-column-page.component.ts +0 -1
  228. package/lib/template/two-column-tab/two-column-tab.component.ts +1 -2
  229. package/lib/template/utils.ts +58 -0
  230. package/lib/template/wide-narrow-form/wide-narrow-form.component.ts +4 -4
  231. package/lib/template/wide-narrow-page/wide-narrow-page.component.ts +1 -2
  232. package/lib/template/wss-nav-bar/wss-nav-bar.component.html +5 -4
  233. package/lib/template/wss-nav-bar/wss-nav-bar.component.scss +2 -8
  234. package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +3 -11
  235. package/lib/widget/app-announcement/app-announcement.component.html +1 -2
  236. package/lib/widget/app-announcement/app-announcement.component.scss +2 -2
  237. package/lib/widget/app-announcement/app-announcement.component.ts +0 -1
  238. package/lib/widget/attachment/Attachment.types.ts +92 -0
  239. package/lib/widget/attachment/AttachmentUtils.ts +287 -0
  240. package/lib/widget/attachment/attachment.component.html +3 -3
  241. package/lib/widget/attachment/attachment.component.scss +2 -5
  242. package/lib/widget/attachment/attachment.component.ts +256 -259
  243. package/lib/widget/case-history/case-history.component.ts +0 -1
  244. package/lib/widget/feed-container/feed-container.component.scss +3 -9
  245. package/lib/widget/feed-container/feed-container.component.ts +9 -12
  246. package/lib/widget/file-utility/file-utility.component.html +3 -3
  247. package/lib/widget/file-utility/file-utility.component.scss +5 -16
  248. package/lib/widget/file-utility/file-utility.component.ts +2 -6
  249. package/lib/widget/list-utility/list-utility.component.scss +3 -5
  250. package/lib/widget/list-utility/list-utility.component.ts +0 -1
  251. package/lib/widget/quick-create/quick-create.component.ts +0 -1
  252. package/lib/widget/todo/todo.component.html +13 -11
  253. package/lib/widget/todo/todo.component.scss +19 -11
  254. package/lib/widget/todo/todo.component.ts +101 -87
  255. package/lib/widget/utility/utility.component.ts +0 -1
  256. package/package.json +1 -1
@@ -1,15 +1,23 @@
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 {
@@ -18,7 +26,7 @@
18
26
  color: var(--app-form-color) !important;
19
27
  cursor: pointer;
20
28
  padding: calc(0.5rem * 2) !important;
21
- height: 6rem;
29
+ height: 10rem;
22
30
  width: 100%;
23
31
  justify-content: start !important;
24
32
  background-color: transparent;
@@ -26,14 +34,14 @@
26
34
  }
27
35
 
28
36
  .quick-link-icon {
29
- width: 1em;
30
- height: 1em;
37
+ width: 3em;
38
+ height: 3em;
31
39
  flex-shrink: 0;
32
- filter: invert(100%);
33
40
  }
34
41
 
35
42
  .quick-link-button-span {
36
43
  display: flex;
44
+ flex-direction: column;
37
45
  align-items: center;
38
46
  gap: 0.5rem;
39
47
  }
@@ -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
- import { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
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,81 +42,38 @@ 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
61
 
75
- constructor(
76
- private angularPConnect: AngularPConnectService,
77
- private cdRef: ChangeDetectorRef,
78
- private utils: Utils,
79
- private dataPageService: DatapageService
80
- ) {}
81
-
82
- async ngOnInit(): Promise<void> {
83
- // First thing in initialization is registering and subscribing to the AngularPConnect service
84
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
85
- this.controlName$ = this.angularPConnect.getComponentID(this);
86
-
87
- // Then, continue on with other initialization
88
-
89
- // call updateSelf when initializing
90
- // this.updateSelf();
91
- await this.checkAndUpdate();
92
-
93
- if (this.formGroup$) {
94
- // add control to formGroup
95
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
96
- this.fieldControl.setValue(this.value$);
97
- this.bHasForm$ = true;
98
- } else {
99
- this.bReadonly$ = true;
100
- this.bHasForm$ = false;
101
- }
62
+ // Override ngOnInit method
63
+ override async ngOnInit(): Promise<void> {
64
+ super.ngOnInit();
102
65
 
103
66
  this.filteredOptions = this.fieldControl.valueChanges.pipe(
104
67
  startWith(''),
105
- map(value => this._filter(value || ''))
68
+ map(value => this._filter((value as string) || ''))
106
69
  );
107
70
  }
108
71
 
109
- ngOnDestroy(): void {
110
- if (this.formGroup$) {
111
- this.formGroup$.removeControl(this.controlName$);
112
- }
113
-
114
- if (this.angularPConnectData.unsubscribeFn) {
115
- this.angularPConnectData.unsubscribeFn();
116
- }
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$);
117
77
  }
118
78
 
119
79
  private _filter(value: string): string[] {
@@ -121,35 +81,27 @@ export class AutoCompleteComponent implements OnInit, OnDestroy {
121
81
  return this.options$?.filter(option => option.value?.toLowerCase().includes(filterVal));
122
82
  }
123
83
 
124
- // Callback passed when subscribing to store change
125
- async onStateChange() {
126
- await this.checkAndUpdate();
127
- }
128
-
129
- async checkAndUpdate() {
130
- // Should always check the bridge to see if the component should
131
- // update itself (re-render)
132
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
133
-
134
- // ONLY call updateSelf when the component should update
135
- if (bUpdateSelf) {
136
- await this.updateSelf();
137
- }
138
- }
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;
139
90
 
140
- // updateSelf
141
- async updateSelf(): Promise<void> {
142
- // starting very simple...
91
+ // Update component common properties
92
+ this.updateComponentCommonProperties(this.configProps$);
143
93
 
144
- // moved this from ngOnInit() and call this from there instead...
145
- this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as AutoCompleteProps;
94
+ // Set component specific properties
95
+ const { value, listType, parameters } = this.configProps$;
146
96
 
147
- if (this.configProps$.value != undefined) {
148
- const index = this.options$?.findIndex(element => element.key === this.configProps$.value);
149
- 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$);
150
101
  }
151
102
 
152
- this.setPropertyValuesFromProps();
103
+ this.listType = listType;
104
+ this.parameters = parameters;
153
105
 
154
106
  const context = this.pConn$.getContextName();
155
107
  const { columns, datasource } = this.generateColumnsAndDataSource();
@@ -157,70 +109,23 @@ export class AutoCompleteComponent implements OnInit, OnDestroy {
157
109
  if (columns) {
158
110
  this.columns = this.preProcessColumns(columns);
159
111
  }
160
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
161
- setTimeout(() => {
162
- if (this.configProps$.required != null) {
163
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
164
- }
165
- this.cdRef.detectChanges();
166
- });
167
-
168
- if (this.configProps$.visibility != null) {
169
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
170
- }
171
112
 
172
- // disabled
173
- if (this.configProps$.disabled != undefined) {
174
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
175
- }
176
-
177
- if (this.bDisabled$) {
178
- this.fieldControl.disable();
179
- } else {
180
- this.fieldControl.enable();
181
- }
182
-
183
- if (this.configProps$.readOnly != null) {
184
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
185
- }
186
-
187
- this.componentReference = (this.pConn$.getStateProps() as any).value;
188
113
  if (this.listType === 'associated') {
189
- 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);
190
116
  }
191
117
 
192
118
  if (!this.displayMode$ && this.listType !== 'associated') {
193
119
  const results = await this.dataPageService.getDataPageData(datasource, this.parameters, context);
194
120
  this.fillOptions(results);
195
121
  }
196
-
197
- // trigger display of error message with field control
198
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
199
- const timer = interval(100).subscribe(() => {
200
- this.fieldControl.setErrors({ message: true });
201
- this.fieldControl.markAsTouched();
202
-
203
- timer.unsubscribe();
204
- });
205
- }
206
- }
207
-
208
- setPropertyValuesFromProps() {
209
- this.testId = this.configProps$.testId;
210
- this.label$ = this.configProps$.label;
211
- this.placeholder = this.configProps$.placeholder || '';
212
- this.displayMode$ = this.configProps$.displayMode;
213
- this.listType = this.configProps$.listType;
214
- this.hideLabel = this.configProps$.hideLabel;
215
- this.helperText = this.configProps$.helperText;
216
- this.parameters = this.configProps$?.parameters;
217
122
  }
218
123
 
219
124
  generateColumnsAndDataSource() {
220
125
  let datasource = this.configProps$.datasource;
221
126
  let columns = this.configProps$.columns;
222
127
  // const { deferDatasource, datasourceMetadata } = this.configProps$;
223
- const { deferDatasource, datasourceMetadata }: any = this.pConn$.getConfigProps();
128
+ const { deferDatasource, datasourceMetadata } = this.pConn$.getConfigProps();
224
129
  // convert associated to datapage listtype and transform props
225
130
  // Process deferDatasource when datapage name is present. WHhen tableType is promptList / localList
226
131
  if (deferDatasource && datasourceMetadata?.datasource?.name) {
@@ -258,7 +163,7 @@ export class AutoCompleteComponent implements OnInit, OnDestroy {
258
163
  };
259
164
  optionsData.push(obj);
260
165
  });
261
- this.options$ = optionsData;
166
+ this.setOptions(optionsData);
262
167
  }
263
168
 
264
169
  flattenParameters(params = {}) {
@@ -295,51 +200,24 @@ export class AutoCompleteComponent implements OnInit, OnDestroy {
295
200
  }
296
201
 
297
202
  fieldOnChange(event: Event) {
298
- // this works - this.pConn$.setValue( this.componentReference, `property: ${this.componentReference}`);
299
- // this works - this.pConn$.setValue( this.componentReference, this.fieldControl.value);
300
- // PConnect wants to use changeHandler for onChange
301
- // this.angularPConnect.changeHandler( this, event);
302
- this.filterValue = (event.target as HTMLInputElement).value;
303
-
304
- this.angularPConnectData.actions?.onChange(this, event);
203
+ const value = (event.target as HTMLInputElement).value;
204
+ this.filterValue = value;
205
+ handleEvent(this.actionsApi, 'change', this.propName, value);
305
206
  }
306
207
 
307
- optionChanged(event: MatAutocompleteSelectedEvent) {
308
- this.angularPConnectData.actions?.onChange(this, event);
309
- }
208
+ optionChanged(event: any) {
209
+ const val = event?.option?.value;
310
210
 
311
- fieldOnBlur(event: Event) {
312
211
  let key = '';
313
- const el = event?.target as HTMLInputElement;
314
- if (el?.value) {
315
- const index = this.options$?.findIndex(element => element.value === el.value);
316
- 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;
317
215
  }
318
-
319
216
  const value = key;
320
- const actionsApi = this.pConn$?.getActionsApi();
321
- const propName = (this.pConn$?.getStateProps() as any).value;
322
- handleEvent(actionsApi, 'changeNblur', propName, value);
323
- if (this.configProps$?.onRecordChange) {
324
- el.value = value;
325
- this.configProps$.onRecordChange(event);
326
- }
327
- }
328
-
329
- getErrorMessage() {
330
- let errMessage = '';
217
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
331
218
 
332
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
333
- if (this.fieldControl.hasError('message')) {
334
- errMessage = this.angularPConnectData.validateMessage ?? '';
335
- return errMessage;
219
+ if (this.onRecordChange) {
220
+ this.onRecordChange.emit(value);
336
221
  }
337
- if (this.fieldControl.hasError('required')) {
338
- errMessage = 'You must enter a value';
339
- } else if (this.fieldControl.errors) {
340
- errMessage = this.fieldControl.errors.toString();
341
- }
342
-
343
- return errMessage;
344
222
  }
345
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 'packages/angular-sdk-components/src/public-api';
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 {