@pega/angular-sdk-overrides 0.25.1 → 0.25.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.
- package/lib/designSystemExtension/alert/alert.component.scss +3 -3
- package/lib/designSystemExtension/banner/banner.component.scss +12 -2
- package/lib/designSystemExtension/material-case-summary/material-case-summary.component.html +6 -3
- package/lib/designSystemExtension/material-case-summary/material-case-summary.component.scss +5 -34
- package/lib/designSystemExtension/material-details/material-details.component.scss +0 -5
- package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +2 -2
- package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +4 -3
- package/lib/designSystemExtension/material-summary-item/material-summary-item.component.scss +2 -17
- package/lib/designSystemExtension/material-utility/material-utility.component.scss +1 -2
- package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss +1 -1
- package/lib/designSystemExtension/operator/operator.component.html +1 -1
- package/lib/designSystemExtension/operator/operator.component.scss +3 -10
- package/lib/designSystemExtension/operator/operator.component.ts +0 -1
- package/lib/designSystemExtension/pulse/pulse.component.scss +2 -2
- package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +0 -1
- package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.scss +16 -8
- package/lib/field/auto-complete/auto-complete.component.html +0 -1
- package/lib/field/auto-complete/auto-complete.component.ts +35 -172
- package/lib/field/cancel-alert/cancel-alert.component.html +8 -12
- package/lib/field/cancel-alert/cancel-alert.component.scss +2 -3
- package/lib/field/cancel-alert/cancel-alert.component.ts +24 -36
- package/lib/field/check-box/check-box.component.html +0 -1
- package/lib/field/check-box/check-box.component.scss +0 -1
- package/lib/field/check-box/check-box.component.ts +19 -149
- package/lib/field/currency/currency.component.ts +36 -168
- package/lib/field/date/date.component.html +1 -1
- package/lib/field/date/date.component.ts +30 -150
- package/lib/field/date-time/date-time.component.ts +31 -149
- package/lib/field/decimal/decimal.component.ts +38 -163
- package/lib/field/dropdown/dropdown.component.ts +29 -151
- package/lib/field/email/email.component.ts +16 -155
- package/lib/field/field.base.ts +149 -0
- package/lib/field/group/group.component.ts +7 -4
- package/lib/field/integer/integer.component.ts +18 -157
- package/lib/field/location/location.component.ts +1 -1
- package/lib/field/multiselect/multiselect.component.ts +46 -148
- package/lib/field/multiselect/utils.ts +55 -47
- package/lib/field/object-reference/object-reference.component.html +17 -0
- package/lib/field/object-reference/object-reference.component.scss +0 -0
- package/lib/field/object-reference/object-reference.component.spec.ts +22 -0
- package/lib/field/object-reference/object-reference.component.ts +237 -0
- package/lib/field/percentage/percentage.component.ts +37 -154
- package/lib/field/phone/phone.component.ts +28 -142
- package/lib/field/radio-buttons/radio-buttons.component.scss +4 -2
- package/lib/field/radio-buttons/radio-buttons.component.ts +35 -161
- package/lib/field/rich-text/rich-text.component.ts +19 -90
- package/lib/field/scalar-list/scalar-list.component.ts +17 -72
- package/lib/field/selectable-card/selectable-card.component.html +54 -24
- package/lib/field/selectable-card/selectable-card.component.scss +11 -0
- package/lib/field/selectable-card/selectable-card.component.ts +16 -52
- package/lib/field/semantic-link/semantic-link.component.html +4 -8
- package/lib/field/semantic-link/semantic-link.component.scss +0 -13
- package/lib/field/semantic-link/semantic-link.component.ts +165 -5
- package/lib/field/text/text.component.scss +0 -1
- package/lib/field/text-area/text-area.component.ts +18 -152
- package/lib/field/text-input/text-input.component.ts +16 -155
- package/lib/field/time/time.component.ts +17 -151
- package/lib/field/url/url.component.ts +16 -154
- package/lib/field/user-reference/user-reference.component.scss +0 -1
- package/lib/field/user-reference/user-reference.component.ts +2 -3
- package/lib/infra/Containers/flow-container/flow-container.component.ts +5 -7
- package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +5 -10
- package/lib/infra/Containers/view-container/helper.ts +35 -2
- package/lib/infra/Containers/view-container/view-container.component.ts +1 -1
- package/lib/infra/action-buttons/action-buttons.component.html +13 -8
- package/lib/infra/action-buttons/action-buttons.component.scss +23 -0
- package/lib/infra/action-buttons/action-buttons.component.ts +1 -2
- package/lib/infra/assignment/assignment.component.ts +8 -6
- package/lib/infra/assignment-card/assignment-card.component.html +1 -2
- package/lib/infra/assignment-card/assignment-card.component.scss +0 -4
- package/lib/infra/assignment-card/assignment-card.component.ts +21 -4
- package/lib/infra/defer-load/defer-load.component.html +6 -2
- package/lib/infra/defer-load/defer-load.component.ts +16 -10
- package/lib/infra/multi-step/multi-step.component.scss +1 -21
- package/lib/infra/navbar/navbar.component.html +25 -28
- package/lib/infra/navbar/navbar.component.scss +16 -4
- package/lib/infra/navbar/navbar.component.ts +8 -3
- package/lib/infra/root-container/root-container.component.scss +0 -1
- package/lib/infra/root-container/root-container.component.ts +1 -2
- package/lib/infra/stages/stages.component.html +2 -2
- package/lib/infra/stages/stages.component.scss +7 -35
- package/lib/infra/stages/stages.component.ts +4 -2
- package/lib/infra/view/view.component.html +1 -1
- package/lib/infra/view/view.component.ts +0 -2
- package/lib/template/advanced-search/advanced-search.component.html +12 -0
- package/lib/template/advanced-search/advanced-search.component.scss +0 -0
- package/lib/template/advanced-search/advanced-search.component.spec.ts +0 -0
- package/lib/template/advanced-search/advanced-search.component.ts +112 -0
- package/lib/template/advanced-search/advanced-search.service.ts +27 -0
- package/lib/template/advanced-search/search-group/persist-utils.ts +56 -0
- package/lib/template/advanced-search/search-groups/search-groups.component.html +32 -0
- package/lib/template/advanced-search/search-groups/search-groups.component.scss +0 -0
- package/lib/template/advanced-search/search-groups/search-groups.component.spec.ts +0 -0
- package/lib/template/advanced-search/search-groups/search-groups.component.ts +294 -0
- package/lib/template/advanced-search/search-groups/utils.ts +29 -0
- package/lib/template/app-shell/app-shell.component.html +4 -1
- package/lib/template/app-shell/app-shell.component.scss +0 -3
- package/lib/template/app-shell/app-shell.component.ts +46 -7
- package/lib/template/case-summary/case-summary.component.scss +0 -2
- package/lib/template/case-view/case-view.component.html +3 -3
- package/lib/template/case-view/case-view.component.scss +18 -10
- package/lib/template/case-view/case-view.component.ts +1 -1
- package/lib/template/data-reference/data-reference-advanced-search.service.ts +16 -0
- package/lib/template/data-reference/data-reference.component.html +11 -8
- package/lib/template/data-reference/data-reference.component.ts +346 -112
- package/lib/template/data-reference/search-form/search-form.component.html +39 -0
- package/lib/template/data-reference/search-form/search-form.component.scss +11 -0
- package/lib/template/data-reference/search-form/search-form.component.spec.ts +0 -0
- package/lib/template/data-reference/search-form/search-form.component.ts +167 -0
- package/lib/template/data-reference/search-form/tabsData.ts +160 -0
- package/lib/template/data-reference/utils.ts +92 -0
- package/lib/template/default-form/default-form.component.ts +10 -2
- package/lib/template/default-page/default-page.component.html +34 -0
- package/lib/template/default-page/default-page.component.scss +31 -0
- package/lib/template/default-page/default-page.component.spec.ts +24 -0
- package/lib/template/default-page/default-page.component.ts +64 -0
- package/lib/template/field-group-list/field-group-list.component.scss +0 -1
- package/lib/template/inline-dashboard-page/inline-dashboard-page.component.ts +1 -1
- package/lib/template/list-view/list-view.component.html +9 -4
- package/lib/template/list-view/list-view.component.scss +21 -21
- package/lib/template/list-view/list-view.component.ts +154 -84
- package/lib/template/list-view/utils.ts +25 -2
- package/lib/template/object-page/object-page.component.html +1 -0
- package/lib/template/object-page/object-page.component.scss +0 -0
- package/lib/template/object-page/object-page.component.spec.ts +22 -0
- package/lib/template/object-page/object-page.component.ts +14 -0
- package/lib/template/one-column-tab/one-column-tab.component.scss +1 -1
- package/lib/template/repeating-structures/repeating-structures.component.ts +0 -1
- package/lib/template/self-service-case-view/self-service-case-view.component.html +80 -0
- package/lib/template/self-service-case-view/self-service-case-view.component.scss +124 -0
- package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +24 -0
- package/lib/template/self-service-case-view/self-service-case-view.component.ts +216 -0
- package/lib/template/simple-table/simple-table.component.ts +0 -1
- package/lib/template/simple-table-manual/helpers.ts +2 -2
- package/lib/template/simple-table-manual/simple-table-manual.component.html +4 -4
- package/lib/template/simple-table-manual/simple-table-manual.component.scss +4 -14
- package/lib/template/simple-table-manual/simple-table-manual.component.ts +8 -4
- package/lib/template/single-reference-readonly/single-reference-readonly.component.html +4 -1
- package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +21 -0
- package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +104 -3
- package/lib/template/utils.ts +42 -0
- package/lib/template/wss-nav-bar/wss-nav-bar.component.html +5 -4
- package/lib/template/wss-nav-bar/wss-nav-bar.component.scss +2 -8
- package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +1 -8
- package/lib/widget/app-announcement/app-announcement.component.html +1 -2
- package/lib/widget/app-announcement/app-announcement.component.scss +2 -2
- package/lib/widget/attachment/Attachment.types.ts +92 -0
- package/lib/widget/attachment/AttachmentUtils.ts +287 -0
- package/lib/widget/attachment/attachment.component.html +3 -3
- package/lib/widget/attachment/attachment.component.scss +2 -5
- package/lib/widget/attachment/attachment.component.ts +255 -254
- package/lib/widget/feed-container/feed-container.component.scss +3 -9
- package/lib/widget/feed-container/feed-container.component.ts +2 -2
- package/lib/widget/file-utility/file-utility.component.html +3 -3
- package/lib/widget/file-utility/file-utility.component.scss +5 -16
- package/lib/widget/list-utility/list-utility.component.scss +3 -5
- package/lib/widget/todo/todo.component.html +8 -5
- package/lib/widget/todo/todo.component.scss +10 -11
- package/lib/widget/todo/todo.component.ts +6 -2
- package/package.json +1 -1
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { Component, Input, OnInit,
|
|
1
|
+
import { Component, Input, OnInit, EventEmitter, Output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
2
3
|
import { MatCardModule } from '@angular/material/card';
|
|
3
4
|
import { MatRadioModule } from '@angular/material/radio';
|
|
4
5
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
5
|
-
import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
|
|
6
|
-
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
7
|
-
import { CommonModule } from '@angular/common';
|
|
8
6
|
import { deleteInstruction, insertInstruction } from '@pega/angular-sdk-components';
|
|
9
7
|
import { handleEvent } from '@pega/angular-sdk-components';
|
|
10
|
-
import {
|
|
8
|
+
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
9
|
+
import { FieldBase } from '@pega/angular-sdk-components';
|
|
11
10
|
|
|
12
11
|
interface SelectableCardProps extends PConnFieldProps {
|
|
13
12
|
selectionList: any;
|
|
@@ -30,26 +29,21 @@ interface SelectableCardProps extends PConnFieldProps {
|
|
|
30
29
|
templateUrl: './selectable-card.component.html',
|
|
31
30
|
styleUrl: './selectable-card.component.scss'
|
|
32
31
|
})
|
|
33
|
-
export class SelectableCardComponent implements OnInit
|
|
34
|
-
@Input() pConn$: typeof PConnect;
|
|
32
|
+
export class SelectableCardComponent extends FieldBase implements OnInit {
|
|
35
33
|
@Input() type: string;
|
|
36
34
|
@Output() valueChange: EventEmitter<any> = new EventEmitter();
|
|
37
35
|
|
|
38
|
-
// Used with AngularPConnect
|
|
39
|
-
angularPConnectData: AngularPConnectData = {};
|
|
40
36
|
configProps$: SelectableCardProps;
|
|
41
|
-
value$: any;
|
|
42
37
|
readOnly = false;
|
|
43
38
|
disabled = false;
|
|
44
|
-
displayMode$: string | undefined;
|
|
45
39
|
radioBtnValue;
|
|
46
40
|
additionalProps;
|
|
47
|
-
testId;
|
|
48
41
|
showNoValue = false;
|
|
49
42
|
selectionKey?: string;
|
|
50
43
|
defaultStyle = {};
|
|
51
44
|
specialStyle = {};
|
|
52
45
|
cardStyle = {};
|
|
46
|
+
noLabelStyle: {};
|
|
53
47
|
selectedvalues: any;
|
|
54
48
|
selectionList: any;
|
|
55
49
|
primaryField: string;
|
|
@@ -61,17 +55,9 @@ export class SelectableCardComponent implements OnInit, OnDestroy {
|
|
|
61
55
|
}
|
|
62
56
|
];
|
|
63
57
|
|
|
64
|
-
|
|
65
|
-
|
|
58
|
+
override ngOnInit(): void {
|
|
59
|
+
super.ngOnInit();
|
|
66
60
|
|
|
67
|
-
constructor(
|
|
68
|
-
private angularPConnect: AngularPConnectService,
|
|
69
|
-
private utils: Utils
|
|
70
|
-
) {}
|
|
71
|
-
|
|
72
|
-
ngOnInit(): void {
|
|
73
|
-
// First thing in initialization is registering and subscribing to the AngularPConnect service
|
|
74
|
-
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
|
|
75
61
|
// styles used in displaying common field props
|
|
76
62
|
this.defaultStyle = {
|
|
77
63
|
display: 'grid',
|
|
@@ -84,37 +70,15 @@ export class SelectableCardComponent implements OnInit, OnDestroy {
|
|
|
84
70
|
margin: '0.5rem',
|
|
85
71
|
fontSize: '0.875rem'
|
|
86
72
|
};
|
|
87
|
-
this.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (this.angularPConnectData.unsubscribeFn) {
|
|
92
|
-
this.angularPConnectData.unsubscribeFn();
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Callback passed when subscribing to store change
|
|
97
|
-
onStateChange() {
|
|
98
|
-
this.checkAndUpdate();
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
checkAndUpdate() {
|
|
102
|
-
// Should always check the bridge to see if the component should
|
|
103
|
-
// update itself (re-render)
|
|
104
|
-
const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
|
|
105
|
-
|
|
106
|
-
// ONLY call updateSelf when the component should update
|
|
107
|
-
if (bUpdateSelf) {
|
|
108
|
-
this.updateSelf();
|
|
109
|
-
}
|
|
73
|
+
this.noLabelStyle = {
|
|
74
|
+
alignItems: 'start',
|
|
75
|
+
marginLeft: '0.5rem'
|
|
76
|
+
};
|
|
110
77
|
}
|
|
111
78
|
|
|
112
|
-
updateSelf(): void {
|
|
79
|
+
override updateSelf(): void {
|
|
113
80
|
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as SelectableCardProps;
|
|
114
81
|
|
|
115
|
-
this.actionsApi = this.pConn$.getActionsApi();
|
|
116
|
-
this.propName = this.pConn$.getStateProps().value;
|
|
117
|
-
|
|
118
82
|
const hideFieldLabels = this.configProps$.hideFieldLabels;
|
|
119
83
|
const datasource: any = this.configProps$.datasource;
|
|
120
84
|
const additionalProps: any = this.configProps$.additionalProps;
|
|
@@ -163,7 +127,7 @@ export class SelectableCardComponent implements OnInit, OnDestroy {
|
|
|
163
127
|
|
|
164
128
|
if (this.type === 'checkbox') {
|
|
165
129
|
this.testId = this.configProps$.testId;
|
|
166
|
-
this.displayMode$ = this.configProps$.displayMode;
|
|
130
|
+
this.displayMode$ = this.configProps$.displayMode ?? '';
|
|
167
131
|
|
|
168
132
|
this.selectionKey = this.configProps$.selectionKey;
|
|
169
133
|
recordKey = this.selectionKey?.split('.').pop() ?? '';
|
|
@@ -179,7 +143,7 @@ export class SelectableCardComponent implements OnInit, OnDestroy {
|
|
|
179
143
|
|
|
180
144
|
this.selectionList = this.configProps$.selectionList;
|
|
181
145
|
this.selectedvalues = this.configProps$.readonlyContextList;
|
|
182
|
-
this.showNoValue = this.readOnly && this.selectedvalues
|
|
146
|
+
this.showNoValue = this.readOnly && this.selectedvalues?.length === 0; // not used
|
|
183
147
|
this.primaryField = this.configProps$.primaryField;
|
|
184
148
|
}
|
|
185
149
|
|
|
@@ -204,7 +168,7 @@ export class SelectableCardComponent implements OnInit, OnDestroy {
|
|
|
204
168
|
alt: this.commonProps.image.showImageDescription && imageDescriptionKey ? item[imageDescriptionKey] : '',
|
|
205
169
|
style: {
|
|
206
170
|
width: imageWidth,
|
|
207
|
-
backgroundColor: '
|
|
171
|
+
backgroundColor: 'transparent',
|
|
208
172
|
aspectRatio: '16/9',
|
|
209
173
|
maxHeight: '100%',
|
|
210
174
|
objectFit: 'contain',
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
<div *ngIf="
|
|
2
|
-
<
|
|
1
|
+
<div *ngIf="bVisible$ !== false">
|
|
2
|
+
<a *ngIf="!isLinkTextEmpty; else noLink" class="psdk-value" href="#" (click)="openLinkClick($event)">{{ value$ || '---' }}</a>
|
|
3
3
|
</div>
|
|
4
|
-
|
|
5
|
-
<
|
|
6
|
-
<div *ngIf="label$ !== undefined && bVisible$ !== false" class="psdk-grid-filter">
|
|
7
|
-
<div class="psdk-grid-label">{{ label$ }}</div>
|
|
8
|
-
<div class="psdk-value">{{ value$ || '---' }}</div>
|
|
9
|
-
</div>
|
|
4
|
+
<ng-template #noLink>
|
|
5
|
+
<div class="psdk-value">{{ value$ || '---' }}</div>
|
|
10
6
|
</ng-template>
|
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
.psdk-grid-filter {
|
|
2
|
-
display: grid;
|
|
3
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
4
|
-
column-gap: calc(2 * 0.5rem);
|
|
5
|
-
row-gap: calc(2 * 0.5rem);
|
|
6
|
-
align-items: start;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
.psdk-label {
|
|
10
|
-
color: var(--app-label-color);
|
|
11
|
-
margin: 8px 0px;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
1
|
.psdk-value {
|
|
15
2
|
margin: 8px 0px;
|
|
16
3
|
}
|
|
@@ -1,21 +1,27 @@
|
|
|
1
|
-
import { Component, OnInit, Input,
|
|
1
|
+
import { Component, OnInit, Input, OnDestroy } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { FormGroup } from '@angular/forms';
|
|
4
4
|
import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
|
|
5
|
-
import {
|
|
5
|
+
import { getDataReferenceInfo, isLinkTextEmpty } from '@pega/angular-sdk-components';
|
|
6
6
|
import { Utils } from '@pega/angular-sdk-components';
|
|
7
7
|
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
8
8
|
|
|
9
9
|
interface SemanticLinkProps extends PConnFieldProps {
|
|
10
10
|
// If any, enter additional props that only exist on SemanticLink here
|
|
11
11
|
text: string;
|
|
12
|
+
resourcePayload: any;
|
|
13
|
+
resourceParams: any;
|
|
14
|
+
previewKey: string;
|
|
15
|
+
referenceType: string;
|
|
16
|
+
dataRelationshipContext: string;
|
|
17
|
+
contextPage: any;
|
|
12
18
|
}
|
|
13
19
|
|
|
14
20
|
@Component({
|
|
15
21
|
selector: 'app-semantic-link',
|
|
16
22
|
templateUrl: './semantic-link.component.html',
|
|
17
23
|
styleUrls: ['./semantic-link.component.scss'],
|
|
18
|
-
imports: [CommonModule
|
|
24
|
+
imports: [CommonModule]
|
|
19
25
|
})
|
|
20
26
|
export class SemanticLinkComponent implements OnInit, OnDestroy {
|
|
21
27
|
@Input() pConn$: typeof PConnect;
|
|
@@ -28,6 +34,15 @@ export class SemanticLinkComponent implements OnInit, OnDestroy {
|
|
|
28
34
|
value$ = '';
|
|
29
35
|
displayMode$?: string = '';
|
|
30
36
|
bVisible$ = true;
|
|
37
|
+
linkURL = '';
|
|
38
|
+
dataResourcePayLoad: any;
|
|
39
|
+
referenceType: string;
|
|
40
|
+
shouldTreatAsDataReference: boolean;
|
|
41
|
+
previewKey: string;
|
|
42
|
+
resourcePayload: any = {};
|
|
43
|
+
payload: object;
|
|
44
|
+
dataViewName = '';
|
|
45
|
+
isLinkTextEmpty = false;
|
|
31
46
|
|
|
32
47
|
constructor(
|
|
33
48
|
private angularPConnect: AngularPConnectService,
|
|
@@ -37,7 +52,7 @@ export class SemanticLinkComponent implements OnInit, OnDestroy {
|
|
|
37
52
|
ngOnInit(): void {
|
|
38
53
|
// First thing in initialization is registering and subscribing to the AngularPConnect service
|
|
39
54
|
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
|
|
40
|
-
this.
|
|
55
|
+
this.checkAndUpdate();
|
|
41
56
|
}
|
|
42
57
|
|
|
43
58
|
ngOnDestroy(): void {
|
|
@@ -47,6 +62,10 @@ export class SemanticLinkComponent implements OnInit, OnDestroy {
|
|
|
47
62
|
}
|
|
48
63
|
|
|
49
64
|
onStateChange() {
|
|
65
|
+
this.updateSelf();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
checkAndUpdate() {
|
|
50
69
|
// Should always check the bridge to see if the component should
|
|
51
70
|
// update itself (re-render)
|
|
52
71
|
const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
|
|
@@ -58,12 +77,153 @@ export class SemanticLinkComponent implements OnInit, OnDestroy {
|
|
|
58
77
|
}
|
|
59
78
|
|
|
60
79
|
updateSelf() {
|
|
80
|
+
this.initializeComponentState();
|
|
81
|
+
const isData = this.buildDataPayload();
|
|
82
|
+
this.linkURL = this.buildLinkURL(isData);
|
|
83
|
+
this.isLinkTextEmpty = isLinkTextEmpty(this.value$);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
showDataAction() {
|
|
87
|
+
if (this.dataResourcePayLoad && this.dataResourcePayLoad.resourceType === 'DATA') {
|
|
88
|
+
const { content } = this.dataResourcePayLoad;
|
|
89
|
+
const lookUpDataPageInfo = PCore.getDataTypeUtils().getLookUpDataPageInfo(this.dataResourcePayLoad?.className);
|
|
90
|
+
const lookUpDataPage = PCore.getDataTypeUtils().getLookUpDataPage(this.dataResourcePayLoad?.className);
|
|
91
|
+
if (lookUpDataPageInfo) {
|
|
92
|
+
const { parameters } = lookUpDataPageInfo as any;
|
|
93
|
+
this.payload = Object.keys(parameters).reduce((acc, param) => {
|
|
94
|
+
const paramValue = parameters[param];
|
|
95
|
+
return {
|
|
96
|
+
...acc,
|
|
97
|
+
[param]: PCore.getAnnotationUtils().isProperty(paramValue) ? content[PCore.getAnnotationUtils().getPropertyName(paramValue)] : paramValue
|
|
98
|
+
};
|
|
99
|
+
}, {});
|
|
100
|
+
}
|
|
101
|
+
this.pConn$.getActionsApi().showData('pyDetails', lookUpDataPage, {
|
|
102
|
+
...this.payload
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if ((this.referenceType && this.referenceType.toUpperCase() === 'DATA') || this.shouldTreatAsDataReference) {
|
|
106
|
+
this.pConn$.getActionsApi().showData('pyDetails', this.dataViewName, {
|
|
107
|
+
...this.payload
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
openLinkClick(e) {
|
|
113
|
+
if (!e.metaKey && !e.ctrlKey) {
|
|
114
|
+
e.preventDefault();
|
|
115
|
+
if (
|
|
116
|
+
(this.dataResourcePayLoad && this.dataResourcePayLoad.resourceType === 'DATA') ||
|
|
117
|
+
(this.referenceType && this.referenceType.toUpperCase() === 'DATA') ||
|
|
118
|
+
this.shouldTreatAsDataReference
|
|
119
|
+
) {
|
|
120
|
+
this.showDataAction();
|
|
121
|
+
} else if (this.previewKey) {
|
|
122
|
+
this.pConn$.getActionsApi().openWorkByHandle(this.previewKey, this.resourcePayload.caseClassName);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
private initializeComponentState() {
|
|
61
128
|
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as SemanticLinkProps;
|
|
62
|
-
this.value$ = this.configProps$.text || '
|
|
129
|
+
this.value$ = this.configProps$.text || this.configProps$.value || '';
|
|
63
130
|
this.displayMode$ = this.configProps$.displayMode;
|
|
64
131
|
this.label$ = this.configProps$.label;
|
|
65
132
|
if (this.configProps$.visibility) {
|
|
66
133
|
this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
|
|
67
134
|
}
|
|
135
|
+
this.referenceType = this.configProps$.referenceType;
|
|
136
|
+
this.previewKey = this.configProps$.previewKey;
|
|
137
|
+
this.resourcePayload = this.configProps$.resourcePayload ?? {};
|
|
138
|
+
this.dataResourcePayLoad = this.resourcePayload?.resourceType === 'DATA' ? this.resourcePayload : null;
|
|
139
|
+
this.shouldTreatAsDataReference = !this.previewKey && this.resourcePayload?.caseClassName;
|
|
140
|
+
|
|
141
|
+
const { contextPage } = this.configProps$;
|
|
142
|
+
if (contextPage?.classID) {
|
|
143
|
+
this.resourcePayload.caseClassName = contextPage.classID;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const {
|
|
147
|
+
WORKCLASS,
|
|
148
|
+
CASE_INFO: { CASE_INFO_CLASSID }
|
|
149
|
+
} = PCore.getConstants();
|
|
150
|
+
if (this.resourcePayload.caseClassName === WORKCLASS) {
|
|
151
|
+
this.resourcePayload.caseClassName = this.pConn$.getValue(CASE_INFO_CLASSID);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
private buildDataPayload() {
|
|
156
|
+
const { dataRelationshipContext = null, contextPage } = this.configProps$;
|
|
157
|
+
const {
|
|
158
|
+
RESOURCE_TYPES: { DATA }
|
|
159
|
+
} = PCore.getConstants();
|
|
160
|
+
|
|
161
|
+
if ((this.referenceType && this.referenceType.toUpperCase() === DATA) || this.shouldTreatAsDataReference) {
|
|
162
|
+
try {
|
|
163
|
+
const dataRefContext = getDataReferenceInfo(this.pConn$, dataRelationshipContext, contextPage);
|
|
164
|
+
this.dataViewName = dataRefContext.dataContext ?? '';
|
|
165
|
+
this.payload = dataRefContext.dataContextParameters ?? {};
|
|
166
|
+
return true;
|
|
167
|
+
} catch (error) {
|
|
168
|
+
console.log('Error in getting the data reference info', error);
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (this.resourcePayload?.resourceType === 'DATA') {
|
|
174
|
+
this.dataViewName = PCore.getDataTypeUtils().getLookUpDataPage(this.resourcePayload.className);
|
|
175
|
+
const lookUpDataPageInfo: any = PCore.getDataTypeUtils().getLookUpDataPageInfo(this.resourcePayload.className);
|
|
176
|
+
const { content } = this.resourcePayload;
|
|
177
|
+
|
|
178
|
+
if (lookUpDataPageInfo) {
|
|
179
|
+
const { parameters } = lookUpDataPageInfo;
|
|
180
|
+
this.payload = Object.keys(parameters).reduce((acc, param) => {
|
|
181
|
+
const paramValue = parameters[param];
|
|
182
|
+
const propName = PCore.getAnnotationUtils().getPropertyName(paramValue);
|
|
183
|
+
const value = PCore.getAnnotationUtils().isProperty(paramValue) ? content[propName] : paramValue;
|
|
184
|
+
return { ...acc, [param]: value };
|
|
185
|
+
}, {});
|
|
186
|
+
} else {
|
|
187
|
+
const keysInfo = PCore.getDataTypeUtils().getDataPageKeys(this.dataViewName) ?? [];
|
|
188
|
+
this.payload = keysInfo.reduce((acc, curr) => {
|
|
189
|
+
const key = curr.isAlternateKeyStorage ? curr.linkedField : curr.keyName;
|
|
190
|
+
return { ...acc, [curr.keyName]: content[key] };
|
|
191
|
+
}, {});
|
|
192
|
+
}
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
private buildLinkURL(isData: boolean) {
|
|
199
|
+
const { ACTION_OPENWORKBYHANDLE, ACTION_SHOWDATA, ACTION_GETOBJECT } = PCore.getSemanticUrlUtils().getActions() as any;
|
|
200
|
+
|
|
201
|
+
if (isData && this.dataViewName && this.payload) {
|
|
202
|
+
return PCore.getSemanticUrlUtils().getResolvedSemanticURL(
|
|
203
|
+
ACTION_SHOWDATA,
|
|
204
|
+
{ pageName: 'pyDetails', dataViewName: this.dataViewName },
|
|
205
|
+
{ ...this.payload }
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const { resourceParams = {} } = this.configProps$;
|
|
210
|
+
const isObjectType = (PCore.getCaseUtils() as any).isObjectCaseType(this.resourcePayload.caseClassName);
|
|
211
|
+
const idKey = isObjectType ? 'objectID' : 'workID';
|
|
212
|
+
|
|
213
|
+
if (resourceParams.workID === '' && typeof this.previewKey === 'string') {
|
|
214
|
+
resourceParams[idKey] = this.previewKey.split(' ')[1];
|
|
215
|
+
} else {
|
|
216
|
+
resourceParams[idKey] = resourceParams.workID;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (this.previewKey) {
|
|
220
|
+
resourceParams.id = this.previewKey;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return PCore.getSemanticUrlUtils().getResolvedSemanticURL(
|
|
224
|
+
isObjectType ? ACTION_GETOBJECT : ACTION_OPENWORKBYHANDLE,
|
|
225
|
+
this.resourcePayload,
|
|
226
|
+
resourceParams
|
|
227
|
+
);
|
|
68
228
|
}
|
|
69
229
|
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, forwardRef } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import {
|
|
3
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { MatInputModule } from '@angular/material/input';
|
|
5
5
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
import { Utils } from '@pega/angular-sdk-components';
|
|
6
|
+
|
|
7
|
+
import { FieldBase } from '@pega/angular-sdk-components';
|
|
9
8
|
import { ComponentMapperComponent } from '@pega/angular-sdk-components';
|
|
10
|
-
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
11
9
|
import { handleEvent } from '@pega/angular-sdk-components';
|
|
10
|
+
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
12
11
|
|
|
13
12
|
interface TextAreaProps extends PConnFieldProps {
|
|
14
13
|
// If any, enter additional props that only exist on TextArea here
|
|
@@ -21,141 +20,27 @@ interface TextAreaProps extends PConnFieldProps {
|
|
|
21
20
|
styleUrls: ['./text-area.component.scss'],
|
|
22
21
|
imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
|
|
23
22
|
})
|
|
24
|
-
export class TextAreaComponent
|
|
25
|
-
@Input() pConn$: typeof PConnect;
|
|
26
|
-
@Input() formGroup$: FormGroup;
|
|
27
|
-
|
|
28
|
-
// Used with AngularPConnect
|
|
29
|
-
angularPConnectData: AngularPConnectData = {};
|
|
23
|
+
export class TextAreaComponent extends FieldBase {
|
|
30
24
|
configProps$: TextAreaProps;
|
|
31
25
|
|
|
32
|
-
label$ = '';
|
|
33
|
-
value$ = '';
|
|
34
|
-
bRequired$ = false;
|
|
35
|
-
bReadonly$ = false;
|
|
36
|
-
bDisabled$ = false;
|
|
37
|
-
bVisible$ = true;
|
|
38
26
|
nMaxLength$: number;
|
|
39
|
-
displayMode$?: string = '';
|
|
40
|
-
controlName$: string;
|
|
41
|
-
bHasForm$ = true;
|
|
42
|
-
componentReference = '';
|
|
43
|
-
testId: string;
|
|
44
|
-
helperText: string;
|
|
45
|
-
|
|
46
|
-
fieldControl = new FormControl('', null);
|
|
47
|
-
actionsApi: Object;
|
|
48
|
-
propName: string;
|
|
49
|
-
|
|
50
|
-
constructor(
|
|
51
|
-
private angularPConnect: AngularPConnectService,
|
|
52
|
-
private cdRef: ChangeDetectorRef,
|
|
53
|
-
private utils: Utils
|
|
54
|
-
) {}
|
|
55
|
-
|
|
56
|
-
ngOnInit(): void {
|
|
57
|
-
// First thing in initialization is registering and subscribing to the AngularPConnect service
|
|
58
|
-
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
|
|
59
|
-
this.controlName$ = this.angularPConnect.getComponentID(this);
|
|
60
|
-
|
|
61
|
-
// Then, continue on with other initialization
|
|
62
|
-
|
|
63
|
-
// call updateSelf when initializing
|
|
64
|
-
// this.updateSelf();
|
|
65
|
-
this.checkAndUpdate();
|
|
66
|
-
|
|
67
|
-
if (this.formGroup$) {
|
|
68
|
-
// add control to formGroup
|
|
69
|
-
this.formGroup$.addControl(this.controlName$, this.fieldControl);
|
|
70
|
-
this.fieldControl.setValue(this.value$);
|
|
71
|
-
this.bHasForm$ = true;
|
|
72
|
-
} else {
|
|
73
|
-
this.bReadonly$ = true;
|
|
74
|
-
this.bHasForm$ = false;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
ngOnDestroy(): void {
|
|
79
|
-
if (this.formGroup$) {
|
|
80
|
-
this.formGroup$.removeControl(this.controlName$);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (this.angularPConnectData.unsubscribeFn) {
|
|
84
|
-
this.angularPConnectData.unsubscribeFn();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Callback passed when subscribing to store change
|
|
89
|
-
onStateChange() {
|
|
90
|
-
this.checkAndUpdate();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
checkAndUpdate() {
|
|
94
|
-
// Should always check the bridge to see if the component should
|
|
95
|
-
// update itself (re-render)
|
|
96
|
-
const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
|
|
97
|
-
|
|
98
|
-
// ONLY call updateSelf when the component should update
|
|
99
|
-
if (bUpdateSelf) {
|
|
100
|
-
this.updateSelf();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
27
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Updates the component when there are changes in the state.
|
|
30
|
+
*/
|
|
31
|
+
override updateSelf(): void {
|
|
32
|
+
// Resolve config properties
|
|
107
33
|
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as TextAreaProps;
|
|
108
34
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
this.nMaxLength$ = this.pConn$.getFieldMetadata(this.pConn$.getRawConfigProps()?.value)?.maxLength || 100;
|
|
113
|
-
this.testId = this.configProps$.testId;
|
|
114
|
-
this.displayMode$ = this.configProps$.displayMode;
|
|
115
|
-
this.label$ = this.configProps$.label;
|
|
116
|
-
this.helperText = this.configProps$.helperText;
|
|
117
|
-
|
|
118
|
-
this.actionsApi = this.pConn$.getActionsApi();
|
|
119
|
-
this.propName = this.pConn$.getStateProps().value;
|
|
120
|
-
|
|
121
|
-
// timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
|
|
122
|
-
setTimeout(() => {
|
|
123
|
-
if (this.configProps$.required != null) {
|
|
124
|
-
this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
|
|
125
|
-
}
|
|
126
|
-
this.cdRef.detectChanges();
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
if (this.configProps$.visibility != null) {
|
|
130
|
-
this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// disabled
|
|
134
|
-
if (this.configProps$.disabled != undefined) {
|
|
135
|
-
this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (this.bDisabled$) {
|
|
139
|
-
this.fieldControl.disable();
|
|
140
|
-
} else {
|
|
141
|
-
this.fieldControl.enable();
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (this.configProps$.readOnly != null) {
|
|
145
|
-
this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
|
|
146
|
-
}
|
|
35
|
+
// Update component common properties
|
|
36
|
+
this.updateComponentCommonProperties(this.configProps$);
|
|
147
37
|
|
|
148
|
-
|
|
38
|
+
// Extract properties from config
|
|
39
|
+
const { value } = this.configProps$;
|
|
149
40
|
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
this.fieldControl.setErrors({ message: true });
|
|
154
|
-
this.fieldControl.markAsTouched();
|
|
155
|
-
|
|
156
|
-
timer.unsubscribe();
|
|
157
|
-
});
|
|
158
|
-
}
|
|
41
|
+
// Set component specific properties
|
|
42
|
+
this.value$ = value;
|
|
43
|
+
this.nMaxLength$ = this.pConn$.getFieldMetadata(this.pConn$.getRawConfigProps()?.value)?.maxLength || 100;
|
|
159
44
|
}
|
|
160
45
|
|
|
161
46
|
fieldOnChange(event: any) {
|
|
@@ -178,23 +63,4 @@ export class TextAreaComponent implements OnInit, OnDestroy {
|
|
|
178
63
|
handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
|
|
179
64
|
}
|
|
180
65
|
}
|
|
181
|
-
|
|
182
|
-
getErrorMessage() {
|
|
183
|
-
// field control gets error message from here
|
|
184
|
-
|
|
185
|
-
let errMessage = '';
|
|
186
|
-
|
|
187
|
-
// look for validation messages for json, pre-defined or just an error pushed from workitem (400)
|
|
188
|
-
if (this.fieldControl.hasError('message')) {
|
|
189
|
-
errMessage = this.angularPConnectData.validateMessage ?? '';
|
|
190
|
-
return errMessage;
|
|
191
|
-
}
|
|
192
|
-
if (this.fieldControl.hasError('required')) {
|
|
193
|
-
errMessage = 'You must enter a value';
|
|
194
|
-
} else if (this.fieldControl.errors) {
|
|
195
|
-
errMessage = this.fieldControl.errors.toString();
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
return errMessage;
|
|
199
|
-
}
|
|
200
66
|
}
|