@pega/dx-component-builder-sdk 0.1.7 → 0.1.8

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 (94) hide show
  1. package/package.json +1 -1
  2. package/src/tasks/build/helper.js +1 -1
  3. package/src/tasks/create/index.js +8 -1
  4. package/src/tasks/create/templates/Constellation/Field/Boolean/boolean-format.js.mustache +1 -1
  5. package/src/tasks/create/templates/Constellation/Field/Boolean/demo.stories.jsx.mustache +60 -0
  6. package/src/tasks/create/templates/Constellation/Field/Boolean/index.jsx.mustache +1 -2
  7. package/src/tasks/create/templates/Constellation/Field/Boolean/mock.stories.js.mustache +21 -0
  8. package/src/tasks/create/templates/Constellation/Field/Date/DateFormatter.js.mustache +61 -0
  9. package/src/tasks/create/templates/Constellation/Field/Date/FormattedText.jsx.mustache +41 -0
  10. package/src/tasks/create/templates/Constellation/Field/Date/date.js.mustache +179 -67
  11. package/src/tasks/create/templates/Constellation/Field/Date/demo.stories.jsx.mustache +40 -16
  12. package/src/tasks/create/templates/Constellation/Field/Date/index.jsx.mustache +3 -1
  13. package/src/tasks/create/templates/Constellation/Field/Date/mock.stories.js.mustache +23 -0
  14. package/src/tasks/create/templates/Constellation/Field/DateTime/date-time.js.mustache +0 -1
  15. package/src/tasks/create/templates/Constellation/Field/DateTime/{date-utils.js → date-utils.js.mustache} +1 -0
  16. package/src/tasks/create/templates/Constellation/Field/DateTime/date.js.mustache +1 -0
  17. package/src/tasks/create/templates/Constellation/Field/DateTime/demo.stories.jsx.mustache +40 -15
  18. package/src/tasks/create/templates/Constellation/Field/DateTime/index.jsx.mustache +2 -0
  19. package/src/tasks/create/templates/Constellation/Field/DateTime/mock.stories.js.mustache +23 -0
  20. package/src/tasks/create/templates/Constellation/Field/Decimal/demo.stories.jsx.mustache +22 -17
  21. package/src/tasks/create/templates/Constellation/Field/Decimal/index.jsx.mustache +2 -1
  22. package/src/tasks/create/templates/Constellation/Field/Decimal/mock.stories.js.mustache +21 -0
  23. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/demo.stories.jsx.mustache +25 -17
  24. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/index.jsx.mustache +3 -4
  25. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/mock.stories.js.mustache +23 -0
  26. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/demo.stories.jsx.mustache +22 -17
  27. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/index.jsx.mustache +8 -2
  28. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/mock.stories.js.mustache +21 -0
  29. package/src/tasks/create/templates/Constellation/Field/Integer/demo.stories.jsx.mustache +22 -17
  30. package/src/tasks/create/templates/Constellation/Field/Integer/index.jsx.mustache +2 -1
  31. package/src/tasks/create/templates/Constellation/Field/Integer/mock.stories.js.mustache +21 -0
  32. package/src/tasks/create/templates/Constellation/Field/Picklist/demo.stories.jsx.mustache +42 -14
  33. package/src/tasks/create/templates/Constellation/Field/Picklist/index.jsx.mustache +44 -1
  34. package/src/tasks/create/templates/Constellation/Field/Picklist/mock.stories.js.mustache +67 -0
  35. package/src/tasks/create/templates/Constellation/Field/Text/demo.stories.jsx.mustache +21 -16
  36. package/src/tasks/create/templates/Constellation/Field/Text/mock.stories.js.mustache +13 -0
  37. package/src/tasks/create/templates/Constellation/Field/Text-Email/demo.stories.jsx.mustache +20 -16
  38. package/src/tasks/create/templates/Constellation/Field/Text-Email/index.jsx.mustache +44 -2
  39. package/src/tasks/create/templates/Constellation/Field/Text-Email/mock.stories.js.mustache +22 -0
  40. package/src/tasks/create/templates/Constellation/Field/Text-Input/{StatusWork.js → StatusWork.jsx} +0 -1
  41. package/src/tasks/create/templates/Constellation/Field/Text-Input/demo.stories.jsx.mustache +21 -17
  42. package/src/tasks/create/templates/Constellation/Field/Text-Input/index.jsx.mustache +46 -3
  43. package/src/tasks/create/templates/Constellation/Field/Text-Input/mock.stories.js.mustache +21 -0
  44. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/demo.stories.jsx.mustache +21 -17
  45. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/index.jsx.mustache +44 -2
  46. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/mock.stories.js.mustache +20 -0
  47. package/src/tasks/create/templates/Constellation/Field/Text-Phone/demo.stories.jsx.mustache +19 -17
  48. package/src/tasks/create/templates/Constellation/Field/Text-Phone/index.jsx.mustache +46 -2
  49. package/src/tasks/create/templates/Constellation/Field/Text-Phone/mock.stories.js.mustache +37 -0
  50. package/src/tasks/create/templates/Constellation/Field/Text-URL/demo.stories.jsx.mustache +19 -17
  51. package/src/tasks/create/templates/Constellation/Field/Text-URL/index.jsx.mustache +174 -3
  52. package/src/tasks/create/templates/Constellation/Field/Text-URL/mock.stories.js.mustache +22 -0
  53. package/src/tasks/create/templates/Constellation/Field/TimeofDay/demo.stories.jsx.mustache +24 -16
  54. package/src/tasks/create/templates/Constellation/Field/TimeofDay/mock.stories.js.mustache +20 -0
  55. package/src/tasks/create/templates/Constellation/Field/TimeofDay/time-of-day.js.mustache +1 -0
  56. package/src/tasks/create/templates/Constellation/Template/DETAILS/StatusWork.jsx.mustache +26 -0
  57. package/src/tasks/create/templates/Constellation/Template/DETAILS/demo.stories.jsx.mustache +110 -0
  58. package/src/tasks/create/templates/Constellation/Template/DETAILS/index.jsx.mustache +3 -5
  59. package/src/tasks/create/templates/Constellation/Template/DETAILS/mock.stories.js.mustache +179 -0
  60. package/src/tasks/create/templates/Constellation/Template/DETAILS/utils.js.mustache +3 -6
  61. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/StatusWork.jsx.mustache +26 -0
  62. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/demo.stories.jsx.mustache +118 -0
  63. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/index.jsx.mustache +3 -5
  64. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/mock.stories.js.mustache +215 -0
  65. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/utils.js.mustache +3 -3
  66. package/src/tasks/create/templates/Constellation/Template/FORM/demo.stories.jsx.mustache +89 -0
  67. package/src/tasks/create/templates/Constellation/Template/FORM/index.jsx.mustache +6 -10
  68. package/src/tasks/create/templates/Constellation/Template/FORM/mock.stories.js.mustache +125 -0
  69. package/src/tasks/create/templates/Constellation/Template/FORM-region/demo.stories.jsx.mustache +100 -0
  70. package/src/tasks/create/templates/Constellation/Template/FORM-region/index.jsx.mustache +5 -11
  71. package/src/tasks/create/templates/Constellation/Template/FORM-region/mock.stories.js.mustache +131 -0
  72. package/src/tasks/create/templates/Constellation/Template/PAGE/{GetNextWork.js.mustache → GetNextWork.jsx.mustache} +6 -0
  73. package/src/tasks/create/templates/Constellation/Template/PAGE/demo.stories.jsx.mustache +102 -0
  74. package/src/tasks/create/templates/Constellation/Template/PAGE/index.jsx.mustache +9 -7
  75. package/src/tasks/create/templates/Constellation/Template/PAGE/mock.stories.js.mustache +94 -0
  76. package/src/tasks/create/templates/Constellation/Template/PAGE/utils.js.mustache +4 -1
  77. package/src/tasks/create/templates/Constellation/Widget/CASE/demo.stories.jsx.mustache +78 -0
  78. package/src/tasks/create/templates/Constellation/Widget/CASE/index.jsx.mustache +1 -0
  79. package/src/tasks/create/templates/Constellation/Widget/CASE/mock.stories.js.mustache +389 -0
  80. package/src/tasks/create/templates/Constellation/Widget/PAGE/demo.stories.jsx.mustache +30 -0
  81. package/src/tasks/create/templates/Constellation/Widget/PAGE/mock.stories.js.mustache +22 -0
  82. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/{Avatar.js.mustache → Avatar.jsx.mustache} +2 -0
  83. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/{Operator.js.mustache → Operator.jsx.mustache} +2 -1
  84. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/demo.stories.jsx.mustache +68 -0
  85. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/index.jsx.mustache +9 -9
  86. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/mock.stories.js.mustache +51 -0
  87. package/src/tasks/map/map.js +0 -7
  88. package/src/tasks/override/index.js +38 -9
  89. package/src/tasks/create/templates/Constellation/Field/Picklist/picklist.js.mustache +0 -43
  90. package/src/tasks/create/templates/Constellation/Field/Text-Email/text-email.js.mustache +0 -43
  91. package/src/tasks/create/templates/Constellation/Field/Text-Input/text-input.js.mustache +0 -43
  92. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/text-paragraph.js.mustache +0 -43
  93. package/src/tasks/create/templates/Constellation/Field/Text-Phone/text-phone.js.mustache +0 -43
  94. package/src/tasks/create/templates/Constellation/Field/Text-URL/text-url.js.mustache +0 -172
