@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.
Files changed (32) hide show
  1. package/package.json +1 -1
  2. package/src/tasks/bundle/builder/webpack.config.js +15 -1
  3. package/src/tasks/create/templates/Constellation/Field/Text/index.tsx.mustache +94 -4
  4. package/src/tasks/create/templates/Constellation/Template/DETAILS/DetailsRender.tsx +10 -4
  5. package/src/tasks/create/templates/Constellation/Template/DETAILS/index.tsx.mustache +9 -16
  6. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/DetailsRender.tsx +10 -4
  7. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/index.tsx.mustache +6 -5
  8. package/src/tasks/create/templates/Constellation/Template/FORM/DetailsRender.tsx +58 -0
  9. package/src/tasks/create/templates/Constellation/Template/FORM/index.tsx.mustache +31 -5
  10. package/src/tasks/create/templates/Constellation/Template/FORM-region/DetailsRender.tsx +58 -0
  11. package/src/tasks/create/templates/Constellation/Template/FORM-region/index.tsx.mustache +28 -6
  12. package/src/tasks/init/template/package.json.mustache +1 -1
  13. package/src/tasks/init/template/tsconfig.build.json +3 -1
  14. package/tests/assets/components/create/Pega_DXIL_MyTestText/index.tsx +94 -4
  15. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/DetailsRender.tsx +10 -4
  16. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/index.tsx +6 -13
  17. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyForm/DetailsRender.tsx +58 -0
  18. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyForm/index.tsx +28 -5
  19. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyText/index.tsx +94 -4
  20. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/DetailsRender.tsx +10 -4
  21. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/index.tsx +3 -2
  22. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnForm/DetailsRender.tsx +58 -0
  23. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnForm/index.tsx +22 -3
  24. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/DetailsRender.tsx +10 -4
  25. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/index.tsx +6 -13
  26. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyForm/DetailsRender.tsx +58 -0
  27. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyForm/index.tsx +28 -5
  28. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyText/index.tsx +94 -4
  29. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/DetailsRender.tsx +10 -4
  30. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/index.tsx +3 -2
  31. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnForm/DetailsRender.tsx +58 -0
  32. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnForm/index.tsx +22 -3
@@ -1,4 +1,12 @@
1
- import { Input, withConfiguration } from '@pega/cosmos-react-core';
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 StyledPegaDxilMyTestTextWrapper from './styles';
7
15
  // interface for props
8
16
  interface PegaDxilMyTestTextProps 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
