@pega/sdk 0.0.14 → 0.0.15
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/README.md +46 -6
- package/dist/index.js +50 -24
- package/package.json +42 -3
- package/templates/angular-sdk-reference/angular.json +1 -2
- package/templates/angular-sdk-reference/extra-webpack.config.cjs +23 -0
- package/templates/angular-sdk-reference/index.html +12 -0
- package/templates/angular-sdk-reference/package.json +0 -1
- package/templates/angular-sdk-reference/src/app/app.component.ts +15 -232
- package/templates/angular-sdk-reference/src/app/pconnect-renderer.component.ts +153 -0
- package/templates/angular-sdk-reference/src/components/fields/auto-complete/auto-complete.component.ts +58 -21
- package/templates/angular-sdk-reference/src/components/fields/checkbox/checkbox.component.ts +8 -3
- package/templates/angular-sdk-reference/src/components/fields/currency/currency.component.ts +22 -7
- package/templates/angular-sdk-reference/src/components/fields/date-input/date-input.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/dropdown/dropdown.component.ts +24 -7
- package/templates/angular-sdk-reference/src/components/fields/email/email.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/integer/integer.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/phone/phone.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/radio-buttons/radio-buttons.component.ts +16 -5
- package/templates/angular-sdk-reference/src/components/fields/text-area/text-area.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/text-input/text-input.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/url-input/url-input.component.ts +26 -7
- package/templates/angular-sdk-reference/src/components/helpers/sdk-helpers.ts +93 -0
- package/templates/angular-sdk-reference/src/components/infra/case-summary/case-summary.component.ts +8 -9
- package/templates/angular-sdk-reference/src/components/infra/case-view/case-view.component.ts +24 -12
- package/templates/angular-sdk-reference/src/components/infra/root-container/root-container.component.ts +21 -15
- package/templates/angular-sdk-reference/src/components/infra/stages/stages.component.ts +21 -10
- package/templates/angular-sdk-reference/src/components/infra/view/view.component.ts +14 -9
- package/templates/angular-sdk-reference/src/components/templates/default-form/default-form.component.ts +12 -8
- package/templates/angular-sdk-reference/tsconfig.app.json +13 -0
- package/templates/angular-sdk-reference/tsconfig.json +2 -5
- package/templates/react-sdk-reference/.ai-common/agents/embedded-flow-expert.md +65 -31
- package/templates/react-sdk-reference/.ai-common/agents/implementation-expert.md +74 -38
- package/templates/react-sdk-reference/.ai-common/global/ai-agent-instructions-embedded.md +33 -1
- package/templates/react-sdk-reference/.ai-common/global/ai-agent-instructions.md +57 -22
- package/templates/react-sdk-reference/.ai-common/instructions/embedded-component.md +25 -10
- package/templates/react-sdk-reference/.ai-common/prompts/add-component.md +40 -19
- package/templates/react-sdk-reference/.ai-common/prompts/component-manifest.json +55 -1
- package/templates/react-sdk-reference/.ai-common/prompts/embedded-component-manifest.md +26 -4
- package/templates/react-sdk-reference/.ai-common/prompts/generate-all-components.md +82 -33
- package/templates/react-sdk-reference/.ai-common/prompts/generate-dse-components.md +46 -26
- package/templates/react-sdk-reference/.ai-common/prompts/generate-embedded-components.md +28 -15
- package/templates/react-sdk-reference/.ai-common/prompts/generate-field-components.md +24 -6
- package/templates/react-sdk-reference/.ai-common/prompts/generate-infra-components.md +24 -6
- package/templates/react-sdk-reference/.ai-common/prompts/generate-template-components.md +24 -6
- package/templates/react-sdk-reference/.ai-common/prompts/generate-widget-components.md +24 -6
- package/templates/react-sdk-reference/.ai-common/prompts/identify-components.md +2 -0
- package/templates/react-sdk-reference/.ai-common/prompts/replace-design-system.md +44 -17
- package/templates/react-sdk-reference/.ai-common/skills/connect-pega-server.md +14 -1
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/AssignmentHeader.md +79 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/Toast.md +96 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension.md +56 -35
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/analyze-customer-repo.md +29 -3
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/run-and-verify-integration.md +97 -37
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/wire-integration.md +91 -60
- package/templates/react-sdk-reference/.ai-common/skills/field-components.md +13 -1
- package/templates/react-sdk-reference/.ai-common/skills/infra-components.md +13 -1
- package/templates/react-sdk-reference/.ai-common/skills/portal-flow/run-and-verify-portal.md +290 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-components.md +13 -1
- package/templates/react-sdk-reference/.ai-common/skills/widget-components.md +13 -1
- package/templates/react-sdk-reference/assets/icons/trash.svg +3 -0
- package/templates/react-sdk-reference/index.html +0 -1
- package/templates/react-sdk-reference/package.json +2 -2
- package/templates/react-sdk-reference/package.minimal.json +2 -2
- package/templates/react-sdk-reference/sdk-config.json +3 -3
- package/templates/react-sdk-reference/src/FallbackComponent.tsx +1 -1
- package/templates/react-sdk-reference/src/MashupApp.tsx +33 -78
- package/templates/react-sdk-reference/src/PortalApp.tsx +23 -100
- package/templates/react-sdk-reference/src/components/component-map.ts +15 -1
- package/templates/react-sdk-reference/src/components/designSystemExtension/AssignmentHeader/AssignmentHeader.tsx +15 -0
- package/templates/react-sdk-reference/src/components/designSystemExtension/AssignmentHeader/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/designSystemExtension/FieldGroup/FieldGroup.tsx +1 -1
- package/templates/react-sdk-reference/src/components/designSystemExtension/FieldGroupList/FieldGroupList.tsx +1 -1
- package/templates/react-sdk-reference/src/components/designSystemExtension/FieldValueList/FieldValueList.tsx +16 -4
- package/templates/react-sdk-reference/src/components/designSystemExtension/ModalDialog/ModalDialog.tsx +26 -0
- package/templates/react-sdk-reference/src/components/designSystemExtension/ModalDialog/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/designSystemExtension/Toast/Toast.tsx +35 -0
- package/templates/react-sdk-reference/src/components/designSystemExtension/Toast/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/field/AutoComplete/AutoComplete.tsx +362 -24
- package/templates/react-sdk-reference/src/components/field/CancelAlert/CancelAlert.tsx +1 -1
- package/templates/react-sdk-reference/src/components/field/Checkbox/Checkbox.tsx +3 -1
- package/templates/react-sdk-reference/src/components/field/Currency/Currency.tsx +6 -3
- package/templates/react-sdk-reference/src/components/field/Date/Date.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/DateTime/DateTime.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/Decimal/Decimal.tsx +4 -3
- package/templates/react-sdk-reference/src/components/field/Dropdown/Dropdown.tsx +2 -0
- package/templates/react-sdk-reference/src/components/field/Email/Email.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/EmbeddedDataMulti/EmbeddedDataMulti.tsx +121 -0
- package/templates/react-sdk-reference/src/components/field/EmbeddedDataMulti/config-ext.json +7 -0
- package/templates/react-sdk-reference/src/components/field/EmbeddedDataMulti/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/field/Integer/Integer.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/Location/Location.tsx +1 -1
- package/templates/react-sdk-reference/src/components/field/Multiselect/Multiselect.tsx +40 -20
- package/templates/react-sdk-reference/src/components/field/ObjectReference/ObjectReference.tsx +554 -49
- package/templates/react-sdk-reference/src/components/field/ObjectReference/utils.ts +111 -20
- package/templates/react-sdk-reference/src/components/field/Percentage/Percentage.tsx +4 -3
- package/templates/react-sdk-reference/src/components/field/Phone/Phone.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/SelectableCard/SelectableCard.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/TextArea/TextArea.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/TextInput/TextInput.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/Time/Time.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/URL/URL.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/UserReference/UserReference.tsx +1 -1
- package/templates/react-sdk-reference/src/components/helpers/field-utils.ts +44 -0
- package/templates/react-sdk-reference/src/components/helpers/simpleTableHelpers.ts +19 -7
- package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/DataViewActionButtons/DataViewActionButtons.tsx +97 -0
- package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/DataViewActionButtons/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/ListViewActionButtons/ListViewActionButtons.tsx +53 -0
- package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/ListViewActionButtons/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/template/AdvancedSearch/SearchGroups/SearchGroups.tsx +2 -2
- package/templates/react-sdk-reference/src/components/template/CaseSummary/CaseSummary.tsx +3 -1
- package/templates/react-sdk-reference/src/components/template/DataReference/SearchForm.tsx +4 -4
- package/templates/react-sdk-reference/src/components/template/HierarchicalForm/HierarchicalForm.tsx +2 -2
- package/templates/react-sdk-reference/src/components/template/InlineDashboard/InlineDashboard.tsx +1 -1
- package/templates/react-sdk-reference/src/components/template/ListView/ListView.tsx +7 -3
- package/templates/react-sdk-reference/src/components/template/SimpleTable/SimpleTableManual/SimpleTableManual.tsx +173 -99
- package/templates/react-sdk-reference/src/components/template/SimpleTable/SimpleTableSelect/SimpleTableSelect.tsx +63 -56
- package/templates/react-sdk-reference/src/components/widget/ToDo/ToDo.tsx +1 -1
- package/templates/react-sdk-reference/vite.config.ts +26 -4
- package/templates/angular-sdk-reference/pega-constellationjs-0.26.3-local.tgz +0 -0
- package/templates/angular-sdk-reference/src/helpers/event-utils.ts +0 -18
- package/templates/angular-sdk-reference/src/helpers/utils.ts +0 -38
- package/templates/angular-sdk-reference/src/helpers/versionHelpers.ts +0 -14
- package/templates/react-sdk-reference/.ai-common/instructions/dse-component.md +0 -47
- package/templates/react-sdk-reference/.ai-common/instructions/field-component.md +0 -50
- package/templates/react-sdk-reference/.ai-common/instructions/infra-component.md +0 -76
- package/templates/react-sdk-reference/.ai-common/instructions/template-component.md +0 -43
- package/templates/react-sdk-reference/.ai-common/instructions/widget-component.md +0 -45
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/authenticate.md +0 -311
- package/templates/react-sdk-reference/pega-constellationjs-0.26.3-local.tgz +0 -0
- package/templates/react-sdk-reference/pega-sdk-react-0.1.0.tgz +0 -0
|
@@ -9,7 +9,7 @@ import { Component, Input } from '@angular/core';
|
|
|
9
9
|
import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
|
|
10
10
|
import { CommonModule } from '@angular/common';
|
|
11
11
|
import { FormsModule } from '@angular/forms';
|
|
12
|
-
import { handleEvent } from '
|
|
12
|
+
import { handleEvent } from '../../helpers/sdk-helpers';
|
|
13
13
|
|
|
14
14
|
@Component({
|
|
15
15
|
selector: 'pega-phone',
|
|
@@ -17,8 +17,14 @@ import { handleEvent } from '../../../helpers/event-utils';
|
|
|
17
17
|
imports: [CommonModule, FormsModule],
|
|
18
18
|
template: `
|
|
19
19
|
<div *ngIf="!readOnly" style="margin-bottom: 1rem;">
|
|
20
|
-
<label
|
|
21
|
-
|
|
20
|
+
<label
|
|
21
|
+
*ngIf="label"
|
|
22
|
+
style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
|
|
23
|
+
>
|
|
24
|
+
{{ label
|
|
25
|
+
}}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
|
|
26
|
+
>*</span
|
|
27
|
+
>
|
|
22
28
|
</label>
|
|
23
29
|
<input
|
|
24
30
|
type="tel"
|
|
@@ -29,9 +35,14 @@ import { handleEvent } from '../../../helpers/event-utils';
|
|
|
29
35
|
[required]="required"
|
|
30
36
|
(blur)="onBlur($event)"
|
|
31
37
|
style="width: 100%; padding: 0.5rem 0.75rem; border-radius: 0.375rem; font-size: 0.875rem;"
|
|
32
|
-
[style.border]="
|
|
38
|
+
[style.border]="
|
|
39
|
+
validatemessage ? '1px solid #dc2626' : '1px solid #d1d5db'
|
|
40
|
+
"
|
|
33
41
|
/>
|
|
34
|
-
<div
|
|
42
|
+
<div
|
|
43
|
+
*ngIf="validatemessage"
|
|
44
|
+
style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
|
|
45
|
+
>
|
|
35
46
|
{{ validatemessage }}
|
|
36
47
|
</div>
|
|
37
48
|
</div>
|
|
@@ -79,7 +90,9 @@ export class PhoneComponent implements OnInit, OnChanges {
|
|
|
79
90
|
|
|
80
91
|
const pConn = p.getPConnect?.();
|
|
81
92
|
this.actions = pConn?.getActionsApi?.();
|
|
82
|
-
this.propName =
|
|
93
|
+
this.propName =
|
|
94
|
+
((pConn?.getStateProps?.() as Record<string, unknown>)
|
|
95
|
+
?.value as string) ?? '';
|
|
83
96
|
}
|
|
84
97
|
|
|
85
98
|
onBlur(event: Event): void {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { Component, Input } from '@angular/core';
|
|
9
9
|
import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
|
|
10
10
|
import { CommonModule } from '@angular/common';
|
|
11
|
-
import { handleEvent } from '
|
|
11
|
+
import { handleEvent } from '../../helpers/sdk-helpers';
|
|
12
12
|
|
|
13
13
|
@Component({
|
|
14
14
|
selector: 'pega-radio-buttons',
|
|
@@ -17,8 +17,14 @@ import { handleEvent } from '../../../helpers/event-utils';
|
|
|
17
17
|
template: `
|
|
18
18
|
<div *ngIf="!readOnly" style="margin-bottom: 1rem;">
|
|
19
19
|
<fieldset style="border: none; padding: 0; margin: 0;">
|
|
20
|
-
<legend
|
|
21
|
-
|
|
20
|
+
<legend
|
|
21
|
+
*ngIf="label"
|
|
22
|
+
style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
|
|
23
|
+
>
|
|
24
|
+
{{ label
|
|
25
|
+
}}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
|
|
26
|
+
>*</span
|
|
27
|
+
>
|
|
22
28
|
</legend>
|
|
23
29
|
<div style="display: flex; flex-direction: column; gap: 0.5rem;">
|
|
24
30
|
<label
|
|
@@ -38,7 +44,10 @@ import { handleEvent } from '../../../helpers/event-utils';
|
|
|
38
44
|
</label>
|
|
39
45
|
</div>
|
|
40
46
|
</fieldset>
|
|
41
|
-
<div
|
|
47
|
+
<div
|
|
48
|
+
*ngIf="validatemessage"
|
|
49
|
+
style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
|
|
50
|
+
>
|
|
42
51
|
{{ validatemessage }}
|
|
43
52
|
</div>
|
|
44
53
|
</div>
|
|
@@ -90,7 +99,9 @@ export class RadioButtonsComponent implements OnInit, OnChanges {
|
|
|
90
99
|
|
|
91
100
|
const pConn = p.getPConnect?.();
|
|
92
101
|
this.actions = pConn?.getActionsApi?.();
|
|
93
|
-
this.propName =
|
|
102
|
+
this.propName =
|
|
103
|
+
((pConn?.getStateProps?.() as Record<string, unknown>)
|
|
104
|
+
?.value as string) ?? '';
|
|
94
105
|
}
|
|
95
106
|
|
|
96
107
|
onRadioChange(event: Event): void {
|
package/templates/angular-sdk-reference/src/components/fields/text-area/text-area.component.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { Component, Input } from '@angular/core';
|
|
|
9
9
|
import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
|
|
10
10
|
import { CommonModule } from '@angular/common';
|
|
11
11
|
import { FormsModule } from '@angular/forms';
|
|
12
|
-
import { handleEvent } from '
|
|
12
|
+
import { handleEvent } from '../../helpers/sdk-helpers';
|
|
13
13
|
|
|
14
14
|
@Component({
|
|
15
15
|
selector: 'pega-text-area',
|
|
@@ -17,8 +17,14 @@ import { handleEvent } from '../../../helpers/event-utils';
|
|
|
17
17
|
imports: [CommonModule, FormsModule],
|
|
18
18
|
template: `
|
|
19
19
|
<div *ngIf="!readOnly" style="margin-bottom: 1rem;">
|
|
20
|
-
<label
|
|
21
|
-
|
|
20
|
+
<label
|
|
21
|
+
*ngIf="label"
|
|
22
|
+
style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
|
|
23
|
+
>
|
|
24
|
+
{{ label
|
|
25
|
+
}}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
|
|
26
|
+
>*</span
|
|
27
|
+
>
|
|
22
28
|
</label>
|
|
23
29
|
<textarea
|
|
24
30
|
[attr.data-testid]="testId"
|
|
@@ -30,10 +36,15 @@ import { handleEvent } from '../../../helpers/event-utils';
|
|
|
30
36
|
(blur)="onBlur($event)"
|
|
31
37
|
rows="3"
|
|
32
38
|
style="width: 100%; padding: 0.5rem 0.75rem; border-radius: 0.375rem; font-size: 0.875rem; resize: vertical;"
|
|
33
|
-
[style.border]="
|
|
39
|
+
[style.border]="
|
|
40
|
+
validatemessage ? '1px solid #dc2626' : '1px solid #d1d5db'
|
|
41
|
+
"
|
|
34
42
|
>
|
|
35
43
|
</textarea>
|
|
36
|
-
<div
|
|
44
|
+
<div
|
|
45
|
+
*ngIf="validatemessage"
|
|
46
|
+
style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
|
|
47
|
+
>
|
|
37
48
|
{{ validatemessage }}
|
|
38
49
|
</div>
|
|
39
50
|
</div>
|
|
@@ -81,7 +92,9 @@ export class TextAreaComponent implements OnInit, OnChanges {
|
|
|
81
92
|
|
|
82
93
|
const pConn = p.getPConnect?.();
|
|
83
94
|
this.actions = pConn?.getActionsApi?.();
|
|
84
|
-
this.propName =
|
|
95
|
+
this.propName =
|
|
96
|
+
((pConn?.getStateProps?.() as Record<string, unknown>)
|
|
97
|
+
?.value as string) ?? '';
|
|
85
98
|
}
|
|
86
99
|
|
|
87
100
|
onChange(event: Event): void {
|
package/templates/angular-sdk-reference/src/components/fields/text-input/text-input.component.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { Component, Input } from '@angular/core';
|
|
|
9
9
|
import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
|
|
10
10
|
import { CommonModule } from '@angular/common';
|
|
11
11
|
import { FormsModule } from '@angular/forms';
|
|
12
|
-
import { handleEvent } from '
|
|
12
|
+
import { handleEvent } from '../../helpers/sdk-helpers';
|
|
13
13
|
|
|
14
14
|
@Component({
|
|
15
15
|
selector: 'pega-text-input',
|
|
@@ -17,8 +17,14 @@ import { handleEvent } from '../../../helpers/event-utils';
|
|
|
17
17
|
imports: [CommonModule, FormsModule],
|
|
18
18
|
template: `
|
|
19
19
|
<div *ngIf="!readOnly" style="margin-bottom: 1rem;">
|
|
20
|
-
<label
|
|
21
|
-
|
|
20
|
+
<label
|
|
21
|
+
*ngIf="label"
|
|
22
|
+
style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
|
|
23
|
+
>
|
|
24
|
+
{{ label
|
|
25
|
+
}}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
|
|
26
|
+
>*</span
|
|
27
|
+
>
|
|
22
28
|
</label>
|
|
23
29
|
<input
|
|
24
30
|
type="text"
|
|
@@ -30,9 +36,14 @@ import { handleEvent } from '../../../helpers/event-utils';
|
|
|
30
36
|
(change)="onChange($event)"
|
|
31
37
|
(blur)="onBlur($event)"
|
|
32
38
|
style="width: 100%; padding: 0.5rem 0.75rem; border-radius: 0.375rem; font-size: 0.875rem;"
|
|
33
|
-
[style.border]="
|
|
39
|
+
[style.border]="
|
|
40
|
+
validatemessage ? '1px solid #dc2626' : '1px solid #d1d5db'
|
|
41
|
+
"
|
|
34
42
|
/>
|
|
35
|
-
<div
|
|
43
|
+
<div
|
|
44
|
+
*ngIf="validatemessage"
|
|
45
|
+
style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
|
|
46
|
+
>
|
|
36
47
|
{{ validatemessage }}
|
|
37
48
|
</div>
|
|
38
49
|
</div>
|
|
@@ -80,7 +91,9 @@ export class TextInputComponent implements OnInit, OnChanges {
|
|
|
80
91
|
|
|
81
92
|
const pConn = p.getPConnect?.();
|
|
82
93
|
this.actions = pConn?.getActionsApi?.();
|
|
83
|
-
this.propName =
|
|
94
|
+
this.propName =
|
|
95
|
+
((pConn?.getStateProps?.() as Record<string, unknown>)
|
|
96
|
+
?.value as string) ?? '';
|
|
84
97
|
}
|
|
85
98
|
|
|
86
99
|
onChange(event: Event): void {
|
package/templates/angular-sdk-reference/src/components/fields/url-input/url-input.component.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { Component, Input } from '@angular/core';
|
|
|
9
9
|
import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
|
|
10
10
|
import { CommonModule } from '@angular/common';
|
|
11
11
|
import { FormsModule } from '@angular/forms';
|
|
12
|
-
import { handleEvent } from '
|
|
12
|
+
import { handleEvent } from '../../helpers/sdk-helpers';
|
|
13
13
|
|
|
14
14
|
@Component({
|
|
15
15
|
selector: 'pega-url-input',
|
|
@@ -17,8 +17,14 @@ import { handleEvent } from '../../../helpers/event-utils';
|
|
|
17
17
|
imports: [CommonModule, FormsModule],
|
|
18
18
|
template: `
|
|
19
19
|
<div *ngIf="!readOnly" style="margin-bottom: 1rem;">
|
|
20
|
-
<label
|
|
21
|
-
|
|
20
|
+
<label
|
|
21
|
+
*ngIf="label"
|
|
22
|
+
style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
|
|
23
|
+
>
|
|
24
|
+
{{ label
|
|
25
|
+
}}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
|
|
26
|
+
>*</span
|
|
27
|
+
>
|
|
22
28
|
</label>
|
|
23
29
|
<input
|
|
24
30
|
type="url"
|
|
@@ -29,16 +35,27 @@ import { handleEvent } from '../../../helpers/event-utils';
|
|
|
29
35
|
[required]="required"
|
|
30
36
|
(blur)="onBlur($event)"
|
|
31
37
|
style="width: 100%; padding: 0.5rem 0.75rem; border-radius: 0.375rem; font-size: 0.875rem;"
|
|
32
|
-
[style.border]="
|
|
38
|
+
[style.border]="
|
|
39
|
+
validatemessage ? '1px solid #dc2626' : '1px solid #d1d5db'
|
|
40
|
+
"
|
|
33
41
|
/>
|
|
34
|
-
<div
|
|
42
|
+
<div
|
|
43
|
+
*ngIf="validatemessage"
|
|
44
|
+
style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
|
|
45
|
+
>
|
|
35
46
|
{{ validatemessage }}
|
|
36
47
|
</div>
|
|
37
48
|
</div>
|
|
38
49
|
<div *ngIf="readOnly" style="margin-bottom: 1rem;">
|
|
39
50
|
<span style="font-size: 0.75rem; color: #6b7280;">{{ label }}</span>
|
|
40
51
|
<div style="font-size: 0.875rem;">
|
|
41
|
-
<a
|
|
52
|
+
<a
|
|
53
|
+
*ngIf="value"
|
|
54
|
+
[href]="value"
|
|
55
|
+
target="_blank"
|
|
56
|
+
rel="noopener noreferrer"
|
|
57
|
+
>{{ value }}</a
|
|
58
|
+
>
|
|
42
59
|
<span *ngIf="!value">—</span>
|
|
43
60
|
</div>
|
|
44
61
|
</div>
|
|
@@ -82,7 +99,9 @@ export class URLInputComponent implements OnInit, OnChanges {
|
|
|
82
99
|
|
|
83
100
|
const pConn = p.getPConnect?.();
|
|
84
101
|
this.actions = pConn?.getActionsApi?.();
|
|
85
|
-
this.propName =
|
|
102
|
+
this.propName =
|
|
103
|
+
((pConn?.getStateProps?.() as Record<string, unknown>)
|
|
104
|
+
?.value as string) ?? '';
|
|
86
105
|
}
|
|
87
106
|
|
|
88
107
|
onBlur(event: Event): void {
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export function handleEvent(
|
|
2
|
+
actions: any,
|
|
3
|
+
eventType: string,
|
|
4
|
+
propName: string,
|
|
5
|
+
value: unknown,
|
|
6
|
+
): void {
|
|
7
|
+
switch (eventType) {
|
|
8
|
+
case 'change':
|
|
9
|
+
actions.updateFieldValue(propName, value);
|
|
10
|
+
break;
|
|
11
|
+
case 'blur':
|
|
12
|
+
actions.triggerFieldChange(propName, value);
|
|
13
|
+
break;
|
|
14
|
+
case 'changeNblur':
|
|
15
|
+
actions.updateFieldValue(propName, value);
|
|
16
|
+
actions.triggerFieldChange(propName, value);
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function getOptionList(
|
|
22
|
+
configProps: Record<string, any>,
|
|
23
|
+
dataObject: Record<string, any>,
|
|
24
|
+
): any[] {
|
|
25
|
+
const listType = configProps['listType']?.toLowerCase();
|
|
26
|
+
|
|
27
|
+
if (listType === 'associated') {
|
|
28
|
+
const datasource = configProps['datasource'];
|
|
29
|
+
return Array.isArray(datasource) ? datasource : [];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (listType === 'datapage') {
|
|
33
|
+
const datasource = configProps['datasource'];
|
|
34
|
+
if (typeof datasource === 'string' && dataObject[datasource]) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const listOutput = configProps['listOutput'];
|
|
39
|
+
const items =
|
|
40
|
+
typeof datasource === 'object' && !Array.isArray(listOutput)
|
|
41
|
+
? datasource?.source
|
|
42
|
+
: listOutput;
|
|
43
|
+
return Array.isArray(items)
|
|
44
|
+
? items.map((item: any) => ({
|
|
45
|
+
...item,
|
|
46
|
+
value: item.text ?? item.value,
|
|
47
|
+
}))
|
|
48
|
+
: [];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function isAssignmentView(pConnect: any): boolean {
|
|
55
|
+
const caseInfo = PCore.getConstants().CASE_INFO;
|
|
56
|
+
const assignmentViewId = `${pConnect.getValue(caseInfo.ASSIGNMENTACTION_ID)}!${pConnect.getValue(caseInfo.CASE_INFO_CLASSID)}`;
|
|
57
|
+
const currentViewId = `${pConnect.getCurrentView()}!${pConnect.getCurrentClassID()}`;
|
|
58
|
+
return assignmentViewId === currentViewId;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function getInstructions(
|
|
62
|
+
pConnect: any,
|
|
63
|
+
instructions = 'casestep',
|
|
64
|
+
): string | undefined {
|
|
65
|
+
const caseInfo = PCore.getConstants().CASE_INFO;
|
|
66
|
+
const caseStepInstructions = caseInfo.INSTRUCTIONS
|
|
67
|
+
? pConnect.getValue(caseInfo.INSTRUCTIONS)
|
|
68
|
+
: undefined;
|
|
69
|
+
|
|
70
|
+
if (
|
|
71
|
+
instructions === 'casestep' &&
|
|
72
|
+
isAssignmentView(pConnect) &&
|
|
73
|
+
caseStepInstructions?.length
|
|
74
|
+
) {
|
|
75
|
+
return caseStepInstructions;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (
|
|
79
|
+
instructions === 'none' ||
|
|
80
|
+
instructions?.startsWith('@PARAGRAPH') ||
|
|
81
|
+
instructions === 'casestep'
|
|
82
|
+
) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return instructions;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function compareSdkPCoreVersions(): void {
|
|
90
|
+
console.warn(
|
|
91
|
+
`Using Constellation version ${PCore.getPCoreVersion()}. Ensure this is the same version as your Infinity server.`,
|
|
92
|
+
);
|
|
93
|
+
}
|
package/templates/angular-sdk-reference/src/components/infra/case-summary/case-summary.component.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { Component, Input, ChangeDetectorRef, NgZone } from '@angular/core';
|
|
9
9
|
import type { OnInit, OnDestroy } from '@angular/core';
|
|
10
10
|
import { CommonModule } from '@angular/common';
|
|
11
|
+
import { PegaBridgeService } from '@pega/sdk-angular';
|
|
11
12
|
import type { Unsubscribe } from '@pega/sdk-angular';
|
|
12
13
|
|
|
13
14
|
@Component({
|
|
@@ -20,7 +21,7 @@ import type { Unsubscribe } from '@pega/sdk-angular';
|
|
|
20
21
|
padding: 0.75rem 1rem; background: #f9fafb; border-radius: 0.375rem; margin-bottom: 1rem;"
|
|
21
22
|
>
|
|
22
23
|
<span style="font-weight: 600; font-size: 0.875rem;">
|
|
23
|
-
{{ header
|
|
24
|
+
{{ header }}
|
|
24
25
|
</span>
|
|
25
26
|
<span
|
|
26
27
|
*ngIf="status"
|
|
@@ -38,7 +39,7 @@ export class CaseSummaryComponent implements OnInit, OnDestroy {
|
|
|
38
39
|
status = '';
|
|
39
40
|
|
|
40
41
|
private pConn: any;
|
|
41
|
-
private
|
|
42
|
+
private bridge = new PegaBridgeService();
|
|
42
43
|
private storeUnsub: Unsubscribe | undefined;
|
|
43
44
|
|
|
44
45
|
constructor(
|
|
@@ -47,25 +48,23 @@ export class CaseSummaryComponent implements OnInit, OnDestroy {
|
|
|
47
48
|
) {}
|
|
48
49
|
|
|
49
50
|
ngOnInit(): void {
|
|
50
|
-
// @ts-ignore
|
|
51
|
-
const { PConnectObservable } = PCore.getInitialiser().getSdkCore() as any;
|
|
52
|
-
|
|
53
51
|
this.pConn = this.props.getPConnect();
|
|
54
|
-
this.observable = new PConnectObservable(this.pConn);
|
|
55
52
|
this.updateSelf();
|
|
56
53
|
|
|
57
|
-
|
|
54
|
+
const subscription = this.bridge.observe(this.pConn).subscribe(() => {
|
|
58
55
|
this.updateSelf();
|
|
59
56
|
});
|
|
57
|
+
this.storeUnsub = () => subscription.unsubscribe();
|
|
60
58
|
}
|
|
61
59
|
|
|
62
60
|
ngOnDestroy(): void {
|
|
63
61
|
this.storeUnsub?.();
|
|
64
|
-
this.observable?.destroy();
|
|
65
62
|
}
|
|
66
63
|
|
|
67
64
|
private updateSelf(): void {
|
|
68
|
-
const configProps = this.pConn.resolveConfigProps(
|
|
65
|
+
const configProps = this.pConn.resolveConfigProps(
|
|
66
|
+
this.pConn.getConfigProps(),
|
|
67
|
+
);
|
|
69
68
|
this.header = configProps.header ?? '';
|
|
70
69
|
this.status = configProps.status ?? '';
|
|
71
70
|
|
package/templates/angular-sdk-reference/src/components/infra/case-view/case-view.component.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { Component, Input, ChangeDetectorRef, NgZone } from '@angular/core';
|
|
11
11
|
import type { OnInit, OnDestroy } from '@angular/core';
|
|
12
12
|
import { CommonModule } from '@angular/common';
|
|
13
|
+
import { PegaBridgeService } from '@pega/sdk-angular';
|
|
13
14
|
import type { Unsubscribe } from '@pega/sdk-angular';
|
|
14
15
|
import { PConnectBridgeComponent } from '@pega/sdk-angular';
|
|
15
16
|
|
|
@@ -19,16 +20,24 @@ import { PConnectBridgeComponent } from '@pega/sdk-angular';
|
|
|
19
20
|
imports: [CommonModule, PConnectBridgeComponent],
|
|
20
21
|
template: `
|
|
21
22
|
<div>
|
|
22
|
-
<div
|
|
23
|
+
<div
|
|
24
|
+
*ngIf="heading"
|
|
25
|
+
style="font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;"
|
|
26
|
+
>
|
|
23
27
|
{{ heading }}
|
|
24
28
|
</div>
|
|
25
|
-
<div
|
|
29
|
+
<div
|
|
30
|
+
*ngIf="id"
|
|
31
|
+
style="font-size: 0.75rem; color: #6b7280; margin-bottom: 1rem;"
|
|
32
|
+
>
|
|
26
33
|
{{ id }}
|
|
27
34
|
</div>
|
|
28
35
|
|
|
29
36
|
<!-- Case summary -->
|
|
30
37
|
<div *ngIf="caseSummaryGetPConnect">
|
|
31
|
-
<pconnect-bridge
|
|
38
|
+
<pconnect-bridge
|
|
39
|
+
[getPConnect]="caseSummaryGetPConnect"
|
|
40
|
+
></pconnect-bridge>
|
|
32
41
|
</div>
|
|
33
42
|
|
|
34
43
|
<!-- Children (tabs, stages, etc.) -->
|
|
@@ -48,7 +57,7 @@ export class CaseViewComponent implements OnInit, OnDestroy {
|
|
|
48
57
|
childGetters: Array<() => typeof PConnect> = [];
|
|
49
58
|
|
|
50
59
|
private pConn: any;
|
|
51
|
-
private
|
|
60
|
+
private bridge = new PegaBridgeService();
|
|
52
61
|
private storeUnsub: Unsubscribe | undefined;
|
|
53
62
|
|
|
54
63
|
constructor(
|
|
@@ -59,23 +68,22 @@ export class CaseViewComponent implements OnInit, OnDestroy {
|
|
|
59
68
|
ngOnInit(): void {
|
|
60
69
|
this.pConn = this.props.getPConnect();
|
|
61
70
|
|
|
62
|
-
// @ts-ignore
|
|
63
|
-
const { PConnectObservable } = PCore.getInitialiser().getSdkCore() as any;
|
|
64
|
-
this.observable = new PConnectObservable(this.pConn);
|
|
65
71
|
this.updateSelf();
|
|
66
72
|
|
|
67
|
-
|
|
73
|
+
const subscription = this.bridge.observe(this.pConn).subscribe(() => {
|
|
68
74
|
this.updateSelf();
|
|
69
75
|
});
|
|
76
|
+
this.storeUnsub = () => subscription.unsubscribe();
|
|
70
77
|
}
|
|
71
78
|
|
|
72
79
|
ngOnDestroy(): void {
|
|
73
80
|
this.storeUnsub?.();
|
|
74
|
-
this.observable?.destroy();
|
|
75
81
|
}
|
|
76
82
|
|
|
77
83
|
private updateSelf(): void {
|
|
78
|
-
const configProps = this.pConn.resolveConfigProps(
|
|
84
|
+
const configProps = this.pConn.resolveConfigProps(
|
|
85
|
+
this.pConn.getConfigProps(),
|
|
86
|
+
);
|
|
79
87
|
|
|
80
88
|
this.heading = configProps.header ?? '';
|
|
81
89
|
this.id = configProps.subheader ?? '';
|
|
@@ -88,8 +96,12 @@ export class CaseViewComponent implements OnInit, OnDestroy {
|
|
|
88
96
|
const firstPConn = firstChild.getPConnect?.() ?? firstChild;
|
|
89
97
|
const firstCompName = firstPConn.getComponentName?.() ?? '';
|
|
90
98
|
|
|
91
|
-
if (
|
|
92
|
-
|
|
99
|
+
if (
|
|
100
|
+
firstCompName === 'CaseSummary' ||
|
|
101
|
+
firstCompName === 'CaseSummaryFields'
|
|
102
|
+
) {
|
|
103
|
+
this.caseSummaryGetPConnect =
|
|
104
|
+
firstChild.getPConnect ?? (() => firstChild);
|
|
93
105
|
this.childGetters = children.slice(1).map((child: any) => {
|
|
94
106
|
return child.getPConnect ?? (() => child);
|
|
95
107
|
});
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
import { Component, Input, NgZone, ChangeDetectorRef } from '@angular/core';
|
|
15
15
|
import type { OnInit, OnDestroy } from '@angular/core';
|
|
16
16
|
import { CommonModule } from '@angular/common';
|
|
17
|
+
import { PegaBridgeService } from '@pega/sdk-angular';
|
|
17
18
|
import type { Unsubscribe } from '@pega/sdk-angular';
|
|
18
19
|
import { PConnectBridgeComponent } from '@pega/sdk-angular';
|
|
19
20
|
|
|
@@ -26,18 +27,21 @@ const options = { context: 'app' };
|
|
|
26
27
|
template: `
|
|
27
28
|
<div *ngIf="bShowRoot">
|
|
28
29
|
<!-- ViewContainer mode (mashup / noPortal) -->
|
|
29
|
-
<div *ngIf="viewContainerPConn">
|
|
30
|
-
<pconnect-bridge [getPConnect]="viewContainerGetter
|
|
30
|
+
<div *ngIf="viewContainerPConn && viewContainerGetter">
|
|
31
|
+
<pconnect-bridge [getPConnect]="viewContainerGetter"></pconnect-bridge>
|
|
31
32
|
</div>
|
|
32
33
|
|
|
33
34
|
<!-- Portal/View mode — render resolved pConn -->
|
|
34
|
-
<div *ngIf="!viewContainerPConn && resolvedPConn">
|
|
35
|
-
<pconnect-bridge [getPConnect]="resolvedPConnGetter
|
|
35
|
+
<div *ngIf="!viewContainerPConn && resolvedPConn && resolvedPConnGetter">
|
|
36
|
+
<pconnect-bridge [getPConnect]="resolvedPConnGetter"></pconnect-bridge>
|
|
36
37
|
</div>
|
|
37
38
|
|
|
38
39
|
<!-- Fallback: render children -->
|
|
39
40
|
<div *ngIf="!viewContainerPConn && !resolvedPConn && children.length > 0">
|
|
40
|
-
<pconnect-bridge
|
|
41
|
+
<pconnect-bridge
|
|
42
|
+
*ngFor="let child of children"
|
|
43
|
+
[getPConnect]="child.getPConnect"
|
|
44
|
+
></pconnect-bridge>
|
|
41
45
|
</div>
|
|
42
46
|
</div>
|
|
43
47
|
`,
|
|
@@ -54,7 +58,7 @@ export class RootContainerComponent implements OnInit, OnDestroy {
|
|
|
54
58
|
children: Array<{ getPConnect: () => typeof PConnect }> = [];
|
|
55
59
|
|
|
56
60
|
private pConn: any;
|
|
57
|
-
private
|
|
61
|
+
private bridge = new PegaBridgeService();
|
|
58
62
|
private storeUnsub: Unsubscribe | undefined;
|
|
59
63
|
|
|
60
64
|
constructor(
|
|
@@ -67,34 +71,36 @@ export class RootContainerComponent implements OnInit, OnDestroy {
|
|
|
67
71
|
|
|
68
72
|
// Add root container items to Redux
|
|
69
73
|
const { containers } = PCore.getStore().getState();
|
|
70
|
-
const items = Object.keys(containers).filter((item) =>
|
|
71
|
-
|
|
74
|
+
const items = Object.keys(containers).filter((item) =>
|
|
75
|
+
item.includes('root'),
|
|
76
|
+
);
|
|
77
|
+
(PCore.getContainerUtils() as any)
|
|
78
|
+
.getContainerAPI()
|
|
79
|
+
.addContainerItems(items);
|
|
72
80
|
|
|
73
81
|
// Clear out hasViewContainer so ViewContainer can initialize
|
|
74
82
|
sessionStorage.setItem('hasViewContainer', 'false');
|
|
75
83
|
|
|
76
84
|
// Create observable for store-driven updates
|
|
77
|
-
// @ts-ignore
|
|
78
|
-
const { PConnectObservable } = PCore.getInitialiser().getSdkCore() as any;
|
|
79
|
-
this.observable = new PConnectObservable(this.pConn);
|
|
80
|
-
|
|
81
85
|
// Initial update
|
|
82
86
|
this.updateSelf();
|
|
83
87
|
|
|
84
88
|
// Subscribe to store changes
|
|
85
|
-
|
|
89
|
+
const subscription = this.bridge.observe(this.pConn).subscribe(() => {
|
|
86
90
|
this.updateSelf();
|
|
87
91
|
});
|
|
92
|
+
this.storeUnsub = () => subscription.unsubscribe();
|
|
88
93
|
}
|
|
89
94
|
|
|
90
95
|
ngOnDestroy(): void {
|
|
91
96
|
this.storeUnsub?.();
|
|
92
|
-
this.observable?.destroy();
|
|
93
97
|
}
|
|
94
98
|
|
|
95
99
|
private updateSelf(): void {
|
|
96
100
|
// Get fresh props from Redux (not the initial props)
|
|
97
|
-
const myProps = this.pConn.resolveConfigProps(
|
|
101
|
+
const myProps = this.pConn.resolveConfigProps(
|
|
102
|
+
this.pConn.getConfigProps(),
|
|
103
|
+
) as any;
|
|
98
104
|
|
|
99
105
|
// Also get populated additional props (routingInfo comes from here)
|
|
100
106
|
const additionalProps = this.pConn.getComponentProps?.() ?? {};
|