@pega/dx-component-builder-sdk 0.23.20 → 0.24.1
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/package.json +1 -1
- package/src/cli.js +1 -1
- package/src/constants.js +4 -0
- package/src/tasks/build-all/helper.js +6 -0
- package/src/tasks/build-comp/helper.js +6 -0
- package/src/tasks/bundle/builderAngular/webpack.config.js +14 -1
- package/src/tasks/bundle/builderAssociated/webpack.config.js +13 -0
- package/src/tasks/bundle/builderReact/webpack.config.js +14 -1
- package/src/tasks/create/templates/Constellation/field/Boolean/index.tsx.mustache +3 -2
- package/src/tasks/create/templates/Constellation/field/Icon-Button-URL/PConnProps.d.ts.mustache +46 -0
- package/src/tasks/create/templates/Constellation/field/Icon-Button-URL/config.json.mustache +64 -0
- package/src/tasks/create/templates/Constellation/field/Icon-Button-URL/demo.stories.tsx.mustache +99 -0
- package/src/tasks/create/templates/Constellation/field/Icon-Button-URL/index.tsx.mustache +204 -0
- package/src/tasks/create/templates/Constellation/field/Icon-Button-URL/mock.ts.mustache +5 -0
- package/src/tasks/create/templates/Constellation/field/Icon-Button-URL/styles.ts.mustache +8 -0
- package/src/tasks/create/templates/Constellation/field/Picklist-Autocomplete/index.tsx.mustache +11 -0
- package/src/tasks/create/templates/Constellation/field/Picklist-Autocomplete/utils.ts.mustache +3 -0
- package/src/tasks/create/templates/Constellation/field/Text/index.tsx.mustache +94 -4
- package/src/tasks/create/templates/Constellation/template/DETAILS/Avatar.tsx.mustache +78 -0
- package/src/tasks/create/templates/Constellation/template/DETAILS/DetailsRender.tsx.mustache +55 -0
- package/src/tasks/create/templates/Constellation/template/DETAILS/HighlightRender.tsx.mustache +49 -0
- package/src/tasks/create/templates/Constellation/template/DETAILS/Operator.tsx.mustache +218 -0
- package/src/tasks/create/templates/Constellation/template/DETAILS/demo.stories.tsx.mustache +77 -23
- package/src/tasks/create/templates/Constellation/template/DETAILS/index.tsx.mustache +51 -40
- package/src/tasks/create/templates/Constellation/template/DETAILS/mock.ts.mustache +78 -20
- package/src/tasks/create/templates/Constellation/template/DETAILS/styles.ts.mustache +16 -0
- package/src/tasks/create/templates/Constellation/template/DETAILS-region/Avatar.tsx.mustache +78 -0
- package/src/tasks/create/templates/Constellation/template/DETAILS-region/DetailsRender.tsx.mustache +55 -0
- package/src/tasks/create/templates/Constellation/template/DETAILS-region/HighlightRender.tsx.mustache +49 -0
- package/src/tasks/create/templates/Constellation/template/DETAILS-region/Operator.tsx.mustache +218 -0
- package/src/tasks/create/templates/Constellation/template/DETAILS-region/demo.stories.tsx.mustache +95 -26
- package/src/tasks/create/templates/Constellation/template/DETAILS-region/index.tsx.mustache +43 -40
- package/src/tasks/create/templates/Constellation/template/DETAILS-region/mock.ts.mustache +68 -10
- package/src/tasks/create/templates/Constellation/template/DETAILS-region/styles.ts.mustache +15 -0
- package/src/tasks/create/templates/Constellation/template/FORM/DetailsRender.tsx +59 -0
- package/src/tasks/create/templates/Constellation/template/FORM/index.tsx.mustache +31 -5
- package/src/tasks/create/templates/Constellation/template/FORM-region/DetailsRender.tsx +59 -0
- package/src/tasks/create/templates/Constellation/template/FORM-region/index.tsx.mustache +29 -7
- package/src/tasks/create/templates/Constellation/template/PAGE/GetNextWork.tsx.mustache +2 -1
- package/src/tasks/create/templates/Constellation/template/PAGE/localizations.json.mustache +4 -2
- package/src/tasks/create/templates/Constellation/widget/PAGE/demo.stories.tsx.mustache +87 -6
- package/src/tasks/create/templates/Constellation/widget/PAGE/index.tsx.mustache +67 -5
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/config.json.mustache +64 -0
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/demo.stories.tsx.mustache +42 -0
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/mock.ts.mustache +17 -0
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/text-url.component.html.mustache +29 -0
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/text-url.component.scss.mustache +20 -0
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/text-url.component.spec.ts.mustache +26 -0
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/text-url.component.ts.mustache +179 -0
- package/src/tasks/create/templates/SDK-React/field/Icon-Button-URL/config.json.mustache +64 -0
- package/src/tasks/create/templates/SDK-React/field/Icon-Button-URL/demo.stories.tsx.mustache +58 -0
- package/src/tasks/create/templates/SDK-React/field/Icon-Button-URL/index.tsx.mustache +79 -0
- package/src/tasks/create/templates/SDK-React/field/Icon-Button-URL/mock.ts.mustache +16 -0
- package/src/tasks/create/templates/SDK-React/field/Icon-Button-URL/styles.js.mustache +7 -0
- package/src/tasks/create/templates/SDK-React/template/DETAILS/index.tsx.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/template/DETAILS-region/index.tsx.mustache +1 -1
- package/src/tasks/create-all/index.js +3 -0
- package/src/tasks/publish/helper.js +4 -0
- package/src/tasks/publish-all/helper.js +6 -2
- package/src/tasks/validator/index.js +7 -1
- package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/CaseSummaryFields/CaseSummaryFields.tsx +2 -2
- package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/FieldValueList/FieldValueList.tsx +10 -4
- package/tests/assets/sdk-r/components/create/override-sdk/field/RichText/RichText.tsx +2 -2
- package/tests/assets/sdk-r/components/create/override-sdk/infra/NavBar/NavBar.tsx +1 -1
- package/tests/assets/sdk-r/components/create/override-sdk/template/ListView/ListView.tsx +2 -2
- package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyDetails/demo.stories.tsx +3 -0
- package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyTwoColumnDetails/demo.stories.tsx +3 -0
- package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/CaseSummaryFields/CaseSummaryFields.tsx +2 -2
- package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/FieldValueList/FieldValueList.tsx +10 -4
- package/tests/assets/sdk-r/components/createAll/override-sdk/field/RichText/RichText.tsx +2 -2
- package/tests/assets/sdk-r/components/createAll/override-sdk/infra/NavBar/NavBar.tsx +1 -1
- package/tests/assets/sdk-r/components/createAll/override-sdk/template/ListView/ListView.tsx +2 -2
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { Fragment } from 'react';
|
|
2
|
-
import { Grid, Flex, FieldGroup, withConfiguration } from '@pega/cosmos-react-core';
|
|
1
|
+
import { Fragment, Children, ReactElement } from 'react';
|
|
2
|
+
import { Grid, Flex, FieldGroup, withConfiguration, GridContainerProps } from '@pega/cosmos-react-core';
|
|
3
3
|
import type { PConnFieldProps } from './PConnProps';
|
|
4
|
+
import DetailsRender from './DetailsRender';
|
|
5
|
+
import HighlightRender from './HighlightRender';
|
|
4
6
|
|
|
5
|
-
import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
|
|
7
|
+
import Styled{{COMPONENT_CLASS_NAME}}Wrapper, { StyledDetailsGridContainer, StyledHighlightedFieldsHrLine } from './styles';
|
|
6
8
|
|
|
7
9
|
// includes in bundle
|
|
8
10
|
import { getAllFields } from './utils';
|
|
9
11
|
|
|
10
|
-
|
|
11
12
|
// interface for props
|
|
12
13
|
interface {{COMPONENT_CLASS_NAME}}Props extends PConnFieldProps {
|
|
13
14
|
// If any, enter additional props that only exist on TextInput here
|
|
@@ -16,31 +17,34 @@ interface {{COMPONENT_CLASS_NAME}}Props extends PConnFieldProps {
|
|
|
16
17
|
children: any;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
// Duplicated runtime code from Constellation Design System Component
|
|
20
|
-
|
|
21
20
|
// props passed in combination of props from property panel (config.json) and run time props from Constellation
|
|
22
21
|
// any default values in config.pros should be set in defaultProps at bottom of this file
|
|
23
22
|
function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
24
23
|
|
|
25
|
-
const { getPConnect,
|
|
24
|
+
const { getPConnect, label, showLabel = true, showHighlightedData = false } = props;
|
|
26
25
|
const propsToUse = { label, showLabel, ...getPConnect().getInheritedProps() };
|
|
27
26
|
|
|
27
|
+
// storybook doesn't get children of 1 as an array of 1
|
|
28
|
+
let { children } = props;
|
|
29
|
+
if (!Array.isArray(children)) {
|
|
30
|
+
children = Children.toArray(children);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// update children with readonly
|
|
34
|
+
Children.toArray(children).forEach(child => {
|
|
35
|
+
// @ts-ignore
|
|
36
|
+
child.props.getPConnect().setInheritedProp('readOnly', true);
|
|
37
|
+
// @ts-ignore
|
|
38
|
+
child.props.getPConnect().setInheritedProp('displayMode', 'DISPLAY_ONLY');
|
|
39
|
+
});
|
|
40
|
+
|
|
28
41
|
const numRegions = getAllFields(getPConnect)?.length;
|
|
29
42
|
const gridRepeat = "repeat(".concat(numRegions).concat(", 1fr)");
|
|
30
|
-
|
|
31
|
-
|
|
43
|
+
|
|
44
|
+
const gridContainer: GridContainerProps = { colGap: 6 };
|
|
32
45
|
gridContainer.cols = gridRepeat;
|
|
33
|
-
// @ts-ignore
|
|
34
46
|
gridContainer.alignItems = 'start';
|
|
35
47
|
|
|
36
|
-
const gridHighlightContainer = { "gap": 2};
|
|
37
|
-
// @ts-ignore
|
|
38
|
-
gridHighlightContainer.cols = gridRepeat;
|
|
39
|
-
// @ts-ignore
|
|
40
|
-
gridHighlightContainer.alignItems = 'start';
|
|
41
|
-
// @ts-ignore
|
|
42
|
-
gridHighlightContainer.pad = [0, 0, 2, 0];
|
|
43
|
-
|
|
44
48
|
// Set up highlighted data to pass in return if is set to show, need raw metadata to pass to createComponent
|
|
45
49
|
let highlightedDataArr = [];
|
|
46
50
|
if (showHighlightedData) {
|
|
@@ -48,40 +52,47 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
|
48
52
|
const { highlightedData = [] } = getPConnect().getRawMetadata().config;
|
|
49
53
|
// @ts-ignore
|
|
50
54
|
highlightedDataArr = highlightedData.map((field) => {
|
|
51
|
-
field
|
|
52
|
-
|
|
53
|
-
// Mark as status display when using pyStatusWork
|
|
54
|
-
if (field.config.value === '@P .pyStatusWork') {
|
|
55
|
-
field.type = 'TextInput';
|
|
56
|
-
field.config.displayAsStatus = true;
|
|
57
|
-
}
|
|
58
|
-
// @ts-ignore
|
|
59
|
-
return getPConnect().createComponent(field);
|
|
55
|
+
return <HighlightRender field={field} getPConnect={props.getPConnect} />;
|
|
60
56
|
});
|
|
61
57
|
}
|
|
62
58
|
|
|
59
|
+
|
|
63
60
|
return (
|
|
64
61
|
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
{{! pick new delimiters for mustache }}
|
|
63
|
+
{{=<% %>=}}
|
|
67
64
|
<FieldGroup name={propsToUse.showLabel ? propsToUse.label : ''}>
|
|
68
65
|
{showHighlightedData && highlightedDataArr.length > 0 && (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
66
|
+
<>
|
|
67
|
+
<Flex
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
container={{ direction: 'row', alignItems: 'normal', colGap: 10 }}
|
|
70
|
+
data-testid={`highlighted-column-count-${numRegions}`}
|
|
71
|
+
>
|
|
72
|
+
{highlightedDataArr.map((child: ReactElement, i: number) => (
|
|
73
|
+
<Fragment key={`hf-${i + 1}`}>{child}</Fragment>
|
|
74
|
+
))}
|
|
75
|
+
</Flex>
|
|
76
|
+
<StyledHighlightedFieldsHrLine />
|
|
77
|
+
</>
|
|
75
78
|
)}
|
|
76
|
-
<Grid
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
{
|
|
79
|
+
<Grid
|
|
80
|
+
as={StyledDetailsGridContainer}
|
|
81
|
+
container={gridContainer}
|
|
82
|
+
data-testid={`column-count-${numRegions}`} >
|
|
83
|
+
{children.map((child: ReactElement, i: number) => (
|
|
84
|
+
|
|
85
|
+
<Flex
|
|
86
|
+
// @ts-ignore
|
|
87
|
+
container={{ direction: 'column', alignItems: 'normal', colGap: 1, rowGap: 1.5 }}
|
|
88
|
+
key={`r-${i + 1}`}
|
|
89
|
+
>
|
|
90
|
+
<DetailsRender child={child} />
|
|
80
91
|
</Flex>
|
|
81
92
|
))}
|
|
82
93
|
</Grid>
|
|
83
94
|
</FieldGroup>
|
|
84
|
-
|
|
95
|
+
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
85
96
|
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
86
97
|
);
|
|
87
98
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
|
|
3
2
|
// @ts-nocheck
|
|
4
3
|
export const pyReviewRaw = {
|
|
5
4
|
name: 'pyReview',
|
|
@@ -17,6 +16,7 @@ export const pyReviewRaw = {
|
|
|
17
16
|
config: {
|
|
18
17
|
value: '@P .pyStatusWork',
|
|
19
18
|
label: '@L Work Status',
|
|
19
|
+
hideLabel: true,
|
|
20
20
|
displayMode: 'STACKED_LARGE_VAL',
|
|
21
21
|
displayAsStatus: true,
|
|
22
22
|
key: 'pyStatusWork'
|
|
@@ -27,6 +27,7 @@ export const pyReviewRaw = {
|
|
|
27
27
|
config: {
|
|
28
28
|
value: '@P .pyID',
|
|
29
29
|
label: '@L Case ID',
|
|
30
|
+
hideLabel: true,
|
|
30
31
|
displayMode: 'STACKED_LARGE_VAL',
|
|
31
32
|
key: 'pyID'
|
|
32
33
|
}
|
|
@@ -36,6 +37,7 @@ export const pyReviewRaw = {
|
|
|
36
37
|
config: {
|
|
37
38
|
value: '@P .pxCreateDateTime',
|
|
38
39
|
label: '@L Create date/time',
|
|
40
|
+
hideLabel: true,
|
|
39
41
|
displayMode: 'STACKED_LARGE_VAL',
|
|
40
42
|
key: 'pxCreateDateTime'
|
|
41
43
|
}
|
|
@@ -44,6 +46,7 @@ export const pyReviewRaw = {
|
|
|
44
46
|
type: 'UserReference',
|
|
45
47
|
config: {
|
|
46
48
|
label: '@L Create Operator',
|
|
49
|
+
hideLabel: true,
|
|
47
50
|
value: '@USER .pxCreateOperator',
|
|
48
51
|
placeholder: 'Select...',
|
|
49
52
|
displayMode: 'STACKED_LARGE_VAL',
|
|
@@ -66,6 +69,7 @@ export const pyReviewRaw = {
|
|
|
66
69
|
{
|
|
67
70
|
name: 'A',
|
|
68
71
|
type: 'Region',
|
|
72
|
+
key: 'A',
|
|
69
73
|
getPConnect: () => {
|
|
70
74
|
return {
|
|
71
75
|
getRawMetadata: () => {
|
|
@@ -78,17 +82,17 @@ export const pyReviewRaw = {
|
|
|
78
82
|
type: 'DateTime',
|
|
79
83
|
config: {
|
|
80
84
|
value: '@P .pySLADeadline',
|
|
81
|
-
label: '@L SLA Deadline'
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
label: '@L SLA Deadline',
|
|
86
|
+
key: 'pySLADeadline'
|
|
87
|
+
}
|
|
84
88
|
},
|
|
85
89
|
{
|
|
86
90
|
type: 'DateTime',
|
|
87
91
|
config: {
|
|
88
92
|
value: '@P .pySLAGoal',
|
|
89
|
-
label: '@L SLA Goal'
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
label: '@L SLA Goal',
|
|
94
|
+
key: 'pySLAGoal'
|
|
95
|
+
}
|
|
92
96
|
},
|
|
93
97
|
{
|
|
94
98
|
type: 'RadioButtons',
|
|
@@ -96,9 +100,9 @@ export const pyReviewRaw = {
|
|
|
96
100
|
value: '@P .pySLAStartTime',
|
|
97
101
|
label: '@L SLA Start Time',
|
|
98
102
|
listType: 'associated',
|
|
99
|
-
datasource: '@ASSOCIATED .pySLAStartTime'
|
|
100
|
-
|
|
101
|
-
|
|
103
|
+
datasource: '@ASSOCIATED .pySLAStartTime',
|
|
104
|
+
key: 'pySLAStartTime'
|
|
105
|
+
}
|
|
102
106
|
}
|
|
103
107
|
]
|
|
104
108
|
}
|
|
@@ -120,7 +124,6 @@ export const pyReviewResolved = {
|
|
|
120
124
|
config: {
|
|
121
125
|
value: 'New',
|
|
122
126
|
label: 'Work Status',
|
|
123
|
-
displayMode: 'STACKED_LARGE_VAL',
|
|
124
127
|
displayAsStatus: true
|
|
125
128
|
}
|
|
126
129
|
},
|
|
@@ -128,16 +131,14 @@ export const pyReviewResolved = {
|
|
|
128
131
|
type: 'TextInput',
|
|
129
132
|
config: {
|
|
130
133
|
value: 'M-1002',
|
|
131
|
-
label: 'Case ID'
|
|
132
|
-
displayMode: 'STACKED_LARGE_VAL'
|
|
134
|
+
label: 'Case ID'
|
|
133
135
|
}
|
|
134
136
|
},
|
|
135
137
|
{
|
|
136
138
|
type: 'DateTime',
|
|
137
139
|
config: {
|
|
138
140
|
value: '2022-12-11T20:06:27.232Z',
|
|
139
|
-
label: 'Create date/time'
|
|
140
|
-
displayMode: 'STACKED_LARGE_VAL'
|
|
141
|
+
label: 'Create date/time'
|
|
141
142
|
}
|
|
142
143
|
},
|
|
143
144
|
{
|
|
@@ -148,8 +149,7 @@ export const pyReviewResolved = {
|
|
|
148
149
|
userId: 'conns',
|
|
149
150
|
userName: 'Sara Connor'
|
|
150
151
|
},
|
|
151
|
-
placeholder: 'Select...'
|
|
152
|
-
displayMode: 'STACKED_LARGE_VAL'
|
|
152
|
+
placeholder: 'Select...'
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
],
|
|
@@ -159,22 +159,25 @@ export const pyReviewResolved = {
|
|
|
159
159
|
export const regionChildrenResolved = [
|
|
160
160
|
{
|
|
161
161
|
readOnly: true,
|
|
162
|
-
value: '',
|
|
162
|
+
value: 'Deadline',
|
|
163
163
|
label: 'SLA Deadline',
|
|
164
|
+
hideLabel: true,
|
|
164
165
|
displayMode: 'LABELS_LEFT',
|
|
165
166
|
key: 'SLA Deadline'
|
|
166
167
|
},
|
|
167
168
|
{
|
|
168
169
|
readOnly: true,
|
|
169
|
-
value: '',
|
|
170
|
+
value: 'Goal',
|
|
170
171
|
label: 'SLA Goal',
|
|
172
|
+
hideLabel: true,
|
|
171
173
|
displayMode: 'LABELS_LEFT',
|
|
172
174
|
key: 'SLA Goal'
|
|
173
175
|
},
|
|
174
176
|
{
|
|
175
177
|
readOnly: true,
|
|
176
|
-
value: '',
|
|
178
|
+
value: 'Start Time',
|
|
177
179
|
label: 'SLA Start Time',
|
|
180
|
+
hideLabel: true,
|
|
178
181
|
listType: 'associated',
|
|
179
182
|
datasource: [
|
|
180
183
|
{
|
|
@@ -190,3 +193,58 @@ export const regionChildrenResolved = [
|
|
|
190
193
|
key: 'SLA Start Time'
|
|
191
194
|
}
|
|
192
195
|
];
|
|
196
|
+
|
|
197
|
+
export const operatorDetails = {
|
|
198
|
+
data: {
|
|
199
|
+
pzLoadTime: 'January 18, 2023 10:33:19 AM EST',
|
|
200
|
+
pzPageNameHash: '_pa1519192551088960pz',
|
|
201
|
+
pyOperatorInfo: {
|
|
202
|
+
pyUserName: 'french DigV2',
|
|
203
|
+
pyPosition: '',
|
|
204
|
+
pyImageInsKey: '',
|
|
205
|
+
pySkills: [
|
|
206
|
+
{
|
|
207
|
+
pySkillName: '',
|
|
208
|
+
pzIndexOwnerKey: 'DATA-ADMIN-OPERATOR-ID FRENCHTEST.DIGV2',
|
|
209
|
+
pySkillRating: 0
|
|
210
|
+
}
|
|
211
|
+
],
|
|
212
|
+
pyReportToUserName: '',
|
|
213
|
+
pyReportTo: '',
|
|
214
|
+
pyOrganization: 'DXIL',
|
|
215
|
+
pyTitle: '',
|
|
216
|
+
pyLabel: 'frenchTest.DigV2',
|
|
217
|
+
pyEmailAddress: 'User@DigV2',
|
|
218
|
+
pyTelephone: ''
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
status: 200,
|
|
222
|
+
statusText: '',
|
|
223
|
+
headers: {
|
|
224
|
+
'content-length': '435',
|
|
225
|
+
'content-type': 'application/json;charset=UTF-8'
|
|
226
|
+
},
|
|
227
|
+
request: {}
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
export const configProps = {
|
|
231
|
+
label: 'Create operator',
|
|
232
|
+
createLabel: 'Created',
|
|
233
|
+
updateLabel: 'Updated',
|
|
234
|
+
updateDateTime: '2023-01-16T14:53:33.280Z',
|
|
235
|
+
createDateTime: '2023-01-16T14:53:33.198Z',
|
|
236
|
+
updateOperator: {
|
|
237
|
+
userId: 'admin@mediaco',
|
|
238
|
+
userName: 'admin'
|
|
239
|
+
},
|
|
240
|
+
createOperator: {
|
|
241
|
+
userId: 'admin@mediaco',
|
|
242
|
+
userName: 'admin'
|
|
243
|
+
},
|
|
244
|
+
resolveLabel: '',
|
|
245
|
+
resolveOperator: '',
|
|
246
|
+
resolveDateTime: '',
|
|
247
|
+
hideLabel: true,
|
|
248
|
+
key: '_532zx1dah',
|
|
249
|
+
displayMode: 'LABELS_LEFT'
|
|
250
|
+
};
|
|
@@ -6,3 +6,19 @@ export default styled.div(() => {
|
|
|
6
6
|
margin: 0px 0;
|
|
7
7
|
`;
|
|
8
8
|
});
|
|
9
|
+
|
|
10
|
+
export const StyledDetailsGridContainer = styled.div(() => {
|
|
11
|
+
return css`
|
|
12
|
+
margin-line-start: 1;
|
|
13
|
+
`;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
export const StyledHighlightedFieldsHrLine = styled.hr(() => {
|
|
18
|
+
return css`
|
|
19
|
+
line: {
|
|
20
|
+
margin: '0.75rem 0';
|
|
21
|
+
opacity: '50%'
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/* eslint-disable react-hooks/rules-of-hooks */
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { Avatar as CosmosAvatar, withConfiguration } from '@pega/cosmos-react-core';
|
|
5
|
+
import type { PConnFieldProps } from './PConnProps';
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
// interface for props
|
|
9
|
+
interface {{COMPONENT_CLASS_NAME}}AvatarProps extends PConnFieldProps {
|
|
10
|
+
// If any, enter additional props that only exist on TextInput here
|
|
11
|
+
metaObj: any;
|
|
12
|
+
showStatus: boolean;
|
|
13
|
+
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function Avatar(props: {{COMPONENT_CLASS_NAME}}AvatarProps) {
|
|
17
|
+
const { metaObj, showStatus = false } = props;
|
|
18
|
+
const [imageBlobUrl, setImageBlobUrl] = useState(null);
|
|
19
|
+
let userName: string;
|
|
20
|
+
let userIdentifier: string;
|
|
21
|
+
|
|
22
|
+
// TODO Below if conditions can be removed once we have apis to get worklist/mywork info
|
|
23
|
+
// This is non CaseView case (Dashboard, MyWork etc)
|
|
24
|
+
if (!metaObj) {
|
|
25
|
+
userName = PCore.getEnvironmentInfo().getOperatorName();
|
|
26
|
+
userIdentifier = PCore.getEnvironmentInfo().getOperatorIdentifier();
|
|
27
|
+
} else {
|
|
28
|
+
userName = metaObj.name;
|
|
29
|
+
userIdentifier = metaObj.ID;
|
|
30
|
+
}
|
|
31
|
+
if (!userName && userIdentifier) {
|
|
32
|
+
userName = userIdentifier;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
const imageKey = !metaObj ? PCore.getEnvironmentInfo().getOperatorImageInsKey() : metaObj.image;
|
|
37
|
+
if (imageKey) {
|
|
38
|
+
PCore.getAssetLoader()
|
|
39
|
+
.getSvcImage(imageKey)
|
|
40
|
+
.then((blob) => window.URL.createObjectURL(blob))
|
|
41
|
+
.then((imagePath) => setImageBlobUrl(imagePath as React.SetStateAction<any>));
|
|
42
|
+
}
|
|
43
|
+
}, [metaObj]);
|
|
44
|
+
|
|
45
|
+
if (showStatus) {
|
|
46
|
+
const currentState = PCore.getMessagingServiceManager().getUserPresence().getUserState(userIdentifier);
|
|
47
|
+
const [userState, setUserState]: any = useState(currentState === 'online' ? 'active' : 'inactive');
|
|
48
|
+
|
|
49
|
+
// @ts-ignore
|
|
50
|
+
const handleUserStateChange = ({ state }) => {
|
|
51
|
+
setUserState(state === 'online' ? 'active' : 'inactive');
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
const subId = PCore.getMessagingServiceManager()
|
|
56
|
+
.getUserPresence()
|
|
57
|
+
// @ts-ignore
|
|
58
|
+
.subscribe(userIdentifier, handleUserStateChange);
|
|
59
|
+
|
|
60
|
+
return function cleanup() {
|
|
61
|
+
PCore.getMessagingServiceManager().getUserPresence().unsubscribe(userIdentifier, subId);
|
|
62
|
+
};
|
|
63
|
+
}, [userIdentifier, handleUserStateChange]);
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
return <CosmosAvatar name={userName} imageSrc={imageBlobUrl as React.SetStateAction<any>} status={userState} />;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Do not render when userName does not exists
|
|
69
|
+
// TODO : In CNR case, pxRequestor is not available, please remove this condition once it populates
|
|
70
|
+
if (!userName) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return <CosmosAvatar name={userName} imageSrc={imageBlobUrl as React.SetStateAction<any>} />;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
export default withConfiguration(Avatar);
|
package/src/tasks/create/templates/Constellation/template/DETAILS-region/DetailsRender.tsx.mustache
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Fragment, ReactElement } from 'react';
|
|
2
|
+
import { FieldValueList } from '@pega/cosmos-react-core';
|
|
3
|
+
|
|
4
|
+
interface DetailsRenderProps {
|
|
5
|
+
children?: never;
|
|
6
|
+
child: NonNullable<ReactElement>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const DetailsRender = (props: DetailsRenderProps) => {
|
|
10
|
+
const { child } = props;
|
|
11
|
+
|
|
12
|
+
const kids = child.props.getPConnect().getChildren();
|
|
13
|
+
|
|
14
|
+
const displayCompArr: ReactElement[] = [];
|
|
15
|
+
|
|
16
|
+
Object.values(kids).forEach((value: any, i :number) => {
|
|
17
|
+
const { type } = value.getPConnect().getRawMetadata();
|
|
18
|
+
const { hideLabel, variant, testId, label } = value
|
|
19
|
+
.getPConnect()
|
|
20
|
+
.resolveConfigProps(value.getPConnect().getConfigProps());
|
|
21
|
+
|
|
22
|
+
let displayComp;
|
|
23
|
+
const key = JSON.stringify(value.getPConnect());
|
|
24
|
+
const key1 = key.concat(`-${i}`);
|
|
25
|
+
|
|
26
|
+
if (type === 'reference') {
|
|
27
|
+
const refElement = value.getPConnect().getComponent();
|
|
28
|
+
|
|
29
|
+
displayCompArr.push(refElement);
|
|
30
|
+
} else {
|
|
31
|
+
const element = value.getPConnect().getComponent();
|
|
32
|
+
const displayEl = <Fragment key={key}>{element}</Fragment>;
|
|
33
|
+
|
|
34
|
+
{{! pick new delimiters for mustache }}
|
|
35
|
+
{{=<% %>=}}
|
|
36
|
+
displayComp = (
|
|
37
|
+
<Fragment key={key1}>
|
|
38
|
+
<FieldValueList
|
|
39
|
+
style={{ columnGap: '0'}}
|
|
40
|
+
variant={hideLabel ? 'stacked' : variant}
|
|
41
|
+
data-testid={testId}
|
|
42
|
+
fields={[{ id: '1', name: hideLabel ? '' : label, value: displayEl }]}
|
|
43
|
+
/>
|
|
44
|
+
</Fragment>
|
|
45
|
+
);
|
|
46
|
+
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
47
|
+
|
|
48
|
+
displayCompArr.push(displayComp);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return <>{displayCompArr}</>;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export default DetailsRender;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { FieldValueList, Text } from '@pega/cosmos-react-core';
|
|
4
|
+
import type { PConnProps } from './PConnProps';
|
|
5
|
+
|
|
6
|
+
interface HighlightRenderProps extends PConnProps {
|
|
7
|
+
field?: any;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const HighlightRender = (props: HighlightRenderProps) => {
|
|
11
|
+
const { getPConnect, field } = props;
|
|
12
|
+
|
|
13
|
+
field.config['displayMode'] = 'DISPLAY_ONLY';
|
|
14
|
+
|
|
15
|
+
// Mark as status display when using pyStatusWork
|
|
16
|
+
if (field.config?.value === '@P .pyStatusWork') {
|
|
17
|
+
field.type = 'TextInput';
|
|
18
|
+
field.config.displayAsStatus = true;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const configProps = getPConnect().resolveConfigProps(field.config);
|
|
22
|
+
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
const reactField = getPConnect().createComponent(field);
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
{{! pick new delimiters for mustache }}
|
|
28
|
+
{{=<% %>=}}
|
|
29
|
+
<FieldValueList
|
|
30
|
+
style={{ width: 'auto' }}
|
|
31
|
+
variant='stacked'
|
|
32
|
+
data-testid={field.testId}
|
|
33
|
+
fields={[
|
|
34
|
+
{
|
|
35
|
+
id: '2',
|
|
36
|
+
name: configProps.hideLabel ? '' : configProps.label,
|
|
37
|
+
value: (
|
|
38
|
+
<Text variant='h1' as='span'>
|
|
39
|
+
{reactField}
|
|
40
|
+
</Text>
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
]}
|
|
44
|
+
/>
|
|
45
|
+
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
46
|
+
);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export default HighlightRender;
|