@pega/custom-dx-components 0.24.12 → 0.24.13

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 (53) hide show
  1. package/package.json +1 -1
  2. package/src/tasks/build-all/helper.js +6 -0
  3. package/src/tasks/build-comp/helper.js +8 -0
  4. package/src/tasks/create/templates/Constellation/Template/DETAILS/{DetailsRender.tsx → DetailsRender.tsx.mustache} +7 -10
  5. package/src/tasks/create/templates/Constellation/Template/DETAILS/{HighlightRender.tsx → HighlightRender.tsx.mustache} +12 -13
  6. package/src/tasks/create/templates/Constellation/Template/DETAILS/demo.stories.tsx.mustache +27 -7
  7. package/src/tasks/create/templates/Constellation/Template/DETAILS/index.tsx.mustache +26 -33
  8. package/src/tasks/create/templates/Constellation/Template/DETAILS/mock.ts.mustache +4 -0
  9. package/src/tasks/create/templates/Constellation/Template/DETAILS/styles.ts.mustache +16 -0
  10. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/{DetailsRender.tsx → DetailsRender.tsx.mustache} +7 -10
  11. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/{HighlightRender.tsx → HighlightRender.tsx.mustache} +12 -13
  12. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/demo.stories.tsx.mustache +45 -10
  13. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/index.tsx.mustache +19 -41
  14. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/mock.ts.mustache +4 -0
  15. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/styles.ts.mustache +15 -0
  16. package/src/tasks/create/templates/Constellation/Template/PAGE/localizations.json.mustache +4 -2
  17. package/src/tasks/create/templates/Constellation/Widget/PAGE/demo.stories.tsx.mustache +5 -5
  18. package/src/tasks/create/templates/Constellation/Widget/PAGE/index.tsx.mustache +1 -1
  19. package/src/tasks/create/templates/Launchpad/Widget/PAGE/demo.stories.tsx.mustache +1 -1
  20. package/src/tasks/create/templates/Launchpad/Widget/PAGE/index.tsx.mustache +1 -1
  21. package/src/tasks/init/template/package.json.mustache +1 -1
  22. package/src/tasks/publish/helper.js +6 -0
  23. package/src/tasks/publish-all/helper.js +6 -0
  24. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/DetailsRender.tsx +4 -10
  25. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/HighlightRender.tsx +9 -13
  26. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/demo.stories.tsx +27 -7
  27. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/index.tsx +26 -33
  28. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/mock.ts +4 -0
  29. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/styles.ts +16 -0
  30. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyPage/localizations.json +4 -2
  31. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyPageWidget/demo.stories.tsx +5 -5
  32. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyPageWidget/index.tsx +1 -1
  33. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/DetailsRender.tsx +4 -10
  34. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/HighlightRender.tsx +9 -13
  35. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/demo.stories.tsx +45 -10
  36. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/index.tsx +19 -41
  37. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/mock.ts +4 -0
  38. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/styles.ts +15 -0
  39. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/DetailsRender.tsx +4 -10
  40. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/HighlightRender.tsx +9 -13
  41. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/demo.stories.tsx +27 -7
  42. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/index.tsx +26 -33
  43. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/mock.ts +4 -0
  44. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/styles.ts +16 -0
  45. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyPage/localizations.json +4 -2
  46. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyPageWidget/demo.stories.tsx +1 -1
  47. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyPageWidget/index.tsx +1 -1
  48. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/DetailsRender.tsx +4 -10
  49. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/HighlightRender.tsx +9 -13
  50. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/demo.stories.tsx +45 -10
  51. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/index.tsx +19 -41
  52. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/mock.ts +4 -0
  53. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/styles.ts +15 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pega/custom-dx-components",
3
- "version": "0.24.12",
3
+ "version": "0.24.13",
4
4
  "description": "Utility for building custom UI components",
5
5
  "bin": "./bin/index.js",
