@pega/custom-dx-components 0.24.14 → 0.24.16

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 (54) hide show
  1. package/package.json +1 -1
  2. package/src/tasks/create/templates/Constellation/Field/Icon-Button-URL/demo.stories.tsx.mustache +5 -0
  3. package/src/tasks/create/templates/Constellation/Field/Icon-Button-URL/index.tsx.mustache +26 -15
  4. package/src/tasks/create/templates/Constellation/Template/DETAILS/Avatar.tsx.mustache +78 -0
  5. package/src/tasks/create/templates/Constellation/Template/DETAILS/Operator.tsx.mustache +218 -0
  6. package/src/tasks/create/templates/Constellation/Template/DETAILS/demo.stories.tsx.mustache +47 -13
  7. package/src/tasks/create/templates/Constellation/Template/DETAILS/index.tsx.mustache +2 -2
  8. package/src/tasks/create/templates/Constellation/Template/DETAILS/mock.ts.mustache +69 -10
  9. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/Avatar.tsx.mustache +78 -0
  10. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/Operator.tsx.mustache +218 -0
  11. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/demo.stories.tsx.mustache +46 -12
  12. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/index.tsx.mustache +2 -2
  13. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/mock.ts.mustache +55 -0
  14. package/src/tasks/create/templates/Constellation/Template/FORM/index.tsx.mustache +1 -1
  15. package/src/tasks/create/templates/Constellation/Template/FORM-region/index.tsx.mustache +2 -2
  16. package/src/tasks/create/templates/Constellation/Widget/PAGE/demo.stories.tsx.mustache +29 -22
  17. package/src/tasks/create/templates/Constellation/Widget/PAGE/index.tsx.mustache +34 -20
  18. package/src/tasks/create/templates/Launchpad/Field/Icon-Button-URL/demo.stories.tsx.mustache +5 -0
  19. package/src/tasks/create/templates/Launchpad/Field/Icon-Button-URL/index.tsx.mustache +30 -17
  20. package/src/tasks/create/templates/Launchpad/Widget/PAGE/demo.stories.tsx.mustache +30 -22
  21. package/src/tasks/create/templates/Launchpad/Widget/PAGE/index.tsx.mustache +34 -20
  22. package/src/tasks/init/template/package.json.mustache +1 -1
  23. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/Avatar.tsx +78 -0
  24. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/Operator.tsx +215 -0
  25. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/demo.stories.tsx +47 -13
  26. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/index.tsx +2 -2
  27. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyDetails/mock.ts +69 -10
  28. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyForm/index.tsx +1 -1
  29. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyIconButtonURL/demo.stories.tsx +5 -0
  30. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyIconButtonURL/index.tsx +26 -15
  31. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyPageWidget/demo.stories.tsx +29 -22
  32. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyPageWidget/index.tsx +34 -20
  33. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/Avatar.tsx +78 -0
  34. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/Operator.tsx +215 -0
  35. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/demo.stories.tsx +46 -12
  36. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/index.tsx +2 -2
  37. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnDetails/mock.ts +55 -0
  38. package/tests/assets/components/createAll/Constellation/Pega_DXIL_MyTwoColumnForm/index.tsx +2 -2
  39. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/Avatar.tsx +78 -0
  40. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/Operator.tsx +215 -0
  41. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/demo.stories.tsx +47 -13
  42. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/index.tsx +2 -2
  43. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyDetails/mock.ts +69 -10
  44. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyForm/index.tsx +1 -1
  45. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyIconButtonURL/demo.stories.tsx +5 -0
  46. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyIconButtonURL/index.tsx +30 -17
  47. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyPageWidget/demo.stories.tsx +30 -22
  48. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyPageWidget/index.tsx +34 -20
  49. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/Avatar.tsx +78 -0
  50. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/Operator.tsx +215 -0
  51. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/demo.stories.tsx +46 -12
  52. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/index.tsx +2 -2
  53. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnDetails/mock.ts +55 -0
  54. package/tests/assets/components/createAll/Launchpad/Pega_DXIL_MyTwoColumnForm/index.tsx +2 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pega/custom-dx-components",
3
- "version": "0.24.14",
3
+ "version": "0.24.16",
4
4
  "description": "Utility for building custom UI components",
5
5
  "bin": "./bin/index.js",
