@pega/custom-dx-components 26.1.11 → 26.1.12-alpha.0.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 (323) hide show
  1. package/README.md +6 -2
  2. package/package.json +48 -64
  3. package/src/ai/README.md +44 -0
  4. package/src/ai/catalog/README.md +133 -0
  5. package/src/ai/catalog/best-practices/README.md +24 -0
  6. package/src/ai/catalog/best-practices/accessibility-for-async-components.md +53 -0
  7. package/src/ai/catalog/best-practices/error-handling-and-resiliency.md +116 -0
  8. package/src/ai/catalog/best-practices/genai-assistant-integration-patterns.md +49 -0
  9. package/src/ai/catalog/best-practices/performance-and-efficiency.md +109 -0
  10. package/src/ai/catalog/best-practices/security-considerations.md +93 -0
  11. package/src/ai/catalog/best-practices/testing-pconnect-components.md +245 -0
  12. package/src/ai/catalog/best-practices/troubleshooting-common-pitfalls.md +132 -0
  13. package/src/ai/catalog/pconnect-assignment-lifecycle/SKILL.md +44 -0
  14. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/README.md +39 -0
  15. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/approval-workflow-decision.md +47 -0
  16. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/attachment-upload.md +45 -0
  17. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/bulk-action-submit.md +50 -0
  18. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/confirm-before-destructive-action.md +43 -0
  19. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/create-and-stage-new-case.md +45 -0
  20. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/graceful-submit-failure.md +39 -0
  21. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/modal-assignment-submit.md +58 -0
  22. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/multi-step-wizard.md +44 -0
  23. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/resolve-or-ignore-duplicate.md +47 -0
  24. package/src/ai/catalog/pconnect-assignment-lifecycle/cookbooks/safe-case-deletion.md +36 -0
  25. package/src/ai/catalog/pconnect-case-collaboration/SKILL.md +42 -0
  26. package/src/ai/catalog/pconnect-case-collaboration/cookbooks/README.md +36 -0
  27. package/src/ai/catalog/pconnect-case-collaboration/cookbooks/look-up-user-details.md +43 -0
  28. package/src/ai/catalog/pconnect-case-collaboration/cookbooks/manage-case-attachments.md +51 -0
  29. package/src/ai/catalog/pconnect-case-collaboration/cookbooks/manage-case-participants.md +52 -0
  30. package/src/ai/catalog/pconnect-case-collaboration/cookbooks/participant-and-follower.md +40 -0
  31. package/src/ai/catalog/pconnect-case-collaboration/cookbooks/post-and-manage-feed.md +50 -0
  32. package/src/ai/catalog/pconnect-case-collaboration/cookbooks/relate-cases.md +35 -0
  33. package/src/ai/catalog/pconnect-case-collaboration/cookbooks/tag-case-and-find-related.md +44 -0
  34. package/src/ai/catalog/pconnect-data-subscriptions/SKILL.md +42 -0
  35. package/src/ai/catalog/pconnect-data-subscriptions/cookbooks/README.md +35 -0
  36. package/src/ai/catalog/pconnect-data-subscriptions/cookbooks/data-page-subscription-cleanup.md +41 -0
  37. package/src/ai/catalog/pconnect-data-subscriptions/cookbooks/publish-and-subscribe-events.md +40 -0
  38. package/src/ai/catalog/pconnect-data-subscriptions/cookbooks/pubsub-cleanup.md +38 -0
  39. package/src/ai/catalog/pconnect-data-subscriptions/cookbooks/query-paginated-list-data.md +44 -0
  40. package/src/ai/catalog/pconnect-data-subscriptions/cookbooks/realtime-case-subscription.md +46 -0
  41. package/src/ai/catalog/pconnect-data-subscriptions/cookbooks/refresh-and-update-data.md +41 -0
  42. package/src/ai/catalog/pconnect-forms-and-fields/SKILL.md +44 -0
  43. package/src/ai/catalog/pconnect-forms-and-fields/cookbooks/README.md +36 -0
  44. package/src/ai/catalog/pconnect-forms-and-fields/cookbooks/autosave-tracking.md +45 -0
  45. package/src/ai/catalog/pconnect-forms-and-fields/cookbooks/cascading-dependent-fields.md +51 -0
  46. package/src/ai/catalog/pconnect-forms-and-fields/cookbooks/collect-form-changes-for-manual-save.md +45 -0
  47. package/src/ai/catalog/pconnect-forms-and-fields/cookbooks/custom-field-validators.md +44 -0
  48. package/src/ai/catalog/pconnect-forms-and-fields/cookbooks/discard-changes-and-reset-form.md +41 -0
  49. package/src/ai/catalog/pconnect-forms-and-fields/cookbooks/full-form-validation.md +38 -0
  50. package/src/ai/catalog/pconnect-forms-and-fields/cookbooks/persist-widget-ui-state.md +41 -0
  51. package/src/ai/catalog/pconnect-lists-and-views/SKILL.md +44 -0
  52. package/src/ai/catalog/pconnect-lists-and-views/cookbooks/README.md +35 -0
  53. package/src/ai/catalog/pconnect-lists-and-views/cookbooks/activate-and-switch-container-items.md +52 -0
  54. package/src/ai/catalog/pconnect-lists-and-views/cookbooks/container-item-lifecycle.md +61 -0
  55. package/src/ai/catalog/pconnect-lists-and-views/cookbooks/insert-delete-list-rows.md +40 -0
  56. package/src/ai/catalog/pconnect-lists-and-views/cookbooks/reorder-list-rows.md +39 -0
  57. package/src/ai/catalog/pconnect-lists-and-views/cookbooks/repeating-row-edit.md +39 -0
  58. package/src/ai/catalog/pconnect-lists-and-views/cookbooks/view-personalization.md +60 -0
  59. package/src/ai/catalog/pconnect-navigation-locale-genai/SKILL.md +45 -0
  60. package/src/ai/catalog/pconnect-navigation-locale-genai/cookbooks/README.md +35 -0
  61. package/src/ai/catalog/pconnect-navigation-locale-genai/cookbooks/agent-conversation-for-tasks.md +54 -0
  62. package/src/ai/catalog/pconnect-navigation-locale-genai/cookbooks/bookmarkable-filter-state.md +40 -0
  63. package/src/ai/catalog/pconnect-navigation-locale-genai/cookbooks/deep-link-semantic-url.md +39 -0
  64. package/src/ai/catalog/pconnect-navigation-locale-genai/cookbooks/genai-assistant-conversation.md +43 -0
  65. package/src/ai/catalog/pconnect-navigation-locale-genai/cookbooks/locale-switch-and-relocalize.md +38 -0
  66. package/src/ai/catalog/pconnect-navigation-locale-genai/cookbooks/persist-operator-preferences.md +40 -0
  67. package/src/ai/catalog/references/architecture-overview.md +52 -0
  68. package/src/ai/catalog/references/pconnect-actions-api.md +948 -0
  69. package/src/ai/catalog/references/pconnect-case-info-data-info-localization.md +618 -0
  70. package/src/ai/catalog/references/pconnect-case-validation-utilities.md +238 -0
  71. package/src/ai/catalog/references/pconnect-container-manager.md +215 -0
  72. package/src/ai/catalog/references/pconnect-list-actions.md +250 -0
  73. package/src/ai/catalog/references/pconnect-misc-suggestions-creation.md +231 -0
  74. package/src/ai/catalog/references/pconnect-reference-context-component.md +471 -0
  75. package/src/ai/catalog/references/pconnect-state-config.md +316 -0
  76. package/src/ai/catalog/references/pconnect-validation-api.md +45 -0
  77. package/src/ai/catalog/references/pcore-analytics-genai-details.md +50 -0
  78. package/src/ai/catalog/references/pcore-bootstrap-init-details.md +121 -0
  79. package/src/ai/catalog/references/pcore-bootstrap-registry-routing.md +253 -0
  80. package/src/ai/catalog/references/pcore-case-collaboration-details.md +191 -0
  81. package/src/ai/catalog/references/pcore-case-collaboration-genai.md +264 -0
  82. package/src/ai/catalog/references/pcore-environment-info-details.md +96 -0
  83. package/src/ai/catalog/references/pcore-environment-locale-namespace.md +175 -0
  84. package/src/ai/catalog/references/pcore-messaging-details.md +99 -0
  85. package/src/ai/catalog/references/pcore-misc-details.md +207 -0
  86. package/src/ai/catalog/references/pcore-misc-utilities.md +325 -0
  87. package/src/ai/catalog/references/pcore-rest-data-details.md +164 -0
  88. package/src/ai/catalog/references/pcore-rest-data-messaging.md +308 -0
  89. package/src/ai/catalog/references/pcore-store-context-details.md +40 -0
  90. package/src/ai/catalog/references/pcore-store-context-state.md +130 -0
  91. package/src/ai/index.js +154 -0
  92. package/src/ai/project/.claude/skills/boolean/SKILL.md +43 -0
  93. package/src/ai/project/.claude/skills/case/SKILL.md +58 -0
  94. package/src/ai/project/.claude/skills/create-dx-component/SKILL.md +98 -0
  95. package/src/ai/project/.claude/skills/create-dx-component/assets/PConnProps.d.ts +24 -0
  96. package/src/ai/project/.claude/skills/create-dx-component/assets/create-nonce.ts +5 -0
  97. package/src/ai/project/.claude/skills/create-dx-component/assets/event-utils.ts +18 -0
  98. package/src/ai/project/.claude/skills/create-dx-component/assets/styles.ts +7 -0
  99. package/src/ai/project/.claude/skills/create-dx-component/cookbooks/README.md +28 -0
  100. package/src/ai/project/.claude/skills/create-dx-component/cookbooks/build-a-data-widget.md +281 -0
  101. package/src/ai/project/.claude/skills/create-dx-component/cookbooks/field-with-limits-and-validation.md +156 -0
  102. package/src/ai/project/.claude/skills/create-dx-component/cookbooks/status-badge-field.md +97 -0
  103. package/src/ai/project/.claude/skills/create-dx-component/references/accessibility.md +71 -0
  104. package/src/ai/project/.claude/skills/create-dx-component/references/choosing-type-and-subtype.md +79 -0
  105. package/src/ai/project/.claude/skills/create-dx-component/references/cli-workflow.md +125 -0
  106. package/src/ai/project/.claude/skills/create-dx-component/references/component-patterns.md +241 -0
  107. package/src/ai/project/.claude/skills/create-dx-component/references/config-schema.md +296 -0
  108. package/src/ai/project/.claude/skills/create-dx-component/references/cosmos-components.md +137 -0
  109. package/src/ai/project/.claude/skills/create-dx-component/references/field-behavior.md +155 -0
  110. package/src/ai/project/.claude/skills/create-dx-component/references/field-essentials.md +90 -0
  111. package/src/ai/project/.claude/skills/create-dx-component/references/field-subtypes-extra.md +68 -0
  112. package/src/ai/project/.claude/skills/create-dx-component/references/localization.md +30 -0
  113. package/src/ai/project/.claude/skills/create-dx-component/references/pcore-pconnect-apis.md +77 -0
  114. package/src/ai/project/.claude/skills/create-dx-component/references/presentation-essentials.md +57 -0
  115. package/src/ai/project/.claude/skills/create-dx-component/references/props-contract.md +182 -0
  116. package/src/ai/project/.claude/skills/create-dx-component/references/state-matrix.md +102 -0
  117. package/src/ai/project/.claude/skills/create-dx-component/references/storybook-pattern.md +262 -0
  118. package/src/ai/project/.claude/skills/create-dx-component/references/styles-pattern.md +54 -0
  119. package/src/ai/project/.claude/skills/create-dx-component/references/template-essentials.md +87 -0
  120. package/src/ai/project/.claude/skills/create-dx-component/references/template-patterns.md +131 -0
  121. package/src/ai/project/.claude/skills/create-dx-component/references/test-pattern.md +215 -0
  122. package/src/ai/project/.claude/skills/create-dx-component/references/ui-gallery-reuse.md +93 -0
  123. package/src/ai/project/.claude/skills/create-dx-component/references/widget-essentials.md +84 -0
  124. package/src/ai/project/.claude/skills/create-dx-component/references/widget-patterns.md +164 -0
  125. package/src/ai/project/.claude/skills/currency/SKILL.md +46 -0
  126. package/src/ai/project/.claude/skills/date/SKILL.md +46 -0
  127. package/src/ai/project/.claude/skills/decimal/SKILL.md +49 -0
  128. package/src/ai/project/.claude/skills/details/SKILL.md +60 -0
  129. package/src/ai/project/.claude/skills/email/SKILL.md +42 -0
  130. package/src/ai/project/.claude/skills/field/SKILL.md +68 -0
  131. package/src/ai/project/.claude/skills/form/SKILL.md +51 -0
  132. package/src/ai/project/.claude/skills/generate-component-set/SKILL.md +80 -0
  133. package/src/ai/project/.claude/skills/generate-component-set/component-manifest.json +161 -0
  134. package/src/ai/project/.claude/skills/identify-components/SKILL.md +76 -0
  135. package/src/ai/project/.claude/skills/integer/SKILL.md +45 -0
  136. package/src/ai/project/.claude/skills/page/SKILL.md +60 -0
  137. package/src/ai/project/.claude/skills/page-widget/SKILL.md +55 -0
  138. package/src/ai/project/.claude/skills/percentage/SKILL.md +52 -0
  139. package/src/ai/project/.claude/skills/phone/SKILL.md +44 -0
  140. package/src/ai/project/.claude/skills/picklist/SKILL.md +50 -0
  141. package/src/ai/project/.claude/skills/plan-dx-component/SKILL.md +51 -0
  142. package/src/ai/project/.claude/skills/plan-dx-component/references/design-system-mapping.md +108 -0
  143. package/src/ai/project/.claude/skills/plan-dx-component/references/intake.md +146 -0
  144. package/src/ai/project/.claude/skills/plan-dx-component/references/plan-template.md +76 -0
  145. package/src/ai/project/.claude/skills/plan-dx-component/references/requirements-template.md +88 -0
  146. package/src/ai/project/.claude/skills/presentation/SKILL.md +61 -0
  147. package/src/ai/project/.claude/skills/publish-library/SKILL.md +106 -0
  148. package/src/ai/project/.claude/skills/radiobuttons/SKILL.md +51 -0
  149. package/src/ai/project/.claude/skills/review-component/SKILL.md +49 -0
  150. package/src/ai/project/.claude/skills/review-component/references/checklist.md +77 -0
  151. package/src/ai/project/.claude/skills/template/SKILL.md +60 -0
  152. package/src/ai/project/.claude/skills/text/SKILL.md +45 -0
  153. package/src/ai/project/.claude/skills/update-dx-component/SKILL.md +56 -0
  154. package/src/ai/project/.claude/skills/update-dx-component/references/maintenance.md +43 -0
  155. package/src/ai/project/.claude/skills/url/SKILL.md +46 -0
  156. package/src/ai/project/.claude/skills/validate-component/SKILL.md +78 -0
  157. package/src/ai/project/.claude/skills/validate-component/references/runtime-troubleshooting.md +56 -0
  158. package/src/ai/project/.claude/skills/validate-component/scripts/check-component.mjs +327 -0
  159. package/src/ai/project/.claude/skills/widget/SKILL.md +59 -0
  160. package/src/ai/project/.gemini/settings.json +5 -0
  161. package/src/ai/project/AGENTS.md +74 -0
  162. package/src/ai/readme-section.md +91 -0
  163. package/src/cli.js +48 -7
  164. package/src/constants.js +54 -53
  165. package/src/internal-tests.js +27 -0
  166. package/src/tasks/ai-toggle/index.js +46 -0
  167. package/src/tasks/authenticate/helper.js +38 -38
  168. package/src/tasks/authenticate/index.js +17 -15
  169. package/src/tasks/build-all/helper.js +4 -4
  170. package/src/tasks/build-all/index.js +7 -7
  171. package/src/tasks/build-comp/helper.js +17 -17
  172. package/src/tasks/build-comp/index.js +10 -10
  173. package/src/tasks/build-jest-assets/index.js +7 -9
  174. package/src/tasks/build-lib/helper.js +8 -8
  175. package/src/tasks/build-lib/index.js +8 -8
  176. package/src/tasks/bundle/builder/index.js +9 -12
  177. package/src/tasks/bundle/builder/modules.js +8 -9
  178. package/src/tasks/bundle/builder/paths.js +2 -19
  179. package/src/tasks/bundle/builder/webpack.config.js +60 -77
  180. package/src/tasks/bundle/index.js +8 -8
  181. package/src/tasks/create/index.js +35 -35
  182. package/src/tasks/create/templates/Constellation/Field/Boolean/index.tsx.mustache +1 -36
  183. package/src/tasks/create/templates/Constellation/Field/Date/date.ts.mustache +2 -2
  184. package/src/tasks/create/templates/Constellation/Field/Date/index.tsx.mustache +2 -27
  185. package/src/tasks/create/templates/Constellation/Field/DateTime/date-utils.ts.mustache +2 -2
  186. package/src/tasks/create/templates/Constellation/Field/DateTime/date.ts.mustache +2 -2
  187. package/src/tasks/create/templates/Constellation/Field/DateTime/index.tsx.mustache +2 -35
  188. package/src/tasks/create/templates/Constellation/Field/Decimal/index.tsx.mustache +3 -36
  189. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/index.tsx.mustache +4 -39
  190. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/index.tsx.mustache +4 -53
  191. package/src/tasks/create/templates/Constellation/Field/Icon-Button-URL/index.tsx.mustache +5 -5
  192. package/src/tasks/create/templates/Constellation/Field/Integer/index.tsx.mustache +3 -36
  193. package/src/tasks/create/templates/Constellation/Field/Picklist/index.tsx.mustache +7 -42
  194. package/src/tasks/create/templates/Constellation/Field/Picklist-Autocomplete/component-constants.ts +1 -1
  195. package/src/tasks/create/templates/Constellation/Field/Picklist-Autocomplete/date.ts.mustache +0 -2
  196. package/src/tasks/create/templates/Constellation/Field/Picklist-Autocomplete/embed-utils.ts.mustache +1 -1
  197. package/src/tasks/create/templates/Constellation/Field/Picklist-Autocomplete/index.tsx.mustache +11 -11
  198. package/src/tasks/create/templates/Constellation/Field/Picklist-Autocomplete/repeat-utils.ts.mustache +3 -13
  199. package/src/tasks/create/templates/Constellation/Field/Picklist-Autocomplete/textformat-utils.tsx.mustache +2 -3
  200. package/src/tasks/create/templates/Constellation/Field/Picklist-Autocomplete/utils.ts.mustache +28 -28
  201. package/src/tasks/create/templates/Constellation/Field/Picklist-RadioButtons/index.tsx.mustache +2 -2
  202. package/src/tasks/create/templates/Constellation/Field/Picklist-RadioButtons/textformat-utils.tsx.mustache +2 -3
  203. package/src/tasks/create/templates/Constellation/Field/Text/index.tsx.mustache +4 -33
  204. package/src/tasks/create/templates/Constellation/Field/Text-Email/index.tsx.mustache +3 -33
  205. package/src/tasks/create/templates/Constellation/Field/Text-Input/index.tsx.mustache +3 -31
  206. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/index.tsx.mustache +3 -31
  207. package/src/tasks/create/templates/Constellation/Field/Text-Phone/index.tsx.mustache +3 -35
  208. package/src/tasks/create/templates/Constellation/Field/Text-URL/index.tsx.mustache +3 -33
  209. package/src/tasks/create/templates/Constellation/Field/Text-URL/text-url.tsx.mustache +2 -3
  210. package/src/tasks/create/templates/Constellation/Field/TimeofDay/index.tsx.mustache +2 -35
  211. package/src/tasks/create/templates/Constellation/Field/TimeofDay/time-of-day.ts.mustache +2 -2
  212. package/src/tasks/create/templates/Constellation/Template/DETAILS/Avatar.tsx.mustache +19 -15
  213. package/src/tasks/create/templates/Constellation/Template/DETAILS/Operator.tsx.mustache +6 -6
  214. package/src/tasks/create/templates/Constellation/Template/DETAILS/demo.stories.tsx.mustache +1 -1
  215. package/src/tasks/create/templates/Constellation/Template/DETAILS/index.tsx.mustache +4 -8
  216. package/src/tasks/create/templates/Constellation/Template/DETAILS/mock.ts.mustache +9 -9
  217. package/src/tasks/create/templates/Constellation/Template/DETAILS/utils.js.mustache +4 -8
  218. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/Avatar.tsx.mustache +19 -15
  219. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/Operator.tsx.mustache +6 -6
  220. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/demo.stories.tsx.mustache +1 -1
  221. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/index.tsx.mustache +1 -1
  222. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/mock.ts.mustache +9 -9
  223. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/utils.ts.mustache +4 -8
  224. package/src/tasks/create/templates/Constellation/Template/FORM/demo.stories.tsx.mustache +8 -8
  225. package/src/tasks/create/templates/Constellation/Template/FORM-region/demo.stories.tsx.mustache +8 -8
  226. package/src/tasks/create/templates/Constellation/Template/PAGE/utils.ts.mustache +4 -9
  227. package/src/tasks/create/templates/Constellation/Widget/CASE/demo.test.tsx.mustache +3 -3
  228. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/Avatar.tsx.mustache +19 -14
  229. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/Operator.tsx.mustache +6 -6
  230. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/index.tsx.mustache +1 -1
  231. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/mock.ts.mustache +1 -1
  232. package/src/tasks/create/templates/Launchpad/Field/Icon-Button-URL/index.tsx.mustache +5 -5
  233. package/src/tasks/create/templates/Launchpad/Field/Text-Phone/index.tsx.mustache +3 -35
  234. package/src/tasks/create/templates/Launchpad/Field/__components.md +1 -1
  235. package/src/tasks/create/templates/Launchpad/Template/FORM/demo.stories.tsx.mustache +8 -8
  236. package/src/tasks/create/templates/Launchpad/Template/FORM-region/demo.stories.tsx.mustache +8 -8
  237. package/src/tasks/create/templates/Launchpad/Widget/CASE/demo.test.tsx.mustache +3 -3
  238. package/src/tasks/create/templates/Launchpad/Widget/PAGE-CASE/index.tsx.mustache +1 -1
  239. package/src/tasks/create/templates/Launchpad/Widget/PAGE-CASE/mock.ts.mustache +1 -1
  240. package/src/tasks/create-all/index.js +42 -41
  241. package/src/tasks/create-lib/helper.js +13 -13
  242. package/src/tasks/create-lib/index.js +5 -5
  243. package/src/tasks/create-version/helper.js +10 -10
  244. package/src/tasks/create-version/index.js +3 -4
  245. package/src/tasks/delete/helper.js +20 -19
  246. package/src/tasks/delete/index.js +2 -2
  247. package/src/tasks/delete-all/helper.js +26 -25
  248. package/src/tasks/delete-all/index.js +2 -2
  249. package/src/tasks/delete-lib/helper.js +6 -6
  250. package/src/tasks/delete-lib/index.js +6 -6
  251. package/src/tasks/delete-pub/helper.js +18 -18
  252. package/src/tasks/delete-pub/index.js +8 -8
  253. package/src/tasks/delete-version/index.js +2 -2
  254. package/src/tasks/dev-server/index.js +1 -1
  255. package/src/tasks/export-archive/helper.js +21 -21
  256. package/src/tasks/export-archive/index.js +27 -40
  257. package/src/tasks/export-rc/helper.js +34 -34
  258. package/src/tasks/export-rc/index.js +21 -31
  259. package/src/tasks/import-archive/helper.js +39 -39
  260. package/src/tasks/import-archive/index.js +69 -89
  261. package/src/tasks/import-comp/helper.js +8 -8
  262. package/src/tasks/import-comp/index.js +30 -42
  263. package/src/tasks/index.js +5 -0
  264. package/src/tasks/init/Node.gitignore +149 -0
  265. package/src/tasks/init/helper.js +15 -8
  266. package/src/tasks/init/index.js +115 -35
  267. package/src/tasks/init/template/.prettierrc.json +4 -1
  268. package/src/tasks/init/template/.storybook/main.ts +1 -4
  269. package/src/tasks/init/template/.storybook/manager.ts +1 -1
  270. package/src/tasks/init/template/.storybook/preview.tsx +2 -2
  271. package/src/tasks/init/template/.storybook/theme.js +1 -1
  272. package/src/tasks/init/template/.vscode/extensions.json +0 -1
  273. package/src/tasks/init/template/README.md +2 -2
  274. package/src/tasks/init/template/eslint.config.mjs +13 -155
  275. package/src/tasks/init/template/jest.config.cjs +2 -0
  276. package/src/tasks/init/template/package-lock.json +26864 -0
  277. package/src/tasks/init/template/package.json.mustache +19 -74
  278. package/src/tasks/init/template/setupTests.ts +10 -4
  279. package/src/tasks/init/template/tsconfig.json +14 -6
  280. package/src/tasks/internal-test/index.js +21 -0
  281. package/src/tasks/internal-test-full/index.js +15 -0
  282. package/src/tasks/internal-test-functional/index.js +15 -0
  283. package/src/tasks/internal-test-unit/index.js +13 -0
  284. package/src/tasks/linter/index.js +2 -2
  285. package/src/tasks/list/helper.js +41 -40
  286. package/src/tasks/list/index.js +3 -3
  287. package/src/tasks/list-lib/helper.js +5 -5
  288. package/src/tasks/list-lib/index.js +8 -8
  289. package/src/tasks/list-pub/helper.js +23 -16
  290. package/src/tasks/list-pub/index.js +24 -21
  291. package/src/tasks/move/helper.js +8 -8
  292. package/src/tasks/move/index.js +19 -23
  293. package/src/tasks/promote-webpack/index.js +4 -4
  294. package/src/tasks/promote-webpack/webpack.config.js +62 -93
  295. package/src/tasks/publish/helper.js +21 -21
  296. package/src/tasks/publish/index.js +16 -16
  297. package/src/tasks/publish-all/helper.js +20 -20
  298. package/src/tasks/publish-all/index.js +11 -12
  299. package/src/tasks/publish-archive/helper.js +9 -9
  300. package/src/tasks/publish-archive/index.js +12 -14
  301. package/src/tasks/publish-lib/helper.js +3 -3
  302. package/src/tasks/publish-lib/index.js +28 -34
  303. package/src/tasks/quarantine/index.js +8 -8
  304. package/src/tasks/rename/index.js +26 -30
  305. package/src/tasks/rename-lib/index.js +21 -25
  306. package/src/tasks/restore/index.js +8 -8
  307. package/src/tasks/restore-config/index.js +3 -5
  308. package/src/tasks/set-perm/index.js +8 -8
  309. package/src/tasks/show-help/index.js +17 -9
  310. package/src/tasks/show-status/index.js +2 -2
  311. package/src/tasks/store/index.js +8 -8
  312. package/src/tasks/switch-lib/helper.js +7 -7
  313. package/src/tasks/switch-lib/index.js +7 -7
  314. package/src/tasks/switch-version/helper.js +6 -6
  315. package/src/tasks/switch-version/index.js +7 -7
  316. package/src/tasks/update/index.js +1 -1
  317. package/src/tasks/upgrade/index.js +7 -7
  318. package/src/tasks/validator/index.js +49 -203
  319. package/src/util.js +169 -186
  320. package/src/rules/no-pcore-pconnect-in-presentation.js +0 -103
  321. package/src/tasks/init/template/.stylelintrc.json +0 -4
  322. package/src/tasks/init/template/babel.config.cjs +0 -22
  323. package/src/tasks/init/template/cspell.json +0 -14
