@pega/angular-sdk-overrides 0.26.1 → 0.26.3

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 (133) 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 +12 -3
  6. package/lib/designSystemExtension/operator/operator.component.ts +2 -1
  7. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.html +104 -10
  8. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +141 -1
  9. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.ts +224 -72
  10. package/lib/field/auto-complete/auto-complete.component.html +46 -5
  11. package/lib/field/auto-complete/auto-complete.component.scss +92 -0
  12. package/lib/field/auto-complete/auto-complete.component.ts +349 -22
  13. package/lib/field/cancel-alert/cancel-alert.component.ts +38 -15
  14. package/lib/field/check-box/check-box.component.html +3 -1
  15. package/lib/field/check-box/check-box.component.ts +10 -1
  16. package/lib/field/currency/currency.component.html +2 -1
  17. package/lib/field/currency/currency.component.ts +10 -1
  18. package/lib/field/date/date.component.html +2 -1
  19. package/lib/field/date/date.component.ts +2 -0
  20. package/lib/field/date-time/date-time.component.html +2 -1
  21. package/lib/field/date-time/date-time.component.scss +46 -40
  22. package/lib/field/date-time/date-time.component.ts +2 -0
  23. package/lib/field/decimal/decimal.component.html +2 -1
  24. package/lib/field/decimal/decimal.component.ts +2 -0
  25. package/lib/field/dropdown/dropdown.component.html +2 -1
  26. package/lib/field/dropdown/dropdown.component.ts +10 -1
  27. package/lib/field/email/email.component.html +2 -1
  28. package/lib/field/email/email.component.ts +2 -2
  29. package/lib/field/field.base.ts +27 -1
  30. package/lib/field/group/group.component.html +1 -1
  31. package/lib/field/group/group.component.ts +1 -3
  32. package/lib/field/integer/integer.component.html +2 -1
  33. package/lib/field/integer/integer.component.ts +4 -2
  34. package/lib/field/location/location.component.html +2 -1
  35. package/lib/field/location/location.component.ts +3 -1
  36. package/lib/field/object-reference/object-reference.component.html +1 -1
  37. package/lib/field/object-reference/object-reference.component.ts +3 -0
  38. package/lib/field/percentage/percentage.component.html +2 -1
  39. package/lib/field/percentage/percentage.component.ts +10 -1
  40. package/lib/field/phone/phone.component.html +2 -1
  41. package/lib/field/phone/phone.component.ts +2 -1
  42. package/lib/field/radio-buttons/radio-buttons.component.html +2 -1
  43. package/lib/field/radio-buttons/radio-buttons.component.ts +10 -1
  44. package/lib/field/rich-text/rich-text.component.scss +1 -166
  45. package/lib/field/rich-text/rich-text.component.ts +1 -1
  46. package/lib/field/semantic-link/semantic-link.component.html +1 -1
  47. package/lib/field/semantic-link/semantic-link.component.scss +4 -0
  48. package/lib/field/semantic-link/semantic-link.component.ts +9 -5
  49. package/lib/field/text-area/text-area.component.html +2 -1
  50. package/lib/field/text-area/text-area.component.ts +2 -1
  51. package/lib/field/text-input/text-input.component.html +2 -1
  52. package/lib/field/text-input/text-input.component.ts +2 -1
  53. package/lib/field/time/time.component.html +2 -1
  54. package/lib/field/time/time.component.ts +2 -1
  55. package/lib/field/url/url.component.html +2 -1
  56. package/lib/field/url/url.component.ts +2 -1
  57. package/lib/field/user-reference/user-reference.component.html +4 -2
  58. package/lib/field/user-reference/user-reference.component.ts +10 -5
  59. package/lib/infra/Containers/flow-container/flow-container.component.html +1 -1
  60. package/lib/infra/Containers/flow-container/flow-container.component.ts +33 -40
  61. package/lib/infra/Containers/modal-view-container/data-view-action-buttons/data-view-action-buttons.component.html +12 -0
  62. package/lib/infra/Containers/modal-view-container/data-view-action-buttons/data-view-action-buttons.component.spec.ts +130 -0
  63. package/lib/infra/Containers/modal-view-container/data-view-action-buttons/data-view-action-buttons.component.ts +77 -0
  64. package/lib/infra/Containers/modal-view-container/modal-view-container.component.html +35 -8
  65. package/lib/infra/Containers/modal-view-container/modal-view-container.component.spec.ts +24 -11
  66. package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +185 -194
  67. package/lib/infra/Containers/view-container/view-container.component.ts +32 -31
  68. package/lib/infra/assignment/assignment.component.html +2 -1
  69. package/lib/infra/assignment/assignment.component.ts +30 -13
  70. package/lib/infra/defer-load/defer-load.component.ts +6 -3
  71. package/lib/infra/multi-step/multi-step.component.html +25 -33
  72. package/lib/infra/multi-step/multi-step.component.scss +48 -0
  73. package/lib/infra/multi-step/multi-step.component.ts +11 -0
  74. package/lib/infra/navbar/navbar.component.ts +33 -35
  75. package/lib/infra/root-container/root-container.component.ts +33 -38
  76. package/lib/infra/view/view.component.ts +17 -39
  77. package/lib/template/app-shell/app-shell.component.ts +12 -11
  78. package/lib/template/base/details-template-base.ts +35 -53
  79. package/lib/template/case-summary/case-summary.component.ts +15 -1
  80. package/lib/template/case-view/case-view.component.html +13 -1
  81. package/lib/template/case-view/case-view.component.spec.ts +119 -10
  82. package/lib/template/case-view/case-view.component.ts +52 -3
  83. package/lib/template/data-reference/data-reference.component.ts +27 -18
  84. package/lib/template/data-reference/search-form/search-form.component.html +1 -1
  85. package/lib/template/data-reference/search-form/search-form.component.ts +2 -0
  86. package/lib/template/default-form/default-form.component.html +19 -3
  87. package/lib/template/default-form/default-form.component.ts +13 -3
  88. package/lib/template/details/details.component.html +23 -3
  89. package/lib/template/details/details.component.scss +9 -2
  90. package/lib/template/details/details.component.ts +3 -32
  91. package/lib/template/details-narrow-wide/details-narrow-wide.component.html +21 -2
  92. package/lib/template/details-narrow-wide/details-narrow-wide.component.scss +8 -1
  93. package/lib/template/details-narrow-wide/details-narrow-wide.component.ts +3 -37
  94. package/lib/template/details-one-column/details-one-column.component.html +23 -1
  95. package/lib/template/details-one-column/details-one-column.component.scss +14 -0
  96. package/lib/template/details-one-column/details-one-column.component.ts +3 -38
  97. package/lib/template/details-three-column/details-three-column.component.html +21 -2
  98. package/lib/template/details-three-column/details-three-column.component.scss +8 -1
  99. package/lib/template/details-three-column/details-three-column.component.ts +3 -46
  100. package/lib/template/details-two-column/details-two-column.component.html +21 -2
  101. package/lib/template/details-two-column/details-two-column.component.scss +8 -1
  102. package/lib/template/details-two-column/details-two-column.component.ts +3 -44
  103. package/lib/template/details-wide-narrow/details-wide-narrow.component.html +21 -2
  104. package/lib/template/details-wide-narrow/details-wide-narrow.component.scss +8 -1
  105. package/lib/template/details-wide-narrow/details-wide-narrow.component.ts +3 -41
  106. package/lib/template/field-value-list/field-value-list.component.scss +17 -0
  107. package/lib/template/list-view/list-view.component.ts +39 -0
  108. package/lib/template/self-service-case-view/self-service-case-view.component.html +13 -1
  109. package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +96 -11
  110. package/lib/template/self-service-case-view/self-service-case-view.component.ts +52 -3
  111. package/lib/template/simple-table-manual/helpers.ts +30 -9
  112. package/lib/template/simple-table-manual/simple-table-manual.component.html +30 -14
  113. package/lib/template/simple-table-manual/simple-table-manual.component.scss +4 -0
  114. package/lib/template/simple-table-manual/simple-table-manual.component.ts +118 -29
  115. package/lib/template/single-reference-readonly/single-reference-readonly.component.html +1 -1
  116. package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +2 -2
  117. package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +4 -4
  118. package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +18 -20
  119. package/lib/widget/attachment/AttachmentUtils.ts +18 -10
  120. package/lib/widget/attachment/attachment.component.html +16 -6
  121. package/lib/widget/attachment/attachment.component.ts +12 -2
  122. package/lib/widget/case-history/case-history.component.ts +6 -2
  123. package/lib/widget/file-utility/file-utility.component.ts +25 -29
  124. package/lib/widget/todo/todo.component.ts +7 -2
  125. package/package.json +1 -1
  126. package/lib/designSystemExtension/material-details/material-details.component.html +0 -40
  127. package/lib/designSystemExtension/material-details/material-details.component.scss +0 -116
  128. package/lib/designSystemExtension/material-details/material-details.component.spec.ts +0 -24
  129. package/lib/designSystemExtension/material-details/material-details.component.ts +0 -31
  130. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +0 -41
  131. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +0 -34
  132. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.spec.ts +0 -22
  133. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.ts +0 -61