6
6
  "scripts": {
@@ -38,6 +38,11 @@ const statelistData = {
38
38
 
39
39
  window.PCore.getDataPageUtils = () => {
40
40
  return {
41
+ getData: () => {
42
+ return new Promise(resolve => {
43
+ resolve(statelistData);
44
+ });
45
+ },
41
46
  getDataAsync: () => {
42
47
  return new Promise(resolve => {
43
48
  resolve(statelistData);
@@ -65,8 +65,11 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
65
65
  const { value, displayMode, countryCode = 'USA', getPConnect, testId } = props;
66
66
  const [statelist, setStatelist] = useState([]);
67
67
  const [showTable, setShowTable] = useState(false);
68
+ const [isLoading, setIsLoading] = useState(true);
68
69
  const [validUrl, setValidUrl] = useState('about:blank');
69
70
  const PConnect = getPConnect();
71
+ const dataViewName = 'D_pyStateList';
72
+ const context = PConnect.getContextName();
70
73
 
71
74
  // IMPORTANT: need to register icons used in camel case
72
75
  registerIcon(listNumber, arrowRight, globe);
@@ -111,8 +114,6 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
111
114
  // get data from a data page and a PConnect function
112
115
  // to get getContextName
113
116
  useEffect(() => {
114
- const dataViewName = 'D_pyStateList';
115
- const context = PConnect.getContextName();
116
117
  const params = { pyCountry: countryCode };
117
118
 
118
119
  // only retrieve table data if table is shown
@@ -121,25 +122,33 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
121
122
  .getDataAsync(dataViewName, context, params, null, null)
122
123
  // @ts-ignore
123
124
  .then((response: any) => {
125
+ setIsLoading(false);
124
126
  // table requires an index or will get setExtraStackFrame error
125
- setStatelist(
126
- response.data.map((entry: any, index: number) => {
127
- // mapping the data into the column names
128
- // MUST have an id/index or will get a setExtraStackFrame error
129
- // put a key in the table
130
- return {
131
- stateName: entry.pyLabel,
132
- stateCode: entry.pyStateCode,
133
- id: index
134
- };
135
- })
136
- );
127
+ if (response.data !== null) {
128
+ setStatelist(
129
+ response.data.map((entry: any, index: number) => {
130
+ // mapping the data into the column names
131
+ // MUST have an id/index or will get a setExtraStackFrame error
132
+ // put a key in the table
133
+ return {
134
+ stateName: entry.pyLabel,
135
+ stateCode: entry.pyStateCode,
136
+ id: index
137
+ };
138
+ })
139
+ );
140
+ } else {
141
+ setStatelist([]);
142
+ setIsLoading(false);
143
+ }
137
144
  })
138
145
  .catch((error: any) => {
146
+ setStatelist([]);
147
+ setIsLoading(false);
139
148
  console.log(error);
140
149
  });
141
150
  }
142
- }, [PConnect, countryCode, showTable]);
151
+ }, [context, countryCode, showTable]);
143
152
 
144
153
  // when DISPLAY_ONLY, in this example we will just show the URL.
145
154
  if (displayMode === 'DISPLAY_ONLY') {
@@ -196,6 +205,8 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
196
205
  title={PConnect.getLocalizedValue('State list', '', '')}
197
206
  columns={columns}
198
207
  data={statelist}
208
+ loading={isLoading}
209
+ loadingMessage={PConnect.getLocalizedValue('Loading state list', '', '')}
199
210
  />
200
211
  )}
201
212
  <%={{ }}=%> {{! revert delimiters for mustache }}
@@ -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);
@@ -0,0 +1,218 @@
1
+ // @ts-nocheck
2
+ import { useState, useEffect, Fragment } from 'react';
3
+ import {
4
+ Link,
5
+ Button,
6
+ Popover,
7
+ useOuterEvent,
8
+ useElement,
9
+ Progress,
10
+ FormField,
11
+ useTheme,
12
+ withConfiguration
13
+ } from '@pega/cosmos-react-core';
14
+ import { Glimpse } from '@pega/cosmos-react-work';
15
+ import { EmailDisplay } from '@pega/cosmos-react-core';
16
+
17
+ import type { PConnFieldProps } from './PConnProps';
18
+
19
+ import Avatar from './Avatar';
20
+
21
+
22
+ // interface for props
23
+ interface {{COMPONENT_CLASS_NAME}}OperatorProps extends PConnFieldProps {
24
+ // If any, enter additional props that only exist on TextInput here
25
+ name: string;
26
+ id: string;
27
+ label: string;
28
+ metaObj: any;
29
+ externalUser: any;
30
+ }
31
+
32
+ let pTarget = null;
33
+
34
+ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
35
+ const { id, name, label, testId, helperText, externalUser, metaObj } = props;
36
+ const [isOpen, setIsOpen] = useState(false);
37
+ const [isLoading, setIsLoading] = useState(true);
38
+ const [popoverEl, setPopoverEl] = useElement(null);
39
+ const [popoverContent, setpopoverContent] = useState(null);
40
+ const theme: any = useTheme();
41
+
42
+ /* If the id has changed, we need to reset the popover */
43
+ useEffect(() => {
44
+ pTarget = null;
45
+ }, [id]);
46
+
47
+
48
+ {{! pick new delimiters for mustache }}
49
+ {{=<% %>=}}
50
+
51
+ const OperatorPreview = () => {
52
+ const localizedVal = PCore.getLocaleUtils().getLocaleValue;
53
+ const localeCategory = 'Operator';
54
+ setpopoverContent(
55
+ <Progress variant='ring' message={localizedVal('Loading operator...', localeCategory)} placement='local' />
56
+ );
57
+ if (externalUser && externalUser.classID !== 'Data-Party-Operator') {
58
+ const fields = [
59
+ {
60
+ id: 'pyFirstName',
61
+ name: localizedVal('Name', localeCategory),
62
+ value: externalUser.name
63
+ },
64
+ {
65
+ id: 'pyEmail1',
66
+ name: localizedVal('Email', localeCategory),
67
+ value:
68
+ externalUser.email !== '' ? <Link href={`mailto:${externalUser.email}`}>{externalUser.email}</Link> : ''
69
+ },
70
+ {
71
+ id: 'pyPhoneNumber',
72
+ name: localizedVal('Phone', localeCategory),
73
+ value: externalUser.phone !== '' ? <Link href={`tel:${externalUser.phone}`}>{externalUser.phone}</Link> : ''
74
+ }
75
+ ];
76
+ setIsLoading(false);
77
+ setpopoverContent(
78
+ <Glimpse
79
+ visual={
80
+ <Avatar
81
+ metaObj={{
82
+ name: externalUser.name
83
+ }}
84
+ />
85
+ }
86
+ primary={externalUser.name}
87
+ secondary={[externalUser.position]}
88
+ fields={fields}
89
+ target={pTarget}
90
+ />
91
+ );
92
+ } else {
93
+ return PCore.getUserApi()
94
+ .getOperatorDetails(id, true)
95
+ .then(res => {
96
+ if (res.data?.pyOperatorInfo) {
97
+ const fields = [];
98
+ const data = res.data;
99
+ if (data.pyOperatorInfo && data.pyOperatorInfo.pyUserName) {
100
+ fields.push({
101
+ id: 'Name',
102
+ name: localizedVal('Name', localeCategory),
103
+ value: data.pyOperatorInfo.pyUserName
104
+ });
105
+ }
106
+ if (data.pyOperatorInfo && data.pyOperatorInfo.pyEmailAddress) {
107
+ fields.push({
108
+ id: 'Email',
109
+ name: localizedVal('Email address', localeCategory),
110
+ value: <EmailDisplay value={data.pyOperatorInfo.pyEmailAddress} />
111
+ });
112
+ }
113
+ const opAvatar = (
114
+ <Avatar
115
+ metaObj={{
116
+ image: '',
117
+ name: data.pyOperatorInfo.pyUserName
118
+ }}
119
+ />
120
+ );
121
+
122
+ setIsLoading(false);
123
+ setpopoverContent(
124
+ <Glimpse
125
+ heading={{
126
+ primary: data.pyOperatorInfo.pyUserName,
127
+ secondary: data.pyOperatorInfo.pyEmailAddress,
128
+ visual: opAvatar
129
+ }}
130
+ fields={fields}
131
+ target={pTarget}
132
+ onDismiss={() => {pTarget = null;}}
133
+ />
134
+ );
135
+ }
136
+ });
137
+ }
138
+ };
139
+
140
+ <%={{ }}=%> {{! revert delimiters for mustache }}
141
+
142
+ const clickAction = (e: any) => {
143
+
144
+ setIsOpen(!isOpen);
145
+ if (pTarget === null) {
146
+ pTarget = e.currentTarget;
147
+ OperatorPreview();
148
+ }
149
+ };
150
+
151
+ const hidePopover = () => {
152
+ if (isOpen) {
153
+ setIsOpen(false);
154
+ }
155
+ };
156
+
157
+ useOuterEvent('mousedown', [popoverEl], hidePopover); // Call the method on clicking outside these elements
158
+
159
+ const hideOnEscape = (e: any) => {
160
+ if (e.key === 'Escape') hidePopover(); // Call the method when Escape key is pressed
161
+ };
162
+
163
+ const comp = (
164
+ <Fragment>
165
+ {metaObj ? (
166
+ <Button
167
+ variant='text'
168
+ aria-haspopup
169
+ aria-expanded={isOpen}
170
+ onClick={clickAction}
171
+ onKeyDown={hideOnEscape}
172
+ data-test-id={testId}
173
+ style={label !== null ? { width: 'max-content', height: theme.components.input.height } : undefined}
174
+ >
175
+ <Avatar {...props} />
176
+ </Button>
177
+ ) : (
178
+ <Button
179
+ variant='link'
180
+ aria-haspopup
181
+ aria-expanded={isOpen}
182
+ onClick={clickAction}
183
+ onKeyDown={hideOnEscape}
184
+ data-test-id={testId}
185
+ style={label !== null ? { width: 'max-content', height: theme.components.input.height } : undefined}
186
+ >
187
+ {name}
188
+ </Button>
189
+ )}
190
+
191
+ {isOpen && (
192
+ <Popover
193
+ ref={setPopoverEl}
194
+ groupId='operator'
195
+ target={pTarget}
196
+ placement='bottom-start'
197
+ style={isLoading ? { position: 'relative', width: '10rem', minHeight: '4rem' } : undefined}
198
+ strategy='fixed'
199
+ >
200
+ {popoverContent}
201
+ </Popover>
202
+ )}
203
+ </Fragment>
204
+ );
205
+
206
+ if (label !== null) {
207
+ return (
208
+ <FormField label={label} info={helperText}>
209
+ {comp}
210
+ </FormField>
211
+ );
212
+ }
213
+
214
+ return comp;
215
+ };
216
+
217
+
218
+ export default withConfiguration(Operator);
@@ -4,9 +4,9 @@
4
4
  import type { Meta, StoryObj } from '@storybook/react';
5
5
  import { Text, FieldValueList, Button, DateTimeDisplay, useTheme } from '@pega/cosmos-react-core';
6
6
  import {{COMPONENT_CLASS_NAME}} from './index';
7
- import { pyReviewRaw, pyReviewResolved, regionChildrenResolved } from './mock';
7
+ import { pyReviewRaw, pyReviewResolved, regionChildrenResolved, operatorDetails, configProps } from './mock';
8
8
  import StatusWorkRenderer from './StatusWork';
9
-
9
+ import Operator from './Operator';
10
10
 
11
11
  const meta: Meta<typeof {{COMPONENT_CLASS_NAME}}> = {
12
12
  title: '{{COMPONENT_CLASS_NAME}}',
@@ -20,10 +20,33 @@ const meta: Meta<typeof {{COMPONENT_CLASS_NAME}}> = {
20
20
  export default meta;
21
21
  type Story = StoryObj<typeof {{COMPONENT_CLASS_NAME}}>;
22
22
 
23
+ if (!window.PCore) {
24
+ window.PCore = {};
25
+ }
26
+
27
+ window.PCore.getLocaleUtils = () => {
28
+ return {
29
+ getLocaleValue: value => {
30
+ return value;
31
+ }
32
+ };
33
+ };
34
+
35
+ window.PCore.getUserApi = () => {
36
+ return {
37
+ getOperatorDetails: () => {
38
+ return new Promise(resolve => {
39
+ resolve(operatorDetails);
40
+ });
41
+ }
42
+ };
43
+ };
44
+
23
45
  const Region = props => {
24
46
  return <></>;
25
47
  };
26
48
 
49
+
27
50
  const renderField = resolvedProps => {
28
51
  const {
29
52
  displayAsStatus = false,
@@ -59,19 +82,30 @@ const renderField = resolvedProps => {
59
82
 
60
83
  if (displayAsStatus === true) val = <StatusWorkRenderer value={value} key={key} />;
61
84
 
85
+ const [_label] =
86
+ label === 'Create operator'
87
+ ? [configProps.createLabel, configProps.createOperator, configProps.createDateTime]
88
+ : label === 'Update operator'
89
+ ? [configProps.updateLabel, configProps.updateOperator, configProps.updateDateTime]
90
+ : [configProps.resolveLabel, configProps.resolveOperator, configProps.resolveDateTime];
91
+
62
92
  if (label === 'Create Operator')
63
93
  val = (
64
- <Button
65
- key={key}
66
- variant='link'
67
- style={
68
- label !== null
69
- ? { width: 'max-content', height: theme.components.input.height }
70
- : undefined
71
- }
72
- >
73
- {value.userName}
74
- </Button>
94
+ <Operator
95
+ label={configProps.hideLabel ? '' : _label}
96
+ name={configProps.createOperator.userName}
97
+ id={configProps.createOperator.userId}
98
+ value={undefined}
99
+ validatemessage=''
100
+ hideLabel={false}
101
+ readOnly={false}
102
+ required={false}
103
+ disabled={false}
104
+ externalUser={undefined}
105
+ metaObj={undefined}
106
+ testId=''
107
+ helperText=''
108
+ />
75
109
  );
76
110
 
77
111
  if (variant === 'inline') {
@@ -41,7 +41,7 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
41
41
  const numRegions = getAllFields(getPConnect)?.length;
42
42
  const gridRepeat = "repeat(".concat(numRegions).concat(", 1fr)");
43
43
 
44
- const gridContainer: GridContainerProps = { colGap: 0 };
44
+ const gridContainer: GridContainerProps = { colGap: 6 };
45
45
  gridContainer.cols = gridRepeat;
46
46
  gridContainer.alignItems = 'start';
47
47
 
@@ -84,7 +84,7 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
84
84
 
85
85
  <Flex
86
86
  // @ts-ignore
87
- container={{ direction: 'column', alignItems: 'normal', colGap: 0, rowGap: 1.5 }}
87
+ container={{ direction: 'column', alignItems: 'normal', colGap: 1, rowGap: 1.5 }}
88
88
  key={`r-${i + 1}`}
89
89
  >
90
90
  <DetailsRender child={child} />
@@ -1,5 +1,4 @@
1
1
 
2
-
3
2
  // @ts-nocheck
4
3
  export const pyReviewRaw = {
5
4
  name: 'pyReview',
@@ -18,6 +17,7 @@ export const pyReviewRaw = {
18
17
  value: '@P .pyStatusWork',
19
18
  label: '@L Work Status',
20
19
  hideLabel: true,
20
+ displayMode: 'STACKED_LARGE_VAL',
21
21
  displayAsStatus: true,
22
22
  key: 'pyStatusWork'
23
23
  }
@@ -28,6 +28,7 @@ export const pyReviewRaw = {
28
28
  value: '@P .pyID',
29
29
  label: '@L Case ID',
30
30
  hideLabel: true,
31
+ displayMode: 'STACKED_LARGE_VAL',
31
32
  key: 'pyID'
32
33
  }
33
34
  },
@@ -37,6 +38,7 @@ export const pyReviewRaw = {
37
38
  value: '@P .pxCreateDateTime',
38
39
  label: '@L Create date/time',
39
40
  hideLabel: true,
41
+ displayMode: 'STACKED_LARGE_VAL',
40
42
  key: 'pxCreateDateTime'
41
43
  }
42
44
  },
@@ -47,6 +49,7 @@ export const pyReviewRaw = {
47
49
  hideLabel: true,
48
50
  value: '@USER .pxCreateOperator',
49
51
  placeholder: 'Select...',
52
+ displayMode: 'STACKED_LARGE_VAL',
50
53
  key: 'pxCreateOperator'
51
54
  }
52
55
  }
@@ -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
- key: '1'
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
- key: '2'
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
- key: '3'
103
+ datasource: '@ASSOCIATED .pySLAStartTime',
104
+ key: 'pySLAStartTime'
105
+ }
102
106
  }
103
107
  ]
104
108
  }
@@ -189,3 +193,58 @@ export const regionChildrenResolved = [
189
193
  key: 'SLA Start Time'
190
194
  }
191
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
+ };