6
6
  "scripts": {
@@ -56,11 +56,17 @@ export const zipComponent = async (componentKey) => {
56
56
  const srcDirectory = await getComponentDirectoryPath(componentKey);
57
57
  const buildDirectory = await path.join(path.resolve(), 'dist/components', componentKey);
58
58
  const configJson = `${srcDirectory}/config.json`;
59
+ const localizationJson = `${srcDirectory}/localizations.json`;
59
60
 
60
61
  const zip = new AdmZip();
61
62
 
62
63
  zip.addLocalFolder(srcDirectory, 'src/');
63
64
  zip.addLocalFile(configJson);
65
+
66
+ if (fs.existsSync(localizationJson)) {
67
+ zip.addLocalFile(localizationJson);
68
+ }
69
+
64
70
  zip.addLocalFolder(buildDirectory);
65
71
  const zipContent = zip.toBuffer().toString('base64');
66
72
 
@@ -46,13 +46,21 @@ export const zipComponent = async (componentKey) => {
46
46
  const buildDirectory = await path.join(path.resolve(), 'dist/components', componentKey);
47
47
  const configJson = `${srcDirectory}/config.json`;
48
48
 
49
+ const localizationJson = `${srcDirectory}/localizations.json`;
50
+
49
51
  const zip = new AdmZip();
50
52
 
51
53
  zip.addLocalFolder(srcDirectory, 'src/');
52
54
  zip.addLocalFile(configJson);
55
+
56
+ if (fs.existsSync(localizationJson)) {
57
+ zip.addLocalFile(localizationJson);
58
+ }
59
+
53
60
  zip.addLocalFolder(buildDirectory);
54
61
  const zipContent = zip.toBuffer().toString('base64');
55
62
 
63
+
56
64
  const configContent = Buffer.from(fs.readFileSync(`${srcDirectory}/config.json`)).toString();
57
65
  if (fs.existsSync('dist/components')) {
58
66
  fs.rm('dist/components', { recursive: true }, err => {
@@ -13,7 +13,7 @@ const DetailsRender = (props: DetailsRenderProps) => {
13
13
 
14
14
  const displayCompArr: ReactElement[] = [];
15
15
 
16
- Object.values(kids).forEach((value: any) => {
16
+ Object.values(kids).forEach((value: any, i :number) => {
17
17
  const { type } = value.getPConnect().getRawMetadata();
18
18
  const { hideLabel, variant, testId, label } = value
19
19
  .getPConnect()
@@ -21,6 +21,7 @@ const DetailsRender = (props: DetailsRenderProps) => {
21
21
 
22
22
  let displayComp;
23
23
  const key = JSON.stringify(value.getPConnect());
24
+ const key1 = key.concat(`-${i}`);
24
25
 
25
26
  if (type === 'reference') {
26
27
  const refElement = value.getPConnect().getComponent();
@@ -30,23 +31,19 @@ const DetailsRender = (props: DetailsRenderProps) => {
30
31
  const element = value.getPConnect().getComponent();
31
32
  const displayEl = <Fragment key={key}>{element}</Fragment>;
32
33
 
33
- const fvlStyle = {
34
- myColGap: {
35
- columnGap: '0'
36
- }
37
- };
38
-
39
- // const myEl = <div>boo</div>;
34
+ {{! pick new delimiters for mustache }}
35
+ {{=<% %>=}}
40
36
  displayComp = (
41
- <Fragment key={key}>
37
+ <Fragment key={key1}>
42
38
  <FieldValueList
43
- style={fvlStyle.myColGap}
39
+ style={{ columnGap: '0'}}
44
40
  variant={hideLabel ? 'stacked' : variant}
45
41
  data-testid={testId}
46
42
  fields={[{ id: '1', name: hideLabel ? '' : label, value: displayEl }]}
47
43
  />
48
44
  </Fragment>
49
45
  );
46
+ <%={{ }}=%> {{! revert delimiters for mustache }}
50
47
 
51
48
  displayCompArr.push(displayComp);
52
49
  }
@@ -1,10 +1,14 @@
1
1
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
2
  import React from 'react';
3
3
  import { FieldValueList, Text } from '@pega/cosmos-react-core';
4
+ import type { PConnProps } from './PConnProps';
4
5
 
5
- const HighlightRender = (data: any) => {
6
- const { getPConnect } = data.props;
7
- const { field } = data;
6
+ interface HighlightRenderProps extends PConnProps {
7
+ field?: any;
8
+ }
9
+
10
+ const HighlightRender = (props: HighlightRenderProps) => {
11
+ const { getPConnect, field } = props;
8
12
 
9
13
  field.config['displayMode'] = 'DISPLAY_ONLY';
10
14
 
@@ -16,20 +20,14 @@ const HighlightRender = (data: any) => {
16
20
 
17
21
  const configProps = getPConnect().resolveConfigProps(field.config);
18
22
 
19
- // field.config = configProps;
20
-
23
+ // @ts-ignore
21
24
  const reactField = getPConnect().createComponent(field);
22
- // const reactField = field.getPConnect().getComponent();
23
-
24
- const styles = {
25
- myWidth: {
26
- width: 'auto'
27
- }
28
- };
29
25
 
30
26
  return (
27
+ {{! pick new delimiters for mustache }}
28
+ {{=<% %>=}}
31
29
  <FieldValueList
32
- style={styles.myWidth}
30
+ style={{ width: 'auto' }}
33
31
  variant='stacked'
34
32
  data-testid={field.testId}
35
33
  fields={[
@@ -44,6 +42,7 @@ const HighlightRender = (data: any) => {
44
42
  }
45
43
  ]}
46
44
  />
45
+ <%={{ }}=%> {{! revert delimiters for mustache }}
47
46
  );
48
47
  };
49
48
 
@@ -20,6 +20,10 @@ const meta: Meta<typeof {{COMPONENT_CLASS_NAME}}> = {
20
20
  export default meta;
21
21
  type Story = StoryObj<typeof {{COMPONENT_CLASS_NAME}}>;
22
22
 
23
+ const Region = props => {
24
+ return <></>;
25
+ };
26
+
23
27
  const renderField = resolvedProps => {
24
28
  const {
25
29
  displayAsStatus = false,
@@ -124,20 +128,36 @@ export const Base{{COMPONENT_CLASS_NAME}}: Story = args => {
124
128
  setInheritedProp: () => {
125
129
  /* nothing */
126
130
  },
127
- resolveConfigProps: () => {
128
- /* nothing */
131
+ resolveConfigProps: config => {
132
+ return config;
129
133
  }
130
134
  };
131
135
  }
132
136
  };
133
137
 
134
- const regionAChildren = pyReviewRaw.children[0].children.map(child => {
135
- return props.getPConnect().createComponent(child);
136
- });
137
-
138
138
  return (
139
139
  <>
140
- <{{COMPONENT_CLASS_NAME}} {...props} {...args}>{regionAChildren}</{{COMPONENT_CLASS_NAME}}>
140
+ <{{COMPONENT_CLASS_NAME}} {...props} {...args}>
141
+ <Region
142
+ {...{
143
+ getPConnect: () => ({
144
+ setInheritedProp: () => {},
145
+ getChildren: () =>
146
+ pyReviewRaw.children[0].children.map((child, index) => {
147
+ return {
148
+ getPConnect: () => ({
149
+ getRawMetadata: () => pyReviewRaw.children[0].children[index],
150
+ getConfigProps: () => {},
151
+ resolveConfigProps: () => regionChildrenResolved[index],
152
+ getComponent: config =>
153
+ props.getPConnect().createComponent(pyReviewRaw.children[0].children[index])
154
+ })
155
+ };
156
+ })
157
+ })
158
+ }}
159
+ />
160
+ </{{COMPONENT_CLASS_NAME}}>
141
161
  </>
142
162
  );
143
163
  };
@@ -1,10 +1,10 @@
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
4
  import DetailsRender from './DetailsRender';
5
5
  import HighlightRender from './HighlightRender';
6
6
 
7
- import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
7
+ import Styled{{COMPONENT_CLASS_NAME}}Wrapper, { StyledDetailsGridContainer, StyledHighlightedFieldsHrLine } from './styles';
8
8
 
9
9
  // includes in bundle
10
10
  import { getAllFields } from './utils';
@@ -21,33 +21,30 @@ interface {{COMPONENT_CLASS_NAME}}Props extends PConnFieldProps {
21
21
  // any default values in config.pros should be set in defaultProps at bottom of this file
22
22
  function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
23
23
 
24
- const { getPConnect, children, label, showLabel = true, showHighlightedData = false } = props;
24
+ const { getPConnect, label, showLabel = true, showHighlightedData = false } = props;
25
25
  const propsToUse = { label, showLabel, ...getPConnect().getInheritedProps() };
26
26
 
27
- // update children with readonly
28
- // eslint-disable-next-line guard-for-in
29
- for (const index in children) {
30
- const kid = children[index];
31
- kid.props.getPConnect().setInheritedProp('readOnly', true);
32
- kid.props.getPConnect().setInheritedProp('displayMode', 'DISPLAY_ONLY');
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);
33
31
  }
34
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
+
35
41
  const numRegions = getAllFields(getPConnect)?.length;
36
42
  const gridRepeat = "repeat(".concat(numRegions).concat(", 1fr)");
37
- const gridContainer = { colGap: 0, 'margin-line-start': 0 };
38
- // @ts-ignore
43
+
44
+ const gridContainer: GridContainerProps = { colGap: 0 };
39
45
  gridContainer.cols = gridRepeat;
40
- // @ts-ignore
41
46
  gridContainer.alignItems = 'start';
42
47
 
43
- const gridHighlightContainer = { "gap": 2};
44
- // @ts-ignore
45
- gridHighlightContainer.cols = gridRepeat;
46
- // @ts-ignore
47
- gridHighlightContainer.alignItems = 'flex-start';
48
- // @ts-ignore
49
- gridHighlightContainer.pad = [0, 0, 2, 0];
50
-
51
48
  // Set up highlighted data to pass in return if is set to show, need raw metadata to pass to createComponent
52
49
  let highlightedDataArr = [];
53
50
  if (showHighlightedData) {
@@ -55,17 +52,10 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
55
52
  const { highlightedData = [] } = getPConnect().getRawMetadata().config;
56
53
  // @ts-ignore
57
54
  highlightedDataArr = highlightedData.map((field) => {
58
-
59
- return <HighlightRender field={field} props={props} />;
55
+ return <HighlightRender field={field} getPConnect={props.getPConnect} />;
60
56
  });
61
57
  }
62
58
 
63
- const hrStyle = {
64
- line: {
65
- margin: '0.75rem 0',
66
- opacity: '50%'
67
- }
68
- };
69
59
 
70
60
  return (
71
61
  <Styled{{COMPONENT_CLASS_NAME}}Wrapper>
@@ -79,15 +69,18 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
79
69
  container={{ direction: 'row', alignItems: 'normal', colGap: 10 }}
80
70
  data-testid={`highlighted-column-count-${numRegions}`}
81
71
  >
82
- {highlightedDataArr.map((child: any, i: number) => (
72
+ {highlightedDataArr.map((child: ReactElement, i: number) => (
83
73
  <Fragment key={`hf-${i + 1}`}>{child}</Fragment>
84
74
  ))}
85
75
  </Flex>
86
- <hr style={hrStyle.line} />
76
+ <StyledHighlightedFieldsHrLine />
87
77
  </>
88
78
  )}
89
- <Grid container={gridContainer} data-testid={`column-count-${numRegions}`} >
90
- {children.map((child: any, i: number) => (
79
+ <Grid
80
+ as={StyledDetailsGridContainer}
81
+ container={gridContainer}
82
+ data-testid={`column-count-${numRegions}`} >
83
+ {children.map((child: ReactElement, i: number) => (
91
84
 
92
85
  <Flex
93
86
  // @ts-ignore
@@ -17,6 +17,7 @@ export const pyReviewRaw = {
17
17
  config: {
18
18
  value: '@P .pyStatusWork',
19
19
  label: '@L Work Status',
20
+ hideLabel: false,
20
21
  displayMode: 'STACKED_LARGE_VAL',
21
22
  displayAsStatus: true,
22
23
  key: 'pyStatusWork'
@@ -27,6 +28,7 @@ export const pyReviewRaw = {
27
28
  config: {
28
29
  value: '@P .pyID',
29
30
  label: '@L Case ID',
31
+ hideLabel: false,
30
32
  displayMode: 'STACKED_LARGE_VAL',
31
33
  key: 'pyID'
32
34
  }
@@ -36,6 +38,7 @@ export const pyReviewRaw = {
36
38
  config: {
37
39
  value: '@P .pxCreateDateTime',
38
40
  label: '@L Create date/time',
41
+ hideLabel: false,
39
42
  displayMode: 'STACKED_LARGE_VAL',
40
43
  key: 'pxCreateDateTime'
41
44
  }
@@ -44,6 +47,7 @@ export const pyReviewRaw = {
44
47
  type: 'UserReference',
45
48
  config: {
46
49
  label: '@L Create Operator',
50
+ hideLabel: false,
47
51
  value: '@USER .pxCreateOperator',
48
52
  placeholder: 'Select...',
49
53
  displayMode: 'STACKED_LARGE_VAL',
@@ -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
+ });
@@ -13,7 +13,7 @@ const DetailsRender = (props: DetailsRenderProps) => {
13
13
 
14
14
  const displayCompArr: ReactElement[] = [];
15
15
 
16
- Object.values(kids).forEach((value: any) => {
16
+ Object.values(kids).forEach((value: any, i :number) => {
17
17
  const { type } = value.getPConnect().getRawMetadata();
18
18
  const { hideLabel, variant, testId, label } = value
19
19
  .getPConnect()
@@ -21,6 +21,7 @@ const DetailsRender = (props: DetailsRenderProps) => {
21
21
 
22
22
  let displayComp;
23
23
  const key = JSON.stringify(value.getPConnect());
24
+ const key1 = key.concat(`-${i}`);
24
25
 
25
26
  if (type === 'reference') {
26
27
  const refElement = value.getPConnect().getComponent();
@@ -30,23 +31,19 @@ const DetailsRender = (props: DetailsRenderProps) => {
30
31
  const element = value.getPConnect().getComponent();
31
32
  const displayEl = <Fragment key={key}>{element}</Fragment>;
32
33
 
33
- const fvlStyle = {
34
- myColGap: {
35
- columnGap: '0'
36
- }
37
- };
38
-
39
- // const myEl = <div>boo</div>;
34
+ {{! pick new delimiters for mustache }}
35
+ {{=<% %>=}}
40
36
  displayComp = (
41
- <Fragment key={key}>
37
+ <Fragment key={key1}>
42
38
  <FieldValueList
43
- style={fvlStyle.myColGap}
39
+ style={{ columnGap: '0'}}
44
40
  variant={hideLabel ? 'stacked' : variant}
45
41
  data-testid={testId}
46
42
  fields={[{ id: '1', name: hideLabel ? '' : label, value: displayEl }]}
47
43
  />
48
44
  </Fragment>
49
45
  );
46
+ <%={{ }}=%> {{! revert delimiters for mustache }}
50
47
 
51
48
  displayCompArr.push(displayComp);
52
49
  }
@@ -1,10 +1,14 @@
1
1
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
2
  import React from 'react';
3
3
  import { FieldValueList, Text } from '@pega/cosmos-react-core';
4
+ import type { PConnProps } from './PConnProps';
4
5
 
5
- const HighlightRender = (data: any) => {
6
- const { getPConnect } = data.props;
7
- const { field } = data;
6
+ interface HighlightRenderProps extends PConnProps {
7
+ field?: any;
8
+ }
9
+
10
+ const HighlightRender = (props: HighlightRenderProps) => {
11
+ const { getPConnect, field } = props;
8
12
 
9
13
  field.config['displayMode'] = 'DISPLAY_ONLY';
10
14
 
@@ -16,20 +20,14 @@ const HighlightRender = (data: any) => {
16
20
 
17
21
  const configProps = getPConnect().resolveConfigProps(field.config);
18
22
 
19
- // field.config = configProps;
20
-
23
+ // @ts-ignore
21
24
  const reactField = getPConnect().createComponent(field);
22
- // const reactField = field.getPConnect().getComponent();
23
-
24
- const styles = {
25
- myWidth: {
26
- width: 'auto'
27
- }
28
- };
29
25
 
30
26
  return (
27
+ {{! pick new delimiters for mustache }}
28
+ {{=<% %>=}}
31
29
  <FieldValueList
32
- style={styles.myWidth}
30
+ style={{ width: 'auto' }}
33
31
  variant='stacked'
34
32
  data-testid={field.testId}
35
33
  fields={[
@@ -44,6 +42,7 @@ const HighlightRender = (data: any) => {
44
42
  }
45
43
  ]}
46
44
  />
45
+ <%={{ }}=%> {{! revert delimiters for mustache }}
47
46
  );
48
47
  };
49
48
 
@@ -18,6 +18,11 @@ const meta: Meta<typeof {{COMPONENT_CLASS_NAME}}> = {
18
18
 
19
19
  export default meta;
20
20
  type Story = StoryObj<typeof {{COMPONENT_CLASS_NAME}}>;
21
+
22
+ const Region = props => {
23
+ return <></>;
24
+ };
25
+
21
26
  const renderField = resolvedProps => {
22
27
  const {
23
28
  displayAsStatus = false,
@@ -122,24 +127,54 @@ export const Base{{COMPONENT_CLASS_NAME}}: Story = args => {
122
127
  setInheritedProp: () => {
123
128
  /* nothing */
124
129
  },
125
- resolveConfigProps: () => {
126
- /* nothing */
130
+ resolveConfigProps: config => {
131
+ return config;
127
132
  }
128
133
  };
129
134
  }
130
135
  };
131
136
 
132
- const regionAChildren = pyReviewRaw.children[0].children.map(child => {
133
- return props.getPConnect().createComponent(child);
134
- });
135
- const regionBChildren = pyReviewRaw.children[1].children.map(child => {
136
- return props.getPConnect().createComponent(child);
137
- });
138
137
 
139
138
  return (
140
139
  <{{COMPONENT_CLASS_NAME}} {...props} {...args}>
141
- {regionAChildren}
142
- {regionBChildren}
140
+ <Region
141
+ {...{
142
+ getPConnect: () => ({
143
+ setInheritedProp: () => {},
144
+ getChildren: () =>
145
+ pyReviewRaw.children[0].children.map((child, index) => {
146
+ return {
147
+ getPConnect: () => ({
148
+ getRawMetadata: () => pyReviewRaw.children[0].children[index],
149
+ getConfigProps: () => {},
150
+ resolveConfigProps: () => regionChildrenResolved[index],
151
+ getComponent: config =>
152
+ props.getPConnect().createComponent(pyReviewRaw.children[0].children[index])
153
+ })
154
+ };
155
+ })
156
+ })
157
+ }}
158
+ />
159
+ <Region
160
+ {...{
161
+ getPConnect: () => ({
162
+ setInheritedProp: () => {},
163
+ getChildren: () =>
164
+ pyReviewRaw.children[1].children.map((child, index) => {
165
+ return {
166
+ getPConnect: () => ({
167
+ getRawMetadata: () => pyReviewRaw.children[1].children[index],
168
+ getConfigProps: () => {},
169
+ resolveConfigProps: () => regionChildrenResolved[index],
170
+ getComponent: config =>
171
+ props.getPConnect().createComponent(pyReviewRaw.children[1].children[index])
172
+ })
173
+ };
174
+ })
175
+ })
176
+ }}
177
+ />
143
178
  </{{COMPONENT_CLASS_NAME}}>
144
179
  );
145
180
  };
@@ -1,10 +1,10 @@
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
4
  import DetailsRender from './DetailsRender';
5
5
  import HighlightRender from './HighlightRender';
6
6
 
7
- import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
7
+ import Styled{{COMPONENT_CLASS_NAME}}Wrapper, { StyledDetailsGridContainer, StyledHighlightedFieldsHrLine } from './styles';
8
8
 
9
9
  // includes in bundle
10
10
  import { getAllFields } from './utils';
@@ -14,40 +14,31 @@ interface {{COMPONENT_CLASS_NAME}}Props extends PConnFieldProps {
14
14
  // If any, enter additional props that only exist on TextInput here
15
15
  showLabel: boolean;
16
16
  showHighlightedData: boolean;
17
- children: any;
17
+ children: ReactElement[];
18
18
  }
19
19
 
20
20
  // props passed in combination of props from property panel (config.json) and run time props from Constellation
21
21
  // any default values in config.pros should be set in defaultProps at bottom of this file
22
22
  function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
23
23
 
24
- const { getPConnect, children, label, showLabel = true, showHighlightedData = false } = props;
24
+ const { getPConnect, label, children, showLabel = true, showHighlightedData = false } = props;
25
25
  const propsToUse = { label, showLabel, ...getPConnect().getInheritedProps() };
26
26
 
27
27
  // update children with readonly
28
- // eslint-disable-next-line guard-for-in
29
- for (const index in children) {
30
- const kid = children[index];
31
- kid.props.getPConnect().setInheritedProp('readOnly', true);
32
- kid.props.getPConnect().setInheritedProp('displayMode', 'DISPLAY_ONLY');
33
- }
28
+ Children.toArray(children).forEach(child => {
29
+ // @ts-ignore
30
+ child.props.getPConnect().setInheritedProp('readOnly', true);
31
+ // @ts-ignore
32
+ child.props.getPConnect().setInheritedProp('displayMode', 'DISPLAY_ONLY');
33
+ });
34
34
 
35
35
  const numRegions = getAllFields(getPConnect)?.length;
36
36
  const gridRepeat = "repeat(".concat(numRegions).concat(", 1fr)");
37
- const gridContainer = { colGap: 0, 'margin-line-start': 0 };
38
- // @ts-ignore
37
+
38
+ const gridContainer: GridContainerProps = { colGap: 0 };
39
39
  gridContainer.cols = gridRepeat;
40
- // @ts-ignore
41
40
  gridContainer.alignItems = 'start';
42
41
 
43
- const gridHighlightContainer = { "gap": 2};
44
- // @ts-ignore
45
- gridHighlightContainer.cols = gridRepeat;
46
- // @ts-ignore
47
- gridHighlightContainer.alignItems = 'flex-start';
48
- // @ts-ignore
49
- gridHighlightContainer.pad = [0, 0, 2, 0];
50
-
51
42
  // Set up highlighted data to pass in return if is set to show, need raw metadata to pass to createComponent
52
43
  let highlightedDataArr = [];
53
44
  if (showHighlightedData) {
@@ -55,26 +46,10 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
55
46
  const { highlightedData = [] } = getPConnect().getRawMetadata().config;
56
47
  // @ts-ignore
57
48
  highlightedDataArr = highlightedData.map((field) => {
58
- // field.config.displayMode = 'STACKED_LARGE_VAL';
59
-
60
- // // Mark as status display when using pyStatusWork
61
- // if (field.config.value === '@P .pyStatusWork') {
62
- // field.type = 'TextInput';
63
- // field.config.displayAsStatus = true;
64
- // }
65
- // // @ts-ignore
66
- // return getPConnect().createComponent(field);
67
- return <HighlightRender field={field} props={props} />;
49
+ return <HighlightRender field={field} getPConnect={props.getPConnect} />;
68
50
  });
69
51
  }
70
52
 
71
- const hrStyle = {
72
- line: {
73
- margin: '0.75rem 0',
74
- opacity: '50%'
75
- }
76
- };
77
-
78
53
  return (
79
54
  <Styled{{COMPONENT_CLASS_NAME}}Wrapper>
80
55
  {{! pick new delimiters for mustache }}
@@ -90,10 +65,13 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
90
65
  <Fragment key={`hf-${i + 1}`}>{child}</Fragment>
91
66
  ))}
92
67
  </Flex>
93
- <hr style={hrStyle.line} />
68
+ <StyledHighlightedFieldsHrLine />
94
69
  </>
95
70
  )}
96
- <Grid container={gridContainer} data-testid={`column-count-${numRegions}`} >
71
+ <Grid
72
+ as={StyledDetailsGridContainer}
73
+ container={gridContainer}
74
+ data-testid={`column-count-${numRegions}`} >
97
75
  {children.map((child: any, i: number) => (
98
76
  <Flex
99
77
  // @ts-ignore
@@ -16,6 +16,7 @@ export const pyReviewRaw = {
16
16
  config: {
17
17
  value: '@P .pyStatusWork',
18
18
  label: '@L Work Status',
19
+ hideLabel: false,
19
20
  displayMode: 'STACKED_LARGE_VAL',
20
21
  displayAsStatus: true,
21
22
  key: 'pyStatusWork'
@@ -26,6 +27,7 @@ export const pyReviewRaw = {
26
27
  config: {
27
28
  value: '@P .pyID',
28
29
  label: '@L Case ID',
30
+ hideLabel: false,
29
31
  displayMode: 'STACKED_LARGE_VAL',
30
32
  key: 'pyID'
31
33
  }
@@ -35,6 +37,7 @@ export const pyReviewRaw = {
35
37
  config: {
36
38
  value: '@P .pxCreateDateTime',
37
39
  label: '@L Create date/time',
40
+ hideLabel: false,
38
41
  displayMode: 'STACKED_LARGE_VAL',
39
42
  key: 'pxCreateDateTime'
40
43
  }
@@ -43,6 +46,7 @@ export const pyReviewRaw = {
43
46
  type: 'UserReference',
44
47
  config: {
45
48
  label: '@L Create Operator',
49
+ hideLabel: false,
46
50
  value: '@USER .pxCreateOperator',
47
51
  placeholder: 'Select...',
48
52
  displayMode: 'STACKED_LARGE_VAL',