@pega/custom-dx-components 0.0.1 → 0.23.2

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 (234) hide show
  1. package/.vscode/extensions.json +1 -1
  2. package/README.md +6 -189
  3. package/package.json +34 -32
  4. package/src/auth.js +608 -0
  5. package/src/cli.js +42 -0
  6. package/src/constants.js +125 -8
  7. package/src/tasks/authenticate/helper.js +91 -8
  8. package/src/tasks/authenticate/index.js +169 -49
  9. package/src/tasks/build/helper.js +122 -0
  10. package/src/tasks/build/index.js +54 -0
  11. package/src/tasks/build-all/helper.js +70 -0
  12. package/src/tasks/build-all/index.js +79 -0
  13. package/src/tasks/{publish/bundle → bundle}/builder/index.js +49 -5
  14. package/src/tasks/{publish/bundle → bundle}/builder/webpack.config.js +5 -3
  15. package/src/tasks/{publish/bundle → bundle}/index.js +2 -2
  16. package/src/tasks/create/index.js +87 -64
  17. package/src/tasks/create/templates/Constellation/Field/Boolean/Boolean.js.mustache +38 -0
  18. package/src/tasks/create/templates/Constellation/Field/Boolean/boolean-format.js.mustache +26 -0
  19. package/src/tasks/create/templates/Constellation/Field/Boolean/config.json.mustache +146 -0
  20. package/src/tasks/create/templates/Constellation/Field/Boolean/demo.stories.jsx.mustache +61 -0
  21. package/src/tasks/create/templates/Constellation/Field/Boolean/event-utils.js.mustache +18 -0
  22. package/src/tasks/create/templates/Constellation/Field/Boolean/index.jsx.mustache +170 -0
  23. package/src/tasks/create/templates/Constellation/Field/Boolean/mock.stories.js.mustache +21 -0
  24. package/src/tasks/create/templates/Constellation/Field/Boolean/styles.js.mustache +7 -0
  25. package/src/tasks/create/templates/Constellation/Field/Date/DateFormatter.js.mustache +61 -0
  26. package/src/tasks/create/templates/Constellation/Field/Date/FormattedText.jsx.mustache +41 -0
  27. package/src/tasks/create/templates/Constellation/Field/Date/config.json.mustache +196 -0
  28. package/src/tasks/create/templates/Constellation/Field/Date/date.js.mustache +439 -0
  29. package/src/tasks/create/templates/Constellation/Field/Date/demo.stories.jsx.mustache +73 -0
  30. package/src/tasks/create/templates/Constellation/Field/Date/index.jsx.mustache +256 -0
  31. package/src/tasks/create/templates/Constellation/Field/Date/mock.stories.js.mustache +23 -0
  32. package/src/tasks/create/templates/Constellation/Field/Date/styles.js.mustache +7 -0
  33. package/src/tasks/create/templates/Constellation/Field/Date/suggestions-handler.js +10 -0
  34. package/src/tasks/create/templates/Constellation/Field/DateTime/config.json.mustache +257 -0
  35. package/src/tasks/create/templates/Constellation/Field/DateTime/date-time.js.mustache +92 -0
  36. package/src/tasks/create/templates/Constellation/Field/DateTime/date-utils.js.mustache +287 -0
  37. package/src/tasks/create/templates/Constellation/Field/DateTime/date.js.mustache +328 -0
  38. package/src/tasks/create/templates/Constellation/Field/DateTime/demo.stories.jsx.mustache +73 -0
  39. package/src/tasks/create/templates/Constellation/Field/DateTime/index.jsx.mustache +254 -0
  40. package/src/tasks/create/templates/Constellation/Field/DateTime/mock.stories.js.mustache +23 -0
  41. package/src/tasks/create/templates/Constellation/Field/DateTime/styles.js.mustache +7 -0
  42. package/src/tasks/create/templates/Constellation/Field/DateTime/suggestions-handler.js +10 -0
  43. package/src/tasks/create/templates/Constellation/Field/Decimal/config.json.mustache +279 -0
  44. package/src/tasks/create/templates/Constellation/Field/Decimal/demo.stories.jsx.mustache +49 -0
  45. package/src/tasks/create/templates/Constellation/Field/Decimal/event-utils.js.mustache +18 -0
  46. package/src/tasks/create/templates/Constellation/Field/Decimal/index.jsx.mustache +273 -0
  47. package/src/tasks/create/templates/Constellation/Field/Decimal/mock.stories.js.mustache +21 -0
  48. package/src/tasks/create/templates/Constellation/Field/Decimal/styles.js.mustache +7 -0
  49. package/src/tasks/create/templates/Constellation/Field/Decimal/suggestions-handler.js +10 -0
  50. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/config.json.mustache +292 -0
  51. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/demo.stories.jsx.mustache +53 -0
  52. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/event-utils.js.mustache +18 -0
  53. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/index.jsx.mustache +299 -0
  54. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/mock.stories.js.mustache +23 -0
  55. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/styles.js.mustache +7 -0
  56. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/suggestions-handler.js +10 -0
  57. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/config.json.mustache +94 -0
  58. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/demo.stories.jsx.mustache +49 -0
  59. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/event-utils.js.mustache +18 -0
  60. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/index.jsx.mustache +281 -0
  61. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/mock.stories.js.mustache +21 -0
  62. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/styles.js.mustache +7 -0
  63. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/suggestions-handler.js +10 -0
  64. package/src/tasks/create/templates/Constellation/Field/Integer/config.json.mustache +348 -0
  65. package/src/tasks/create/templates/Constellation/Field/Integer/demo.stories.jsx.mustache +49 -0
  66. package/src/tasks/create/templates/Constellation/Field/Integer/event-utils.js.mustache +18 -0
  67. package/src/tasks/create/templates/Constellation/Field/Integer/index.jsx.mustache +336 -0
  68. package/src/tasks/create/templates/Constellation/Field/Integer/mock.stories.js.mustache +21 -0
  69. package/src/tasks/create/templates/Constellation/Field/Integer/styles.js.mustache +7 -0
  70. package/src/tasks/create/templates/Constellation/Field/Integer/suggestions-handler.js +10 -0
  71. package/src/tasks/create/templates/Constellation/Field/Picklist/config.json.mustache +115 -0
  72. package/src/tasks/create/templates/Constellation/Field/Picklist/demo.stories.jsx.mustache +78 -0
  73. package/src/tasks/create/templates/Constellation/Field/Picklist/event-utils.js.mustache +18 -0
  74. package/src/tasks/create/templates/Constellation/Field/Picklist/index.jsx.mustache +351 -0
  75. package/src/tasks/create/templates/Constellation/Field/Picklist/mock.stories.js.mustache +67 -0
  76. package/src/tasks/create/templates/Constellation/Field/Picklist/styles.js.mustache +7 -0
  77. package/src/tasks/create/templates/Constellation/Field/Picklist/suggestions-handler.js +10 -0
  78. package/src/tasks/create/{template → templates/Constellation/Field/Text}/config.json.mustache +15 -5
  79. package/src/tasks/create/templates/Constellation/Field/Text/demo.stories.jsx.mustache +51 -0
  80. package/src/tasks/create/{template → templates/Constellation/Field/Text}/index.jsx.mustache +5 -0
  81. package/src/tasks/create/templates/Constellation/Field/Text/mock.stories.js.mustache +13 -0
  82. package/src/tasks/create/templates/Constellation/Field/Text/styles.js.mustache +7 -0
  83. package/src/tasks/create/templates/Constellation/Field/Text-Email/config.json.mustache +112 -0
  84. package/src/tasks/create/templates/Constellation/Field/Text-Email/demo.stories.jsx.mustache +48 -0
  85. package/src/tasks/create/templates/Constellation/Field/Text-Email/event-utils.js.mustache +18 -0
  86. package/src/tasks/create/templates/Constellation/Field/Text-Email/index.jsx.mustache +231 -0
  87. package/src/tasks/create/templates/Constellation/Field/Text-Email/mock.stories.js.mustache +22 -0
  88. package/src/tasks/create/templates/Constellation/Field/Text-Email/styles.js.mustache +7 -0
  89. package/src/tasks/create/templates/Constellation/Field/Text-Email/suggestions-handler.js +10 -0
  90. package/src/tasks/create/templates/Constellation/Field/Text-Input/StatusWork.jsx +26 -0
  91. package/src/tasks/create/templates/Constellation/Field/Text-Input/config.json.mustache +112 -0
  92. package/src/tasks/create/templates/Constellation/Field/Text-Input/demo.stories.jsx.mustache +48 -0
  93. package/src/tasks/create/templates/Constellation/Field/Text-Input/event-utils.js.mustache +18 -0
  94. package/src/tasks/create/templates/Constellation/Field/Text-Input/index.jsx.mustache +239 -0
  95. package/src/tasks/create/templates/Constellation/Field/Text-Input/mock.stories.js.mustache +21 -0
  96. package/src/tasks/create/templates/Constellation/Field/Text-Input/styles.js.mustache +7 -0
  97. package/src/tasks/create/templates/Constellation/Field/Text-Input/suggestions-handler.js +10 -0
  98. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/config.json.mustache +112 -0
  99. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/demo.stories.jsx.mustache +48 -0
  100. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/event-utils.js.mustache +18 -0
  101. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/index.jsx.mustache +231 -0
  102. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/mock.stories.js.mustache +20 -0
  103. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/styles.js.mustache +7 -0
  104. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/suggestions-handler.js +10 -0
  105. package/src/tasks/create/templates/Constellation/Field/Text-Phone/config.json.mustache +124 -0
  106. package/src/tasks/create/templates/Constellation/Field/Text-Phone/demo.stories.jsx.mustache +46 -0
  107. package/src/tasks/create/templates/Constellation/Field/Text-Phone/event-utils.js.mustache +18 -0
  108. package/src/tasks/create/templates/Constellation/Field/Text-Phone/index.jsx.mustache +267 -0
  109. package/src/tasks/create/templates/Constellation/Field/Text-Phone/mock.stories.js.mustache +37 -0
  110. package/src/tasks/create/templates/Constellation/Field/Text-Phone/styles.js.mustache +7 -0
  111. package/src/tasks/create/templates/Constellation/Field/Text-Phone/suggestions-handler.js +10 -0
  112. package/src/tasks/create/templates/Constellation/Field/Text-URL/config.json.mustache +238 -0
  113. package/src/tasks/create/templates/Constellation/Field/Text-URL/demo.stories.jsx.mustache +46 -0
  114. package/src/tasks/create/templates/Constellation/Field/Text-URL/event-utils.js.mustache +18 -0
  115. package/src/tasks/create/templates/Constellation/Field/Text-URL/index.jsx.mustache +232 -0
  116. package/src/tasks/create/templates/Constellation/Field/Text-URL/mock.stories.js.mustache +22 -0
  117. package/src/tasks/create/templates/Constellation/Field/Text-URL/styles.js.mustache +7 -0
  118. package/src/tasks/create/templates/Constellation/Field/Text-URL/suggestions-handler.js +10 -0
  119. package/src/tasks/create/templates/Constellation/Field/Text-URL/text-url.jsx.mustache +173 -0
  120. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/config.json.mustache +186 -0
  121. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/demo.stories.jsx.mustache +57 -0
  122. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/index.jsx.mustache +213 -0
  123. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/mock.stories.js.mustache +20 -0
  124. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/styles.js.mustache +7 -0
  125. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/suggestions-handler.js +10 -0
  126. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/time-of-day.js.mustache +287 -0
  127. package/src/tasks/create/templates/Constellation/Template/DETAILS/OneColumnDetails.svg +22 -0
  128. package/src/tasks/create/templates/Constellation/Template/DETAILS/StatusWork.jsx.mustache +26 -0
  129. package/src/tasks/create/templates/Constellation/Template/DETAILS/config.json.mustache +36 -0
  130. package/src/tasks/create/templates/Constellation/Template/DETAILS/demo.stories.jsx.mustache +132 -0
  131. package/src/tasks/create/templates/Constellation/Template/DETAILS/index.jsx.mustache +86 -0
  132. package/src/tasks/create/templates/Constellation/Template/DETAILS/mock.stories.js.mustache +189 -0
  133. package/src/tasks/create/templates/Constellation/Template/DETAILS/styles.js.mustache +7 -0
  134. package/src/tasks/create/templates/Constellation/Template/DETAILS/utils.js.mustache +152 -0
  135. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/StatusWork.jsx.mustache +26 -0
  136. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/TwoColumnDetails.svg +28 -0
  137. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/config.json.mustache +43 -0
  138. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/demo.stories.jsx.mustache +136 -0
  139. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/index.jsx.mustache +86 -0
  140. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/mock.stories.js.mustache +230 -0
  141. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/styles.js.mustache +7 -0
  142. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/utils.js.mustache +155 -0
  143. package/src/tasks/create/templates/Constellation/Template/FORM/DefaultForm.svg +29 -0
  144. package/src/tasks/create/templates/Constellation/Template/FORM/config.json.mustache +46 -0
  145. package/src/tasks/create/templates/Constellation/Template/FORM/demo.stories.jsx.mustache +169 -0
  146. package/src/tasks/create/templates/Constellation/Template/FORM/index.jsx.mustache +45 -0
  147. package/src/tasks/create/templates/Constellation/Template/FORM/mock.stories.js.mustache +137 -0
  148. package/src/tasks/create/templates/Constellation/Template/FORM/styles.js.mustache +7 -0
  149. package/src/tasks/create/templates/Constellation/Template/FORM-region/TwoColumn.svg +38 -0
  150. package/src/tasks/create/templates/Constellation/Template/FORM-region/config.json.mustache +28 -0
  151. package/src/tasks/create/templates/Constellation/Template/FORM-region/demo.stories.jsx.mustache +178 -0
  152. package/src/tasks/create/templates/Constellation/Template/FORM-region/index.jsx.mustache +48 -0
  153. package/src/tasks/create/templates/Constellation/Template/FORM-region/mock.stories.js.mustache +143 -0
  154. package/src/tasks/create/templates/Constellation/Template/FORM-region/styles.js.mustache +7 -0
  155. package/src/tasks/create/templates/Constellation/Template/PAGE/GetNextWork.jsx.mustache +35 -0
  156. package/src/tasks/create/templates/Constellation/Template/PAGE/OneColumnPage.svg +36 -0
  157. package/src/tasks/create/templates/Constellation/Template/PAGE/config.json.mustache +33 -0
  158. package/src/tasks/create/templates/Constellation/Template/PAGE/demo.stories.jsx.mustache +102 -0
  159. package/src/tasks/create/templates/Constellation/Template/PAGE/index.jsx.mustache +70 -0
  160. package/src/tasks/create/templates/Constellation/Template/PAGE/localizations.json.mustache +4 -0
  161. package/src/tasks/create/templates/Constellation/Template/PAGE/mock.stories.js.mustache +94 -0
  162. package/src/tasks/create/templates/Constellation/Template/PAGE/styles.js.mustache +7 -0
  163. package/src/tasks/create/templates/Constellation/Template/PAGE/utils.js.mustache +229 -0
  164. package/src/tasks/create/templates/Constellation/Widget/CASE/OneColumnPage.svg +36 -0
  165. package/src/tasks/create/templates/Constellation/Widget/CASE/config.json.mustache +24 -0
  166. package/src/tasks/create/templates/Constellation/Widget/CASE/demo.stories.jsx.mustache +78 -0
  167. package/src/tasks/create/templates/Constellation/Widget/CASE/index.jsx.mustache +76 -0
  168. package/src/tasks/create/templates/Constellation/Widget/CASE/mock.stories.js.mustache +390 -0
  169. package/src/tasks/create/{template → templates/Constellation/Widget/CASE}/styles.js.mustache +1 -1
  170. package/src/tasks/create/templates/Constellation/Widget/PAGE/OneColumnPage.svg +36 -0
  171. package/src/tasks/create/templates/Constellation/Widget/PAGE/config.json.mustache +60 -0
  172. package/src/tasks/create/templates/Constellation/Widget/PAGE/demo.stories.jsx.mustache +30 -0
  173. package/src/tasks/create/templates/Constellation/Widget/PAGE/index.jsx.mustache +48 -0
  174. package/src/tasks/create/templates/Constellation/Widget/PAGE/mock.stories.js.mustache +23 -0
  175. package/src/tasks/{init/template/src/components/Organization_Library_VideoPlayer/styles.js → create/templates/Constellation/Widget/PAGE/styles.js.mustache} +3 -1
  176. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/Avatar.jsx.mustache +75 -0
  177. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/OneColumnPage.svg +36 -0
  178. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/Operator.jsx.mustache +240 -0
  179. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/config.json.mustache +67 -0
  180. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/demo.stories.jsx.mustache +68 -0
  181. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/index.jsx.mustache +110 -0
  182. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/mock.stories.js.mustache +51 -0
  183. package/src/tasks/{init/template/src/components/Organization_Library_MediaURL/MediaURL.styles.ts → create/templates/Constellation/Widget/PAGE-CASE/styles.js.mustache} +3 -1
  184. package/src/tasks/create-all/index.js +398 -0
  185. package/src/tasks/delete/helper.js +6 -4
  186. package/src/tasks/delete/index.js +4 -0
  187. package/src/tasks/delete-all/helper.js +153 -0
  188. package/src/tasks/delete-all/index.js +49 -0
  189. package/src/tasks/generate-ai/aiPrompt.txt.mustache +23 -0
  190. package/src/tasks/generate-ai/aiPromptDavinci.txt.mustache +14 -0
  191. package/src/tasks/generate-ai/helper.js +357 -0
  192. package/src/tasks/generate-ai/index.js +34 -0
  193. package/src/tasks/index.js +7 -0
  194. package/src/tasks/init/index.js +9 -3
  195. package/src/tasks/init/template/.eslintignore +8 -0
  196. package/src/tasks/init/template/.eslintrc.json +186 -5
  197. package/src/tasks/init/template/.vscode/extensions.json +1 -1
  198. package/src/tasks/init/template/README.md +80 -61
  199. package/src/tasks/init/template/keys/DX-ComponentDev.zip +0 -0
  200. package/src/tasks/init/template/keys/dxcb.crt +32 -0
  201. package/src/tasks/init/template/keys/dxcb.key +51 -0
  202. package/src/tasks/init/template/package.json.mustache +44 -21
  203. package/src/tasks/init/template/src/components/_components.md +1 -0
  204. package/src/tasks/init/template/tasks.config.json +19 -5
  205. package/src/tasks/init/template/templateNPMRC.txt +8 -0
  206. package/src/tasks/linter/index.js +46 -0
  207. package/src/tasks/list/helper.js +19 -6
  208. package/src/tasks/list/index.js +4 -0
  209. package/src/tasks/publish/helper.js +13 -4
  210. package/src/tasks/publish/index.js +14 -1
  211. package/src/tasks/publish-all/helper.js +154 -0
  212. package/src/tasks/publish-all/index.js +95 -0
  213. package/src/tasks/rename/index.js +314 -0
  214. package/src/tasks/validator/index.js +291 -18
  215. package/src/util.js +372 -6
  216. package/src/tasks/create/template/demo.stories.jsx.mustache +0 -44
  217. package/src/tasks/init/template/src/components/MBTAList/MBTAList.stories.tsx +0 -10
  218. package/src/tasks/init/template/src/components/MBTAList/MBTAList.tsx +0 -122
  219. package/src/tasks/init/template/src/components/MBTAList/icons/accessible.icon.tsx +0 -14
  220. package/src/tasks/init/template/src/components/MBTAList/icons/bus.icon.tsx +0 -13
  221. package/src/tasks/init/template/src/components/MBTAList/icons/mbta.icon.tsx +0 -10
  222. package/src/tasks/init/template/src/components/MBTAList/icons/subway.icon.tsx +0 -14
  223. package/src/tasks/init/template/src/components/MBTAList/index.ts +0 -2
  224. package/src/tasks/init/template/src/components/Organization_Library_MediaURL/MediaURL.stories.tsx +0 -19
  225. package/src/tasks/init/template/src/components/Organization_Library_MediaURL/MediaURL.types.ts +0 -10
  226. package/src/tasks/init/template/src/components/Organization_Library_MediaURL/MediaURLDisplay.tsx +0 -25
  227. package/src/tasks/init/template/src/components/Organization_Library_MediaURL/MediaURLInput.tsx +0 -24
  228. package/src/tasks/init/template/src/components/Organization_Library_MediaURL/config.json +0 -13
  229. package/src/tasks/init/template/src/components/Organization_Library_MediaURL/index.ts +0 -2
  230. package/src/tasks/init/template/src/components/Organization_Library_VideoPlayer/config.json +0 -44
  231. package/src/tasks/init/template/src/components/Organization_Library_VideoPlayer/demo.stories.jsx +0 -40
  232. package/src/tasks/init/template/src/components/Organization_Library_VideoPlayer/index.jsx +0 -42
  233. /package/src/tasks/{publish/bundle → bundle}/builder/modules.js +0 -0
  234. /package/src/tasks/{publish/bundle → bundle}/builder/paths.js +0 -0
