@pega/angular-sdk-overrides 25.1.12 → 26.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 (168) hide show
  1. package/lib/designSystemExtension/alert/alert.component.html +4 -1
  2. package/lib/designSystemExtension/alert/alert.component.scss +9 -10
  3. package/lib/designSystemExtension/alert/alert.component.ts +6 -2
  4. package/lib/designSystemExtension/field-group/field-group.component.ts +11 -3
  5. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.html +51 -36
  6. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.scss +12 -0
  7. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.ts +11 -0
  8. package/lib/designSystemExtension/operator/operator.component.html +5 -3
  9. package/lib/designSystemExtension/operator/operator.component.scss +7 -0
  10. package/lib/designSystemExtension/operator/operator.component.ts +2 -1
  11. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.html +100 -10
  12. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +141 -1
  13. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.spec.ts +1 -1
  14. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.ts +240 -72
  15. package/lib/field/auto-complete/auto-complete.component.html +46 -5
  16. package/lib/field/auto-complete/auto-complete.component.scss +92 -0
  17. package/lib/field/auto-complete/auto-complete.component.ts +350 -23
  18. package/lib/field/cancel-alert/cancel-alert.component.ts +38 -15
  19. package/lib/field/check-box/check-box.component.html +8 -6
  20. package/lib/field/check-box/check-box.component.ts +9 -2
  21. package/lib/field/currency/currency.component.html +2 -1
  22. package/lib/field/currency/currency.component.ts +10 -1
  23. package/lib/field/date/date.component.html +2 -1
  24. package/lib/field/date/date.component.ts +2 -0
  25. package/lib/field/date-time/date-time.component.html +2 -1
  26. package/lib/field/date-time/date-time.component.scss +46 -40
  27. package/lib/field/date-time/date-time.component.ts +29 -0
  28. package/lib/field/decimal/decimal.component.html +2 -1
  29. package/lib/field/decimal/decimal.component.ts +2 -0
  30. package/lib/field/dropdown/dropdown.component.html +4 -1
  31. package/lib/field/dropdown/dropdown.component.ts +18 -19
  32. package/lib/field/email/email.component.html +2 -1
  33. package/lib/field/email/email.component.ts +2 -2
  34. package/lib/field/embedded-data-multi/embedded-data-multi.component.html +3 -0
  35. package/lib/field/embedded-data-multi/embedded-data-multi.component.scss +0 -0
  36. package/lib/field/embedded-data-multi/embedded-data-multi.component.ts +173 -0
  37. package/lib/field/field.base.ts +27 -1
  38. package/lib/field/group/group.component.html +1 -1
  39. package/lib/field/group/group.component.ts +16 -7
  40. package/lib/field/integer/integer.component.html +2 -1
  41. package/lib/field/integer/integer.component.ts +4 -2
  42. package/lib/field/location/location.component.html +2 -1
  43. package/lib/field/location/location.component.ts +3 -1
  44. package/lib/field/multiselect/multiselect.component.html +1 -1
  45. package/lib/field/multiselect/multiselect.component.ts +23 -4
  46. package/lib/field/multiselect/utils.ts +5 -3
  47. package/lib/field/object-reference/object-reference.component.html +30 -15
  48. package/lib/field/object-reference/object-reference.component.ts +818 -94
  49. package/lib/field/percentage/percentage.component.html +2 -1
  50. package/lib/field/percentage/percentage.component.ts +10 -1
  51. package/lib/field/phone/phone.component.html +2 -1
  52. package/lib/field/phone/phone.component.ts +2 -1
  53. package/lib/field/radio-buttons/radio-buttons.component.html +2 -1
  54. package/lib/field/radio-buttons/radio-buttons.component.ts +10 -1
  55. package/lib/field/rich-text/rich-text.component.scss +1 -166
  56. package/lib/field/rich-text/rich-text.component.spec.ts +1 -1
  57. package/lib/field/rich-text/rich-text.component.ts +1 -1
  58. package/lib/field/selectable-card/selectable-card.component.html +1 -0
  59. package/lib/field/selectable-card/selectable-card.component.ts +31 -16
  60. package/lib/field/semantic-link/semantic-link.component.html +1 -1
  61. package/lib/field/semantic-link/semantic-link.component.scss +4 -0
  62. package/lib/field/semantic-link/semantic-link.component.ts +13 -7
  63. package/lib/field/text-area/text-area.component.html +2 -1
  64. package/lib/field/text-area/text-area.component.ts +2 -1
  65. package/lib/field/text-input/text-input.component.html +2 -1
  66. package/lib/field/text-input/text-input.component.ts +2 -1
  67. package/lib/field/time/time.component.html +2 -1
  68. package/lib/field/time/time.component.ts +2 -1
  69. package/lib/field/url/url.component.html +2 -1
  70. package/lib/field/url/url.component.ts +2 -1
  71. package/lib/field/user-reference/user-reference.component.html +4 -2
  72. package/lib/field/user-reference/user-reference.component.ts +11 -6
  73. package/lib/infra/Containers/flow-container/flow-container.component.html +2 -2
  74. package/lib/infra/Containers/flow-container/flow-container.component.ts +34 -42
  75. package/lib/infra/Containers/modal-view-container/data-view-action-buttons/data-view-action-buttons.component.html +12 -0
  76. package/lib/infra/Containers/modal-view-container/data-view-action-buttons/data-view-action-buttons.component.spec.ts +130 -0
  77. package/lib/infra/Containers/modal-view-container/data-view-action-buttons/data-view-action-buttons.component.ts +77 -0
  78. package/lib/infra/Containers/modal-view-container/modal-view-container.component.html +35 -8
  79. package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +185 -196
  80. package/lib/infra/Containers/view-container/view-container.component.html +1 -1
  81. package/lib/infra/Containers/view-container/view-container.component.ts +36 -43
  82. package/lib/infra/assignment/assignment.component.html +2 -1
  83. package/lib/infra/assignment/assignment.component.ts +44 -22
  84. package/lib/infra/assignment-card/assignment-card.component.html +1 -0
  85. package/lib/infra/assignment-card/assignment-card.component.ts +2 -8
  86. package/lib/infra/defer-load/defer-load.component.ts +7 -5
  87. package/lib/infra/multi-step/multi-step.component.html +25 -33
  88. package/lib/infra/multi-step/multi-step.component.scss +67 -125
  89. package/lib/infra/multi-step/multi-step.component.ts +11 -0
  90. package/lib/infra/navbar/navbar.component.ts +33 -36
  91. package/lib/infra/reference/reference.component.html +7 -1
  92. package/lib/infra/reference/reference.component.ts +63 -109
  93. package/lib/infra/region/region.component.ts +1 -3
  94. package/lib/infra/root-container/root-container.component.html +1 -0
  95. package/lib/infra/root-container/root-container.component.ts +34 -42
  96. package/lib/infra/view/view.component.ts +22 -46
  97. package/lib/template/advanced-search/advanced-search.component.ts +0 -1
  98. package/lib/template/advanced-search/search-groups/search-groups.component.ts +2 -3
  99. package/lib/template/app-shell/app-shell.component.ts +13 -13
  100. package/lib/template/banner-page/banner-page.component.ts +1 -2
  101. package/lib/template/base/details-template-base.ts +41 -14
  102. package/lib/template/base/form-template-base.ts +0 -2
  103. package/lib/template/case-summary/case-summary.component.ts +15 -7
  104. package/lib/template/case-view/case-view.component.html +14 -2
  105. package/lib/template/case-view/case-view.component.spec.ts +119 -10
  106. package/lib/template/case-view/case-view.component.ts +52 -3
  107. package/lib/template/data-reference/data-reference.component.ts +29 -22
  108. package/lib/template/data-reference/search-form/search-form.component.html +1 -1
  109. package/lib/template/data-reference/search-form/search-form.component.ts +9 -1
  110. package/lib/template/data-reference/search-form/tabsData.ts +0 -1
  111. package/lib/template/default-form/default-form.component.html +20 -4
  112. package/lib/template/default-form/default-form.component.ts +14 -5
  113. package/lib/template/default-page/default-page.component.ts +1 -2
  114. package/lib/template/details/details.component.html +23 -3
  115. package/lib/template/details/details.component.scss +9 -2
  116. package/lib/template/details/details.component.ts +3 -70
  117. package/lib/template/details-narrow-wide/details-narrow-wide.component.html +21 -2
  118. package/lib/template/details-narrow-wide/details-narrow-wide.component.scss +8 -1
  119. package/lib/template/details-narrow-wide/details-narrow-wide.component.ts +3 -39
  120. package/lib/template/details-one-column/details-one-column.component.html +23 -1
  121. package/lib/template/details-one-column/details-one-column.component.scss +14 -0
  122. package/lib/template/details-one-column/details-one-column.component.ts +3 -40
  123. package/lib/template/details-three-column/details-three-column.component.html +21 -2
  124. package/lib/template/details-three-column/details-three-column.component.scss +8 -1
  125. package/lib/template/details-three-column/details-three-column.component.ts +3 -48
  126. package/lib/template/details-two-column/details-two-column.component.html +21 -2
  127. package/lib/template/details-two-column/details-two-column.component.scss +8 -1
  128. package/lib/template/details-two-column/details-two-column.component.ts +3 -46
  129. package/lib/template/details-wide-narrow/details-wide-narrow.component.html +21 -2
  130. package/lib/template/details-wide-narrow/details-wide-narrow.component.scss +8 -1
  131. package/lib/template/details-wide-narrow/details-wide-narrow.component.ts +3 -43
  132. package/lib/template/dynamic-tabs/dynamic-tabs.component.html +1 -0
  133. package/lib/template/field-group-template/field-group-template.component.ts +19 -6
  134. package/lib/template/field-value-list/field-value-list.component.scss +17 -0
  135. package/lib/template/inline-dashboard-page/inline-dashboard-page.component.ts +2 -10
  136. package/lib/template/list-view/list-view.component.ts +47 -11
  137. package/lib/template/one-column/one-column.component.html +3 -0
  138. package/lib/template/one-column-tab/one-column-tab.component.html +1 -0
  139. package/lib/template/page/page.component.html +1 -0
  140. package/lib/template/self-service-case-view/self-service-case-view.component.html +13 -1
  141. package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +96 -11
  142. package/lib/template/self-service-case-view/self-service-case-view.component.ts +52 -3
  143. package/lib/template/simple-table/simple-table.component.ts +11 -1
  144. package/lib/template/simple-table-manual/helpers.ts +84 -16
  145. package/lib/template/simple-table-manual/simple-table-manual.component.html +30 -14
  146. package/lib/template/simple-table-manual/simple-table-manual.component.scss +8 -2
  147. package/lib/template/simple-table-manual/simple-table-manual.component.ts +142 -46
  148. package/lib/template/single-reference-readonly/single-reference-readonly.component.html +0 -0
  149. package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +2 -3
  150. package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +7 -8
  151. package/lib/template/wide-narrow-page/wide-narrow-page.component.ts +0 -3
  152. package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +19 -21
  153. package/lib/widget/attachment/AttachmentUtils.ts +19 -11
  154. package/lib/widget/attachment/attachment.component.html +16 -6
  155. package/lib/widget/attachment/attachment.component.ts +14 -4
  156. package/lib/widget/case-history/case-history.component.ts +6 -2
  157. package/lib/widget/feed-container/feed-container.component.ts +1 -199
  158. package/lib/widget/file-utility/file-utility.component.ts +26 -30
  159. package/lib/widget/todo/todo.component.ts +7 -2
  160. package/package.json +2 -2
  161. package/lib/designSystemExtension/material-details/material-details.component.html +0 -40
  162. package/lib/designSystemExtension/material-details/material-details.component.scss +0 -116
  163. package/lib/designSystemExtension/material-details/material-details.component.spec.ts +0 -24
  164. package/lib/designSystemExtension/material-details/material-details.component.ts +0 -31
  165. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +0 -29
  166. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +0 -34
  167. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.spec.ts +0 -22
  168. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.ts +0 -37