- // Duplicated runtime code from Constellation Design System Component
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 PegaDxilMyTestText(props: PegaDxilMyTestTextProps) {
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'>&ndash;&ndash;</span>;
90
+ if (isTableFormatter && formatExists(formatter)) {
91
+ displayComp = textFormatter(formatter, value);
92
+ }
93
+ return displayMode === 'DISPLAY_ONLY' ? (
94
+ <StyledPegaDxilMyTestTextWrapper> {displayComp} </StyledPegaDxilMyTestTextWrapper>
95
+ ) : (
96
+ <StyledPegaDxilMyTestTextWrapper>
97
+ <FieldValueList
98
+ variant={hideLabel ? 'stacked' : variant}
99
+ data-testid={testId}
100
+ fields={[{ id: '1', name: hideLabel ? '' : label, value: displayComp }]}
101
+ />
102
+ </StyledPegaDxilMyTestTextWrapper>
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
+ <StyledPegaDxilMyTestTextWrapper>
117
+ <FieldValueList
118
+ variant='stacked'
119
+ data-testid={testId}
120
+ fields={[{ id: '2', name: hideLabel ? '' : label, value: val }]}
121
+ />
122
+ </StyledPegaDxilMyTestTextWrapper>
123
+ );
124
+ }
125
+
36
126
  return (
37
127
  <StyledPegaDxilMyTestTextWrapper>
38
128
  <Input
@@ -1,11 +1,17 @@
1
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
- import React, { Fragment } from 'react';
1
+ import { Fragment, ReactElement } from 'react';
3
2
  import { FieldValueList } from '@pega/cosmos-react-core';
4
3
 
5
- const DetailsRender = (child: any) => {
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: JSX.Element[] = [];
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 StyledPegaDxilMyDetailsWrapper from './styles';
9
9
  // includes in bundle
10
10
  import { getAllFields } from './utils';
11
11
 
12
-
13
12
  // interface for props
14
13
  interface PegaDxilMyDetailsProps extends PConnFieldProps {
15
14
  // If any, enter additional props that only exist on TextInput here
@@ -56,16 +55,8 @@ function PegaDxilMyDetails(props: PegaDxilMyDetailsProps) {
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
- // // Mark as status display when using pyStatusWork
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
 
@@ -82,7 +73,8 @@ function PegaDxilMyDetails(props: PegaDxilMyDetailsProps) {
82
73
  {showHighlightedData && highlightedDataArr.length > 0 && (
83
74
  <>
84
75
  <Flex
85
- container={{ direction: 'row', alignItems: 'start', colGap: 10 }}
76
+ // @ts-ignore
77
+ container={{ direction: 'row', alignItems: 'normal', colGap: 10 }}
86
78
  data-testid={`highlighted-column-count-${numRegions}`}
87
79
  >
88
80
  {highlightedDataArr.map((child: any, i: number) => (
@@ -94,8 +86,9 @@ function PegaDxilMyDetails(props: PegaDxilMyDetailsProps) {
94
86
  )}
95
87
  <Grid container={gridContainer} data-testid={`column-count-${numRegions}`} >
96
88
  {children.map((child: any, i: number) => (
97
- <Flex container={{ direction: 'column', alignItems: 'start', colGap: 0, rowGap: 1.5 }} key={`r-${i + 1}`}>
98
- <DetailsRender {...child} />
89
+ // @ts-ignore
90
+ <Flex container={{ direction: 'column', alignItems: 'normal', colGap: 0, rowGap: 1.5 }} key={`r-${i + 1}`}>
91
+ <DetailsRender child={child} />
99
92
  </Flex>
100
93
  ))}
101
94
  </Grid>
@@ -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 StyledPegaDxilMyFormWrapper from './styles';
7
8
 
@@ -13,19 +14,41 @@ interface PegaDxilMyFormProps 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 PegaDxilMyForm(props: PegaDxilMyFormProps) {
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
+ <StyledPegaDxilMyFormWrapper>
36
+ <FieldGroup name={propsToUse.showLabel ? propsToUse.label : ''}>
37
+ <Grid container={gridContainer} data-testid={`column-count-${numRegions}`}>
38
+ {children.map((child: any, i: number) => (
39
+ <Flex
40
+ // @ts-ignore
41
+ container={{ direction: 'column', alignItems: 'normal', colGap: 0, rowGap: 1.5 }}
42
+ key={`r-${i + 1}`}
43
+ >
44
+ <DetailsRender child={child} />
45
+ </Flex>
46
+ ))}
47
+ </Grid>
48
+ </FieldGroup>
49
+ </StyledPegaDxilMyFormWrapper>
50
+ );
51
+ }
29
52
  return (
30
53
  <StyledPegaDxilMyFormWrapper>
31
54
  <FieldGroup name={propsToUse.showLabel ? propsToUse.label : ''}>
@@ -1,4 +1,12 @@
1
- import { Input, withConfiguration } from '@pega/cosmos-react-core';
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 StyledPegaDxilMyTextWrapper from './styles';
7
15
  // interface for props
8
16
  interface PegaDxilMyTextProps 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
- // Duplicated runtime code from Constellation Design System Component
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 PegaDxilMyText(props: PegaDxilMyTextProps) {
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'>&ndash;&ndash;</span>;
90
+ if (isTableFormatter && formatExists(formatter)) {
91
+ displayComp = textFormatter(formatter, value);
92
+ }
93
+ return displayMode === 'DISPLAY_ONLY' ? (
94
+ <StyledPegaDxilMyTextWrapper> {displayComp} </StyledPegaDxilMyTextWrapper>
95
+ ) : (
96
+ <StyledPegaDxilMyTextWrapper>
97
+ <FieldValueList
98
+ variant={hideLabel ? 'stacked' : variant}
99
+ data-testid={testId}
100
+ fields={[{ id: '1', name: hideLabel ? '' : label, value: displayComp }]}
101
+ />
102
+ </StyledPegaDxilMyTextWrapper>
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
+ <StyledPegaDxilMyTextWrapper>
117
+ <FieldValueList
118
+ variant='stacked'
119
+ data-testid={testId}
120
+ fields={[{ id: '2', name: hideLabel ? '' : label, value: val }]}
121
+ />
122
+ </StyledPegaDxilMyTextWrapper>
123
+ );
124
+ }
125
+
36
126
  return (
37
127
  <StyledPegaDxilMyTextWrapper>
38
128
  <Input
@@ -1,11 +1,17 @@
1
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
- import React, { Fragment } from 'react';
1
+ import { Fragment, ReactElement } from 'react';
3
2
  import { FieldValueList } from '@pega/cosmos-react-core';
4
3
 
5
- const DetailsRender = (child: any) => {
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: JSX.Element[] = [];
14
+ const displayCompArr: ReactElement[] = [];
9
15
 
10
16
  Object.values(kids).forEach((value: any) => {
11
17
  const { type } = value.getPConnect().getRawMetadata();
@@ -93,8 +93,9 @@ function PegaDxilMyTwoColumnDetails(props: PegaDxilMyTwoColumnDetailsProps) {
93
93
  )}
94
94
  <Grid container={gridContainer} data-testid={`column-count-${numRegions}`} >
95
95
  {children.map((child: any, i: number) => (
96
- <Flex container={{ direction: 'column', alignItems: 'start', colGap: 0, rowGap: 1.5 }} key={`r-${i + 1}`}>
97
- <DetailsRender {...child} />
96
+ // @ts-ignore
97
+ <Flex container={{ direction: 'column', alignItems: 'normal', colGap: 0, rowGap: 1.5 }} key={`r-${i + 1}`}>
98
+ <DetailsRender child={child} />
98
99
  </Flex>
99
100
  ))}
100
101
  </Grid>
@@ -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 StyledPegaDxilMyTwoColumnFormWrapper from './styles';
6
7
 
@@ -11,14 +12,12 @@ interface PegaDxilMyTwoColumnFormProps 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 PegaDxilMyTwoColumnForm(props: PegaDxilMyTwoColumnFormProps) {
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,6 +32,26 @@ function PegaDxilMyTwoColumnForm(props: PegaDxilMyTwoColumnFormProps) {
33
32
  // @ts-ignore
34
33
  flexContainer.gap = 2;
35
34
 
35
+ if (readOnly && readOnly === true && displayMode && displayMode === 'DISPLAY_ONLY') {
36
+ return (
37
+ <StyledPegaDxilMyTwoColumnFormWrapper>
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
+ </StyledPegaDxilMyTwoColumnFormWrapper>
52
+ );
53
+ }
54
+
36
55
  return (
37
56
  <StyledPegaDxilMyTwoColumnFormWrapper>
38
57
  <FieldGroup name={propsToUse.showLabel ? propsToUse.label : ''}>
@@ -1,11 +1,17 @@
1
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
- import React, { Fragment } from 'react';
1
+ import { Fragment, ReactElement } from 'react';
3
2
  import { FieldValueList } from '@pega/cosmos-react-core';
4
3
 
5
- const DetailsRender = (child: any) => {
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: JSX.Element[] = [];
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 StyledPegaDxilMyDetailsWrapper from './styles';
9
9
  // includes in bundle
10
10
  import { getAllFields } from './utils';
11
11
 
12
-
13
12
  // interface for props
14
13
  interface PegaDxilMyDetailsProps extends PConnFieldProps {
15
14
  // If any, enter additional props that only exist on TextInput here
@@ -56,16 +55,8 @@ function PegaDxilMyDetails(props: PegaDxilMyDetailsProps) {
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
- // // Mark as status display when using pyStatusWork
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
 
@@ -82,7 +73,8 @@ function PegaDxilMyDetails(props: PegaDxilMyDetailsProps) {
82
73
  {showHighlightedData && highlightedDataArr.length > 0 && (
83
74
  <>
84
75
  <Flex
85
- container={{ direction: 'row', alignItems: 'start', colGap: 10 }}
76
+ // @ts-ignore
77
+ container={{ direction: 'row', alignItems: 'normal', colGap: 10 }}
86
78
  data-testid={`highlighted-column-count-${numRegions}`}
87
79
  >
88
80
  {highlightedDataArr.map((child: any, i: number) => (
@@ -94,8 +86,9 @@ function PegaDxilMyDetails(props: PegaDxilMyDetailsProps) {
94
86
  )}
95
87
  <Grid container={gridContainer} data-testid={`column-count-${numRegions}`} >
96
88
  {children.map((child: any, i: number) => (
97
- <Flex container={{ direction: 'column', alignItems: 'start', colGap: 0, rowGap: 1.5 }} key={`r-${i + 1}`}>
98
- <DetailsRender {...child} />
89
+ // @ts-ignore
90
+ <Flex container={{ direction: 'column', alignItems: 'normal', colGap: 0, rowGap: 1.5 }} key={`r-${i + 1}`}>
91
+ <DetailsRender child={child} />
99
92
  </Flex>
100
93
  ))}
101
94
  </Grid>