@@ -1,5 +1,5 @@
1
1
  import { useState, useEffect, useRef} from "react";
2
- import { Input, FieldValueList, Text, withConfiguration } from "@pega/cosmos-react-core";
2
+ import { Input, withConfiguration } from "@pega/cosmos-react-core";
3
3
  import type { PConnFieldProps } from './PConnProps';
4
4
  import './create-nonce';
5
5
 
@@ -53,7 +53,6 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
53
53
  testId,
54
54
  displayMode,
55
55
  additionalProps = {},
56
- variant = 'inline',
57
56
  isTableFormatter = false,
58
57
  displayAs = 'defaultURL',
59
58
  widthSel = 'defaultWidth',
@@ -115,44 +114,15 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
115
114
 
116
115
 
117
116
 
118
- if (displayMode === 'LABELS_LEFT' || displayMode === 'DISPLAY_ONLY') {
117
+ if (displayMode === 'DISPLAY_ONLY') {
119
118
  if (isTableFormatter && formatter !== 'URL' && formatExists(formatter)) {
120
119
  displayComp = textFormatter(formatter, value);
121
120
  }
122
- return displayMode === 'DISPLAY_ONLY' ? (
121
+ return (
123
122
  displayComp
124
- ) : (
125
- <Styled{{COMPONENT_CLASS_NAME}}Wrapper>
126
- <FieldValueList
127
- variant={hideLabel ? 'stacked' : variant}
128
- data-testid={testId}
129
- fields={[{ id: '1', name: hideLabel ? '' : label, value: displayComp }]}
130
- />
131
- </Styled{{COMPONENT_CLASS_NAME}}Wrapper>
132
123
  );
133
124
  }
134
125
 
135
- if (displayMode === 'STACKED_LARGE_VAL') {
136
- return (
137
- <Styled{{COMPONENT_CLASS_NAME}}Wrapper>
138
- <FieldValueList
139
- variant='stacked'
140
- data-testid={testId}
141
- fields={[
142
- {
143
- id: '2',
144
- name: hideLabel ? '' : label,
145
- value: (
146
- <Text variant='h1' as='span'>
147
- {displayComp}
148
- </Text>
149
- )
150
- }
151
- ]}
152
- />
153
- </Styled{{COMPONENT_CLASS_NAME}}Wrapper>
154
- );
155
- }
156
126
 
157
127
  const onResolveSuggestionHandler = (accepted: boolean) => {
158
128
  suggestionsHandler(accepted, pConn, setStatus);
@@ -40,7 +40,6 @@ const isImage = (url: string) => /\.(jpg|jpeg|png|webp|avif|gif|svg)$/.test(url)
40
40
  const TableImage = (imageProps: any) => {
41
41
  const { value, altText, altTextOfImage, propaltTextOfImage, urlLabelSelection, urlLabel, propUrlLabel } = imageProps;
42
42
  const demoButtonRef = useRef(null);
43
- let imageDisplayComp = null;
44
43
  const [images, setImages] = useState(null);
45
44
  const imgDescription = {
46
45
  id: 'url',
@@ -71,7 +70,7 @@ const TableImage = (imageProps: any) => {
71
70
  };
72
71
  let btnVal = value;
73
72
  btnVal = urlLabelVal(urlLabelSelection, btnVal, urlLabel, propUrlLabel);
74
- imageDisplayComp = (
73
+ const imageDisplayComp = (
75
74
  <Fragment>
76
75
  {btnVal !== null && (
77
76
  <Button ref={demoButtonRef} variant='link' compact={false} onClick={onClick} autoFocus>
@@ -142,7 +141,7 @@ export const urlFormatter = (value: string, options: any) => {
142
141
  customWidth
143
142
  } = options;
144
143
 
145
- let urlFormatComp = null;
144
+ let urlFormatComp;
146
145
  if (
147
146
  (displayAs === 'labelText' || (isTableFormatter && tableDisplayAs === 'link')) &&
148
147
  (urlLabel !== '' || propUrlLabel !== '')
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useState } from 'react';
2
- import { TimeInput, FieldValueList, DateTimeDisplay, Text, withConfiguration } from '@pega/cosmos-react-core';
2
+ import { TimeInput, DateTimeDisplay, withConfiguration } from '@pega/cosmos-react-core';
3
3
 
4
4
  import type { PConnFieldProps } from './PConnProps';
5
5
  import './create-nonce';
@@ -59,7 +59,6 @@ function {{COMPONENT_CLASS_NAME}} (props: {{COMPONENT_CLASS_NAME}}Props) {
59
59
  testId,
60
60
  additionalProps = {},
61
61
  displayMode,
62
- variant = 'inline',
63
62
  hasSuggestions = false
64
63
  } = props;
65
64
  let { formatter = 'defaultTime' } = props;
@@ -117,7 +116,7 @@ function {{COMPONENT_CLASS_NAME}} (props: {{COMPONENT_CLASS_NAME}}Props) {
117
116
  });
118
117
  }
119
118
 
120
- if (displayMode === 'LABELS_LEFT' || displayMode === 'STACKED_LARGE_VAL' || displayMode === 'DISPLAY_ONLY') {
119
+ if (displayMode === 'DISPLAY_ONLY') {
121
120
  let variantValue = 'time';
122
121
  let formatValue = withSeconds ? 'long' : 'short';
123
122
  if (pConn && pConn.getConfigProps()) {
@@ -143,38 +142,6 @@ function {{COMPONENT_CLASS_NAME}} (props: {{COMPONENT_CLASS_NAME}}Props) {
143
142
  case 'DISPLAY_ONLY': {
144
143
  return ( <Styled{{COMPONENT_CLASS_NAME}}Wrapper> {displayComp} </Styled{{COMPONENT_CLASS_NAME}}Wrapper>);
145
144
  }
146
- case 'LABELS_LEFT': {
147
- return (
148
- <Styled{{COMPONENT_CLASS_NAME}}Wrapper>
149
- <FieldValueList
150
- variant={hideLabel ? 'stacked' : variant}
151
- data-testid={testId}
152
- fields={[{ id: '1', name: hideLabel ? '' : label, value: displayComp }]}
153
- />
154
- </Styled{{COMPONENT_CLASS_NAME}}Wrapper>
155
- );
156
- }
157
- case 'STACKED_LARGE_VAL': {
158
- return (
159
- <Styled{{COMPONENT_CLASS_NAME}}Wrapper>
160
- <FieldValueList
161
- variant='stacked'
162
- data-testid={testId}
163
- fields={[
164
- {
165
- id: '2',
166
- name: hideLabel ? '' : label,
167
- value: (
168
- <Text variant='h1' as='span'>
169
- {displayComp}
170
- </Text>
171
- )
172
- }
173
- ]}
174
- />
175
- </Styled{{COMPONENT_CLASS_NAME}}Wrapper>
176
- );
177
- }
178
145
  // no default
179
146
  }
180
147
  }
@@ -62,7 +62,7 @@ export const getDayJSObject = (text: string) => {
62
62
  * @returns {object} relative time from now
63
63
  */
64
64
  export const getRelativeTime = (time: string) => {
65
- let relativetime = "";
65
+ let relativetime: string;
66
66
  if (dayjs(time).isUTC()) {
67
67
  relativetime = dayjs(time).fromNow();
68
68
  } else {
@@ -190,7 +190,7 @@ export const datetimeFireChangeBlurEvents = (
190
190
  if (errorState) {
191
191
  pConn.getValidationApi().validate(errorState);
192
192
  }
193
- // BUG-640834 In errorState presist old values avoiding store update & re-render.
193
+ // BUG-640834 In errorState persist old values avoiding store update & re-render.
194
194
  else{
195
195
  if (formattedValue !== actualValue) {
196
196
  actions.updateFieldValue(propName, formattedValue);
@@ -31,6 +31,14 @@ function Avatar(props: {{COMPONENT_CLASS_NAME}}AvatarProps) {
31
31
  userName = userIdentifier;
32
32
  }
33
33
 
34
+ const [userState, setUserState]: any = useState(() => {
35
+ if (!showStatus) {
36
+ return 'inactive';
37
+ }
38
+ const currentState = PCore.getMessagingServiceManager().getUserPresence().getUserState(userIdentifier);
39
+ return currentState === 'online' ? 'active' : 'inactive';
40
+ });
41
+
34
42
  useEffect(() => {
35
43
  const imageKey = !metaObj ? PCore.getEnvironmentInfo().getOperatorImageInsKey() : metaObj.image;
36
44
  if (imageKey) {
@@ -41,24 +49,20 @@ function Avatar(props: {{COMPONENT_CLASS_NAME}}AvatarProps) {
41
49
  }
42
50
  }, [metaObj]);
43
51
 
44
- if (showStatus) {
45
- const currentState = PCore.getMessagingServiceManager().getUserPresence().getUserState(userIdentifier);
46
- const [userState, setUserState]: any = useState(currentState === 'online' ? 'active' : 'inactive');
47
-
48
- const handleUserStateChange = ({ state }: any) => {
49
- setUserState(state === 'online' ? 'active' : 'inactive');
50
- };
52
+ useEffect(() => {
53
+ if (!showStatus) {
54
+ return undefined;
55
+ }
51
56
 
52
- useEffect(() => {
53
- const subId = PCore.getMessagingServiceManager()
54
- .getUserPresence()
55
- .subscribe(userIdentifier, handleUserStateChange, '');
57
+ const userPresence = PCore.getMessagingServiceManager().getUserPresence();
58
+ const toStatus = (state?: string) => (state === 'online' ? 'active' : 'inactive');
59
+ setUserState(toStatus(userPresence.getUserState(userIdentifier)));
60
+ const subId = userPresence.subscribe(userIdentifier, ({ state }: any) => setUserState(toStatus(state)), '');
56
61
 
57
- return function cleanup() {
58
- PCore.getMessagingServiceManager().getUserPresence().unsubscribe(userIdentifier, subId);
59
- };
60
- }, [userIdentifier, handleUserStateChange]);
62
+ return () => userPresence.unsubscribe(userIdentifier, subId);
63
+ }, [showStatus, userIdentifier]);
61
64
 
65
+ if (showStatus) {
62
66
  return <CosmosAvatar name={userName} imageSrc={imageBlobUrl as React.SetStateAction<any>} status={userState} />;
63
67
  }
64
68
 
@@ -36,7 +36,7 @@ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
36
36
  const [isOpen, setIsOpen] = useState(false);
37
37
  const [isLoading, setIsLoading] = useState(true);
38
38
  const [popoverEl, setPopoverEl] = useElement(null);
39
- const [popoverContent, setpopoverContent] = useState(null);
39
+ const [popoverContent, setPopoverContent] = useState(null);
40
40
  const theme: any = useTheme();
41
41
 
42
42
  /* If the id has changed, we need to reset the popover */
@@ -48,10 +48,10 @@ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
48
48
  {{! pick new delimiters for mustache }}
49
49
  {{=<% %>=}}
50
50
 
51
- const OperatorPreview = () => {
51
+ const loadOperatorPreview = () => {
52
52
  const localizedVal = PCore.getLocaleUtils().getLocaleValue;
53
53
  const localeCategory = 'Operator';
54
- setpopoverContent(
54
+ setPopoverContent(
55
55
  <Progress variant='ring' message={localizedVal('Loading operator...', localeCategory)} placement='local' />
56
56
  );
57
57
  if (externalUser && externalUser.classID !== 'Data-Party-Operator') {
@@ -74,7 +74,7 @@ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
74
74
  }
75
75
  ];
76
76
  setIsLoading(false);
77
- setpopoverContent(
77
+ setPopoverContent(
78
78
  <Glimpse
79
79
  visual={
80
80
  <Avatar
@@ -120,7 +120,7 @@ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
120
120
  );
121
121
 
122
122
  setIsLoading(false);
123
- setpopoverContent(
123
+ setPopoverContent(
124
124
  <Glimpse
125
125
  heading={{
126
126
  primary: data.pyOperatorInfo.pyUserName,
@@ -144,7 +144,7 @@ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
144
144
  setIsOpen(!isOpen);
145
145
  if (pTarget === null) {
146
146
  pTarget = e.currentTarget;
147
- OperatorPreview();
147
+ loadOperatorPreview();
148
148
  }
149
149
  };
150
150
 
@@ -59,7 +59,7 @@ const renderField = (resolvedProps: any) => {
59
59
  theme = useTheme()
60
60
  } = resolvedProps;
61
61
 
62
- const variant = displayMode === 'LABELS_LEFT' ? 'inline' : 'stacked';
62
+ const variant = displayMode === 'DISPLAY_ONLY' ? 'inline' : 'stacked';
63
63
 
64
64
  let val =
65
65
  value !== '' ? (
@@ -1,4 +1,4 @@
1
- import { Fragment, Children, type ReactElement } from 'react';
1
+ import { Fragment, isValidElement, type ReactElement } from 'react';
2
2
  import { Grid, Flex, FieldGroup, withConfiguration, type GridContainerProps } from '@pega/cosmos-react-core';
3
3
  import type { PConnFieldProps } from './PConnProps';
4
4
  import './create-nonce';
@@ -26,14 +26,10 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
26
26
  const { getPConnect, label, showLabel = true, showHighlightedData = false } = props;
27
27
  const propsToUse = { label, showLabel, ...getPConnect().getInheritedProps() };
28
28
 
29
- // storybook doesn't get children of 1 as an array of 1
30
- let { children } = props;
31
- if (!Array.isArray(children)) {
32
- children = Children.toArray(children);
33
- }
29
+ const children = [props.children].flat(Infinity).filter(isValidElement);
34
30
 
35
31
  // update children with readonly
36
- Children.toArray(children).forEach(child => {
32
+ children.forEach(child => {
37
33
  // @ts-ignore
38
34
  child.props.getPConnect().setInheritedProp('readOnly', true);
39
35
  // @ts-ignore
@@ -54,7 +50,7 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
54
50
  const { highlightedData = [] } = getPConnect().getRawMetadata().config;
55
51
  // @ts-ignore
56
52
  highlightedDataArr = highlightedData.map((field) => {
57
- return <HighlightRender field={field} getPConnect={props.getPConnect} />;
53
+ return <HighlightRender key={field.config?.key ?? field.config?.value} field={field} getPConnect={props.getPConnect} />;
58
54
  });
59
55
  }
60
56
 
@@ -15,7 +15,7 @@ export const pyReviewRaw = {
15
15
  value: '@P .pyStatusWork',
16
16
  label: '@L Work Status',
17
17
  hideLabel: true,
18
- displayMode: 'STACKED_LARGE_VAL',
18
+ displayMode: 'DISPLAY_ONLY',
19
19
  displayAsStatus: true,
20
20
  key: 'pyStatusWork'
21
21
  }
@@ -26,7 +26,7 @@ export const pyReviewRaw = {
26
26
  value: '@P .pyID',
27
27
  label: '@L Case ID',
28
28
  hideLabel: true,
29
- displayMode: 'STACKED_LARGE_VAL',
29
+ displayMode: 'DISPLAY_ONLY',
30
30
  key: 'pyID'
31
31
  }
32
32
  },
@@ -36,7 +36,7 @@ export const pyReviewRaw = {
36
36
  value: '@P .pxCreateDateTime',
37
37
  label: '@L Create date/time',
38
38
  hideLabel: true,
39
- displayMode: 'STACKED_LARGE_VAL',
39
+ displayMode: 'DISPLAY_ONLY',
40
40
  key: 'pxCreateDateTime'
41
41
  }
42
42
  },
@@ -47,7 +47,7 @@ export const pyReviewRaw = {
47
47
  hideLabel: true,
48
48
  value: '@USER .pxCreateOperator',
49
49
  placeholder: 'Select...',
50
- displayMode: 'STACKED_LARGE_VAL',
50
+ displayMode: 'DISPLAY_ONLY',
51
51
  key: 'pxCreateOperator'
52
52
  }
53
53
  }
@@ -151,7 +151,7 @@ export const pyReviewResolved = {
151
151
  }
152
152
  }
153
153
  ],
154
- displayMode: 'LABELS_LEFT'
154
+ displayMode: 'DISPLAY_ONLY'
155
155
  };
156
156
 
157
157
  export const regionChildrenResolved = [
@@ -160,7 +160,7 @@ export const regionChildrenResolved = [
160
160
  value: 'Deadline',
161
161
  label: 'SLA Deadline',
162
162
  hideLabel: true,
163
- displayMode: 'LABELS_LEFT',
163
+ displayMode: 'DISPLAY_ONLY',
164
164
  key: 'SLA Deadline'
165
165
  },
166
166
  {
@@ -168,7 +168,7 @@ export const regionChildrenResolved = [
168
168
  value: 'Goal',
169
169
  label: 'SLA Goal',
170
170
  hideLabel: true,
171
- displayMode: 'LABELS_LEFT',
171
+ displayMode: 'DISPLAY_ONLY',
172
172
  key: 'SLA Goal'
173
173
  },
174
174
  {
@@ -187,7 +187,7 @@ export const regionChildrenResolved = [
187
187
  value: 'Current Date Time'
188
188
  }
189
189
  ],
190
- displayMode: 'LABELS_LEFT',
190
+ displayMode: 'DISPLAY_ONLY',
191
191
  key: 'SLA Start Time'
192
192
  }
193
193
  ];
@@ -244,5 +244,5 @@ export const configProps = {
244
244
  resolveDateTime: '',
245
245
  hideLabel: true,
246
246
  key: '_532zx1dah',
247
- displayMode: 'LABELS_LEFT'
247
+ displayMode: 'DISPLAY_ONLY'
248
248
  };
@@ -9,16 +9,14 @@ export function getAllFields(pConnect) {
9
9
  return [];
10
10
  }
11
11
 
12
- let allFields = [];
13
-
14
12
  const makeField = (f) => ({
15
13
  ...pConnect().resolveConfigProps(f.config),
16
14
  type: f.type
17
15
  });
18
16
 
19
17
  const hasRegions = !!metadata.children[0]?.children;
20
- if (hasRegions) {
21
- allFields = metadata.children.map((region) =>
18
+ const allFields = hasRegions
19
+ ? metadata.children.map((region) =>
22
20
  region.children.map((field) => {
23
21
  // Do not resolve the config props if is status work, instead create component here as status badge and mark as status display
24
22
  if (field.config?.value === '@P .pyStatusWork') {
@@ -29,10 +27,8 @@ export function getAllFields(pConnect) {
29
27
 
30
28
  return makeField(field);
31
29
  })
32
- );
33
- } else {
34
- allFields = metadata.children.map(makeField);
35
- }
30
+ )
31
+ : metadata.children.map(makeField);
36
32
 
37
33
  return allFields;
38
34
  }
@@ -31,6 +31,14 @@ function Avatar(props: {{COMPONENT_CLASS_NAME}}AvatarProps) {
31
31
  userName = userIdentifier;
32
32
  }
33
33
 
34
+ const [userState, setUserState]: any = useState(() => {
35
+ if (!showStatus) {
36
+ return 'inactive';
37
+ }
38
+ const currentState = PCore.getMessagingServiceManager().getUserPresence().getUserState(userIdentifier);
39
+ return currentState === 'online' ? 'active' : 'inactive';
40
+ });
41
+
34
42
  useEffect(() => {
35
43
  const imageKey = !metaObj ? PCore.getEnvironmentInfo().getOperatorImageInsKey() : metaObj.image;
36
44
  if (imageKey) {
@@ -41,24 +49,20 @@ function Avatar(props: {{COMPONENT_CLASS_NAME}}AvatarProps) {
41
49
  }
42
50
  }, [metaObj]);
43
51
 
44
- if (showStatus) {
45
- const currentState = PCore.getMessagingServiceManager().getUserPresence().getUserState(userIdentifier);
46
- const [userState, setUserState]: any = useState(currentState === 'online' ? 'active' : 'inactive');
52
+ useEffect(() => {
53
+ if (!showStatus) {
54
+ return undefined;
55
+ }
47
56
 
48
- const handleUserStateChange = ({ state } : any) => {
49
- setUserState(state === 'online' ? 'active' : 'inactive');
50
- };
57
+ const userPresence = PCore.getMessagingServiceManager().getUserPresence();
58
+ const toStatus = (state?: string) => (state === 'online' ? 'active' : 'inactive');
59
+ setUserState(toStatus(userPresence.getUserState(userIdentifier)));
60
+ const subId = userPresence.subscribe(userIdentifier, ({ state }: any) => setUserState(toStatus(state)), '');
51
61
 
52
- useEffect(() => {
53
- const subId = PCore.getMessagingServiceManager()
54
- .getUserPresence()
55
- // @ts-ignore
56
- .subscribe(userIdentifier, handleUserStateChange);
62
+ return () => userPresence.unsubscribe(userIdentifier, subId);
63
+ }, [showStatus, userIdentifier]);
57
64
 
58
- return function cleanup() {
59
- PCore.getMessagingServiceManager().getUserPresence().unsubscribe(userIdentifier, subId);
60
- };
61
- }, [userIdentifier, handleUserStateChange]);
65
+ if (showStatus) {
62
66
  return <CosmosAvatar name={userName} imageSrc={imageBlobUrl as React.SetStateAction<any>} status={userState} />;
63
67
  }
64
68
 
@@ -36,7 +36,7 @@ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
36
36
  const [isOpen, setIsOpen] = useState(false);
37
37
  const [isLoading, setIsLoading] = useState(true);
38
38
  const [popoverEl, setPopoverEl] = useElement(null);
39
- const [popoverContent, setpopoverContent] = useState(null);
39
+ const [popoverContent, setPopoverContent] = useState(null);
40
40
  const theme: any = useTheme();
41
41
 
42
42
  /* If the id has changed, we need to reset the popover */
@@ -48,10 +48,10 @@ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
48
48
  {{! pick new delimiters for mustache }}
49
49
  {{=<% %>=}}
50
50
 
51
- const OperatorPreview = () => {
51
+ const loadOperatorPreview = () => {
52
52
  const localizedVal = PCore.getLocaleUtils().getLocaleValue;
53
53
  const localeCategory = 'Operator';
54
- setpopoverContent(
54
+ setPopoverContent(
55
55
  <Progress variant='ring' message={localizedVal('Loading operator...', localeCategory)} placement='local' />
56
56
  );
57
57
  if (externalUser && externalUser.classID !== 'Data-Party-Operator') {
@@ -74,7 +74,7 @@ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
74
74
  }
75
75
  ];
76
76
  setIsLoading(false);
77
- setpopoverContent(
77
+ setPopoverContent(
78
78
  <Glimpse
79
79
  visual={
80
80
  <Avatar
@@ -120,7 +120,7 @@ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
120
120
  );
121
121
 
122
122
  setIsLoading(false);
123
- setpopoverContent(
123
+ setPopoverContent(
124
124
  <Glimpse
125
125
  heading={{
126
126
  primary: data.pyOperatorInfo.pyUserName,
@@ -144,7 +144,7 @@ function Operator(props: {{COMPONENT_CLASS_NAME}}OperatorProps) {
144
144
  setIsOpen(!isOpen);
145
145
  if (pTarget === null) {
146
146
  pTarget = e.currentTarget;
147
- OperatorPreview();
147
+ loadOperatorPreview();
148
148
  }
149
149
  };
150
150
 
@@ -56,7 +56,7 @@ const renderField = (resolvedProps: any) => {
56
56
  theme = useTheme()
57
57
  } = resolvedProps;
58
58
 
59
- const variant = displayMode === 'LABELS_LEFT' ? 'inline' : 'stacked';
59
+ const variant = displayMode === 'DISPLAY_ONLY' ? 'inline' : 'stacked';
60
60
 
61
61
  let val =
62
62
  value !== '' ? (
@@ -44,7 +44,7 @@ function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}Props) {
44
44
  // @ts-ignore
45
45
  const { highlightedData = [] } = getPConnect().getRawMetadata().config;
46
46
  highlightedDataArr = highlightedData.map((field: any) => {
47
- return <HighlightRender field={field} getPConnect={props.getPConnect} />;
47
+ return <HighlightRender key={field.config?.key ?? field.config?.value} field={field} getPConnect={props.getPConnect} />;
48
48
  });
49
49
  }
50
50
 
@@ -15,7 +15,7 @@ export const pyReviewRaw: any = {
15
15
  value: '@P .pyStatusWork',
16
16
  label: '@L Work Status',
17
17
  hideLabel: true,
18
- displayMode: 'STACKED_LARGE_VAL',
18
+ displayMode: 'DISPLAY_ONLY',
19
19
  displayAsStatus: true,
20
20
  key: 'pyStatusWork'
21
21
  }
@@ -26,7 +26,7 @@ export const pyReviewRaw: any = {
26
26
  value: '@P .pyID',
27
27
  label: '@L Case ID',
28
28
  hideLabel: true,
29
- displayMode: 'STACKED_LARGE_VAL',
29
+ displayMode: 'DISPLAY_ONLY',
30
30
  key: 'pyID'
31
31
  }
32
32
  },
@@ -36,7 +36,7 @@ export const pyReviewRaw: any = {
36
36
  value: '@P .pxCreateDateTime',
37
37
  label: '@L Create date/time',
38
38
  hideLabel: true,
39
- displayMode: 'STACKED_LARGE_VAL',
39
+ displayMode: 'DISPLAY_ONLY',
40
40
  key: 'pxCreateDateTime'
41
41
  }
42
42
  },
@@ -47,7 +47,7 @@ export const pyReviewRaw: any = {
47
47
  hideLabel: true,
48
48
  value: '@USER .pxCreateOperator',
49
49
  placeholder: 'Select...',
50
- displayMode: 'STACKED_LARGE_VAL',
50
+ displayMode: 'DISPLAY_ONLY',
51
51
  key: 'pxCreateOperator'
52
52
  }
53
53
  }
@@ -191,7 +191,7 @@ export const pyReviewResolved = {
191
191
  }
192
192
  }
193
193
  ],
194
- displayMode: 'LABELS_LEFT'
194
+ displayMode: 'DISPLAY_ONLY'
195
195
  };
196
196
 
197
197
  export const regionChildrenResolved = [
@@ -200,7 +200,7 @@ export const regionChildrenResolved = [
200
200
  value: 'Deadline',
201
201
  label: 'SLA Deadline',
202
202
  hideLabel: true,
203
- displayMode: 'LABELS_LEFT',
203
+ displayMode: 'DISPLAY_ONLY',
204
204
  key: 'SLA Deadline'
205
205
  },
206
206
  {
@@ -208,7 +208,7 @@ export const regionChildrenResolved = [
208
208
  value: 'Goal',
209
209
  label: 'SLA Goal',
210
210
  hideLabel: true,
211
- displayMode: 'LABELS_LEFT',
211
+ displayMode: 'DISPLAY_ONLY',
212
212
  key: 'SLA Goal'
213
213
  },
214
214
  {
@@ -227,7 +227,7 @@ export const regionChildrenResolved = [
227
227
  value: 'Current Date Time'
228
228
  }
229
229
  ],
230
- displayMode: 'LABELS_LEFT',
230
+ displayMode: 'DISPLAY_ONLY',
231
231
  key: 'SLA Start Time'
232
232
  }
233
233
  ];
@@ -284,5 +284,5 @@ export const configProps = {
284
284
  resolveDateTime: '',
285
285
  hideLabel: true,
286
286
  key: '_532zx1dah',
287
- displayMode: 'LABELS_LEFT'
287
+ displayMode: 'DISPLAY_ONLY'
288
288
  };
@@ -9,16 +9,14 @@ export function getAllFields(pConnect: Function) {
9
9
  return [];
10
10
  }
11
11
 
12
- let allFields = [];
13
-
14
12
  const makeField = (f: any) => ({
15
13
  ...pConnect().resolveConfigProps(f.config),
16
14
  type: f.type
17
15
  });
18
16
 
19
17
  const hasRegions = !!metadata.children[0]?.children;
20
- if (hasRegions) {
21
- allFields = metadata.children.map((region: any) =>
18
+ const allFields = hasRegions
19
+ ? metadata.children.map((region: any) =>
22
20
  region.children.map((field: any) => {
23
21
  // Do not resolve the config props if is status work, instead create component here as status badge and mark as status display
24
22
  if (field.config?.value === '@P .pyStatusWork') {
@@ -29,10 +27,8 @@ export function getAllFields(pConnect: Function) {
29
27
 
30
28
  return makeField(field);
31
29
  })
32
- );
33
- } else {
34
- allFields = metadata.children.map(makeField);
35
- }
30
+ )
31
+ : metadata.children.map(makeField);
36
32
 
37
33
  return allFields;
38
34
  }