@@ -0,0 +1,287 @@
1
+ /* eslint-disable no-undef */
2
+ import dayjs from "dayjs";
3
+
4
+ const relativeTime = require("dayjs/plugin/relativeTime");
5
+
6
+ dayjs.extend(relativeTime);
7
+
8
+ const utc = require("dayjs/plugin/utc");
9
+
10
+ dayjs.extend(utc);
11
+
12
+ /**
13
+ * Return relative time in fromNow for the given datetime
14
+ * @description Convert and return the given datetime in dayJSObject
15
+ *
16
+ * @param {string} text datetime
17
+ * @returns {object} datetime as a dayjs object
18
+ */
19
+ export const getDayJSObject = (text) => {
20
+ const momObj = dayjs(text);
21
+ if (momObj.isValid()) return momObj;
22
+ const timeStamp = text;
23
+ const isDateTime = timeStamp.indexOf("GMT") !== -1;
24
+ const year = parseInt(timeStamp.substr(0, 4), 10);
25
+ const month = parseInt(timeStamp.substr(4, 2), 10) - 1;
26
+ const day = parseInt(timeStamp.substr(6, 2), 10);
27
+
28
+ const CurrentTz = PCore.getLocaleUtils().getTimeZoneInUse();
29
+
30
+ let mom = new Date();
31
+
32
+ mom.setUTCDate(day);
33
+ mom.setUTCMonth(month);
34
+ mom.setUTCFullYear(year);
35
+
36
+ /* istanbul ignore else */
37
+ if (isDateTime) {
38
+ const hours = parseInt(timeStamp.substr(9, 2), 10);
39
+ const minutes = parseInt(timeStamp.substr(11, 2), 10);
40
+ const seconds = parseInt(timeStamp.substr(13, 2), 10);
41
+ const ms = parseInt(timeStamp.substr(16, 3), 10);
42
+ mom.setUTCHours(hours);
43
+ mom.setUTCMinutes(minutes);
44
+ mom.setUTCSeconds(seconds);
45
+ mom.setUTCMilliseconds(ms);
46
+ }
47
+
48
+ mom = dayjs(
49
+ mom.toLocaleString("en-US", {
50
+ timeZone: CurrentTz
51
+ })
52
+ );
53
+
54
+ return mom;
55
+ };
56
+
57
+ /**
58
+ * Return relative time in fromNow for the given datetime
59
+ *
60
+ * @param {string} time datetime
61
+ * @returns {object} relative time from now
62
+ */
63
+ export const getRelativeTime = (time) => {
64
+ let relativetime = "";
65
+ if (dayjs(time).isUTC()) {
66
+ relativetime = dayjs(time).fromNow();
67
+ } else {
68
+ const dayjstime = getDayJSObject(time);
69
+ relativetime = dayjs(dayjstime).fromNow();
70
+ }
71
+ return relativetime;
72
+ };
73
+
74
+ /**
75
+ * Return year for the date passed
76
+ *
77
+ * @param {string} value from which Year needs to be taken out
78
+ * @returns {number} year for the date passed
79
+ */
80
+ export const getFullYear = (value) =>
81
+ value ? new Date(value).getFullYear() : new Date().getFullYear();
82
+
83
+ /**
84
+ * Return maxDate for the date passed
85
+ *
86
+ * @param {number} nextYears next number of years
87
+ * @param {number} currentYear current year
88
+ * @param {number} yearFromValue year set on value in redux
89
+ *
90
+ * @returns {string} maxDate calculated based on inputs
91
+ */
92
+ export const getMaxDate = (nextYears, currentYear, yearFromValue) => {
93
+ if (Number.isNaN(nextYears)) {
94
+ nextYears = 20;
95
+ }
96
+ let maxYear = currentYear + nextYears;
97
+ if (yearFromValue > maxYear) {
98
+ maxYear = yearFromValue;
99
+ }
100
+ return `${maxYear}-01-01`;
101
+ };
102
+
103
+ /**
104
+ * Return minDate for the date passed
105
+ *
106
+ * @param {number} previousYears previous number of years
107
+ * @param {number} currentYear current year
108
+ * @param {number} yearFromValue year set on value in redux
109
+ *
110
+ * @returns {string} minDate calculated based on inputs
111
+ */
112
+ export const getMinDate = (previousYears, currentYear, yearFromValue) => {
113
+ if (Number.isNaN(previousYears)) {
114
+ previousYears = 100;
115
+ }
116
+ let minYear = currentYear - previousYears;
117
+ if (yearFromValue < minYear) {
118
+ minYear = yearFromValue;
119
+ }
120
+ return `${minYear}-12-31`;
121
+ };
122
+
123
+ /**
124
+ * Return clockFormat after parsing
125
+ *
126
+ * @param {number | string} clockFormat chosen by user
127
+ *
128
+ * @returns {number} clockFormat
129
+ */
130
+ export const parseClockFormat = (clockFormat) =>
131
+ typeof clockFormat === "string" ? parseInt(clockFormat, 10) : clockFormat;
132
+
133
+ /**
134
+ * Return datetime value string off to seconds
135
+ *
136
+ * @param {string} datetime in ISO format
137
+ * @param {boolean} withSeconds to specify if seconds is needed or not
138
+ *
139
+ * @returns {string} datetime after stripping of ms and seconds if selected to
140
+ */
141
+ export const correctDateTimeToSeconds = (datetime, withSeconds) => {
142
+ if (withSeconds) {
143
+ return `${datetime.substring(0, datetime.indexOf("Z"))}.000Z`;
144
+ }
145
+ return `${datetime.substring(0, datetime.lastIndexOf(":"))}:00.000Z`;
146
+ };
147
+
148
+ /**
149
+ * Return time value string off to seconds
150
+ *
151
+ * @param {string} datetime in ISO format
152
+ * @param {boolean} withSeconds to specify if seconds is needed or not
153
+ *
154
+ * @returns {string} just time after stripping of ms and seconds if selected to
155
+ */
156
+ export const timeCorrectedToSeconds = (datetime, withSeconds) => {
157
+ if (withSeconds) {
158
+ return datetime.substring(datetime.indexOf("T") + 1, datetime.indexOf("."));
159
+ }
160
+ return `${datetime.substring(
161
+ datetime.indexOf("T") + 1,
162
+ datetime.lastIndexOf(":")
163
+ )}:00`;
164
+ };
165
+
166
+ /**
167
+ * This function handles the cosmos blur handler of DateTime components
168
+ *
169
+ * @param {string | undefined} errorState for the selected datetime value
170
+ * @param {string} actualValue present in redux
171
+ * @param {string} formattedValue retrieved by trimming ISO to just Date/Time, also applying timezone if DateTime
172
+ * @param {object} actions object which has fire and blur callbacks
173
+ * @param {string} propName name of the property bound
174
+ * @param {object} pConn component's PConnect object which is useful to invoke validationApi
175
+ *
176
+ * @returns {void}
177
+ */
178
+ export const datetimeFireChangeBlurEvents = (
179
+ errorState,
180
+ actualValue,
181
+ formattedValue,
182
+ actions,
183
+ propName,
184
+ pConn
185
+ ) => {
186
+
187
+ // TODO - clean up, we should not rely on timestamp from cosmos to check InComplete validation
188
+ // above triggerFieldChange should have validated this
189
+ if (errorState) {
190
+ pConn.getValidationApi().validate(errorState);
191
+ }
192
+ // BUG-640834 In errorState presist old values avoiding store update & re-render.
193
+ else{
194
+ if (formattedValue !== actualValue) {
195
+ actions.updateFieldValue(propName, formattedValue);
196
+ }
197
+ actions.triggerFieldChange(propName, formattedValue);
198
+ }
199
+ };
200
+
201
+ /**
202
+ * Return Date format for the locale passed
203
+ *
204
+ * @param {string} locale locale string
205
+ * @param {object} options options for format string
206
+ * @returns {string} dateformat for the locale
207
+ * Example : getDateFormat("pl-PL") returns "DD.MM.YYYY"
208
+ */
209
+ export const getDateFormat = (locale, options) => {
210
+ return new Intl.DateTimeFormat(locale, options)
211
+ .formatToParts()
212
+ .map(({ type, value }) => {
213
+ switch (type) {
214
+ case "day":
215
+ return "DD";
216
+ case "month":
217
+ return "MM";
218
+ case "year":
219
+ return "YYYY";
220
+ case "hour":
221
+ return "hh";
222
+ case "minute":
223
+ return "mm";
224
+ case "second":
225
+ return "ss";
226
+ case "dayPeriod":
227
+ return "A";
228
+ case "literal":
229
+ return value;
230
+ default:
231
+ return "";
232
+ }
233
+ })
234
+ .join("");
235
+ };
236
+
237
+ /**
238
+ * Return boolean for the locale passed to specify if locale uses 12 hour format
239
+ *
240
+ * @param {string} locale locale string
241
+ * @returns {boolean} True or False for the locale
242
+ * Example : getDateFormat("pl-PL") returns false
243
+ */
244
+ export const is12HClockFormat = (locale) => {
245
+ const meridiem = new Intl.DateTimeFormat(locale, {
246
+ hour: "numeric"
247
+ })
248
+ .formatToParts()
249
+ .find(({ type }) => type === "dayPeriod");
250
+ return !!(meridiem === null || meridiem === undefined
251
+ ? undefined
252
+ : meridiem.value);
253
+ };
254
+
255
+ /**
256
+ * Return Option object for Time formatting
257
+ *
258
+ * @param {boolean} withSeconds true or false depending on seconds to be included
259
+ * @param {boolean} is12h 12 hour format
260
+ * @returns {object} options object time formatting
261
+ * Example : getTimeOptions(false, true) returns {hour: 'numeric',minute: 'numeric',hour12: true}
262
+ */
263
+ export const getTimeOptions = (withSeconds, is12h = false) => {
264
+ return {
265
+ hour: "numeric",
266
+ minute: "numeric",
267
+ ...(withSeconds && { second: "numeric" }),
268
+ hour12: is12h
269
+ };
270
+ };
271
+
272
+ /**
273
+ * Return Option object for Datetime formatting
274
+ *
275
+ * @param {boolean} withSeconds true or false depending on seconds to be included
276
+ * @param {boolean} is12h 12 hour format
277
+ * @returns {object} options object datetime formatting
278
+ * Example : getDateTimeOptions(false, true) returns {year: 'numeric',month: 'numeric',day: 'numeric',hour: 'numeric',minute: 'numeric',hour12: true}
279
+ */
280
+ export const getDateTimeOptions = (withSeconds, is12h = false) => {
281
+ return {
282
+ year: "numeric",
283
+ month: "numeric",
284
+ day: "numeric",
285
+ ...getTimeOptions(withSeconds, is12h)
286
+ };
287
+ };
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="100px" height="70px" viewBox="0 0 100 70" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>1 col </title>
4
+ <g id="Page-Config" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
5
+ <g id="Page-layouts" transform="translate(-692.000000, -84.000000)">
6
+ <g id="1-col-" transform="translate(692.000000, 84.000000)">
7
+ <rect id="bg" stroke="#A5A8BC" stroke-width="0.5" fill="#E7E9EB" x="0.25" y="0.25" width="99.5" height="69.5"></rect>
8
+ <g id="white" transform="translate(3.000000, 3.000000)" fill="#FFFFFF">
9
+ <rect id="Rectangle" x="0" y="0" width="94" height="66.5"></rect>
10
+ </g>
11
+ <g id="gray" transform="translate(6.000000, 6.000000)" fill="#8084A7">
12
+ <rect id="Rectangle" x="0" y="-2.84217094e-14" width="88" height="63.8"></rect>
13
+ </g>
14
+ <g id="labels" transform="translate(44.000000, 17.000000)" fill="#FFFFFF" font-family="OpenSans-Semibold, Open Sans" font-size="11" font-weight="500">
15
+ <text id="A">
16
+ <tspan x="0.75" y="12">A</tspan>
17
+ </text>
18
+ </g>
19
+ </g>
20
+ </g>
21
+ </g>
22
+ </svg>
@@ -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,36 @@
1
+ {
2
+ "name": "{{COMPONENT_KEY}}",
3
+ "label": "{{COMPONENT_LABEL}}",
4
+ "description": "{{DESCRIPTION}}",
5
+ "organization": "{{ORGANIZATION}}",
6
+ "version": "{{VERSION}}",
7
+ "library": "{{LIBRARY}}",
8
+ "allowedApplications": {{{ALLOWEDAPPS}}},
9
+ "componentKey": "{{COMPONENT_KEY}}",
10
+ "compName" : "{{COMPONENT_CLASS_NAME}}",
11
+ "type": "{{TYPE}}",
12
+ "subtype": {{{SUB_TYPE}}},
13
+ "icon": "OneColumnDetails.svg",
14
+ "properties": [
15
+ {
16
+ "name": "showHighlightedData",
17
+ "label": "Enable highlighted fields",
18
+ "format": "BOOLEAN"
19
+ },
20
+ {
21
+ "name": "highlightedData",
22
+ "label": "Highlighted fields",
23
+ "format": "CONTENTPICKER",
24
+ "addTypeList": ["Fields"],
25
+ "visibility": "$this.showHighlightedData = true",
26
+ "saveToConfig": true
27
+ },
28
+ {
29
+ "name": "A",
30
+ "label": "Region A",
31
+ "format": "CONTENTPICKER",
32
+ "addTypeList": ["Fields", "Views"],
33
+ "allowCreatingGroup": true
34
+ }
35
+ ]
36
+ }
@@ -0,0 +1,132 @@
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 renderField = resolvedProps => {
12
+ const {
13
+ displayAsStatus = false,
14
+ displayMode,
15
+ value = '',
16
+ label = '',
17
+ key,
18
+ // eslint-disable-next-line react-hooks/rules-of-hooks
19
+ theme = useTheme()
20
+ } = resolvedProps;
21
+
22
+ const variant = displayMode === 'LABELS_LEFT' ? 'inline' : 'stacked';
23
+
24
+ let val =
25
+ value !== '' ? (
26
+ <Text variant='h1' as='span' key={key}>
27
+ {value}
28
+ </Text>
29
+ ) : (
30
+ ''
31
+ );
32
+
33
+ if (label === 'Create date/time')
34
+ val = (
35
+ <DateTimeDisplay
36
+ value={value}
37
+ variant='datetime'
38
+ format='long'
39
+ clockFormat={null}
40
+ key={key}
41
+ />
42
+ );
43
+
44
+ if (displayAsStatus === true) val = <StatusWorkRenderer value={value} key={key} />;
45
+
46
+ if (label === 'Create Operator')
47
+ val = (
48
+ <Button
49
+ key={key}
50
+ variant='link'
51
+ style={
52
+ label !== null
53
+ ? { width: 'max-content', height: theme.components.input.height }
54
+ : undefined
55
+ }
56
+ >
57
+ {value.userName}
58
+ </Button>
59
+ );
60
+
61
+ if (variant === 'inline') {
62
+ val = value || (
63
+ <span aria-hidden='true' key={key}>
64
+ &ndash;&ndash;
65
+ </span>
66
+ );
67
+ } else {
68
+ val = (
69
+ <Text variant='h1' as='span' key={key}>
70
+ {val}
71
+ </Text>
72
+ );
73
+ }
74
+ return <FieldValueList variant={variant} fields={[{ name: label, value: val }]} key={key} />;
75
+ };
76
+
77
+ export const base{{COMPONENT_CLASS_NAME}} = () => {
78
+ const props = {
79
+ template: 'MyCo_MyComponents_NewDetailsTemplate',
80
+ showHighlightedData: true,
81
+ label: 'Test Details',
82
+ showLabel: true,
83
+ getPConnect: () => {
84
+ return {
85
+ getChildren: () => {
86
+ return pyReviewRaw.children;
87
+ },
88
+ getRawMetadata: () => {
89
+ return pyReviewRaw;
90
+ },
91
+ getInheritedProps: () => {
92
+ return pyReviewRaw.config.inheritedProps;
93
+ },
94
+ createComponent: config => {
95
+ // eslint-disable-next-line default-case
96
+ switch (config.config.value) {
97
+ case '@P .pyStatusWork':
98
+ return renderField(pyReviewResolved.highlightedData[0].config);
99
+ case '@P .pyID':
100
+ return renderField(pyReviewResolved.highlightedData[1].config);
101
+ case '@P .pxCreateDateTime':
102
+ return renderField(pyReviewResolved.highlightedData[2].config);
103
+ case '@USER .pxCreateOperator':
104
+ return renderField(pyReviewResolved.highlightedData[3].config);
105
+ case '@P .pySLADeadline':
106
+ return renderField(regionChildrenResolved[0]);
107
+ case '@P .pySLAGoal':
108
+ return renderField(regionChildrenResolved[1]);
109
+ case '@P .pySLAStartTime':
110
+ return renderField(regionChildrenResolved[2]);
111
+ }
112
+ },
113
+ setInheritedProp: () => {
114
+ /* nothing */
115
+ },
116
+ resolveConfigProps: () => {
117
+ /* nothing */
118
+ }
119
+ };
120
+ }
121
+ };
122
+
123
+ const regionAChildren = pyReviewRaw.children[0].children.map(child => {
124
+ return props.getPConnect().createComponent(child);
125
+ });
126
+
127
+ return (
128
+ <>
129
+ <{{COMPONENT_CLASS_NAME}} {...props}>{regionAChildren}</{{COMPONENT_CLASS_NAME}}>
130
+ </>
131
+ );
132
+ };
@@ -0,0 +1,86 @@
1
+ import { Fragment } from 'react';
2
+ import { Grid, Flex, FieldGroup } from '@pega/cosmos-react-core';
3
+ import PropTypes from 'prop-types';
4
+
5
+ import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
6
+
7
+ // includes in bundle
8
+ import { getAllFields } from './utils';
9
+
10
+ // Duplicated runtime code from Constellation Design System Component
11
+
12
+ // props passed in combination of props from property panel (config.json) and run time props from Constellation
13
+ // any default values in config.pros should be set in defaultProps at bottom of this file
14
+ export default function {{COMPONENT_CLASS_NAME}}(props) {
15
+
16
+ const { getPConnect, children, label, showLabel, showHighlightedData } = props;
17
+ const propsToUse = { label, showLabel, ...getPConnect().getInheritedProps() };
18
+
19
+ const numRegions = getAllFields(getPConnect)?.length;
20
+ const gridRepeat = "repeat(".concat(numRegions).concat(", 1fr)");
21
+ const gridContainer = { "colGap": 1};
22
+ gridContainer.cols = gridRepeat;
23
+ gridContainer.alignItems = 'start';
24
+
25
+ const gridHighlightContainer = { "gap": 2};
26
+ gridHighlightContainer.cols = gridRepeat;
27
+ gridHighlightContainer.alignItems = 'start';
28
+ gridHighlightContainer.pad = [0, 0, 2, 0];
29
+
30
+ // Set up highlighted data to pass in return if is set to show, need raw metadata to pass to createComponent
31
+ let highlightedDataArr = [];
32
+ if (showHighlightedData) {
33
+ const { highlightedData = [] } = getPConnect().getRawMetadata().config;
34
+ highlightedDataArr = highlightedData.map((field) => {
35
+ field.config.displayMode = 'STACKED_LARGE_VAL';
36
+
37
+ // Mark as status display when using pyStatusWork
38
+ if (field.config.value === '@P .pyStatusWork') {
39
+ field.type = 'TextInput';
40
+ field.config.displayAsStatus = true;
41
+ }
42
+
43
+ return getPConnect().createComponent(field);
44
+ });
45
+ }
46
+
47
+ return (
48
+ <Styled{{COMPONENT_CLASS_NAME}}Wrapper>
49
+ {{! pick new delimiteres for mustache }}
50
+ {{=<% %>=}}
51
+ <FieldGroup name={propsToUse.showLabel ? propsToUse.label : ''}>
52
+ {showHighlightedData && highlightedDataArr.length > 0 && (
53
+ <Grid container={gridHighlightContainer}
54
+ data-testid={`highlighted-column-count-${numRegions}`}>
55
+ {highlightedDataArr.map((child, i) => (
56
+ <Fragment key={`hf-${i + 1}`}>{child}</Fragment>
57
+ ))}
58
+ </Grid>
59
+ )}
60
+ <Grid container={gridContainer} data-testid={`column-count-${numRegions}`} >
61
+ {children.map((child, i) => (
62
+ <Flex container={{ direction: 'column'}} key={`r-${i + 1}`}>
63
+ {child}
64
+ </Flex>
65
+ ))}
66
+ </Grid>
67
+ </FieldGroup>
68
+ <%={{ }}=%> {{! revert delimiteres for mustache }}
69
+ </Styled{{COMPONENT_CLASS_NAME}}Wrapper>
70
+ );
71
+
72
+ }
73
+
74
+ {{COMPONENT_CLASS_NAME}}.defaultProps = {
75
+ label: undefined,
76
+ showLabel: true,
77
+ showHighlightedData: false
78
+ };
79
+
80
+
81
+ {{COMPONENT_CLASS_NAME}}.propTypes = {
82
+ showLabel: PropTypes.bool,
83
+ label: PropTypes.string,
84
+ getPConnect: PropTypes.func.isRequired,
85
+ showHighlightedData: PropTypes.bool
86
+ };