@@ -0,0 +1,20 @@
1
+ export const configProps = {
2
+ value: '',
3
+ label: 'Paragraph Sample',
4
+ placeholder: 'Paragraph Placeholder',
5
+ helperText: 'Paragraph Helper Text',
6
+ testId: 'paragraph-12345678',
7
+ hasSuggestions: false
8
+ };
9
+
10
+ export const fieldMetadata = {
11
+ classID: 'DIXL-MediaCo-Work-NewService',
12
+ type: 'Text',
13
+ displayAs: 'pxTextArea',
14
+ label: 'Paragraph sample'
15
+ };
16
+
17
+ export const stateProps = {
18
+ value: '.ParagraphSample',
19
+ hasSuggestions: false
20
+ };
@@ -1,7 +1,7 @@
1
- import { useState } from 'react';
2
- import { withKnobs, text, boolean } from '@storybook/addon-knobs';
1
+ import { withKnobs } from '@storybook/addon-knobs';
3
2
 
4
3
  import {{COMPONENT_CLASS_NAME}} from './index.jsx';
4
+ import { stateProps, configProps } from './mock.stories';
5
5
 
6
6
  export default {
7
7
  title: '{{COMPONENT_CLASS_NAME}}',
@@ -10,30 +10,32 @@ export default {
10
10
  };
11
11
 
12
12
  export const base{{COMPONENT_CLASS_NAME}} = () => {
13
- const [value, setValue] = useState('test value');
14
13
 
15
14
  const props = {
15
+ value: configProps.value,
16
+ placeholder: configProps.placeholder,
17
+ label: configProps.label,
18
+ testId: configProps.testId,
19
+ hasSuggestions: configProps.hasSuggestions,
20
+ datasource: configProps.datasource,
21
+
16
22
  getPConnect: () => {
17
23
  return {
24
+ getStateProps: () => {
25
+ return stateProps;
26
+ },
18
27
  getActionsApi: () => {
19
28
  return {
20
- updateFieldValue: (propName, value) => {
21
- setValue(value);
22
- }
29
+ updateFieldValue: () => {},
30
+ triggerFieldChange: () => {}
23
31
  };
24
32
  },
25
- getStateProps: () => {
26
- return { value: '.name' };
27
- }
33
+ ignoreSuggestion: () => {},
34
+ acceptSuggestion: () => {},
35
+ setInheritedProps: () => {},
36
+ resolveConfigProps: () => {}
28
37
  };
29
- },
30
- value,
31
- placeholder: text('Placeholder', 'Test placeholder'),
32
- disabled: boolean('Disabled', false),
33
- readOnly: boolean('Disabled', false),
34
- required: boolean('Disabled', false),
35
- label: text('Label', 'Sample Label'),
36
- testId: text('Test id', 'text-12344566')
38
+ }
37
39
  };
38
40
 
39
41
  return (
@@ -4,16 +4,60 @@ import {
4
4
  getPhoneNumberParts,
5
5
  PhoneDisplay,
6
6
  FieldValueList,
7
- Text
7
+ Text,
8
+ EmailDisplay, URLDisplay
8
9
  } from '@pega/cosmos-react-core';
9
10
  import PropTypes from 'prop-types';
10
11
 
11
12
  // includes in bundle
12
- import {formatExists,textFormatter} from "./text-phone";
13
13
  import handleEvent from "./event-utils";
14
14
  import { suggestionsHandler } from './suggestions-handler';
15
15
 
16
16
  import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
17
+ import { } from "@pega/cosmos-react-core";
18
+
19
+ export const formatExists = (formatterVal) => {
20
+ const formatterValues = [
21
+ "TextInput",
22
+ "WorkStatus",
23
+ "RichText",
24
+ "Email",
25
+ "Phone",
26
+ "URL",
27
+ "Operator"
28
+ ];
29
+ let isformatter = false;
30
+ if (formatterValues.includes(formatterVal)) {
31
+ isformatter = true;
32
+ }
33
+ return isformatter;
34
+ };
35
+
36
+
37
+ export const textFormatter = (formatter,value) => {
38
+ let displayComponent = null;
39
+ switch(formatter){
40
+ case "TextInput" : {
41
+ displayComponent = value;
42
+ break;
43
+ }
44
+ case "Email" : {
45
+ displayComponent = (<EmailDisplay value={value} displayText={value} variant="link" />);
46
+ break;
47
+ }
48
+ case "Phone" : {
49
+ displayComponent = (<PhoneDisplay value={value} variant="link" />);
50
+ break;
51
+ }
52
+ case "URL" : {
53
+ displayComponent = (<URLDisplay target="_blank" value={value} displayText={value} variant="link" />);
54
+ break;
55
+ }
56
+ // no default
57
+ }
58
+ return displayComponent;
59
+ };
60
+
17
61
 
18
62
 
19
63
  // Duplicated runtime code from Constellation Design System Component
@@ -0,0 +1,37 @@
1
+ export const configProps = {
2
+ value: '',
3
+ label: 'Phone Sample',
4
+ datasource: {
5
+ source: [
6
+ {
7
+ value: '+1'
8
+ },
9
+ {
10
+ value: '+91'
11
+ },
12
+ {
13
+ value: '+48'
14
+ },
15
+ {
16
+ value: '+44'
17
+ }
18
+ ],
19
+ fields: {}
20
+ },
21
+ showCountryCode: true,
22
+ placeholder: 'Phone Placeholder',
23
+ helperText: 'Phone Helper Text',
24
+ testId: 'phone-12345678',
25
+ hasSuggestions: false
26
+ };
27
+
28
+ export const stateProps = {
29
+ value: '.PhoneSample',
30
+ datasource: {
31
+ source: 'D_pyCountryCallingCodeList.pxResults',
32
+ fields: {
33
+ value: '.pyCallingCode'
34
+ }
35
+ },
36
+ hasSuggestions: false
37
+ };
@@ -1,7 +1,7 @@
1
- import { useState } from 'react';
2
- import { withKnobs, text, boolean } from '@storybook/addon-knobs';
1
+ import { withKnobs } from '@storybook/addon-knobs';
3
2
 
4
3
  import {{COMPONENT_CLASS_NAME}} from './index.jsx';
4
+ import { stateProps, configProps } from './mock.stories';
5
5
 
6
6
  export default {
7
7
  title: '{{COMPONENT_CLASS_NAME}}',
@@ -10,30 +10,32 @@ export default {
10
10
  };
11
11
 
12
12
  export const base{{COMPONENT_CLASS_NAME}} = () => {
13
- const [value, setValue] = useState('test value');
14
13
 
15
14
  const props = {
15
+ value: configProps.value,
16
+ placeholder: configProps.placeholder,
17
+ label: configProps.label,
18
+ helperText: configProps.helperText,
19
+ testId: configProps.testId,
20
+ hasSuggestions: configProps.hasSuggestions,
21
+
16
22
  getPConnect: () => {
17
23
  return {
24
+ getStateProps: () => {
25
+ return stateProps;
26
+ },
18
27
  getActionsApi: () => {
19
28
  return {
20
- updateFieldValue: (propName, value) => {
21
- setValue(value);
22
- }
29
+ updateFieldValue: () => {},
30
+ triggerFieldChange: () => {}
23
31
  };
24
32
  },
25
- getStateProps: () => {
26
- return { value: '.name' };
27
- }
33
+ ignoreSuggestion: () => {},
34
+ acceptSuggestion: () => {},
35
+ setInheritedProps: () => {},
36
+ resolveConfigProps: () => {}
28
37
  };
29
- },
30
- value,
31
- placeholder: text('Placeholder', 'Test placeholder'),
32
- disabled: boolean('Disabled', false),
33
- readOnly: boolean('Disabled', false),
34
- required: boolean('Disabled', false),
35
- label: text('Label', 'Sample Label'),
36
- testId: text('Test id', 'text-12344566')
38
+ }
37
39
  };
38
40
 
39
41
  return (
@@ -1,14 +1,185 @@
1
- import { useState, useEffect, useRef} from "react";
2
- import { Input, FieldValueList, Text } from "@pega/cosmos-react-core";
1
+ import { useState, useEffect, useRef, React} from "react";
2
+ import { Input, FieldValueList, Text, EmailDisplay, PhoneDisplay, URLDisplay, Button, Lightbox, Image } from "@pega/cosmos-react-core";
3
3
  import PropTypes from "prop-types";
4
4
 
5
5
  // includes in bundle
6
- import {formatExists,textFormatter, urlFormatter, suggestionHandler} from "./text-url";
7
6
  import handleEvent from "./event-utils";
8
7
  import { suggestionsHandler } from './suggestions-handler';
9
8
 
10
9
  import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
11
10
 
11
+ export const formatExists = (formatterVal) => {
12
+ const formatterValues = [
13
+ "TextInput",
14
+ "WorkStatus",
15
+ "RichText",
16
+ "Email",
17
+ "Phone",
18
+ "URL",
19
+ "Operator"
20
+ ];
21
+ let isformatter = false;
22
+ if (formatterValues.includes(formatterVal)) {
23
+ isformatter = true;
24
+ }
25
+ return isformatter;
26
+ };
27
+
28
+ const urlLabelVal = (urlLabelSelection, btnVal, urlLabel, propUrlLabel) => {
29
+ if ((urlLabel !== '' || propUrlLabel !== '') && btnVal !== null) {
30
+ switch (urlLabelSelection) {
31
+ case 'constant': {
32
+ btnVal = urlLabel;
33
+ break;
34
+ }
35
+ case 'propertyRef': {
36
+ btnVal = propUrlLabel;
37
+ break;
38
+ }
39
+ // no default
40
+ }
41
+ }
42
+ return btnVal;
43
+ };
44
+
45
+ const isImage = (url) => /\.(jpg|jpeg|png|webp|avif|gif|svg)$/.test(url);
46
+
47
+ const TableImage = (imageProps) => {
48
+ const { value, altText, altTextOfImage, propaltTextOfImage, urlLabelSelection, urlLabel, propUrlLabel } = imageProps;
49
+ const demoButtonRef = useRef(null);
50
+ let imageDisplayComp = null;
51
+ const [images, setImages] = useState(null);
52
+ const imgDescription = {
53
+ id: 'url',
54
+ name: urlLabelSelection === 'constant' ? urlLabel : propUrlLabel,
55
+ description: altText === 'constant' ? altTextOfImage : propaltTextOfImage,
56
+ src: value
57
+ };
58
+ const onClick = () => {
59
+ setImages([imgDescription]);
60
+ };
61
+ const onItemDownload = async (id) => {
62
+ const a = document.createElement('a');
63
+ a.href = await fetch(images[0].src)
64
+ .then((response) => {
65
+ return response.blob();
66
+ })
67
+ .then((blob) => {
68
+ return URL.createObjectURL(blob);
69
+ });
70
+ a.download = images?.find((image) => image.id === id)?.name ?? id;
71
+ document.body.appendChild(a);
72
+ a.click();
73
+ document.body.removeChild(a);
74
+ };
75
+ let btnVal = value;
76
+ btnVal = urlLabelVal(urlLabelSelection, btnVal, urlLabel, propUrlLabel);
77
+ imageDisplayComp = (
78
+ <React.Fragment>
79
+ {btnVal !== null && (
80
+ <Button ref={demoButtonRef} variant='link' compact={false} onClick={onClick} autoFocus>
81
+ {btnVal}
82
+ </Button>
83
+ )}
84
+ {images && (
85
+ <Lightbox
86
+ items={images}
87
+ cycle={false}
88
+ onAfterClose={() => {
89
+ setImages(null);
90
+ demoButtonRef.current?.focus();
91
+ }}
92
+ onItemDownload={isImage(images[0].src) ? onItemDownload : undefined}
93
+ />
94
+ )}
95
+ </React.Fragment>
96
+ );
97
+ return imageDisplayComp;
98
+ };
99
+
100
+ export const textFormatter = (formatter,value) => {
101
+ let displayComponent = null;
102
+ switch(formatter){
103
+ case "TextInput" : {
104
+ displayComponent = value;
105
+ break;
106
+ }
107
+ case "Email" : {
108
+ displayComponent = (<EmailDisplay value={value} displayText={value} variant="link" />);
109
+ break;
110
+ }
111
+ case "Phone" : {
112
+ displayComponent = (<PhoneDisplay value={value} variant="link" />);
113
+ break;
114
+ }
115
+ case "URL" : {
116
+ displayComponent = (<URLDisplay target="_blank" value={value} displayText={value} variant="link" />);
117
+ break;
118
+ }
119
+ // no default
120
+ }
121
+ return displayComponent;
122
+ };
123
+
124
+ /**
125
+ * Returns a URL display component based on the options
126
+ * @function urlFormatter
127
+ * @param {string} value value
128
+ * @param {object} options options for formatting
129
+ * { displayAs,tableDisplayAs,isTableFormatter,altText,altTextOfImage,propaltTextOfImage,urlLabelSelection, urlLabel,propUrlLabel, widthSel, customWidth}
130
+ */
131
+ export const urlFormatter = (value, options) => {
132
+ const {
133
+ displayAs,
134
+ tableDisplayAs,
135
+ isTableFormatter,
136
+ altText,
137
+ altTextOfImage,
138
+ propaltTextOfImage,
139
+ urlLabelSelection,
140
+ urlLabel,
141
+ propUrlLabel,
142
+ widthSel,
143
+ customWidth
144
+ } = options;
145
+
146
+ let urlFormatComp = null;
147
+ if (
148
+ (displayAs === 'labelText' || (isTableFormatter && tableDisplayAs === 'link')) &&
149
+ (urlLabel !== '' || propUrlLabel !== '')
150
+ ) {
151
+ urlFormatComp = (
152
+ <URLDisplay
153
+ target='_blank'
154
+ value={value}
155
+ displayText={urlLabelSelection === 'constant' ? urlLabel : propUrlLabel}
156
+ variant='link'
157
+ />
158
+ );
159
+ } else if ((displayAs === 'Image' || tableDisplayAs === 'Image') && !!value) {
160
+ if (isTableFormatter) {
161
+ urlFormatComp = TableImage({
162
+ value,
163
+ altText,
164
+ altTextOfImage,
165
+ propaltTextOfImage,
166
+ urlLabelSelection,
167
+ urlLabel,
168
+ propUrlLabel
169
+ });
170
+ } else {
171
+ const width = widthSel === 'widthpx' ? customWidth : null;
172
+ urlFormatComp = (
173
+ <Image src={value} width={width} alt={altText === 'constant' ? altTextOfImage : propaltTextOfImage} />
174
+ );
175
+ }
176
+ } else {
177
+ urlFormatComp = <URLDisplay target='_blank' value={value} displayText={value} variant='link' />;
178
+ }
179
+ return urlFormatComp;
180
+ };
181
+
182
+
12
183
 
13
184
  // Duplicated runtime code from Constellation Design System Component
14
185
 
@@ -0,0 +1,22 @@
1
+ export const configProps = {
2
+ value: '',
3
+ label: 'URL Sample',
4
+ placeholder: 'URL Placeholder',
5
+ helperText: 'URL Helper Text',
6
+ testId: 'url-12345678',
7
+ hasSuggestions: false
8
+ };
9
+
10
+ export const fieldMetadata = {
11
+ classID: 'DIXL-MediaCo-Work-NewService',
12
+ type: 'Text',
13
+ maxLength: 256,
14
+ displayAs: 'pxURL',
15
+ label: 'URL sample',
16
+ validateAs: 'pxIsValidURL'
17
+ };
18
+
19
+ export const stateProps = {
20
+ value: '.URLSample',
21
+ hasSuggestions: false
22
+ };
@@ -1,6 +1,5 @@
1
- import { useState } from 'react';
2
1
  import { withKnobs, text, boolean } from '@storybook/addon-knobs';
3
-
2
+ import { configProps, stateProps } from './mock.stories';
4
3
  import {{COMPONENT_CLASS_NAME}} from './index.jsx';
5
4
 
6
5
  export default {
@@ -10,30 +9,39 @@ export default {
10
9
  };
11
10
 
12
11
  export const base{{COMPONENT_CLASS_NAME}} = () => {
13
- const [value, setValue] = useState('test value');
14
-
15
12
  const props = {
16
13
  getPConnect: () => {
17
14
  return {
18
15
  getActionsApi: () => {
19
16
  return {
20
- updateFieldValue: (propName, value) => {
21
- setValue(value);
22
- }
17
+ updateFieldValue: () => {},
18
+ triggerFieldChange: () => {}
23
19
  };
24
20
  },
25
21
  getStateProps: () => {
26
- return { value: '.name' };
27
- }
22
+ return stateProps;
23
+ },
24
+ getConfigProps: () => {
25
+ return configProps;
26
+ },
27
+ ignoreSuggestion: () => {},
28
+ clearErrorMessages: () => {}
28
29
  };
29
30
  },
30
- value,
31
- placeholder: text('Placeholder', 'Test placeholder'),
32
- disabled: boolean('Disabled', false),
33
- readOnly: boolean('Disabled', false),
34
- required: boolean('Disabled', false),
35
- label: text('Label', 'Sample Label'),
36
- testId: text('Test id', 'text-12344566')
31
+ value: configProps.value,
32
+ validatemessage: configProps.validatemessage,
33
+ label: configProps.label,
34
+ hideLabel: configProps.hideLabel,
35
+ helperText: configProps.helperText,
36
+ withSeconds: configProps.withSeconds,
37
+ testId: configProps.testId,
38
+ additionalProps: configProps.additionalProps,
39
+ displayMode: configProps.displayMode,
40
+ variant: configProps.variant,
41
+ hasSuggestions: configProps.hasSuggestions,
42
+ disabled: configProps.disabled,
43
+ readOnly: configProps.readOnly,
44
+ required: configProps.required
37
45
  };
38
46
 
39
47
  return (
@@ -0,0 +1,20 @@
1
+ export const configProps = {
2
+ value: '13:30',
3
+ validatemessage: '',
4
+ label: 'TimeOfDay Label',
5
+ hideLabel: false,
6
+ helperText: 'TimeOfDay helper text',
7
+ withSeconds: false,
8
+ testId: '12345678',
9
+ additionalProps: {},
10
+ displayMode: '',
11
+ variant: '',
12
+ hasSuggestions: false,
13
+ readOnly: false,
14
+ required: false,
15
+ disabled: false
16
+ };
17
+
18
+ export const stateProps = {
19
+ value: '.TimeOfDayLabel'
20
+ };
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-undef */
1
2
  import dayjs from "dayjs";
2
3
 
3
4
  const relativeTime = require("dayjs/plugin/relativeTime");
@@ -0,0 +1,26 @@
1
+ import { Status } from "@pega/cosmos-react-core";
2
+
3
+ export default function StatusWorkRenderer({ value }) {
4
+ let variant = "info";
5
+
6
+ const warnStrings = ["fail", "cancel", "reject", "revoke", "stopped", "warn"];
7
+ const infoStrings = ["open", "hold", "info", "new"];
8
+ const successStrings = ["resolved", "completed", "success"];
9
+ const pendingStrings = ["pending"];
10
+
11
+ if (new RegExp(warnStrings.join("|"), "i").test(value)) {
12
+ variant = "warn";
13
+ } else if (new RegExp(infoStrings.join("|"), "i").test(value)) {
14
+ variant = "info";
15
+ } else if (new RegExp(successStrings.join("|"), "i").test(value)) {
16
+ variant = "success";
17
+ } else if (new RegExp(pendingStrings.join("|"), "i").test(value)) {
18
+ variant = "pending";
19
+ }
20
+
21
+ return (
22
+ <Status type="rectangle" variant={variant}>
23
+ {value}
24
+ </Status>
25
+ );
26
+ }
@@ -0,0 +1,110 @@
1
+ import { Text, FieldValueList, Button, DateTimeDisplay, useTheme } from '@pega/cosmos-react-core';
2
+ import {{COMPONENT_CLASS_NAME}} from './index';
3
+ import { pyReviewRaw, pyReviewResolved, regionChildrenResolved } from './mock.stories';
4
+ import StatusWorkRenderer from './StatusWork.jsx';
5
+
6
+ export default {
7
+ title: '{{COMPONENT_CLASS_NAME}}',
8
+ component: {{COMPONENT_CLASS_NAME}}
9
+ };
10
+
11
+ const Template = args => {
12
+ const regionAChildren = pyReviewRaw.children[0].children.map(child => {
13
+ return Primary.args.getPConnect().createComponent(child);
14
+ });
15
+
16
+ return <{{COMPONENT_CLASS_NAME}} {...args}>{regionAChildren}</{{COMPONENT_CLASS_NAME}}>;
17
+ };
18
+
19
+ export const Primary = Template.bind({});
20
+
21
+ Primary.args = {
22
+ template: 'MyCo_MyComponents_NewDetailsTemplate',
23
+ showHighlightedData: true,
24
+ label: 'Test Details',
25
+ showLabel: true,
26
+ getPConnect: () => {
27
+ return {
28
+ getChildren: () => {
29
+ return pyReviewRaw.children;
30
+ },
31
+ getRawMetadata: () => {
32
+ return pyReviewRaw;
33
+ },
34
+ getInheritedProps: () => {
35
+ return pyReviewRaw.config.inheritedProps;
36
+ },
37
+ createComponent: config => {
38
+ switch (config.config.value) {
39
+ case '@P .pyStatusWork':
40
+ return renderField(pyReviewResolved.highlightedData[0].config);
41
+ case '@P .pyID':
42
+ return renderField(pyReviewResolved.highlightedData[1].config);
43
+ case '@P .pxCreateDateTime':
44
+ return renderField(pyReviewResolved.highlightedData[2].config);
45
+ case '@USER .pxCreateOperator':
46
+ return renderField(pyReviewResolved.highlightedData[3].config);
47
+ case '@P .pySLADeadline':
48
+ return renderField(regionChildrenResolved[0]);
49
+ case '@P .pySLAGoal':
50
+ return renderField(regionChildrenResolved[1]);
51
+ case '@P .pySLAStartTime':
52
+ return renderField(regionChildrenResolved[2]);
53
+ }
54
+ },
55
+ setInheritedProp: () => {},
56
+ resolveConfigProps: () => {}
57
+ };
58
+ }
59
+ };
60
+
61
+ const renderField = resolvedProps => {
62
+ const {
63
+ displayAsStatus = false,
64
+ displayMode,
65
+ value = '',
66
+ label = '',
67
+ theme = useTheme()
68
+ } = resolvedProps;
69
+
70
+ const variant = displayMode === 'LABELS_LEFT' ? 'inline' : 'stacked';
71
+
72
+ let val =
73
+ value != '' ? (
74
+ <Text variant='h1' as='span'>
75
+ {value}
76
+ </Text>
77
+ ) : (
78
+ ''
79
+ );
80
+
81
+ if (label === 'Create date/time')
82
+ val = <DateTimeDisplay value={value} variant='datetime' format='long' clockFormat={null} />;
83
+
84
+ if (displayAsStatus === true) val = <StatusWorkRenderer value={value} />;
85
+
86
+ if (label === 'Create Operator')
87
+ val = (
88
+ <Button
89
+ variant='link'
90
+ style={
91
+ label !== null
92
+ ? { width: 'max-content', height: theme.components.input.height }
93
+ : undefined
94
+ }
95
+ >
96
+ {value.userName}
97
+ </Button>
98
+ );
99
+
100
+ if (variant === 'inline') {
101
+ val = value || <span aria-hidden='true'>&ndash;&ndash;</span>;
102
+ } else {
103
+ val = (
104
+ <Text variant='h1' as='span'>
105
+ {val}
106
+ </Text>
107
+ );
108
+ }
109
+ return <FieldValueList variant={variant} fields={[{ name: label, value: val }]} />;
110
+ };