@pega/custom-dx-components 0.24.4 → 0.24.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/tasks/bundle/builder/webpack.config.js +15 -1
- package/src/tasks/create/templates/Constellation/Field/Text/index.tsx.mustache +94 -4
- package/src/tasks/create/templates/Constellation/Template/DETAILS/DetailsRender.tsx +10 -4
- package/src/tasks/create/templates/Constellation/Template/DETAILS/index.tsx.mustache +9 -16
- package/src/tasks/create/templates/Constellation/Template/DETAILS-region/DetailsRender.tsx +10 -4
- package/src/tasks/create/templates/Constellation/Template/DETAILS-region/index.tsx.mustache +6 -5
- package/src/tasks/create/templates/Constellation/Template/FORM/DetailsRender.tsx +58 -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 +58 -0
- package/src/tasks/create/templates/Constellation/Template/FORM-region/index.tsx.mustache +28 -6
- package/src/tasks/init/template/package.json.mustache +1 -1
- package/src/tasks/init/template/tsconfig.build.json +3 -1
- package/tests/assets/components/create/Pega_DXIL_MyTestText/index.tsx +94 -4
- package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/DetailsRender.tsx +10 -4
- package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/index.tsx +6 -13
- package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyForm/DetailsRender.tsx +58 -0
- package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyForm/index.tsx +28 -5
- package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyText/index.tsx +94 -4
- package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/DetailsRender.tsx +10 -4
- package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/index.tsx +3 -2
- package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnForm/DetailsRender.tsx +58 -0
- package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnForm/index.tsx +22 -3
- package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/DetailsRender.tsx +10 -4
- package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/index.tsx +6 -13
- package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyForm/DetailsRender.tsx +58 -0
- package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyForm/index.tsx +28 -5
- package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyText/index.tsx +94 -4
- package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/DetailsRender.tsx +10 -4
- package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/index.tsx +3 -2
- package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnForm/DetailsRender.tsx +58 -0
- package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnForm/index.tsx +22 -3
package/package.json
CHANGED
|
@@ -304,6 +304,7 @@ export default (
|
|
|
304
304
|
resourceRegExp: /^\.\/locale$/,
|
|
305
305
|
contextRegExp: /moment$/
|
|
306
306
|
}),
|
|
307
|
+
/* cosmos 4.x and below */
|
|
307
308
|
/* Ignore cosmos icons */
|
|
308
309
|
new webpack.IgnorePlugin({
|
|
309
310
|
resourceRegExp: /^\.\/icons$/,
|
|
@@ -327,7 +328,20 @@ export default (
|
|
|
327
328
|
resourceRegExp: /^\.\/streamline-icons$/,
|
|
328
329
|
contextRegExp: /@pega\\cosmos-react-core\\lib\\components\\Icon$/
|
|
329
330
|
}),
|
|
330
|
-
|
|
331
|
+
|
|
332
|
+
/* cosmos 6.x and above */
|
|
333
|
+
/* Ignore cosmos icons */
|
|
334
|
+
new webpack.IgnorePlugin({
|
|
335
|
+
resourceRegExp: /^\.\/.*\/.*\.icon$/,
|
|
336
|
+
contextRegExp: /@pega\/cosmos-react-core\/lib\/components\/Icon$/
|
|
337
|
+
}),
|
|
338
|
+
|
|
339
|
+
/* Ignore cosmos icons - windows */
|
|
340
|
+
new webpack.IgnorePlugin({
|
|
341
|
+
resourceRegExp: /^\.\/.*\/.*\.icon$/,
|
|
342
|
+
contextRegExp: /@pega\\cosmos-react-core\\lib\\components\\Icon$/
|
|
343
|
+
}),
|
|
344
|
+
|
|
331
345
|
new webpack.optimize.LimitChunkCountPlugin({
|
|
332
346
|
maxChunks: 1
|
|
333
347
|
}),
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Input,
|
|
3
|
+
FieldValueList,
|
|
4
|
+
Text,
|
|
5
|
+
EmailDisplay,
|
|
6
|
+
PhoneDisplay,
|
|
7
|
+
URLDisplay,
|
|
8
|
+
withConfiguration
|
|
9
|
+
} from '@pega/cosmos-react-core';
|
|
2
10
|
|
|
3
11
|
import type { PConnFieldProps } from './PConnProps';
|
|
4
12
|
|
|
@@ -7,7 +15,9 @@ import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
|
|
|
7
15
|
// interface for props
|
|
8
16
|
interface {{COMPONENT_CLASS_NAME}}Props extends PConnFieldProps {
|
|
9
17
|
// If any, enter additional props that only exist on TextInput here
|
|
10
|
-
|
|
18
|
+
isTableFormatter?: boolean;
|
|
19
|
+
formatter: string;
|
|
20
|
+
variant?: any;
|
|
11
21
|
}
|
|
12
22
|
|
|
13
23
|
// interface for StateProps object
|
|
@@ -16,23 +26,103 @@ interface StateProps {
|
|
|
16
26
|
hasSuggestions: boolean;
|
|
17
27
|
}
|
|
18
28
|
|
|
19
|
-
|
|
29
|
+
export const formatExists = (formatterVal: string) => {
|
|
30
|
+
const formatterValues = [
|
|
31
|
+
'TextInput',
|
|
32
|
+
'WorkStatus',
|
|
33
|
+
'RichText',
|
|
34
|
+
'Email',
|
|
35
|
+
'Phone',
|
|
36
|
+
'URL',
|
|
37
|
+
'Operator'
|
|
38
|
+
];
|
|
39
|
+
let isformatter = false;
|
|
40
|
+
if (formatterValues.includes(formatterVal)) {
|
|
41
|
+
isformatter = true;
|
|
42
|
+
}
|
|
43
|
+
return isformatter;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const textFormatter = (formatter: string, value: string) => {
|
|
47
|
+
let displayComponent: any = null;
|
|
48
|
+
switch (formatter) {
|
|
49
|
+
case 'TextInput': {
|
|
50
|
+
displayComponent = value;
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case 'Email': {
|
|
54
|
+
displayComponent = <EmailDisplay value={value} displayText={value} variant='link' />;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
case 'Phone': {
|
|
58
|
+
displayComponent = <PhoneDisplay value={value} variant='link' />;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
case 'URL': {
|
|
62
|
+
displayComponent = (
|
|
63
|
+
<URLDisplay target='_blank' value={value} displayText={value} variant='link' />
|
|
64
|
+
);
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
// no default
|
|
68
|
+
}
|
|
69
|
+
return displayComponent;
|
|
70
|
+
};
|
|
20
71
|
|
|
21
72
|
// props passed in combination of props from property panel (config.json) and run time props from Constellation
|
|
22
73
|
// any default values in config.pros should be set in defaultProps at bottom of this file
|
|
23
74
|
function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
24
|
-
const { getPConnect, value, placeholder, disabled = false, readOnly = false, required = false, label, hideLabel = false, testId } = props;
|
|
75
|
+
const { getPConnect, value, placeholder, disabled = false, displayMode, readOnly = false, required = false, label, hideLabel = false, testId, isTableFormatter = false, variant = 'inline' } = props;
|
|
25
76
|
|
|
26
77
|
const pConn = getPConnect();
|
|
27
78
|
const actions = pConn.getActionsApi();
|
|
28
79
|
const stateProps = pConn.getStateProps() as StateProps;
|
|
29
80
|
const propName: string = stateProps.value;
|
|
81
|
+
const { formatter } = props;
|
|
30
82
|
|
|
31
83
|
const handleOnChange = (event: any) => {
|
|
32
84
|
const { value: updatedValue } = event.target;
|
|
33
85
|
actions.updateFieldValue(propName, updatedValue);
|
|
34
86
|
};
|
|
35
87
|
|
|
88
|
+
if (displayMode === 'LABELS_LEFT' || displayMode === 'DISPLAY_ONLY') {
|
|
89
|
+
let displayComp = value || <span aria-hidden='true'>––</span>;
|
|
90
|
+
if (isTableFormatter && formatExists(formatter)) {
|
|
91
|
+
displayComp = textFormatter(formatter, value);
|
|
92
|
+
}
|
|
93
|
+
return displayMode === 'DISPLAY_ONLY' ? (
|
|
94
|
+
<Styled{{COMPONENT_CLASS_NAME}}Wrapper> {displayComp} </Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
95
|
+
) : (
|
|
96
|
+
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
97
|
+
<FieldValueList
|
|
98
|
+
variant={hideLabel ? 'stacked' : variant}
|
|
99
|
+
data-testid={testId}
|
|
100
|
+
fields={[{ id: '1', name: hideLabel ? '' : label, value: displayComp }]}
|
|
101
|
+
/>
|
|
102
|
+
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (displayMode === 'STACKED_LARGE_VAL') {
|
|
107
|
+
const isValDefined = typeof value !== 'undefined' && value !== '';
|
|
108
|
+
const val = isValDefined ? (
|
|
109
|
+
<Text variant='h1' as='span'>
|
|
110
|
+
{value}
|
|
111
|
+
</Text>
|
|
112
|
+
) : (
|
|
113
|
+
''
|
|
114
|
+
);
|
|
115
|
+
return (
|
|
116
|
+
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
117
|
+
<FieldValueList
|
|
118
|
+
variant='stacked'
|
|
119
|
+
data-testid={testId}
|
|
120
|
+
fields={[{ id: '2', name: hideLabel ? '' : label, value: val }]}
|
|
121
|
+
/>
|
|
122
|
+
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
36
126
|
return (
|
|
37
127
|
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
38
128
|
<Input
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
import React, { Fragment } from 'react';
|
|
1
|
+
import { Fragment, ReactElement } from 'react';
|
|
3
2
|
import { FieldValueList } from '@pega/cosmos-react-core';
|
|
4
3
|
|
|
5
|
-
|
|
4
|
+
interface DetailsRenderProps {
|
|
5
|
+
children?: never;
|
|
6
|
+
child: NonNullable<ReactElement>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const DetailsRender = (props: DetailsRenderProps) => {
|
|
10
|
+
const { child } = props;
|
|
11
|
+
|
|
6
12
|
const kids = child.props.getPConnect().getChildren();
|
|
7
13
|
|
|
8
|
-
const displayCompArr:
|
|
14
|
+
const displayCompArr: ReactElement[] = [];
|
|
9
15
|
|
|
10
16
|
Object.values(kids).forEach((value: any) => {
|
|
11
17
|
const { type } = value.getPConnect().getRawMetadata();
|
|
@@ -9,7 +9,6 @@ import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
|
|
|
9
9
|
// includes in bundle
|
|
10
10
|
import { getAllFields } from './utils';
|
|
11
11
|
|
|
12
|
-
|
|
13
12
|
// interface for props
|
|
14
13
|
interface {{COMPONENT_CLASS_NAME}}Props extends PConnFieldProps {
|
|
15
14
|
// If any, enter additional props that only exist on TextInput here
|
|
@@ -56,16 +55,8 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
|
56
55
|
const { highlightedData = [] } = getPConnect().getRawMetadata().config;
|
|
57
56
|
// @ts-ignore
|
|
58
57
|
highlightedDataArr = highlightedData.map((field) => {
|
|
59
|
-
// field.config.displayMode = 'STACKED_LARGE_VAL';
|
|
60
58
|
|
|
61
|
-
|
|
62
|
-
// if (field.config.value === '@P .pyStatusWork') {
|
|
63
|
-
// field.type = 'TextInput';
|
|
64
|
-
// field.config.displayAsStatus = true;
|
|
65
|
-
// }
|
|
66
|
-
// // @ts-ignore
|
|
67
|
-
// return getPConnect().createComponent(field);
|
|
68
|
-
return <HighlightRender field={field} props={props} />;
|
|
59
|
+
return <HighlightRender field={field} props={props} />;
|
|
69
60
|
});
|
|
70
61
|
}
|
|
71
62
|
|
|
@@ -78,13 +69,14 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
|
78
69
|
|
|
79
70
|
return (
|
|
80
71
|
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
81
|
-
|
|
82
|
-
|
|
72
|
+
{{! pick new delimiters for mustache }}
|
|
73
|
+
{{=<% %>=}}
|
|
83
74
|
<FieldGroup name={propsToUse.showLabel ? propsToUse.label : ''}>
|
|
84
75
|
{showHighlightedData && highlightedDataArr.length > 0 && (
|
|
85
76
|
<>
|
|
86
77
|
<Flex
|
|
87
|
-
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
container={{ direction: 'row', alignItems: 'normal', colGap: 10 }}
|
|
88
80
|
data-testid={`highlighted-column-count-${numRegions}`}
|
|
89
81
|
>
|
|
90
82
|
{highlightedDataArr.map((child: any, i: number) => (
|
|
@@ -96,13 +88,14 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
|
96
88
|
)}
|
|
97
89
|
<Grid container={gridContainer} data-testid={`column-count-${numRegions}`} >
|
|
98
90
|
{children.map((child: any, i: number) => (
|
|
99
|
-
|
|
100
|
-
|
|
91
|
+
// @ts-ignore
|
|
92
|
+
<Flex container={{ direction: 'column', alignItems: 'normal', colGap: 0, rowGap: 1.5 }} key={`r-${i + 1}`}>
|
|
93
|
+
<DetailsRender child={child} />
|
|
101
94
|
</Flex>
|
|
102
95
|
))}
|
|
103
96
|
</Grid>
|
|
104
97
|
</FieldGroup>
|
|
105
|
-
|
|
98
|
+
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
106
99
|
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
107
100
|
);
|
|
108
101
|
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
import React, { Fragment } from 'react';
|
|
1
|
+
import { Fragment, ReactElement } from 'react';
|
|
3
2
|
import { FieldValueList } from '@pega/cosmos-react-core';
|
|
4
3
|
|
|
5
|
-
|
|
4
|
+
interface DetailsRenderProps {
|
|
5
|
+
children?: never;
|
|
6
|
+
child: NonNullable<ReactElement>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const DetailsRender = (props: DetailsRenderProps) => {
|
|
10
|
+
const { child } = props;
|
|
11
|
+
|
|
6
12
|
const kids = child.props.getPConnect().getChildren();
|
|
7
13
|
|
|
8
|
-
const displayCompArr:
|
|
14
|
+
const displayCompArr: ReactElement[] = [];
|
|
9
15
|
|
|
10
16
|
Object.values(kids).forEach((value: any) => {
|
|
11
17
|
const { type } = value.getPConnect().getRawMetadata();
|
|
@@ -77,8 +77,8 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
|
77
77
|
|
|
78
78
|
return (
|
|
79
79
|
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
{{! pick new delimiters for mustache }}
|
|
81
|
+
{{=<% %>=}}
|
|
82
82
|
<FieldGroup name={propsToUse.showLabel ? propsToUse.label : ''}>
|
|
83
83
|
{showHighlightedData && highlightedDataArr.length > 0 && (
|
|
84
84
|
<>
|
|
@@ -95,13 +95,14 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
|
95
95
|
)}
|
|
96
96
|
<Grid container={gridContainer} data-testid={`column-count-${numRegions}`} >
|
|
97
97
|
{children.map((child: any, i: number) => (
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
// @ts-ignore
|
|
99
|
+
<Flex container={{ direction: 'column', alignItems: 'normal', colGap: 0, rowGap: 1.5 }} key={`r-${i + 1}`}>
|
|
100
|
+
<DetailsRender child={child} />
|
|
100
101
|
</Flex>
|
|
101
102
|
))}
|
|
102
103
|
</Grid>
|
|
103
104
|
</FieldGroup>
|
|
104
|
-
|
|
105
|
+
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
105
106
|
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
106
107
|
);
|
|
107
108
|
|
|
@@ -0,0 +1,58 @@
|
|
|
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) => {
|
|
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
|
+
|
|
25
|
+
if (type === 'reference') {
|
|
26
|
+
const refElement = value.getPConnect().getComponent();
|
|
27
|
+
|
|
28
|
+
displayCompArr.push(refElement);
|
|
29
|
+
} else {
|
|
30
|
+
const element = value.getPConnect().getComponent();
|
|
31
|
+
const displayEl = <Fragment key={key}>{element}</Fragment>;
|
|
32
|
+
|
|
33
|
+
const fvlStyle = {
|
|
34
|
+
myColGap: {
|
|
35
|
+
columnGap: '0'
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// const myEl = <div>boo</div>;
|
|
40
|
+
displayComp = (
|
|
41
|
+
<Fragment key={key}>
|
|
42
|
+
<FieldValueList
|
|
43
|
+
style={fvlStyle.myColGap}
|
|
44
|
+
variant={hideLabel ? 'stacked' : variant}
|
|
45
|
+
data-testid={testId}
|
|
46
|
+
fields={[{ id: '1', name: hideLabel ? '' : label, value: displayEl }]}
|
|
47
|
+
/>
|
|
48
|
+
</Fragment>
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
displayCompArr.push(displayComp);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
return <>{displayCompArr}</>;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default DetailsRender;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Grid, FieldGroup, withConfiguration } from '@pega/cosmos-react-core';
|
|
1
|
+
import { Grid, Flex, FieldGroup, withConfiguration } from '@pega/cosmos-react-core';
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
import type { PConnFieldProps } from './PConnProps';
|
|
5
|
+
import DetailsRender from './DetailsRender';
|
|
5
6
|
|
|
6
7
|
import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
|
|
7
8
|
|
|
@@ -13,19 +14,44 @@ interface {{COMPONENT_CLASS_NAME}}Props extends PConnFieldProps {
|
|
|
13
14
|
children: any;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
// Duplicated runtime code from Constellation Design System Component
|
|
17
|
-
|
|
18
17
|
// props passed in combination of props from property panel (config.json) and run time props from Constellation
|
|
19
18
|
// any default values in config.pros should be set in defaultProps at bottom of this file
|
|
20
19
|
function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
21
20
|
|
|
22
|
-
const { children = [], NumCols = '1', label, showLabel, getPConnect } = props;
|
|
21
|
+
const { children = [], NumCols = '1', label, showLabel, getPConnect, readOnly, displayMode } = props;
|
|
23
22
|
const propsToUse = { label, showLabel, ...getPConnect().getInheritedProps() };
|
|
24
23
|
|
|
25
24
|
const nCols = parseInt(NumCols, 10);
|
|
26
25
|
|
|
27
|
-
// console.log(`Rendering ${getPConnect()?.getComponentName()} with ${template} with ${children?.length} Region(s)`);
|
|
28
26
|
|
|
27
|
+
if (readOnly && readOnly === true && displayMode && displayMode === 'DISPLAY_ONLY') {
|
|
28
|
+
const numRegions = '1';
|
|
29
|
+
const gridRepeat = 'repeat('.concat(numRegions).concat(', 1fr)');
|
|
30
|
+
const gridContainer = { colGap: 0 };
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
gridContainer.cols = gridRepeat;
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
36
|
+
{{! pick new delimiters for mustache }}
|
|
37
|
+
{{=<% %>=}}
|
|
38
|
+
<FieldGroup name={propsToUse.showLabel ? propsToUse.label : ''}>
|
|
39
|
+
<Grid container={gridContainer} data-testid={`column-count-${numRegions}`}>
|
|
40
|
+
{children.map((child: any, i: number) => (
|
|
41
|
+
<Flex
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
container={{ direction: 'column', alignItems: 'normal', colGap: 0, rowGap: 1.5 }}
|
|
44
|
+
key={`r-${i + 1}`}
|
|
45
|
+
>
|
|
46
|
+
<DetailsRender child={child} />
|
|
47
|
+
</Flex>
|
|
48
|
+
))}
|
|
49
|
+
</Grid>
|
|
50
|
+
</FieldGroup>
|
|
51
|
+
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
52
|
+
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
29
55
|
return (
|
|
30
56
|
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
31
57
|
{{! pick new delimiters for mustache }}
|
|
@@ -0,0 +1,58 @@
|
|
|
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) => {
|
|
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
|
+
|
|
25
|
+
if (type === 'reference') {
|
|
26
|
+
const refElement = value.getPConnect().getComponent();
|
|
27
|
+
|
|
28
|
+
displayCompArr.push(refElement);
|
|
29
|
+
} else {
|
|
30
|
+
const element = value.getPConnect().getComponent();
|
|
31
|
+
const displayEl = <Fragment key={key}>{element}</Fragment>;
|
|
32
|
+
|
|
33
|
+
const fvlStyle = {
|
|
34
|
+
myColGap: {
|
|
35
|
+
columnGap: '0'
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// const myEl = <div>boo</div>;
|
|
40
|
+
displayComp = (
|
|
41
|
+
<Fragment key={key}>
|
|
42
|
+
<FieldValueList
|
|
43
|
+
style={fvlStyle.myColGap}
|
|
44
|
+
variant={hideLabel ? 'stacked' : variant}
|
|
45
|
+
data-testid={testId}
|
|
46
|
+
fields={[{ id: '1', name: hideLabel ? '' : label, value: displayEl }]}
|
|
47
|
+
/>
|
|
48
|
+
</Fragment>
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
displayCompArr.push(displayComp);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
return <>{displayCompArr}</>;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default DetailsRender;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Grid, Flex, FieldGroup, withConfiguration } from '@pega/cosmos-react-core';
|
|
2
2
|
|
|
3
3
|
import type { PConnFieldProps } from './PConnProps';
|
|
4
|
+
import DetailsRender from './DetailsRender';
|
|
4
5
|
|
|
5
6
|
import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
|
|
6
7
|
|
|
@@ -11,14 +12,12 @@ interface {{COMPONENT_CLASS_NAME}}Props extends PConnFieldProps {
|
|
|
11
12
|
children: any;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
|
-
// Duplicated runtime code from Constellation Design System Component
|
|
15
|
-
|
|
16
15
|
// props passed in combination of props from property panel (config.json) and run time props from Constellation
|
|
17
16
|
// any default values in config.pros should be set in defaultProps at bottom of this file
|
|
18
17
|
function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
19
18
|
|
|
20
19
|
|
|
21
|
-
const { children = [], label, showLabel, getPConnect } = props;
|
|
20
|
+
const { children = [], label, showLabel, getPConnect, readOnly, displayMode } = props;
|
|
22
21
|
const propsToUse = { label, showLabel, ...getPConnect().getInheritedProps() };
|
|
23
22
|
|
|
24
23
|
const numRegions = children?.length;
|
|
@@ -33,10 +32,33 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
|
33
32
|
// @ts-ignore
|
|
34
33
|
flexContainer.gap = 2;
|
|
35
34
|
|
|
35
|
+
if (readOnly && readOnly === true && displayMode && displayMode === 'DISPLAY_ONLY') {
|
|
36
|
+
return (
|
|
37
|
+
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
38
|
+
{{! pick new delimiters for mustache }}
|
|
39
|
+
{{=<% %>=}}
|
|
40
|
+
<FieldGroup name={propsToUse.showLabel ? propsToUse.label : ''}>
|
|
41
|
+
<Grid container={gridContainer} data-testid={`column-count-${numRegions}`}>
|
|
42
|
+
{children.map((child: any, i: number) => (
|
|
43
|
+
<Flex
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
container={{ direction: 'column', alignItems: 'normal', colGap: 0, rowGap: 1.5 }}
|
|
46
|
+
key={`r-${i + 1}`}
|
|
47
|
+
>
|
|
48
|
+
<DetailsRender child={child} />
|
|
49
|
+
</Flex>
|
|
50
|
+
))}
|
|
51
|
+
</Grid>
|
|
52
|
+
</FieldGroup>
|
|
53
|
+
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
54
|
+
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
36
58
|
return (
|
|
37
59
|
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
38
|
-
|
|
39
|
-
|
|
60
|
+
{{! pick new delimiters for mustache }}
|
|
61
|
+
{{=<% %>=}}
|
|
40
62
|
<FieldGroup name={propsToUse.showLabel ? propsToUse.label : ''}>
|
|
41
63
|
<Grid container={gridContainer}>
|
|
42
64
|
{children.map((child: any, i: number) => (
|
|
@@ -47,7 +69,7 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
|
|
|
47
69
|
))}
|
|
48
70
|
</Grid>
|
|
49
71
|
</FieldGroup>
|
|
50
|
-
|
|
72
|
+
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
51
73
|
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
52
74
|
);
|
|
53
75
|
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
71
|
"@pega/configs": "^0.6.0",
|
|
72
|
-
"@pega/custom-dx-components": "0.24.
|
|
72
|
+
"@pega/custom-dx-components": "0.24.5",
|
|
73
73
|
"@pega/pcore-pconnect-typedefs": "~2.1.1",
|
|
74
74
|
"@storybook/addon-actions": "^7.6.7",
|
|
75
75
|
"@storybook/addon-essentials": "^7.6.7",
|