@pega/angular-sdk-overrides 0.25.3 → 0.25.5

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 (26) hide show
  1. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.scss +0 -1
  2. package/lib/field/date/date.component.html +1 -1
  3. package/lib/field/date-time/date-time.component.html +1 -1
  4. package/lib/field/date-time/date-time.component.ts +5 -1
  5. package/lib/field/location/location.component.html +2 -2
  6. package/lib/field/location/location.component.ts +20 -125
  7. package/lib/field/phone/phone.component.scss +0 -5
  8. package/lib/infra/Containers/flow-container/flow-container.component.html +1 -1
  9. package/lib/infra/Containers/flow-container/flow-container.component.ts +1 -1
  10. package/lib/infra/multi-step/multi-step.component.html +22 -38
  11. package/lib/infra/multi-step/multi-step.component.scss +13 -6
  12. package/lib/infra/navbar/navbar.component.html +11 -13
  13. package/lib/infra/navbar/navbar.component.scss +6 -0
  14. package/lib/infra/reference/reference.component.ts +5 -0
  15. package/lib/infra/view/view.component.ts +3 -4
  16. package/lib/template/list-view/list-view.component.html +170 -167
  17. package/lib/template/list-view/list-view.component.scss +7 -3
  18. package/lib/template/list-view/list-view.component.ts +53 -31
  19. package/lib/template/self-service-case-view/self-service-case-view.component.html +21 -25
  20. package/lib/template/self-service-case-view/self-service-case-view.component.scss +2 -1
  21. package/lib/widget/attachment/attachment.component.scss +7 -9
  22. package/lib/widget/attachment/attachment.component.ts +4 -3
  23. package/lib/widget/file-utility/file-utility.component.scss +1 -1
  24. package/lib/widget/quick-create/quick-create.component.ts +41 -22
  25. package/lib/widget/todo/todo.component.scss +2 -0
  26. package/package.json +1 -1
@@ -23,7 +23,6 @@
23
23
  .quick-link-button {
24
24
  text-transform: capitalize !important;
25
25
  font-size: 16px !important;
26
- color: var(--app-form-color) !important;
27
26
  cursor: pointer;
28
27
  padding: calc(0.5rem * 2) !important;
29
28
  height: 10rem;
@@ -20,7 +20,7 @@
20
20
  (dateChange)="fieldOnDateChange($event)"
21
21
  />
22
22
  <mat-datepicker-toggle matSuffix [for]="pegadate" [disabled]="bDisabled$"></mat-datepicker-toggle>
23
- <mat-datepicker #pegadate [startAt]="value$"></mat-datepicker>
23
+ <mat-datepicker #pegadate [startAt]="value$" xPosition="end"></mat-datepicker>
24
24
  <mat-error *ngIf="fieldControl.invalid">{{ getErrorMessage() }}</mat-error>
25
25
  </mat-form-field>
26
26
  </div>
@@ -17,7 +17,7 @@
17
17
  [readonly]="bDisabled$"
18
18
  />
19
19
  <mat-datepicker-toggle matSuffix [owlDateTimeTrigger]="dtPicker"></mat-datepicker-toggle>
20
- <owl-date-time #dtPicker [disabled]="bDisabled$"></owl-date-time>
20
+ <owl-date-time #dtPicker [disabled]="bDisabled$" [scrollStrategy]="scrollStrategy"></owl-date-time>
21
21
  <mat-error *ngIf="fieldControl?.invalid">{{ getErrorMessage() }}</mat-error>
22
22
  </mat-form-field>
23
23
  </div>
@@ -1,9 +1,10 @@
1
- import { Component, OnInit, forwardRef, OnDestroy } from '@angular/core';
1
+ import { Component, OnInit, forwardRef, OnDestroy, inject } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatDatepickerModule } from '@angular/material/datepicker';
5
5
  import { MatInputModule } from '@angular/material/input';
6
6
  import { MatFormFieldModule } from '@angular/material/form-field';