@@ -1,5 +1,5 @@
1
1
  <div>
2
- <div><component-mapper name="AlertBanner" [props]="{ banners: bannerService.banners }" [parent]="this"></component-mapper></div>
2
+ <div><component-mapper name="AlertBanner" [props]="{ banners: bannerService.getBanners(itemKey$) }" [parent]="this"></component-mapper></div>
3
3
  <div *ngIf="bHasNavigation$" class="psdk-stepper">
4
4
  <component-mapper
5
5
  name="MultiStep"
@@ -10,6 +10,7 @@
10
10
  arMainButtons$,
11
11
  arSecondaryButtons$,
12
12
  bIsVertical$,
13
+ stepIndicator$,
13
14
  arCurrentStepIndicies$,
14
15
  arNavigationSteps$
15
16
  }"
@@ -7,7 +7,6 @@ import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-c
7
7
  import { ErrorMessagesService } from '@pega/angular-sdk-components';
8
8
  import { ProgressSpinnerService } from '@pega/angular-sdk-components';
9
9
  import { BannerService } from '@pega/angular-sdk-components';
10
- import { ReferenceComponent } from '@pega/angular-sdk-components';
11
10
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
12
11
 
13
12
  function getRefreshProps(refreshConditions) {
@@ -28,6 +27,8 @@ interface AssignmentProps {
28
27
  template: string;
29
28
  }
30
29
 
30
+ type StepIndicator = 'horizontal' | 'vertical' | 'vertical-start';
31
+
31
32
  @Component({
32
33
  selector: 'app-assignment',
33
34
  templateUrl: './assignment.component.html',
@@ -61,6 +62,7 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
61
62
 
62
63
  bHasNavigation$ = false;
63
64
  bIsVertical$ = false;
65
+ stepIndicator$: StepIndicator = 'horizontal';
64
66
  prevNavigationSteps: any[] = [];
65
67
  arCurrentStepIndicies$: number[] = [];
66
68
  arNavigationSteps$: any[] = [];
@@ -98,6 +100,9 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
98
100
 
99
101
  this.initComponent();
100
102
 
103
+ // ngOnChanges runs before ngOnInit, so updateChanges() never registers on first render.
104
+ this.registerForRefresh();
105
+
101
106
  this.angularPConnect.shouldComponentUpdate(this);
102
107
 
103
108
  this.bInitialized = true;
@@ -109,6 +114,8 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
109
114
  if (this.angularPConnectData.unsubscribeFn) {
110
115
  this.angularPConnectData.unsubscribeFn();
111
116
  }
117
+
118
+ this.bannerService.clearBanners(this.itemKey$);
112
119
  }
113
120
 
114
121
  // Callback passed when subscribing to store change
@@ -126,6 +133,9 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
126
133
  // AND removing the "gate" that was put there since shouldComponentUpdate
127
134
  // should be the real "gate"
128
135
  if (bUpdateSelf) {
136
+ // The engine drops registrations when it cleans the context cache, so re-register on each update (as React does per render).
137
+ this.registerForRefresh();
138
+
129
139
  let loadingInfo;
130
140
  try {
131
141
  // loadingInfo = this.pConn$.getLoadingStatus();
@@ -149,8 +159,7 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
149
159
 
150
160
  this.registerForRefresh();
151
161
 
152
- // pConn$ may be a 'reference' component, so normalize it
153
- this.newPConn$ = ReferenceComponent.normalizePConn(this.pConn$);
162
+ this.newPConn$ = this.pConn$;
154
163
 
155
164
  if (this.arChildren$) {
156
165
  this.createButtons();
@@ -158,9 +167,7 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
158
167
  }
159
168
 
160
169
  initComponent() {
161
- // pConn$ may be a 'reference' component, so normalize it
162
- // this.pConn$ = ReferenceComponent.normalizePConn(this.pConn$);
163
- this.newPConn$ = ReferenceComponent.normalizePConn(this.pConn$);
170
+ this.newPConn$ = this.pConn$;
164
171
 
165
172
  // prevent re-intializing with flowContainer update unless an action is taken
166
173
  this.bReInit = false;
@@ -203,7 +210,6 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
203
210
  this.cancelCreateStageAssignment = actionsAPI.cancelCreateStageAssignment.bind(actionsAPI);
204
211
  this.approveCase = actionsAPI.approveCase?.bind(actionsAPI);
205
212
  this.rejectCase = actionsAPI.rejectCase?.bind(actionsAPI);
206
-
207
213
  if (this.arChildren$) {
208
214
  this.createButtons();
209
215
  }
@@ -245,14 +251,22 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
245
251
  }
246
252
 
247
253
  createButtonsForMultiStepForm(oCaseInfo) {
248
- this.bHasNavigation$ = true;
249
-
250
- if ((oCaseInfo.navigation.template && oCaseInfo.navigation.template.toLowerCase() === 'standard') || oCaseInfo?.navigation?.steps?.length === 1) {
251
- this.bHasNavigation$ = false;
252
- } else if (oCaseInfo.navigation.template && oCaseInfo.navigation.template.toLowerCase() === 'vertical') {
253
- this.bIsVertical$ = true;
254
- } else {
255
- this.bIsVertical$ = false;
254
+ const navigationTemplate = oCaseInfo.navigation.template?.toLowerCase();
255
+ const stepCount = oCaseInfo.navigation.steps?.length ?? 0;
256
+ const shouldHideNavigation = navigationTemplate === 'standard' || stepCount <= 1;
257
+
258
+ this.bHasNavigation$ = !shouldHideNavigation;
259
+ this.bIsVertical$ = false;
260
+ this.stepIndicator$ = 'horizontal';
261
+
262
+ if (!shouldHideNavigation) {
263
+ if (navigationTemplate === 'vertical') {
264
+ this.bIsVertical$ = true;
265
+ this.stepIndicator$ = 'vertical';
266
+ } else if (navigationTemplate === 'vertical-left') {
267
+ this.bIsVertical$ = true;
268
+ this.stepIndicator$ = 'vertical-start';
269
+ }
256
270
  }
257
271
 
258
272
  // iterate through steps to find current one(s)
@@ -309,7 +323,7 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
309
323
 
310
324
  buttonClick(sAction, sButtonType) {
311
325
  this.snackBarRef?.dismiss();
312
- this.bannerService.clearBanners();
326
+ this.bannerService.clearBanners(this.itemKey$);
313
327
  PCore.getPubSubUtils().publish('clearBannerMessages');
314
328
  // right now, done on an individual basis, setting bReInit to true
315
329
  // upon the next flow container state change, will cause the flow container
@@ -483,7 +497,11 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
483
497
  }
484
498
 
485
499
  registerForRefresh() {
486
- const refreshConditions = this.pConn$.getCaseInfo()?.getActionRefreshConditions();
500
+ const caseInfo = this.pConn$.getCaseInfo();
501
+ if (!caseInfo) {
502
+ return;
503
+ }
504
+ const refreshConditions = caseInfo.getActionRefreshConditions();
487
505
  const pageReference = this.pConn$.getPageReference();
488
506
  const context = this.pConn$.getContextName();
489
507
 
@@ -492,7 +510,7 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
492
510
 
493
511
  // refresh api registration
494
512
  const refreshProps = getRefreshProps(refreshConditions);
495
- const caseKey = this.pConn$.getCaseInfo().getKey();
513
+ const caseKey = caseInfo.getKey();
496
514
  const refreshOptions = {
497
515
  autoDetectRefresh: true,
498
516
  preserveClientChanges: false
@@ -501,10 +519,14 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
501
519
  refreshProps.forEach(prop => {
502
520
  PCore.getRefreshManager().registerForRefresh(
503
521
  'PROP_CHANGE',
504
- this.pConn$.getActionsApi().refreshCaseView.bind(this.pConn$.getActionsApi(), caseKey, '', pageReference, {
505
- ...refreshOptions,
506
- refreshFor: prop[0]
507
- }),
522
+ // The registered prop is an authored pattern with an empty list index (ex: ".Addons().Type"),
523
+ // which the server rejects. The refresh manager hands back the concrete path that changed.
524
+ (matchedPath?: string) => {
525
+ this.pConn$.getActionsApi().refreshCaseView(caseKey, '', pageReference, {
526
+ ...refreshOptions,
527
+ refreshFor: matchedPath || prop[0]
528
+ });
529
+ },
508
530
  `${pageReference}.${prop[1]}`,
509
531
  `${context}/${pageReference}`,
510
532
  context
@@ -2,6 +2,7 @@
2
2
  <div *ngFor="let kid of childrenArray" class="psdk-assignment-card-child">
3
3
  <div [ngSwitch]="kid.getPConnect().getComponentName()">
4
4
  <component-mapper *ngSwitchCase="'View'" name="View" [props]="{ formGroup$, pConn$: kid.getPConnect() }"></component-mapper>
5
+ <component-mapper *ngSwitchCase="'reference'" name="reference" [props]="{ formGroup$, pConn$: kid.getPConnect() }"></component-mapper>
5
6
  <component-mapper
6
7
  *ngSwitchCase="'CaseCreateStage'"
7
8
  name="CaseCreateStage"
@@ -1,7 +1,6 @@
1
1
  import { Component, OnInit, Input, Output, EventEmitter, forwardRef, OnChanges, SimpleChanges } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormGroup, ReactiveFormsModule } from '@angular/forms';
4
- import { ReferenceComponent } from '@pega/angular-sdk-components';
5
4
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
6
5
 
7
6
  function isChildrenUpdated(children) {
@@ -34,18 +33,13 @@ export class AssignmentCardComponent implements OnInit, OnChanges {
34
33
  @Output() actionButtonClick: EventEmitter<any> = new EventEmitter();
35
34
 
36
35
  ngOnInit(): void {
37
- // Children may contain 'reference' component, so we need to
38
- // normalize them
39
- this.childrenArray = ReferenceComponent.normalizePConnArray(this.arChildren$);
36
+ this.childrenArray = this.arChildren$;
40
37
  }
41
38
 
42
39
  ngOnChanges(changes: SimpleChanges) {
43
- // Children may contain 'reference' component, so we need to
44
- // normalize them
45
-
46
40
  const { arChildren$ } = changes;
47
41
  if (isChildrenUpdated(arChildren$)) {
48
- this.childrenArray = ReferenceComponent.normalizePConnArray(this.arChildren$);
42
+ this.childrenArray = this.arChildren$;
49
43
  }
50
44
  }
51
45
 
@@ -1,7 +1,6 @@
1
- import { Component, OnInit, Input, forwardRef, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';
1
+ import { Component, OnInit, Input, forwardRef, OnDestroy, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { publicConstants } from '@pega/pcore-pconnect-typedefs/constants';
4
- import { ReferenceComponent } from '@pega/angular-sdk-components';
5
4
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
6
5
  import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
7
6
 
@@ -36,7 +35,10 @@ export class DeferLoadComponent implements OnInit, OnDestroy, OnChanges {
36
35
  PAGE: any;
37
36
  DATA: any;
38
37
  lastUpdateCaseTime;
39
- constructor(private angularPConnect: AngularPConnectService) {
38
+ constructor(
39
+ private angularPConnect: AngularPConnectService,
40
+ private cdRef: ChangeDetectorRef
41
+ ) {
40
42
  this.constants = PCore.getConstants();
41
43
  }
42
44
 
@@ -127,13 +129,13 @@ export class DeferLoadComponent implements OnInit, OnDestroy, OnChanges {
127
129
  const configObject = PCore.createPConnect(config);
128
130
  configObject.getPConnect().setInheritedProp('displayMode', 'DISPLAY_ONLY');
129
131
 
130
- this.childComponentPConnect = ReferenceComponent.normalizePConn(configObject.getPConnect());
132
+ this.childComponentPConnect = configObject.getPConnect();
131
133
 
132
134
  if (this.deferLoadId) {
133
135
  PCore.getDeferLoadManager().stop(this.deferLoadId, this.pConn$.getContextName());
134
136
  }
135
137
  }
136
- // this.cdRef.detectChanges();
138
+ this.cdRef.detectChanges();
137
139
  }
138
140
 
139
141
  loadActiveTab() {
@@ -1,43 +1,35 @@
1
1
  <div *ngIf="bShow$">
2
- <div *ngIf="bIsVertical$" class="psdk-vertical-stepper">
3
- <div *ngFor="let mainStep of arNavigationSteps$; let i = index" class="psdk-vertical-step">
4
- <div class="psdk-vertical-step-header">
5
- <div class="{{ _getVIconClass(mainStep.visited_status) }}">
6
- <div class="psdk-vertical-step-icon-content">
7
- <span>{{ i + 1 }}</span>
8
- </div>
9
- </div>
10
- <div class="{{ _getVLabelClass(mainStep.visited_status) }}">
11
- {{ mainStep.name }}
12
- </div>
13
- </div>
14
- <div class="{{ _getVBodyClass(i) }}">
15
- <ng-container *ngIf="mainStep?.steps && mainStep.visited_status == 'current'">
16
- <div *ngFor="let subStep of mainStep.steps">
17
- <div *ngIf="subStep.visited_status == 'current'">
18
- <component-mapper
19
- name="AssignmentCard"
20
- [props]="{ pConn$, formGroup$, arChildren$, arMainButtons$, arSecondaryButtons$ }"
21
- [parent]="this"
22
- [outputEvents]="{ actionButtonClick: onActionButtonClick }"
23
- ></component-mapper>
2
+ <div
3
+ *ngIf="isVerticalLayout()"
4
+ class="psdk-vertical-stepper-container"
5
+ [class.stepper-start]="stepIndicator$ === 'vertical-start'"
6
+ [class.stepper-end]="stepIndicator$ === 'vertical'"
7
+ >
8
+ <div class="psdk-stepper-rail">
9
+ <div *ngFor="let mainStep of arNavigationSteps$; let i = index" class="psdk-vertical-step">
10
+ <div class="psdk-vertical-step-header">
11
+ <div class="{{ _getVIconClass(mainStep.visited_status) }}">
12
+ <div class="psdk-vertical-step-icon-content">
13
+ <span>{{ i + 1 }}</span>
24
14
  </div>
25
15
  </div>
26
- </ng-container>
27
-
28
- <ng-container *ngIf="!mainStep?.steps && mainStep.visited_status == 'current'">
29
- <component-mapper
30
- name="AssignmentCard"
31
- [props]="{ pConn$, formGroup$, arChildren$, arMainButtons$, arSecondaryButtons$ }"
32
- [parent]="this"
33
- [outputEvents]="{ actionButtonClick: onActionButtonClick }"
34
- ></component-mapper>
35
- </ng-container>
16
+ <div class="{{ _getVLabelClass(mainStep.visited_status) }}">
17
+ {{ mainStep.name }}
18
+ </div>
19
+ </div>
36
20
  </div>
37
21
  </div>
22
+ <div class="psdk-stepper-content">
23
+ <component-mapper
24
+ name="AssignmentCard"
25
+ [props]="{ pConn$, formGroup$, arChildren$, arMainButtons$, arSecondaryButtons$ }"
26
+ [parent]="this"
27
+ [outputEvents]="{ actionButtonClick: onActionButtonClick }"
28
+ ></component-mapper>
29
+ </div>
38
30
  </div>
39
31
 
40
- <div *ngIf="!bIsVertical$" class="psdk-horizontal-stepper">
32
+ <div *ngIf="isHorizontalLayout()" class="psdk-horizontal-stepper">
41
33
  <div class="psdk-horizontal-stepper-header-container">
42
34
  <ng-container *ngFor="let mainStep of arNavigationSteps$; let i = index">
43
35
  <div class="psdk-horizontal-step-header">
@@ -1,59 +1,3 @@
1
- .psdk-case-view-divider {
2
- border-bottom: 0.0625rem solid var(--mat-sys-outline-variant);
3
- }
4
-
5
- .psdk-icon {
6
- padding: 0rem 0.125rem;
7
- min-width: unset;
8
- }
9
-
10
- .psdk-current-svg-icon {
11
- width: 1rem;
12
- filter: var(--app-primary-color-filter);
13
- }
14
-
15
- .psdk-not-current-svg-icon {
16
- width: 1rem;
17
- filter: var(--app-neutral-color-filter);
18
- }
19
-
20
- mat-vertical-stepper {
21
- background-color: transparent;
22
- }
23
- mat-horizontal-stepper {
24
- background-color: transparent;
25
- }
26
-
27
- .psdk-sub-step-current {
28
- padding-left: 0.625rem;
29
- font-weight: bold;
30
- color: var(--mat-sys-on-secondary-container);
31
- }
32
-
33
- .psdk-sub-step-not-current {
34
- color: var(--mat-sys-on-surface-variant);
35
- padding-left: 0.625rem;
36
- }
37
-
38
- .psdk-flow-container-top {
39
- padding: 0rem 0.625rem;
40
- border-radius: 0.3125rem;
41
- }
42
- .psdk-flow-container {
43
- padding-left: 2.1875rem;
44
- }
45
-
46
- .psdk-sub-step-list {
47
- list-style: none;
48
- padding-bottom: 0.625rem;
49
- }
50
-
51
- .psdk-vertical-stepper {
52
- background-color: transparent;
53
- display: block;
54
- text-align: left;
55
- }
56
-
57
1
  .psdk-vertical-step {
58
2
  display: block;
59
3
  }
@@ -71,8 +15,12 @@ mat-horizontal-stepper {
71
15
  }
72
16
 
73
17
  .psdk-vertical-step-icon {
74
- margin-right: 12px;
75
18
  background-color: var(--mat-sys-secondary);
19
+ }
20
+
21
+ .psdk-vertical-step-icon,
22
+ .psdk-vertical-step-icon-selected {
23
+ margin-right: 12px;
76
24
  border-radius: 50%;
77
25
  height: 24px;
78
26
  width: 24px;
@@ -80,67 +28,95 @@ mat-horizontal-stepper {
80
28
  position: relative;
81
29
  }
82
30
 
83
- .psdk-vertical-step-icon-content {
31
+ .psdk-vertical-step-icon-content,
32
+ .psdk-horizontal-step-icon-content {
33
+ display: block;
84
34
  position: absolute;
85
35
  top: 50%;
86
36
  left: 50%;
87
37
  transform: translate(-50%, -50%);
88
38
  }
89
39
 
90
- .psdk-vertical-step-icon-selected {
91
- margin-right: 12px;
40
+ .psdk-vertical-step-icon-selected,
41
+ .psdk-horizontal-step-icon-selected {
92
42
  background-color: var(--mat-sys-primary);
93
43
  color: var(--mat-sys-surface);
94
- border-radius: 50%;
95
- height: 24px;
96
- width: 24px;
97
- flex-shrink: 0;
98
- position: relative;
99
44
  }
100
45
 
101
- .psdk-vertical-step-label {
102
- color: var(--mat-sys-on-surface-variant);
46
+ .psdk-vertical-step-label,
47
+ .psdk-vertical-step-label-selected,
48
+ .psdk-horizontal-step-label,
49
+ .psdk-horizontal-step-label-selected {
103
50
  display: inline-block;
104
- white-space: nowrap;
105
- overflow: hidden;
106
- text-overflow: ellipsis;
107
51
  min-width: 50px;
108
52
  vertical-align: middle;
109
53
  font-size: 14px;
110
54
  font-weight: 500;
111
55
  }
112
56
 
113
- .psdk-vertical-step-label-selected {
57
+ .psdk-vertical-step-label,
58
+ .psdk-horizontal-step-label {
59
+ color: var(--mat-sys-on-surface-variant);
60
+ }
61
+
62
+ .psdk-vertical-step-label-selected,
63
+ .psdk-horizontal-step-label-selected {
114
64
  color: var(--mat-sys-on-secondary-container);
115
- display: inline-block;
65
+ }
66
+
67
+ .psdk-vertical-step-label,
68
+ .psdk-vertical-step-label-selected {
116
69
  white-space: nowrap;
117
70
  overflow: hidden;
118
71
  text-overflow: ellipsis;
119
- min-width: 50px;
120
- vertical-align: middle;
121
- font-size: 14px;
122
- font-weight: 500;
123
72
  }
124
73
 
125
- .psdk-vertical-step-body {
126
- margin-left: 36px;
127
- border: 0;
74
+ .psdk-vertical-stepper-container {
75
+ display: grid;
76
+ gap: 2rem;
77
+ }
78
+
79
+ .psdk-vertical-stepper-container.stepper-end {
80
+ grid-template-columns: 1fr minmax(12rem, auto);
81
+ grid-template-areas: 'content stepper';
82
+ }
83
+
84
+ .psdk-vertical-stepper-container.stepper-start {
85
+ grid-template-columns: minmax(12rem, auto) 1fr;
86
+ grid-template-areas: 'stepper content';
87
+ }
88
+
89
+ .psdk-stepper-rail {
90
+ grid-area: stepper;
91
+ }
92
+
93
+ .psdk-stepper-content {
94
+ grid-area: content;
95
+ }
96
+
97
+ .psdk-stepper-rail .psdk-vertical-step {
128
98
  position: relative;
129
- display: block;
130
- text-align: left;
131
99
  }
132
- .psdk-vertical-step-line {
133
- display: block;
100
+
101
+ .psdk-stepper-rail .psdk-vertical-step-header {
102
+ height: auto;
103
+ overflow: visible;
104
+ padding: 0.75rem 0;
134
105
  }
135
106
 
136
- .psdk-vertical-step-line::before {
107
+ .psdk-stepper-rail .psdk-vertical-step:not(:last-child)::after {
137
108
  content: '';
138
109
  position: absolute;
139
- left: 0;
140
- border-left-width: 1px;
141
- border-left-style: solid;
142
- top: -16px;
143
- bottom: -16px;
110
+ left: 0.75rem;
111
+ top: calc(0.75rem + 1.75rem);
112
+ bottom: -0.25rem;
113
+ width: 0.0625rem;
114
+ background-color: var(--mat-sys-outline-variant);
115
+ }
116
+
117
+ .psdk-stepper-rail .psdk-vertical-step-label,
118
+ .psdk-stepper-rail .psdk-vertical-step-label-selected {
119
+ font-size: 0.875rem;
144
120
  }
145
121
 
146
122
  .psdk-horizontal-stepper {
@@ -164,7 +140,6 @@ mat-horizontal-stepper {
164
140
  box-sizing: content-box;
165
141
  display: flex;
166
142
  height: 72px;
167
- overflow: hidden;
168
143
  align-items: center;
169
144
  padding: 0 24px;
170
145
  }
@@ -172,54 +147,21 @@ mat-horizontal-stepper {
172
147
  .psdk-horizontal-step-icon {
173
148
  background-color: var(--mat-sys-secondary);
174
149
  color: var(--mat-sys-surface);
175
- border-radius: 50%;
176
- height: 24px;
177
- width: 24px;
178
- flex-shrink: 0;
179
- position: relative;
180
- display: block;
181
- margin-right: 8px;
182
- flex: none;
183
- }
184
-
185
- .psdk-horizontal-step-icon-content {
186
- display: block;
187
- position: absolute;
188
- top: 50%;
189
- left: 50%;
190
- transform: translate(-50%, -50%);
191
150
  }
192
151
 
152
+ .psdk-horizontal-step-icon,
193
153
  .psdk-horizontal-step-icon-selected {
194
- background-color: var(--mat-sys-primary);
195
- color: var(--mat-sys-surface);
196
154
  border-radius: 50%;
197
155
  height: 24px;
198
156
  width: 24px;
199
157
  flex-shrink: 0;
200
158
  position: relative;
201
- display: block;
202
159
  margin-right: 8px;
203
160
  flex: none;
204
161
  }
205
162
 
206
- .psdk-horizontal-step-label {
207
- color: var(--mat-sys-on-surface-variant);
208
- display: inline-block;
209
- min-width: 50px;
210
- vertical-align: middle;
211
- font-size: 14px;
212
- font-weight: 500;
213
- white-space: initial;
214
- }
215
-
163
+ .psdk-horizontal-step-label,
216
164
  .psdk-horizontal-step-label-selected {
217
- color: var(--mat-sys-on-secondary-container);
218
- display: inline-block;
219
- min-width: 50px;
220
- vertical-align: middle;
221
- font-size: 14px;
222
- font-weight: 500;
223
165
  white-space: initial;
224
166
  }
225
167
 
@@ -4,6 +4,8 @@ import { FormGroup } from '@angular/forms';
4
4
  import { Utils } from '@pega/angular-sdk-components';
5
5
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
6
6
 
7
+ type StepIndicator = 'horizontal' | 'vertical' | 'vertical-start';
8
+
7
9
  @Component({
8
10
  selector: 'app-multi-step',
9
11
  templateUrl: './multi-step.component.html',
@@ -18,6 +20,7 @@ export class MultiStepComponent implements OnInit {
18
20
  @Input() arSecondaryButtons$: any[];
19
21
  @Input() arChildren$: any[];
20
22
  @Input() bIsVertical$: boolean;
23
+ @Input() stepIndicator$?: StepIndicator;
21
24
  @Input() arCurrentStepIndicies$: number[];
22
25
  @Input() arNavigationSteps$: any[];
23
26
  @Output() actionButtonClick: EventEmitter<any> = new EventEmitter();
@@ -38,6 +41,14 @@ export class MultiStepComponent implements OnInit {
38
41
  this.actionButtonClick.emit(oData);
39
42
  }
40
43
 
44
+ isVerticalLayout(): boolean {
45
+ return this.stepIndicator$ === 'vertical' || this.stepIndicator$ === 'vertical-start';
46
+ }
47
+
48
+ isHorizontalLayout(): boolean {
49
+ return !this.isVerticalLayout();
50
+ }
51
+
41
52
  _getVIconClass(status): string {
42
53
  if (status == 'current') {
43
54
  return 'psdk-vertical-step-icon-selected';