@@ -2,171 +2,6 @@
2
2
 
3
3
  :host {
4
4
  display: block;
5
- background-color: var(--mat-sys-surface, #fff);
5
+ background-color: transparent;
6
6
  color: var(--mat-sys-on-surface, #000);
7
7
  }
8
-
9
- ::ng-deep {
10
- .tox-tinymce {
11
- border: 1px solid var(--mat-sys-outline, #ccc) !important;
12
- border-radius: 4px !important;
13
- }
14
-
15
- .tox-edit-area__iframe {
16
- background-color: transparent !important;
17
- }
18
-
19
- .tox .tox-toolbar,
20
- .tox .tox-toolbar__primary,
21
- .tox .tox-editor-header {
22
- background-color: var(--mat-sys-surface-container-high, #f0f0f0) !important;
23
- border-bottom: 1px solid var(--mat-sys-outline-variant, #ccc) !important;
24
- }
25
-
26
- .tox .tox-tbtn {
27
- color: var(--mat-sys-on-surface-variant, #555) !important;
28
- background: transparent !important;
29
- }
30
-
31
- .tox .tox-tbtn svg {
32
- fill: var(--mat-sys-on-surface-variant, #555) !important;
33
- }
34
-
35
- .tox .tox-tbtn:hover {
36
- background: var(--mat-sys-hover-state-layer-opacity, rgba(0, 0, 0, 0.05)) !important;
37
- }
38
-
39
- .tox .tox-tbtn--enabled,
40
- .tox .tox-tbtn--enabled:hover {
41
- background: var(--mat-sys-secondary-container, #e8def8) !important;
42
- color: var(--mat-sys-on-secondary-container, #1d192b) !important;
43
- }
44
-
45
- .tox .tox-tbtn--enabled svg {
46
- fill: var(--mat-sys-on-secondary-container, #1d192b) !important;
47
- }
48
-
49
- .tox .tox-tbtn--select {
50
- background-color: transparent !important;
51
- margin: 2px 0;
52
- }
53
-
54
- .tox .tox-tbtn__select-label {
55
- color: var(--mat-sys-on-surface, #000) !important;
56
- }
57
-
58
- .tox .tox-tbtn__select-chevron svg {
59
- fill: var(--mat-sys-on-surface-variant, #555) !important;
60
- }
61
-
62
- .tox .tox-tbtn--select:hover {
63
- background-color: var(--mat-sys-hover-state-layer-opacity, rgba(0, 0, 0, 0.05)) !important;
64
- }
65
-
66
- .tox .tox-statusbar {
67
- background-color: var(--mat-sys-surface-container-high, #f0f0f0) !important;
68
- border-top: 1px solid var(--mat-sys-outline-variant, #ccc) !important;
69
- color: var(--mat-sys-on-surface-variant, #555) !important;
70
- }
71
-
72
- .tox .tox-dialog {
73
- background-color: var(--mat-sys-surface-container, #fff) !important;
74
- color: var(--mat-sys-on-surface, #000) !important;
75
- border: 1px solid var(--mat-sys-outline-variant, #ccc) !important;
76
- box-shadow: 0 4px 12px var(--mat-sys-shadow, rgba(0, 0, 0, 0.2)) !important;
77
- }
78
-
79
- .tox .tox-dialog__header {
80
- background-color: var(--mat-sys-surface-container, #fff) !important;
81
- color: var(--mat-sys-on-surface, #000) !important;
82
- border-bottom: 1px solid var(--mat-sys-outline-variant, #ccc) !important;
83
- }
84
-
85
- .tox .tox-dialog__footer {
86
- background-color: var(--mat-sys-surface-container, #fff) !important;
87
- border-top: 1px solid var(--mat-sys-outline-variant, #ccc) !important;
88
- }
89
-
90
- .tox .tox-dialog-wrap__backdrop {
91
- background-color: var(--mat-sys-scrim, rgba(0, 0, 0, 0.5)) !important;
92
- opacity: 0.6;
93
- }
94
-
95
- .tox .tox-dialog__body input,
96
- .tox .tox-dialog__body textarea,
97
- .tox .tox-dialog__body select {
98
- background-color: transparent !important;
99
- color: var(--mat-sys-on-surface, #000) !important;
100
- border: 1px solid var(--mat-sys-outline, #ccc) !important;
101
- border-radius: 4px !important;
102
- }
103
-
104
- .tox .tox-label {
105
- color: var(--mat-sys-on-surface-variant, #555) !important;
106
- }
107
-
108
- .tox .tox-button--icon--hover:hover {
109
- background-color: var(--mat-sys-hover-state-layer-opacity) !important;
110
- color: var(--mat-sys-on-surface) !important;
111
- }
112
-
113
- .tox .tox-dialog__footer .tox-button {
114
- background-color: var(--mat-sys-primary, #6200ee) !important;
115
- color: var(--mat-sys-on-primary, #fff) !important;
116
- border: none !important;
117
- }
118
-
119
- .tox .tox-dialog__footer .tox-button--secondary {
120
- background-color: transparent !important;
121
- color: var(--mat-sys-primary, #6200ee) !important;
122
- border: 1px solid var(--mat-sys-outline, #ccc) !important;
123
- }
124
- }
125
-
126
- ::ng-deep {
127
- .tox .tox-menu {
128
- background-color: var(--mat-sys-surface-container, #2e334f) !important;
129
- border: 1px solid var(--mat-sys-outline-variant, #404562) !important;
130
- box-shadow: 0 4px 10px var(--mat-sys-shadow, rgba(0, 0, 0, 0.3)) !important;
131
- }
132
-
133
- .tox .tox-collection__item {
134
- color: var(--mat-sys-on-surface, #dde1ff) !important;
135
- }
136
-
137
- .tox .tox-collection__item--active {
138
- background-color: var(--mat-sys-secondary-container, #810081) !important;
139
- color: var(--mat-sys-on-secondary-container, #ffd7f5) !important;
140
- }
141
-
142
- .tox .tox-collection__item-icon svg {
143
- fill: var(--mat-sys-on-surface, #dde1ff) !important;
144
- }
145
-
146
- .tox .tox-collection__item-accessory {
147
- color: var(--mat-sys-on-surface-variant, #c0c5e7) !important;
148
- }
149
-
150
- .tox .tox-swatches__picker-btn {
151
- border-color: var(--mat-sys-outline-variant) !important;
152
- }
153
-
154
- .tox .tox-listbox {
155
- background-color: transparent !important;
156
- border: 1px solid var(--mat-sys-outline, #8a8faf) !important;
157
- color: var(--mat-sys-on-surface, #dde1ff) !important;
158
- }
159
-
160
- .tox .tox-listbox__select-chevron svg {
161
- fill: var(--mat-sys-on-surface-variant, #c0c5e7) !important;
162
- }
163
-
164
- .tox .tox-listbox__select-label {
165
- color: var(--mat-sys-on-surface, #dde1ff) !important;
166
- }
167
-
168
- .tox .tox-listboxfield .tox-listbox--select {
169
- background-color: transparent !important;
170
- color: var(--mat-sys-on-surface, #dde1ff) !important;
171
- }
172
- }
@@ -46,7 +46,7 @@ export class RichTextComponent extends FieldBase {
46
46
 
47
47
  fieldOnChange(editorValue: any) {
48
48
  const oldVal = this.value$ ?? '';
49
- const newVal = editorValue?.editor?.getBody()?.innerHTML ?? '';
49
+ const newVal = typeof editorValue === 'string' ? editorValue : (editorValue ?? '');
50
50
 
51
51
  const isValueChanged = newVal.toString() !== oldVal.toString();
52
52
 
@@ -1,5 +1,5 @@
1
1
  <div *ngIf="bVisible$ !== false">
2
- <a *ngIf="!isLinkTextEmpty; else noLink" class="psdk-value" href="#" (click)="openLinkClick($event)">{{ value$ || '---' }}</a>
2
+ <a *ngIf="!isLinkTextEmpty; else noLink" class="psdk-value psdk-semantic-link" href="#" (click)="openLinkClick($event)">{{ value$ || '---' }}</a>
3
3
  </div>
4
4
  <ng-template #noLink>
5
5
  <div class="psdk-value">{{ value$ || '---' }}</div>
@@ -1,3 +1,7 @@
1
1
  .psdk-value {
2
2
  margin: 8px 0px;
3
3
  }
4
+
5
+ .psdk-semantic-link {
6
+ color: var(--mat-sys-primary);
7
+ }
@@ -98,11 +98,14 @@ export class SemanticLinkComponent implements OnInit, OnDestroy {
98
98
  };
99
99
  }, {});
100
100
  }
101
- this.pConn$.getActionsApi().showData('pyDetails', lookUpDataPage, {
102
- ...this.payload
103
- });
101
+ if (lookUpDataPage) {
102
+ this.pConn$.getActionsApi().showData('pyDetails', lookUpDataPage, {
103
+ ...this.payload
104
+ });
105
+ }
106
+ return;
104
107
  }
105
- if ((this.referenceType && this.referenceType.toUpperCase() === 'DATA') || this.shouldTreatAsDataReference) {
108
+ if (this.dataViewName && ((this.referenceType && this.referenceType.toUpperCase() === 'DATA') || this.shouldTreatAsDataReference)) {
106
109
  this.pConn$.getActionsApi().showData('pyDetails', this.dataViewName, {
107
110
  ...this.payload
108
111
  });
@@ -153,7 +156,8 @@ export class SemanticLinkComponent implements OnInit, OnDestroy {
153
156
  }
154
157
 
155
158
  private buildDataPayload() {
156
- const { dataRelationshipContext = null, contextPage } = this.configProps$;
159
+ const { dataRelationshipContext: configuredDataRelationshipContext, contextPage } = this.configProps$;
160
+ const dataRelationshipContext = configuredDataRelationshipContext ?? null;
157
161
  const {
158
162
  RESOURCE_TYPES: { DATA }
159
163
  } = PCore.getConstants();
@@ -5,7 +5,7 @@
5
5
  <div *ngIf="bHasForm$; else noEdit">
6
6
  <div [formGroup]="formGroup$">
7
7
  <div *ngIf="bVisible$">
8
- <mat-form-field class="psdk-full-width" subscriptSizing="dynamic" [hintLabel]="helperText">
8
+ <mat-form-field class="psdk-full-width" subscriptSizing="dynamic">
9
9
  <mat-label>{{ label$ }}</mat-label>
10
10
  <textarea
11
11
  matInput
@@ -21,6 +21,7 @@
21
21
  (change)="fieldOnChange($event)"
22
22
  (blur)="fieldOnBlur($event)"
23
23
  ></textarea>
24
+ <mat-hint *ngIf="helperText" [appFieldWarning]="bFieldMessageVisible$">{{ helperText }}</mat-hint>
24
25
  <mat-error *ngIf="fieldControl.invalid">{{ getErrorMessage() }}</mat-error>
25
26
  </mat-form-field>
26
27
  </div>
@@ -5,6 +5,7 @@ import { MatInputModule } from '@angular/material/input';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
6
 
7
7
  import { FieldBase } from '@pega/angular-sdk-components';
8
+ import { FieldWarningDirective } from '@pega/angular-sdk-components';
8
9
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
9
10
  import { handleEvent } from '@pega/angular-sdk-components';
10
11
  import { PConnFieldProps } from '@pega/angular-sdk-components';
@@ -18,7 +19,7 @@ interface TextAreaProps extends PConnFieldProps {
18
19
  selector: 'app-text-area',
19
20
  templateUrl: './text-area.component.html',
20
21
  styleUrls: ['./text-area.component.scss'],
21
- imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
22
+ imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, FieldWarningDirective, forwardRef(() => ComponentMapperComponent)]
22
23
  })
23
24
  export class TextAreaComponent extends FieldBase {
24
25
  configProps$: TextAreaProps;
@@ -4,7 +4,7 @@
4
4
  <ng-template #noDisplayMode>
5
5
  <div *ngIf="!bReadonly$ && bHasForm$; else noEdit">
6
6
  <div [formGroup]="formGroup$" *ngIf="bVisible$">
7
- <mat-form-field class="psdk-full-width" subscriptSizing="dynamic" [hintLabel]="helperText">
7
+ <mat-form-field class="psdk-full-width" subscriptSizing="dynamic">
8
8
  <mat-label>{{ label$ }}</mat-label>
9
9
  <input
10
10
  matInput
@@ -17,6 +17,7 @@
17
17
  (change)="fieldOnChange($event)"
18
18
  (blur)="fieldOnBlur($event)"
19
19
  />
20
+ <mat-hint *ngIf="helperText" [appFieldWarning]="bFieldMessageVisible$">{{ helperText }}</mat-hint>
20
21
  <mat-error *ngIf="fieldControl.invalid">{{ getErrorMessage() }}</mat-error>
21
22
  </mat-form-field>
22
23
  </div>
@@ -5,6 +5,7 @@ import { MatInputModule } from '@angular/material/input';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
6
 
7
7
  import { FieldBase } from '@pega/angular-sdk-components';
8
+ import { FieldWarningDirective } from '@pega/angular-sdk-components';
8
9
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
9
10
  import { handleEvent } from '@pega/angular-sdk-components';
10
11
  import { PConnFieldProps } from '@pega/angular-sdk-components';
@@ -18,7 +19,7 @@ interface TextInputProps extends PConnFieldProps {
18
19
  selector: 'app-text-input',
19
20
  templateUrl: './text-input.component.html',
20
21
  styleUrls: ['./text-input.component.scss'],
21
- imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
22
+ imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, FieldWarningDirective, forwardRef(() => ComponentMapperComponent)]
22
23
  })
23
24
  export class TextInputComponent extends FieldBase {
24
25
  configProps$: TextInputProps;
@@ -4,7 +4,7 @@
4
4
  <ng-template #noDisplayMode>
5
5
  <div *ngIf="!bReadonly$ && bHasForm$; else noEdit">
6
6
  <div [formGroup]="formGroup$" *ngIf="bVisible$">
7
- <mat-form-field class="psdk-full-width" subscriptSizing="dynamic" [hintLabel]="helperText">
7
+ <mat-form-field class="psdk-full-width" subscriptSizing="dynamic">
8
8
  <mat-label>{{ label$ }}</mat-label>
9
9
  <input
10
10
  matInput
@@ -17,6 +17,7 @@
17
17
  (change)="fieldOnChange($event)"
18
18
  (blur)="fieldOnBlur($event)"
19
19
  />
20
+ <mat-hint *ngIf="helperText" [appFieldWarning]="bFieldMessageVisible$">{{ helperText }}</mat-hint>
20
21
  <mat-error *ngIf="fieldControl.invalid">{{ getErrorMessage() }}</mat-error>
21
22
  </mat-form-field>
22
23
  </div>
@@ -5,6 +5,7 @@ import { MatInputModule } from '@angular/material/input';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
6
 
7
7
  import { FieldBase } from '@pega/angular-sdk-components';
8
+ import { FieldWarningDirective } from '@pega/angular-sdk-components';
8
9
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
9
10
  import { handleEvent } from '@pega/angular-sdk-components';
10
11
  import { format } from '@pega/angular-sdk-components';
@@ -18,7 +19,7 @@ interface TimeProps extends PConnFieldProps {
18
19
  selector: 'app-time',
19
20
  templateUrl: './time.component.html',
20
21
  styleUrls: ['./time.component.scss'],
21
- imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
22
+ imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, FieldWarningDirective, forwardRef(() => ComponentMapperComponent)]
22
23
  })
23
24
  export class TimeComponent extends FieldBase {
24
25
  configProps$: TimeProps;
@@ -4,7 +4,7 @@
4
4
  <ng-template #noDisplayMode>
5
5
  <div *ngIf="!bReadonly$ && bHasForm$; else noEdit">
6
6
  <div [formGroup]="formGroup$" *ngIf="bVisible$">
7
- <mat-form-field class="psdk-full-width" subscriptSizing="dynamic" [hintLabel]="helperText">
7
+ <mat-form-field class="psdk-full-width" subscriptSizing="dynamic">
8
8
  <mat-label>{{ label$ }}</mat-label>
9
9
  <input
10
10
  matInput
@@ -17,6 +17,7 @@
17
17
  (change)="fieldOnChange($event)"
18
18
  (blur)="fieldOnBlur($event)"
19
19
  />
20
+ <mat-hint *ngIf="helperText" [appFieldWarning]="bFieldMessageVisible$">{{ helperText }}</mat-hint>
20
21
  <mat-error *ngIf="fieldControl.invalid">{{ getErrorMessage() }}</mat-error>
21
22
  </mat-form-field>
22
23
  </div>
@@ -5,6 +5,7 @@ import { MatInputModule } from '@angular/material/input';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
6
 
7
7
  import { FieldBase } from '@pega/angular-sdk-components';
8
+ import { FieldWarningDirective } from '@pega/angular-sdk-components';
8
9
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
9
10
  import { handleEvent } from '@pega/angular-sdk-components';
10
11
  import { PConnFieldProps } from '@pega/angular-sdk-components';
@@ -17,7 +18,7 @@ interface URLProps extends PConnFieldProps {
17
18
  selector: 'app-url',
18
19
  templateUrl: './url.component.html',
19
20
  styleUrls: ['./url.component.scss'],
20
- imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
21
+ imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, FieldWarningDirective, forwardRef(() => ComponentMapperComponent)]
21
22
  })
22
23
  export class UrlComponent extends FieldBase {
23
24
  configProps$: URLProps;
@@ -8,7 +8,7 @@
8
8
  <component-mapper name="Operator" [props]="{ pConn$, name$: userName$ }"></component-mapper>
9
9
  </div>
10
10
  <div [formGroup]="formGroup$" *ngIf="type === 'dropdown'">
11
- <mat-form-field class="psdk-full-width" subscriptSizing="dynamic" [hintLabel]="helperText">
11
+ <mat-form-field class="psdk-full-width" subscriptSizing="dynamic">
12
12
  <mat-select [required]="bRequired$" [formControl]="fieldControl" [attr.data-test-id]="testId" (selectionChange)="fieldOnChange($event)">
13
13
  <mat-option *ngFor="let opt of options$" [value]="opt.key">
14
14
  {{ opt.value }}
@@ -18,10 +18,11 @@
18
18
  <mat-error *ngIf="fieldControl.invalid">
19
19
  {{ getErrorMessage() }}
20
20
  </mat-error>
21
+ <mat-hint *ngIf="helperText" [appFieldWarning]="bFieldMessageVisible$">{{ helperText }}</mat-hint>
21
22
  </mat-form-field>
22
23
  </div>
23
24
  <div [formGroup]="formGroup$" *ngIf="type === 'searchbox'">
24
- <mat-form-field class="psdk-full-width" subscriptSizing="dynamic" [hintLabel]="helperText">
25
+ <mat-form-field class="psdk-full-width" subscriptSizing="dynamic">
25
26
  <mat-label>{{ label$ }}</mat-label>
26
27
  <input
27
28
  matInput
@@ -40,6 +41,7 @@
40
41
  <mat-error *ngIf="fieldControl.invalid">
41
42
  {{ getErrorMessage() }}
42
43
  </mat-error>
44
+ <mat-hint *ngIf="helperText" [appFieldWarning]="bFieldMessageVisible$">{{ helperText }}</mat-hint>
43
45
  </mat-form-field>
44
46
  </div>
45
47
  </div>
@@ -9,6 +9,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
9
9
  import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
10
10
  import { Utils } from '@pega/angular-sdk-components';
11
11
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
12
+ import { FieldWarningDirective } from '@pega/angular-sdk-components';
12
13
  import { PConnFieldProps } from '@pega/angular-sdk-components';
13
14
  import { map, Observable, startWith } from 'rxjs';
14
15
  import { handleEvent } from '@pega/angular-sdk-components';
@@ -38,6 +39,7 @@ interface UserReferenceProps extends Omit<PConnFieldProps, 'value'> {
38
39
  MatOptionModule,
39
40
  MatInputModule,
40
41
  MatAutocompleteModule,
42
+ FieldWarningDirective,
41
43
  forwardRef(() => ComponentMapperComponent)
42
44
  ]
43
45
  })
@@ -54,6 +56,7 @@ export class UserReferenceComponent implements OnInit, OnDestroy {
54
56
  options$: any;
55
57
  bReadonly$: boolean;
56
58
  bRequired$: boolean;
59
+ bFieldMessageVisible$ = false;
57
60
  showAsFormattedText$?: boolean;
58
61
  displayAs$?: string;
59
62
  testId: string;
@@ -158,12 +161,17 @@ export class UserReferenceComponent implements OnInit, OnDestroy {
158
161
  this.testId = props.testId;
159
162
  this.onRecordChange = props?.onRecordChange;
160
163
 
161
- const { label, displayAs, value, showAsFormattedText, helperText, placeholder, displayMode } = props;
164
+ const { label, displayAs, value, showAsFormattedText, helperText, placeholder, displayMode, messageConfig = {}, showFieldMessage } = props;
165
+ const { readOnly, required } = props;
166
+ [this.bReadonly$, this.bRequired$] = [readOnly, required].map(prop => prop === true || (typeof prop === 'string' && prop === 'true'));
167
+
168
+ const isMessageVisible = this.utils.getBooleanValue(messageConfig.visibility);
169
+ this.bFieldMessageVisible$ = this.utils.getBooleanValue(showFieldMessage) && isMessageVisible && !this.bReadonly$;
162
170
 
163
171
  this.label$ = label;
164
172
  this.showAsFormattedText$ = showAsFormattedText;
165
173
  this.displayAs$ = displayAs;
166
- this.helperText = helperText;
174
+ this.helperText = this.bFieldMessageVisible$ ? (messageConfig.content ?? '') : helperText;
167
175
  this.placeholder = placeholder || '';
168
176
  this.displayMode$ = displayMode;
169
177
 
@@ -173,9 +181,6 @@ export class UserReferenceComponent implements OnInit, OnDestroy {
173
181
  this.value$ = value || '';
174
182
  }
175
183
 
176
- const { readOnly, required } = props;
177
- [this.bReadonly$, this.bRequired$] = [readOnly, required].map(prop => prop === true || (typeof prop === 'string' && prop === 'true'));
178
-
179
184
  this.actionsApi = this.pConn$.getActionsApi();
180
185
  this.propName = this.pConn$.getStateProps().value;
181
186
 
@@ -1,7 +1,7 @@
1
1
  <div style="text-align: left" class="psdk-flow-container-top">
2
2
  <div *ngIf="!bShowConfirm">
3
3
  <div *ngIf="!todo_showTodo$">
4
- <h2 *ngIf="!isMultiStep">{{ containerName$ }}</h2>
4
+ <h2 *ngIf="containerName$">{{ containerName$ }}</h2>
5
5
  <div *ngIf="banners.length">
6
6
  <component-mapper name="AlertBanner" [props]="{ banners }"></component-mapper>
7
7
  </div>
@@ -1,4 +1,4 @@
1
- import { Component, OnInit, Input, ChangeDetectorRef, NgZone, forwardRef, OnDestroy, Injector } from '@angular/core';
1
+ import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy, Injector } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormBuilder, FormGroup } from '@angular/forms';
4
4
  import { MatCardModule } from '@angular/material/card';
@@ -75,7 +75,6 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement
75
75
  private cdRef: ChangeDetectorRef,
76
76
  private psService: ProgressSpinnerService,
77
77
  private fb: FormBuilder,
78
- private ngZone: NgZone,
79
78
  private utils: Utils
80
79
  ) {
81
80
  super(injector);
@@ -123,6 +122,7 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement
123
122
  'clearBannerMessages',
124
123
  () => {
125
124
  this.banners = [];
125
+ this.cdRef.markForCheck();
126
126
  },
127
127
  'clearBannerMessages'
128
128
  );
@@ -188,10 +188,9 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement
188
188
  }
189
189
 
190
190
  showPageMessages(completeProps: FlowContainerProps) {
191
- this.ngZone.run(() => {
192
- const pageMessages = completeProps.pageMessages;
193
- this.banners = [{ messages: pageMessages?.map(msg => this.localizedVal(msg.message, 'Messages')), variant: 'urgent' }];
194
- });
191
+ const pageMessages = completeProps.pageMessages;
192
+ this.banners = [{ messages: pageMessages?.map(msg => this.localizedVal(msg.message, 'Messages')), variant: 'urgent' }];
193
+ this.cdRef.markForCheck();
195
194
  }
196
195
 
197
196
  getTodoVisibilty() {
@@ -384,8 +383,7 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement
384
383
  const { CASE_INFO: CASE_CONSTS } = PCore.getConstants();
385
384
 
386
385
  setTimeout(() => {
387
- this.ngZone.run(() => {
388
- /*
386
+ /*
389
387
  *** renove this commmented out code when React/WC is updated
390
388
  *** this code is replace with the call to "getToDoAssigments" function below
391
389
 
@@ -403,32 +401,32 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement
403
401
  const caseActions = localPConn.getValue(CASE_CONSTS.CASE_INFO_ACTIONS);
404
402
  */
405
403
 
406
- const todoAssignments = getToDoAssignments(this.pConn$);
404
+ const todoAssignments = getToDoAssignments(this.pConn$);
407
405
 
408
- if (todoAssignments && todoAssignments.length > 0) {
409
- this.todo_caseInfoID$ = this.pConn$.getValue(CASE_CONSTS.CASE_INFO_ID);
410
- this.todo_datasource$ = { source: todoAssignments };
411
- }
406
+ if (todoAssignments && todoAssignments.length > 0) {
407
+ this.todo_caseInfoID$ = this.pConn$.getValue(CASE_CONSTS.CASE_INFO_ID);
408
+ this.todo_datasource$ = { source: todoAssignments };
409
+ }
412
410
 
413
- /* remove this commented out code when update React/WC */
414
- // let kid = this.pConn$.getChildren()[0];
411
+ /* remove this commented out code when update React/WC */
412
+ // let kid = this.pConn$.getChildren()[0];
415
413
 
416
- // kid.getPConnect() can be a Reference component. So normalize it just in case
417
- // let todoKid = kid.getPConnect().getChildren()[0];
414
+ // kid.getPConnect() can be a Reference component. So normalize it just in case
415
+ // let todoKid = kid.getPConnect().getChildren()[0];
418
416
 
419
- // this.todo_pConn$ = todoKid.getPConnect();
417
+ // this.todo_pConn$ = todoKid.getPConnect();
420
418
 
421
- /* code change here to note for React/WC */
422
- // todo now needs pConn to open the work item on click "go"
423
- this.todo_pConn$ = this.pConn$;
419
+ /* code change here to note for React/WC */
420
+ // todo now needs pConn to open the work item on click "go"
421
+ this.todo_pConn$ = this.pConn$;
424
422
 
425
- // still needs the context of the original work item
426
- this.todo_context$ = localPConn.getContextName();
423
+ // still needs the context of the original work item
424
+ this.todo_context$ = localPConn.getContextName();
427
425
 
428
- this.todo_showTodo$ = true;
426
+ this.todo_showTodo$ = true;
429
427
 
430
- this.psService.sendMessage(false);
431
- });
428
+ this.psService.sendMessage(false);
429
+ this.cdRef.markForCheck();
432
430
  });
433
431
  }
434
432
 
@@ -533,24 +531,19 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement
533
531
  const normalizedConfigObjectAsPConnect = normalizedConfigObject.getComponent();
534
532
 
535
533
  // makes sure Angular tracks these changes
536
- this.ngZone.run(() => {
537
- this.buildName$ = this.getBuildName();
538
- // what comes back now in configObject is the children of the flowContainer
534
+ this.buildName$ = this.getBuildName();
535
+ // what comes back now in configObject is the children of the flowContainer
539
536
 
540
- this.arChildren$ = [];
541
- this.arChildren$.push(normalizedConfigObjectAsPConnect);
537
+ this.arChildren$ = [];
538
+ this.arChildren$.push(normalizedConfigObjectAsPConnect);
542
539
 
543
- this.psService.sendMessage(false);
540
+ this.psService.sendMessage(false);
544
541
 
545
- const oWorkItem = configObject.getPConnect();
546
- const oWorkData: any = oWorkItem.getDataObject();
542
+ const oWorkItem = configObject.getPConnect();
543
+ const oWorkData: any = oWorkItem.getDataObject();
547
544
 
548
- this.containerName$ = this.localizedVal(
549
- this.getActiveViewLabel() || oWorkData.caseInfo.assignments?.[0]?.name,
550
- undefined,
551
- this.localeReference
552
- );
553
- });
545
+ this.containerName$ = this.localizedVal(this.getActiveViewLabel() || oWorkData.caseInfo.assignments?.[0]?.name, undefined, this.localeReference);
546
+ this.cdRef.markForCheck();
554
547
  }
555
548
 
556
549
  getBuildName(): string {
@@ -0,0 +1,12 @@
1
+ <mat-grid-list cols="2" rowHeight="4.25rem">
2
+ <mat-grid-tile>
3
+ <button mat-raised-button variant="contained" color="secondary" [disabled]="bDisabled$" (click)="onCancel()">
4
+ {{ localizedVal('Cancel', localeCategory) }}
5
+ </button>
6
+ </mat-grid-tile>
7
+ <mat-grid-tile>
8
+ <button mat-raised-button variant="contained" color="primary" [disabled]="bDisabled$" (click)="onSubmit()">
9
+ {{ localizedVal(primaryLabel$, localeCategory) }}
10
+ </button>
11
+ </mat-grid-tile>
12
+ </mat-grid-list>