7
+ import { ScrollStrategyOptions } from '@angular/cdk/overlay';
7
8
  import { OwlDateTimeModule, OwlNativeDateTimeModule } from '@danielmoncada/angular-datetime-picker';
8
9
  import dayjs from 'dayjs';
9
10
 
@@ -45,6 +46,9 @@ export class DateTimeComponent extends FieldBase implements OnInit, OnDestroy {
45
46
  timezone = PCore.getEnvironmentInfo()?.getTimeZone();
46
47
  override placeholder = `${this.theDateFormat.dateFormatStringLC}, hh:mm A`;
47
48
 
49
+ private sso = inject(ScrollStrategyOptions);
50
+ scrollStrategy = this.sso.reposition();
51
+
48
52
  override ngOnInit(): void {
49
53
  super.ngOnInit();
50
54
 
@@ -6,13 +6,13 @@
6
6
  matInput
7
7
  type="text"
8
8
  [placeholder]="placeholder"
9
- [formControl]="searchControl"
9
+ [formControl]="fieldControl"
10
10
  [required]="bRequired$"
11
11
  [matAutocomplete]="auto"
12
12
  [attr.data-test-id]="testId"
13
13
  (blur)="fieldOnBlur()"
14
14
  />
15
- <mat-error *ngIf="searchControl.invalid">{{ getErrorMessage() }}</mat-error>
15
+ <mat-error *ngIf="fieldControl.invalid">{{ getErrorMessage() }}</mat-error>
16
16
  <button
17
17
  mat-icon-button
18
18
  matSuffix
@@ -1,6 +1,6 @@
1
- import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';
1
+ import { Component, 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 { MatFormFieldModule } from '@angular/material/form-field';
5
5
  import { MatInputModule } from '@angular/material/input';
6
6
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
@@ -8,12 +8,10 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
8
8
  import { MatIconModule } from '@angular/material/icon';
9
9
  import { MatButtonModule } from '@angular/material/button';
10
10
  import { GoogleMapsModule } from '@angular/google-maps';
11
+ import { debounceTime, from, of, switchMap } from 'rxjs';
11
12
 
12
- import { debounceTime, from, interval, of, switchMap } from 'rxjs';
13
-
14
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
13
+ import { FieldBase } from '@pega/angular-sdk-components';
15
14
  import { GoogleMapsLoaderService } from '@pega/angular-sdk-components';
16
- import { Utils } from '@pega/angular-sdk-components';
17
15
  import { handleEvent } from '@pega/angular-sdk-components';
18
16
 
19
17
  import { PConnFieldProps } from '@pega/angular-sdk-components';
@@ -41,9 +39,8 @@ interface LocationProps extends PConnFieldProps {
41
39
  templateUrl: './location.component.html',
42
40
  styleUrl: './location.component.scss'
43
41
  })
44
- export class LocationComponent implements OnInit, OnDestroy {
45
- @Input() pConn$: typeof PConnect;
46
- @Input() formGroup$: FormGroup;
42
+ export class LocationComponent extends FieldBase {
43
+ private loader = inject(GoogleMapsLoaderService);
47
44
 
48
45
  private autocompleteService!: google.maps.places.AutocompleteService;
49
46
  private geocoder!: google.maps.Geocoder;
@@ -51,137 +48,52 @@ export class LocationComponent implements OnInit, OnDestroy {
51
48
  // Dom variables
52
49
  mapReady = false;
53
50
  isLocating = false;
54
- searchControl = new FormControl('');
55
51
  showMap = true;
56
52
  filteredOptions: string[] = [];
57
53
  center: google.maps.LatLngLiteral;
58
54
  markerPosition: google.maps.LatLngLiteral | null = null;
59
55
 
60
- // Used with AngularPConnect
61
- angularPConnectData: AngularPConnectData = {};
62
56
  configProps$: LocationProps;
63
- label$ = '';
64
57
  onlyCoordinates: boolean;
65
58
  coordinates: string;
66
- bRequired$ = false;
67
- bReadonly$ = false;
68
59
  showMapReadOnly$: boolean;
69
- bDisabled$ = false;
70
- bVisible$ = true;
71
- controlName$: string;
72
- bHasForm$ = true;
73
- testId = '';
74
- helperText: string;
75
- placeholder: string;
76
- actionsApi: object;
77
60
  valueProp: string;
78
61
  coordinatesProp: string;
79
62
 
80
- constructor(
81
- private loader: GoogleMapsLoaderService,
82
- private angularPConnect: AngularPConnectService,
83
- private utils: Utils,
84
- private cdRef: ChangeDetectorRef
85
- ) {}
63
+ override async ngOnInit() {
64
+ super.ngOnInit();
86
65
 
87
- async ngOnInit() {
88
66
  // Loading map
89
67
  const apiKey = this.pConn$.getGoogleMapsAPIKey();
90
68
  await this.loader.load(apiKey);
91
69
  this.mapReady = true;
92
70
  this.initializeGoogleServices();
93
71
  this.getPlacePredictions();
94
-
95
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
96
- this.controlName$ = this.angularPConnect.getComponentID(this);
97
- this.checkAndUpdate();
98
-
99
- if (this.formGroup$) {
100
- // add control to formGroup
101
- this.formGroup$.addControl(this.controlName$, this.searchControl);
102
- this.bHasForm$ = true;
103
- } else {
104
- this.bReadonly$ = true;
105
- this.bHasForm$ = false;
106
- }
107
72
  }
108
73
 
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
- }
117
- }
118
-
119
- checkAndUpdate() {
120
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
121
- if (bUpdateSelf) {
122
- this.updateSelf();
123
- }
124
- }
74
+ /**
75
+ * Updates the component when there are changes in the state.
76
+ */
77
+ override updateSelf(): void {
78
+ // Resolve configuration properties
79
+ this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as LocationProps;
125
80
 
126
- onStateChange() {
127
- setTimeout(() => {
128
- this.checkAndUpdate();
129
- }, 0);
130
- }
81
+ // Update component common properties
82
+ this.updateComponentCommonProperties(this.configProps$);
131
83
 
132
- updateSelf(): void {
133
- this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as LocationProps;
134
- if (this.configProps$.visibility != null) {
135
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
136
- }
137
84
  this.onlyCoordinates = !!this.configProps$.onlyCoordinates;
138
- this.label$ = this.configProps$.label;
139
- this.testId = this.configProps$.testId;
140
-
141
- this.helperText = this.configProps$.helperText || '';
142
- this.placeholder = this.configProps$.placeholder || '';
143
85
  this.showMapReadOnly$ = !!this.configProps$.showMapReadOnly;
144
- if (this.configProps$.readOnly != null) {
145
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
146
- }
147
86
  this.showMap = this.bReadonly$ ? this.showMapReadOnly$ : !!this.configProps$.showMap;
87
+
148
88
  if (this.configProps$.coordinates) {
149
89
  const latAndLong: number[] = this.configProps$.coordinates.split(',').map(Number);
150
90
  const latitude = Number(latAndLong[0]);
151
91
  const longitude = Number(latAndLong[1]);
152
92
  this.updateMap(latitude, longitude, this.configProps$.value);
153
93
  }
154
- // // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
155
- setTimeout(() => {
156
- if (this.configProps$.required != null) {
157
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
158
- }
159
- this.cdRef.detectChanges();
160
- });
161
- // // disabled
162
- if (this.configProps$.disabled != undefined) {
163
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
164
- }
165
94
 
166
- if (this.bDisabled$ || this.bReadonly$) {
167
- this.searchControl.disable();
168
- } else {
169
- this.searchControl.enable();
170
- }
171
-
172
- this.actionsApi = this.pConn$.getActionsApi();
173
95
  this.valueProp = this.pConn$.getStateProps().value;
174
96
  this.coordinatesProp = this.pConn$.getStateProps().coordinates;
175
-
176
- // // trigger display of error message with field control
177
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
178
- const timer = interval(100).subscribe(() => {
179
- this.searchControl.setErrors({ message: true });
180
- this.searchControl.markAsTouched();
181
-
182
- timer.unsubscribe();
183
- });
184
- }
185
97
  }
186
98
 
187
99
  onOptionSelected(event: any) {
@@ -236,23 +148,6 @@ export class LocationComponent implements OnInit, OnDestroy {
236
148
  }
237
149
  }
238
150
 
239
- getErrorMessage() {
240
- let errMessage = '';
241
-
242
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
243
- if (this.searchControl.hasError('message')) {
244
- errMessage = this.angularPConnectData.validateMessage ?? '';
245
- return errMessage;
246
- }
247
- if (this.searchControl.hasError('required')) {
248
- errMessage = 'You must enter a value';
249
- } else if (this.searchControl.errors) {
250
- errMessage = this.searchControl.errors.toString();
251
- }
252
-
253
- return errMessage;
254
- }
255
-
256
151
  private tryGetLocation(retryCount: number) {
257
152
  navigator.geolocation.getCurrentPosition(
258
153
  position => {
@@ -312,7 +207,7 @@ export class LocationComponent implements OnInit, OnDestroy {
312
207
  }
313
208
 
314
209
  private getPlacePredictions() {
315
- this.searchControl.valueChanges
210
+ this.fieldControl.valueChanges
316
211
  .pipe(
317
212
  debounceTime(300),
318
213
  switchMap(value => this.getSuggestions(value || ''))
@@ -371,7 +266,7 @@ export class LocationComponent implements OnInit, OnDestroy {
371
266
  }
372
267
 
373
268
  private updateProps() {
374
- handleEvent(this.actionsApi, 'change', this.valueProp, this.searchControl.value);
269
+ handleEvent(this.actionsApi, 'change', this.valueProp, this.fieldControl.value);
375
270
  handleEvent(this.actionsApi, 'change', this.coordinatesProp, this.coordinates);
376
271
  }
377
272
 
@@ -380,6 +275,6 @@ export class LocationComponent implements OnInit, OnDestroy {
380
275
  }
381
276
 
382
277
  private setLocationValue(value: string) {
383
- this.searchControl.setValue(value, { emitEvent: false });
278
+ this.fieldControl.setValue(value, { emitEvent: false });
384
279
  }
385
280
  }
@@ -24,11 +24,6 @@
24
24
  font-size: 0.7rem;
25
25
  }
26
26
 
27
- ::ng-deep .cdk-overlay-pane {
28
- left: 32rem !important;
29
- top: 20rem !important;
30
- }
31
-
32
27
  ::ng-deep .mat-mdc-menu-panel {
33
28
  max-width: 20rem;
34
29
  }
@@ -32,7 +32,7 @@
32
32
  </div>
33
33
  <div *ngIf="bHasCaseMessages$">
34
34
  <mat-card class="psdk-message-card">
35
- <div style="display: flex; flex-direction: row">
35
+ <div style="display: flex; flex-direction: row; align-items: center">
36
36
  <div><img class="psdk-icon" src="{{ checkSvg$ }}" /></div>
37
37
  <div>{{ caseMessages$ }}</div>
38
38
  </div>
@@ -280,7 +280,7 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement
280
280
 
281
281
  // this.containerName$ = oWorkMeta["name"];
282
282
  if (bLoadChildren && oWorkData) {
283
- this.containerName$ = this.localizedVal(this.getActiveViewLabel() || oWorkData.caseInfo.assignments[0].name, undefined, this.localeReference);
283
+ this.containerName$ = this.localizedVal(this.getActiveViewLabel() || oWorkData.caseInfo.assignments?.[0].name, undefined, this.localeReference);
284
284
  }
285
285
 
286
286
  // turn off spinner
@@ -12,25 +12,17 @@
12
12
  </div>
13
13
  </div>
14
14
  <div class="{{ _getVBodyClass(i) }}">
15
- <ng-container *ngIf="mainStep?.steps">
16
- <ul style="padding-inline-start: 0rem; margin-left: -7px">
17
- <li *ngFor="let subStep of mainStep.steps" class="psdk-sub-step-list">
18
- <div style="display: inline-flex">
19
- <img *ngIf="subStep.visited_status == 'current'" class="psdk-current-svg-icon" src="{{ svgCurrent$ }}" />
20
- <img *ngIf="subStep.visited_status != 'current'" class="psdk-not-current-svg-icon" src="{{ svgNotCurrent$ }}" />
21
- <label *ngIf="subStep.visited_status == 'current'" class="psdk-sub-step-current">{{ subStep.name }}</label>
22
- <label *ngIf="subStep.visited_status != 'current'" class="psdk-sub-step-not-current">{{ subStep.name }}</label>
23
- </div>
24
- <div *ngIf="subStep.visited_status == 'current'">
25
- <component-mapper
26
- name="AssignmentCard"
27
- [props]="{ pConn$, formGroup$, arChildren$, arMainButtons$, arSecondaryButtons$ }"
28
- [parent]="this"
29
- [outputEvents]="{ actionButtonClick: onActionButtonClick }"
30
- ></component-mapper>
31
- </div>
32
- </li>
33
- </ul>
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>
24
+ </div>
25
+ </div>
34
26
  </ng-container>
35
27
 
36
28
  <ng-container *ngIf="!mainStep?.steps && mainStep.visited_status == 'current'">
@@ -64,25 +56,17 @@
64
56
  </ng-container>
65
57
  </div>
66
58
  <div *ngFor="let mainStep of arNavigationSteps$" class="psdk-horizontal-stepper-body">
67
- <ng-container *ngIf="mainStep?.steps">
68
- <ul style="padding-inline-start: 0rem; margin-left: 35px">
69
- <li *ngFor="let subStep of mainStep.steps" class="psdk-sub-step-list">
70
- <div style="display: inline-flex">
71
- <img *ngIf="subStep.visited_status == 'current'" class="psdk-current-svg-icon" src="{{ svgCurrent$ }}" />
72
- <img *ngIf="subStep.visited_status != 'current'" class="psdk-not-current-svg-icon" src="{{ svgNotCurrent$ }}" />
73
- <label *ngIf="subStep.visited_status == 'current'" class="psdk-sub-step-current">{{ subStep.name }}</label>
74
- <label *ngIf="subStep.visited_status != 'current'" class="psdk-sub-step-not-current">{{ subStep.name }}</label>
75
- </div>
76
- <div *ngIf="subStep.visited_status == 'current'">
77
- <component-mapper
78
- name="AssignmentCard"
79
- [props]="{ pConn$, formGroup$, arChildren$, arMainButtons$, arSecondaryButtons$ }"
80
- [parent]="this"
81
- [outputEvents]="{ actionButtonClick: onActionButtonClick }"
82
- ></component-mapper>
83
- </div>
84
- </li>
85
- </ul>
59
+ <ng-container *ngIf="mainStep?.steps && mainStep.visited_status == 'current'">
60
+ <div *ngFor="let subStep of mainStep.steps">
61
+ <div *ngIf="subStep.visited_status == 'current'">
62
+ <component-mapper
63
+ name="AssignmentCard"
64
+ [props]="{ pConn$, formGroup$, arChildren$, arMainButtons$, arSecondaryButtons$ }"
65
+ [parent]="this"
66
+ [outputEvents]="{ actionButtonClick: onActionButtonClick }"
67
+ ></component-mapper>
68
+ </div>
69
+ </div>
86
70
  </ng-container>
87
71
 
88
72
  <ng-container *ngIf="!mainStep?.steps && mainStep.visited_status == 'current'">
@@ -7,12 +7,6 @@
7
7
  min-width: unset;
8
8
  }
9
9
 
10
- .psdk-icon-current {
11
- }
12
-
13
- .psdk-icon-not-current {
14
- }
15
-
16
10
  .psdk-current-svg-icon {
17
11
  width: 1rem;
18
12
  filter: var(--app-primary-color-filter);
@@ -33,9 +27,11 @@ mat-horizontal-stepper {
33
27
  .psdk-sub-step-current {
34
28
  padding-left: 0.625rem;
35
29
  font-weight: bold;
30
+ color: var(--mat-sys-on-secondary-container);
36
31
  }
37
32
 
38
33
  .psdk-sub-step-not-current {
34
+ color: var(--mat-sys-on-surface-variant);
39
35
  padding-left: 0.625rem;
40
36
  }
41
37
 
@@ -76,6 +72,7 @@ mat-horizontal-stepper {
76
72
 
77
73
  .psdk-vertical-step-icon {
78
74
  margin-right: 12px;
75
+ background-color: var(--mat-sys-secondary);
79
76
  border-radius: 50%;
80
77
  height: 24px;
81
78
  width: 24px;
@@ -92,6 +89,8 @@ mat-horizontal-stepper {
92
89
 
93
90
  .psdk-vertical-step-icon-selected {
94
91
  margin-right: 12px;
92
+ background-color: var(--mat-sys-primary);
93
+ color: var(--mat-sys-surface);
95
94
  border-radius: 50%;
96
95
  height: 24px;
97
96
  width: 24px;
@@ -100,6 +99,7 @@ mat-horizontal-stepper {
100
99
  }
101
100
 
102
101
  .psdk-vertical-step-label {
102
+ color: var(--mat-sys-on-surface-variant);
103
103
  display: inline-block;
104
104
  white-space: nowrap;
105
105
  overflow: hidden;
@@ -111,6 +111,7 @@ mat-horizontal-stepper {
111
111
  }
112
112
 
113
113
  .psdk-vertical-step-label-selected {
114
+ color: var(--mat-sys-on-secondary-container);
114
115
  display: inline-block;
115
116
  white-space: nowrap;
116
117
  overflow: hidden;
@@ -169,6 +170,8 @@ mat-horizontal-stepper {
169
170
  }
170
171
 
171
172
  .psdk-horizontal-step-icon {
173
+ background-color: var(--mat-sys-secondary);
174
+ color: var(--mat-sys-surface);
172
175
  border-radius: 50%;
173
176
  height: 24px;
174
177
  width: 24px;
@@ -188,6 +191,8 @@ mat-horizontal-stepper {
188
191
  }
189
192
 
190
193
  .psdk-horizontal-step-icon-selected {
194
+ background-color: var(--mat-sys-primary);
195
+ color: var(--mat-sys-surface);
191
196
  border-radius: 50%;
192
197
  height: 24px;
193
198
  width: 24px;
@@ -199,6 +204,7 @@ mat-horizontal-stepper {
199
204
  }
200
205
 
201
206
  .psdk-horizontal-step-label {
207
+ color: var(--mat-sys-on-surface-variant);
202
208
  display: inline-block;
203
209
  min-width: 50px;
204
210
  vertical-align: middle;
@@ -208,6 +214,7 @@ mat-horizontal-stepper {
208
214
  }
209
215
 
210
216
  .psdk-horizontal-step-label-selected {
217
+ color: var(--mat-sys-on-secondary-container);
211
218
  display: inline-block;
212
219
  min-width: 50px;
213
220
  vertical-align: middle;
@@ -36,17 +36,15 @@
36
36
  </mat-list-item>
37
37
  </mat-list>
38
38
  <div class="psdk-nav-divider"></div>
39
- <div>
40
- <mat-list id="profile">
41
- <mat-list-item [matMenuTriggerFor]="menu" class="psdk-profile-list-item">
42
- <div class="flex-box">
43
- <div class="psdk-nav-oper-avatar">{{ portalOperatorInitials$ }}</div>
44
- <span class="psdk-nav-button-span">{{ portalOperator$ }}</span>
45
- </div>
46
- </mat-list-item>
47
- <mat-menu #menu="matMenu">
48
- <button mat-menu-item (click)="navPanelLogoutClick()">{{ localizedVal('Log off', localeCategory) }}</button>
49
- </mat-menu>
50
- </mat-list>
51
- </div>
39
+ <mat-list id="profile" class="psdk-logout-button">
40
+ <mat-list-item [matMenuTriggerFor]="menu" class="psdk-profile-list-item">
41
+ <div class="flex-box">
42
+ <div class="psdk-nav-oper-avatar">{{ portalOperatorInitials$ }}</div>
43
+ <span class="psdk-nav-button-span">{{ portalOperator$ }}</span>
44
+ </div>
45
+ </mat-list-item>
46
+ <mat-menu #menu="matMenu">
47
+ <button mat-menu-item (click)="navPanelLogoutClick()">{{ localizedVal('Log off', localeCategory) }}</button>
48
+ </mat-menu>
49
+ </mat-list>
52
50
  </div>
@@ -39,6 +39,7 @@ $natural-ease: cubic-bezier(0.4, 0.6, 0.1, 1) !default;
39
39
  .psdk-appshell-nav {
40
40
  z-index: 199;
41
41
  position: fixed;
42
+ top: 0;
42
43
  display: flex;
43
44
  flex-direction: column;
44
45
  justify-content: flex-start;
@@ -162,3 +163,8 @@ mat-list-item {
162
163
  height: 24px;
163
164
  border-radius: 50%;
164
165
  }
166
+
167
+ .psdk-logout-button {
168
+ flex: 1;
169
+ align-content: flex-end;
170
+ }
@@ -71,6 +71,11 @@ export class ReferenceComponent {
71
71
  pageReference: context && context.startsWith('@CLASS') ? '' : context
72
72
  });
73
73
 
74
+ if (referenceConfig.inheritedProps && referenceConfig.inheritedProps.length > 0) {
75
+ const inheritedProps = inPConn.getInheritedProps();
76
+ referenceConfig.inheritedProps = Object.keys(inheritedProps).map(prop => ({ prop, value: inheritedProps[prop] }));
77
+ }
78
+
74
79
  // Get the PConnect object from the created component
75
80
  const newCompPConnect = viewComponent.getPConnect();
76
81
 
@@ -7,7 +7,7 @@ import { getAllFields } from '@pega/angular-sdk-components';
7
7
  import { ReferenceComponent } from '@pega/angular-sdk-components';
8
8
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
9
9
 
10
- const NO_HEADER_TEMPLATES = ['SubTabs', 'SimpleTable', 'Confirmation', 'DynamicTabs', 'DetailsSubTabs'];
10
+ const NO_HEADER_TEMPLATES = ['SubTabs', 'SimpleTable', 'Confirmation', 'DynamicTabs', 'DetailsSubTabs', 'ListView'];
11
11
  const DETAILS_TEMPLATES = [
12
12
  'Details',
13
13
  'DetailsFields',
@@ -158,10 +158,9 @@ export class ViewComponent implements OnInit, OnDestroy, OnChanges {
158
158
 
159
159
  this.templateName$ = this.configProps$.template || '';
160
160
  this.title$ = this.configProps$.title || '';
161
- this.label$ = this.configProps$.label || '';
162
- this.showLabel$ = this.configProps$.showLabel || isDetailsTemplate(this.templateName$) || this.showLabel$;
163
161
  // label & showLabel within inheritedProps takes precedence over configProps
164
- this.label$ = this.inheritedProps$.label || this.label$;
162
+ this.label$ = this.inheritedProps$.label || this.configProps$.label || '';
163
+ this.showLabel$ = this.inheritedProps$.showLabel || this.configProps$.showLabel || isDetailsTemplate(this.templateName$);
165
164
  // children may have a 'reference' so normalize the children array
166
165
  this.arChildren$ = ReferenceComponent.normalizePConnArray(this.pConn$.getChildren());
167
166
  this.visibility$ = this.configProps$.visibility ?? this.visibility$;