@pega/dx-component-builder-sdk 25.1.16 → 26.1.10

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 (208) hide show
  1. package/package.json +1 -1
  2. package/pega-dx-component-builder-sdk-26.1.10.tgz +0 -0
  3. package/src/constants.js +4 -0
  4. package/src/tasks/create/templates/Constellation/field/Picklist-Autocomplete/utils.ts.mustache +1 -1
  5. package/src/tasks/create/templates/Constellation/template/DETAILS/DetailsRender.tsx.mustache +1 -1
  6. package/src/tasks/create/templates/Constellation/template/DETAILS-region/DetailsRender.tsx.mustache +1 -1
  7. package/src/tasks/create/templates/Constellation/template/FORM/DetailsRender.tsx +1 -1
  8. package/src/tasks/create/templates/Constellation/template/FORM-region/DetailsRender.tsx +1 -1
  9. package/src/tasks/create/templates/SDK-React/field/Boolean/index.tsx.mustache +22 -6
  10. package/src/tasks/create/templates/SDK-React/field/Date/demo.stories.tsx.mustache +8 -1
  11. package/src/tasks/create/templates/SDK-React/field/Date/index.tsx.mustache +22 -13
  12. package/src/tasks/create/templates/SDK-React/field/DateTime/demo.stories.tsx.mustache +9 -1
  13. package/src/tasks/create/templates/SDK-React/field/DateTime/index.tsx.mustache +23 -14
  14. package/src/tasks/create/templates/SDK-React/field/Decimal/index.tsx.mustache +24 -8
  15. package/src/tasks/create/templates/SDK-React/field/Decimal-Currency/index.tsx.mustache +24 -8
  16. package/src/tasks/create/templates/SDK-React/field/Decimal-Percentage/index.tsx.mustache +24 -10
  17. package/src/tasks/create/templates/SDK-React/field/Integer/index.tsx.mustache +26 -14
  18. package/src/tasks/create/templates/SDK-React/field/Picklist/index.tsx.mustache +34 -8
  19. package/src/tasks/create/templates/SDK-React/field/Picklist-Autocomplete/index.tsx.mustache +25 -9
  20. package/src/tasks/create/templates/SDK-React/field/Picklist-RadioButtons/index.tsx.mustache +21 -5
  21. package/src/tasks/create/templates/SDK-React/field/Text/index.tsx.mustache +25 -14
  22. package/src/tasks/create/templates/SDK-React/field/Text-Email/index.tsx.mustache +32 -21
  23. package/src/tasks/create/templates/SDK-React/field/Text-Input/index.tsx.mustache +25 -10
  24. package/src/tasks/create/templates/SDK-React/field/Text-Paragraph/index.tsx.mustache +26 -14
  25. package/src/tasks/create/templates/SDK-React/field/Text-Phone/index.tsx.mustache +28 -10
  26. package/src/tasks/create/templates/SDK-React/field/Text-URL/index.tsx.mustache +26 -14
  27. package/src/tasks/create/templates/SDK-React/field/TimeOfDay/demo.stories.tsx.mustache +9 -1
  28. package/src/tasks/create/templates/SDK-React/field/TimeOfDay/index.tsx.mustache +22 -17
  29. package/src/tasks/create/templates/SDK-React/template/FORM/DefaultForm.css +82 -2
  30. package/src/tasks/create/templates/SDK-React/template/FORM/index.tsx.mustache +51 -11
  31. package/src/tasks/create/templates/SDK-React/widget/CASE/index.tsx.mustache +19 -15
  32. package/src/tasks/create/templates/SDK-React/widget/PAGE/index.tsx.mustache +2 -167
  33. package/src/tasks/create/templates/SDK-React/widget/PAGE-CASE/index.tsx.mustache +72 -15
  34. package/tests/assets/sdk-r/components/create/custom-sdk/field/Pega_DXIL_MyTestText/index.tsx +25 -14
  35. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/AlertBanner/AlertBanner.css +46 -0
  36. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/AlertBanner/AlertBanner.tsx +37 -20
  37. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/CaseSummaryFields/CaseSummaryFields.css +14 -0
  38. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/CaseSummaryFields/CaseSummaryFields.tsx +57 -5
  39. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/FieldGroup/FieldGroup.tsx +18 -11
  40. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/FieldGroupList/FieldGroupList.tsx +1 -1
  41. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/FieldValueList/FieldValueList.tsx +19 -4
  42. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/Operator/Operator.tsx +125 -74
  43. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/RichTextEditor/RichTextEditor.tsx +184 -90
  44. package/tests/assets/sdk-r/components/create/override-sdk/field/AutoComplete/AutoComplete.tsx +372 -26
  45. package/tests/assets/sdk-r/components/create/override-sdk/field/Checkbox/Checkbox.tsx +22 -6
  46. package/tests/assets/sdk-r/components/create/override-sdk/field/Currency/Currency.tsx +22 -4
  47. package/tests/assets/sdk-r/components/create/override-sdk/field/Date/Date.tsx +35 -4
  48. package/tests/assets/sdk-r/components/create/override-sdk/field/DateTime/DateTime.tsx +35 -4
  49. package/tests/assets/sdk-r/components/create/override-sdk/field/Decimal/Decimal.tsx +22 -4
  50. package/tests/assets/sdk-r/components/create/override-sdk/field/Dropdown/Dropdown.tsx +48 -16
  51. package/tests/assets/sdk-r/components/create/override-sdk/field/Email/Email.tsx +21 -4
  52. package/tests/assets/sdk-r/components/create/override-sdk/field/Group/Group.tsx +28 -4
  53. package/tests/assets/sdk-r/components/create/override-sdk/field/Integer/Integer.tsx +21 -4
  54. package/tests/assets/sdk-r/components/create/override-sdk/field/Multiselect/Multiselect.tsx +42 -20
  55. package/tests/assets/sdk-r/components/create/override-sdk/field/Multiselect/utils.ts +5 -3
  56. package/tests/assets/sdk-r/components/create/override-sdk/field/ObjectReference/ObjectReference.tsx +554 -66
  57. package/tests/assets/sdk-r/components/create/override-sdk/field/ObjectReference/utils.ts +108 -20
  58. package/tests/assets/sdk-r/components/create/override-sdk/field/Percentage/Percentage.tsx +22 -4
  59. package/tests/assets/sdk-r/components/create/override-sdk/field/Phone/Phone.tsx +23 -4
  60. package/tests/assets/sdk-r/components/create/override-sdk/field/RadioButtons/RadioButtons.tsx +20 -4
  61. package/tests/assets/sdk-r/components/create/override-sdk/field/RichText/RichText.css +0 -79
  62. package/tests/assets/sdk-r/components/create/override-sdk/field/RichText/RichText.tsx +1 -1
  63. package/tests/assets/sdk-r/components/create/override-sdk/field/SelectableCard/SelectableCard.tsx +25 -10
  64. package/tests/assets/sdk-r/components/create/override-sdk/field/TextArea/TextArea.tsx +22 -4
  65. package/tests/assets/sdk-r/components/create/override-sdk/field/TextInput/TextInput.tsx +21 -4
  66. package/tests/assets/sdk-r/components/create/override-sdk/field/Time/Time.tsx +35 -4
  67. package/tests/assets/sdk-r/components/create/override-sdk/field/URL/URL.tsx +22 -4
  68. package/tests/assets/sdk-r/components/create/override-sdk/field/UserReference/UserReference.tsx +10 -6
  69. package/tests/assets/sdk-r/components/create/override-sdk/infra/Assignment/Assignment.tsx +36 -14
  70. package/tests/assets/sdk-r/components/create/override-sdk/infra/Assignment/useValidationBanner.ts +29 -0
  71. package/tests/assets/sdk-r/components/create/override-sdk/infra/DeferLoad/DeferLoad.tsx +31 -10
  72. package/tests/assets/sdk-r/components/create/override-sdk/infra/FlowContainer/FlowContainer.tsx +5 -6
  73. package/tests/assets/sdk-r/components/create/override-sdk/infra/LeftAlignVerticalTabs/LeftAlignVerticalTabs.tsx +1 -1
  74. package/tests/assets/sdk-r/components/create/override-sdk/infra/ModalViewContainer/DataViewActionButtons/DataViewActionButtons.tsx +138 -0
  75. package/tests/assets/sdk-r/components/create/override-sdk/infra/ModalViewContainer/ModalViewContainer.tsx +110 -64
  76. package/tests/assets/sdk-r/components/create/override-sdk/infra/MultiStep/MultiStep.css +63 -0
  77. package/tests/assets/sdk-r/components/create/override-sdk/infra/MultiStep/MultiStep.tsx +23 -52
  78. package/tests/assets/sdk-r/components/create/override-sdk/infra/NavBar/NavBar.tsx +8 -3
  79. package/tests/assets/sdk-r/components/create/override-sdk/infra/Reference/Reference.tsx +5 -0
  80. package/tests/assets/sdk-r/components/create/override-sdk/infra/RootContainer/RootContainer.tsx +4 -5
  81. package/tests/assets/sdk-r/components/create/override-sdk/infra/View/View.css +1 -0
  82. package/tests/assets/sdk-r/components/create/override-sdk/infra/View/View.tsx +10 -17
  83. package/tests/assets/sdk-r/components/create/override-sdk/infra/ViewContainer/ViewContainer.tsx +8 -10
  84. package/tests/assets/sdk-r/components/create/override-sdk/template/AppShell/AppShell.css +0 -4
  85. package/tests/assets/sdk-r/components/create/override-sdk/template/AppShell/AppShell.tsx +7 -1
  86. package/tests/assets/sdk-r/components/create/override-sdk/template/CaseSummary/CaseSummary.tsx +9 -42
  87. package/tests/assets/sdk-r/components/create/override-sdk/template/CaseView/CaseView.tsx +8 -2
  88. package/tests/assets/sdk-r/components/create/override-sdk/template/CaseViewActionsMenu/CaseViewActionsMenu.tsx +58 -3
  89. package/tests/assets/sdk-r/components/create/override-sdk/template/DataReference/DataReference.tsx +56 -33
  90. package/tests/assets/sdk-r/components/create/override-sdk/template/DataReference/SearchForm.tsx +3 -4
  91. package/tests/assets/sdk-r/components/create/override-sdk/template/DefaultForm/DefaultForm.css +71 -0
  92. package/tests/assets/sdk-r/components/create/override-sdk/template/DefaultForm/DefaultForm.tsx +45 -9
  93. package/tests/assets/sdk-r/components/create/override-sdk/template/FieldGroupTemplate/FieldGroupTemplate.tsx +10 -3
  94. package/tests/assets/sdk-r/components/create/override-sdk/template/ListView/ListView.tsx +139 -59
  95. package/tests/assets/sdk-r/components/create/override-sdk/template/ListView/hooks.ts +80 -13
  96. package/tests/assets/sdk-r/components/create/override-sdk/template/ListView/utils.ts +13 -3
  97. package/tests/assets/sdk-r/components/create/override-sdk/template/MultiReferenceReadOnly/MultiReferenceReadOnly.tsx +16 -1
  98. package/tests/assets/sdk-r/components/create/override-sdk/template/SimpleTableManual/SimpleTableManual.tsx +167 -93
  99. package/tests/assets/sdk-r/components/create/override-sdk/template/SimpleTableSelect/SimpleTableSelect.tsx +71 -56
  100. package/tests/assets/sdk-r/components/create/override-sdk/template/SingleReferenceReadOnly/SingleReferenceReadOnly.tsx +12 -7
  101. package/tests/assets/sdk-r/components/create/override-sdk/widget/Attachment/Attachment.tsx +119 -26
  102. package/tests/assets/sdk-r/components/create/override-sdk/widget/Attachment/AttachmentUtils.ts +1 -1
  103. package/tests/assets/sdk-r/components/create/override-sdk/widget/CaseHistory/CaseHistory.tsx +16 -12
  104. package/tests/assets/sdk-r/components/create/override-sdk/widget/FileUtility/FileUtility.tsx +40 -28
  105. package/tests/assets/sdk-r/components/create/override-sdk/widget/ToDo/ToDo.tsx +14 -6
  106. package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MySearchbox/utils.ts +1 -1
  107. package/tests/assets/sdk-r/components/createAll/custom-constellation/template/Pega_DXIL_MyDetails/DetailsRender.tsx +1 -1
  108. package/tests/assets/sdk-r/components/createAll/custom-constellation/template/Pega_DXIL_MyForm/DetailsRender.tsx +1 -1
  109. package/tests/assets/sdk-r/components/createAll/custom-constellation/template/Pega_DXIL_MyTwoColumnDetails/DetailsRender.tsx +1 -1
  110. package/tests/assets/sdk-r/components/createAll/custom-constellation/template/Pega_DXIL_MyTwoColumnForm/DetailsRender.tsx +1 -1
  111. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyBoolean/index.tsx +22 -6
  112. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyCurrency/index.tsx +24 -8
  113. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDate/demo.stories.tsx +8 -1
  114. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDate/index.tsx +22 -13
  115. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDateTime/demo.stories.tsx +9 -1
  116. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDateTime/index.tsx +23 -14
  117. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDecimal/index.tsx +24 -8
  118. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyEmail/index.tsx +32 -21
  119. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyIconButtonURL/index.tsx +2 -2
  120. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyInteger/index.tsx +26 -14
  121. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyParagraph/index.tsx +26 -14
  122. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPercentage/index.tsx +24 -10
  123. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPhone/index.tsx +25 -10
  124. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPicklist/index.tsx +34 -8
  125. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyRadiobuttons/index.tsx +21 -5
  126. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MySearchbox/index.tsx +22 -9
  127. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyText/index.tsx +25 -14
  128. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTextInput/index.tsx +25 -10
  129. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTimeOfDay/demo.stories.tsx +9 -1
  130. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTimeOfDay/index.tsx +22 -17
  131. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyURL/index.tsx +26 -14
  132. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyForm/DefaultForm.css +82 -2
  133. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyForm/index.tsx +45 -8
  134. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyCaseWidget/index.tsx +19 -15
  135. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyPageCaseWidget/index.tsx +66 -15
  136. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyPageWidget/index.tsx +2 -167
  137. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/AlertBanner/AlertBanner.css +46 -0
  138. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/AlertBanner/AlertBanner.tsx +37 -20
  139. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/CaseSummaryFields/CaseSummaryFields.css +14 -0
  140. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/CaseSummaryFields/CaseSummaryFields.tsx +57 -5
  141. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/FieldGroup/FieldGroup.tsx +18 -11
  142. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/FieldGroupList/FieldGroupList.tsx +1 -1
  143. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/FieldValueList/FieldValueList.tsx +19 -4
  144. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/Operator/Operator.tsx +125 -74
  145. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/RichTextEditor/RichTextEditor.tsx +184 -90
  146. package/tests/assets/sdk-r/components/createAll/override-sdk/field/AutoComplete/AutoComplete.tsx +372 -26
  147. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Checkbox/Checkbox.tsx +22 -6
  148. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Currency/Currency.tsx +22 -4
  149. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Date/Date.tsx +35 -4
  150. package/tests/assets/sdk-r/components/createAll/override-sdk/field/DateTime/DateTime.tsx +35 -4
  151. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Decimal/Decimal.tsx +22 -4
  152. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Dropdown/Dropdown.tsx +48 -16
  153. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Email/Email.tsx +21 -4
  154. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Group/Group.tsx +28 -4
  155. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Integer/Integer.tsx +21 -4
  156. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Multiselect/Multiselect.tsx +42 -20
  157. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Multiselect/utils.ts +5 -3
  158. package/tests/assets/sdk-r/components/createAll/override-sdk/field/ObjectReference/ObjectReference.tsx +554 -66
  159. package/tests/assets/sdk-r/components/createAll/override-sdk/field/ObjectReference/utils.ts +108 -20
  160. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Percentage/Percentage.tsx +22 -4
  161. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Phone/Phone.tsx +23 -4
  162. package/tests/assets/sdk-r/components/createAll/override-sdk/field/RadioButtons/RadioButtons.tsx +20 -4
  163. package/tests/assets/sdk-r/components/createAll/override-sdk/field/RichText/RichText.css +0 -79
  164. package/tests/assets/sdk-r/components/createAll/override-sdk/field/RichText/RichText.tsx +1 -1
  165. package/tests/assets/sdk-r/components/createAll/override-sdk/field/SelectableCard/SelectableCard.tsx +25 -10
  166. package/tests/assets/sdk-r/components/createAll/override-sdk/field/TextArea/TextArea.tsx +22 -4
  167. package/tests/assets/sdk-r/components/createAll/override-sdk/field/TextInput/TextInput.tsx +21 -4
  168. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Time/Time.tsx +35 -4
  169. package/tests/assets/sdk-r/components/createAll/override-sdk/field/URL/URL.tsx +22 -4
  170. package/tests/assets/sdk-r/components/createAll/override-sdk/field/UserReference/UserReference.tsx +10 -6
  171. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/Assignment/Assignment.tsx +36 -14
  172. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/Assignment/useValidationBanner.ts +29 -0
  173. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/DeferLoad/DeferLoad.tsx +31 -10
  174. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/FlowContainer/FlowContainer.tsx +5 -6
  175. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/LeftAlignVerticalTabs/LeftAlignVerticalTabs.tsx +1 -1
  176. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/ModalViewContainer/DataViewActionButtons/DataViewActionButtons.tsx +138 -0
  177. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/ModalViewContainer/ModalViewContainer.tsx +110 -64
  178. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/MultiStep/MultiStep.css +63 -0
  179. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/MultiStep/MultiStep.tsx +23 -52
  180. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/NavBar/NavBar.tsx +8 -3
  181. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/Reference/Reference.tsx +5 -0
  182. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/RootContainer/RootContainer.tsx +4 -5
  183. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/View/View.css +1 -0
  184. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/View/View.tsx +10 -17
  185. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/ViewContainer/ViewContainer.tsx +8 -10
  186. package/tests/assets/sdk-r/components/createAll/override-sdk/template/AppShell/AppShell.css +0 -4
  187. package/tests/assets/sdk-r/components/createAll/override-sdk/template/AppShell/AppShell.tsx +7 -1
  188. package/tests/assets/sdk-r/components/createAll/override-sdk/template/CaseSummary/CaseSummary.tsx +9 -42
  189. package/tests/assets/sdk-r/components/createAll/override-sdk/template/CaseView/CaseView.tsx +8 -2
  190. package/tests/assets/sdk-r/components/createAll/override-sdk/template/CaseViewActionsMenu/CaseViewActionsMenu.tsx +58 -3
  191. package/tests/assets/sdk-r/components/createAll/override-sdk/template/DataReference/DataReference.tsx +56 -33
  192. package/tests/assets/sdk-r/components/createAll/override-sdk/template/DataReference/SearchForm.tsx +3 -4
  193. package/tests/assets/sdk-r/components/createAll/override-sdk/template/DefaultForm/DefaultForm.css +71 -0
  194. package/tests/assets/sdk-r/components/createAll/override-sdk/template/DefaultForm/DefaultForm.tsx +45 -9
  195. package/tests/assets/sdk-r/components/createAll/override-sdk/template/FieldGroupTemplate/FieldGroupTemplate.tsx +10 -3
  196. package/tests/assets/sdk-r/components/createAll/override-sdk/template/ListView/ListView.tsx +139 -59
  197. package/tests/assets/sdk-r/components/createAll/override-sdk/template/ListView/hooks.ts +80 -13
  198. package/tests/assets/sdk-r/components/createAll/override-sdk/template/ListView/utils.ts +13 -3
  199. package/tests/assets/sdk-r/components/createAll/override-sdk/template/MultiReferenceReadOnly/MultiReferenceReadOnly.tsx +16 -1
  200. package/tests/assets/sdk-r/components/createAll/override-sdk/template/SimpleTableManual/SimpleTableManual.tsx +167 -93
  201. package/tests/assets/sdk-r/components/createAll/override-sdk/template/SimpleTableSelect/SimpleTableSelect.tsx +71 -56
  202. package/tests/assets/sdk-r/components/createAll/override-sdk/template/SingleReferenceReadOnly/SingleReferenceReadOnly.tsx +12 -7
  203. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/Attachment/Attachment.tsx +119 -26
  204. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/Attachment/AttachmentUtils.ts +1 -1
  205. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/CaseHistory/CaseHistory.tsx +16 -12
  206. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/FileUtility/FileUtility.tsx +40 -28
  207. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/ToDo/ToDo.tsx +14 -6
  208. package/SECURITY.md +0 -10
@@ -4,7 +4,6 @@ import Popover from '@mui/material/Popover';
4
4
  import Grid2 from '@mui/material/Grid2';
5
5
  import Typography from '@mui/material/Typography';
6
6
  import makeStyles from '@mui/styles/makeStyles';
7
- import { Theme as MuiTheme } from "@mui/material/styles";
8
7
 
9
8
  import Utils from '@pega/react-sdk-components/lib/components/helpers/utils';
10
9
 
@@ -12,12 +11,6 @@ import StyledPegaDxilMyPageCaseWidgetWrapper from './styles';
12
11
 
13
12
  import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
14
13
 
15
- declare module "@mui/private-theming" {
16
- interface DefaultTheme extends MuiTheme {
17
- spacing: (spacing: number) => string;
18
- }
19
- }
20
-
21
14
  interface PegaDxilMyPageCaseWidgetProps extends PConnProps {
22
15
  // If any, enter additional props that only exist on this component
23
16
  label: string;
@@ -28,6 +21,7 @@ interface PegaDxilMyPageCaseWidgetProps extends PConnProps {
28
21
  updateLabel: string;
29
22
  updateOperator: { userName: string; userId: string };
30
23
  displayLabel?: any;
24
+ displayMode?: string;
31
25
  }
32
26
 
33
27
  const useStyles = makeStyles(myTheme => ({
@@ -38,6 +32,13 @@ const useStyles = makeStyles(myTheme => ({
38
32
  popover: {
39
33
  padding: myTheme.spacing(1),
40
34
  margin: myTheme.spacing(1)
35
+ },
36
+ fieldLabel: {
37
+ fontWeight: 400,
38
+ color: myTheme.palette.text.secondary
39
+ },
40
+ fieldValue: {
41
+ color: myTheme.palette.text.primary
41
42
  }
42
43
  }));
43
44
 
@@ -85,7 +86,8 @@ export default function PegaDxilMyPageCaseWidget(props: PegaDxilMyPageCaseWidget
85
86
  const localizedVal = PCore.getLocaleUtils().getLocaleValue;
86
87
  const localeCategory = 'Operator';
87
88
 
88
- operatorPreviewPromise.then((res: any) => {
89
+ operatorPreviewPromise
90
+ .then((res: any) => {
89
91
  const fillerString = '---';
90
92
  let fields: any = [];
91
93
  if (res.data && res.data.pyOperatorInfo && res.data.pyOperatorInfo.pyUserName) {
@@ -158,7 +160,10 @@ export default function PegaDxilMyPageCaseWidget(props: PegaDxilMyPageCaseWidget
158
160
  }
159
161
  // Whatever the fields are, update the component's popoverFields
160
162
  setPopoverFields(fields);
161
- });
163
+ })
164
+ .catch(e => {
165
+ console.error(e);
166
+ });
162
167
 
163
168
  setPopoverAnchorEl(event.currentTarget);
164
169
  }
@@ -182,7 +187,7 @@ export default function PegaDxilMyPageCaseWidget(props: PegaDxilMyPageCaseWidget
182
187
  return (
183
188
  <React.Fragment key={field.id}>
184
189
  <Grid2 container size={{ xs: 12 }} spacing={1}>
185
- <Grid2 size={{ xs: 12 }}>
190
+ <Grid2 size={{ xs: 6 }}>
186
191
  <Typography variant='caption'>{field.name}</Typography>
187
192
  </Grid2>
188
193
  <Grid2 size={{ xs: 6 }}>
@@ -198,17 +203,61 @@ export default function PegaDxilMyPageCaseWidget(props: PegaDxilMyPageCaseWidget
198
203
 
199
204
  // End of popover-related
200
205
 
206
+ const { displayMode } = props;
207
+
208
+ if (displayMode === 'DISPLAY_ONLY') {
209
+ return (
210
+ <StyledPegaDxilMyPageCaseWidgetWrapper>
211
+ <>
212
+ <Grid2 container spacing={4} justifyContent='space-between'>
213
+ <Grid2 size={{ xs: 4 }}>
214
+ <Typography variant='body2' component='span' className={classes.fieldLabel}>
215
+ {caseOpLabel}
216
+ </Typography>
217
+ </Grid2>
218
+ <Grid2 size={{ xs: 8 }}>
219
+ <div style={{ display: 'flex', flexWrap: 'wrap', gap: '0.5rem', alignItems: 'baseline' }}>
220
+ <Typography variant='body2' component='span' className={classes.fieldValue} onClick={showOperatorDetails} sx={{ cursor: 'pointer' }}>
221
+ {caseOpName}
222
+ </Typography>
223
+ <Typography variant='caption' component='span' sx={{ color: 'text.secondary' }}>
224
+ {Utils.generateDateTime(caseTime, 'DateTime-Since')}
225
+ </Typography>
226
+ </div>
227
+ </Grid2>
228
+ </Grid2>
229
+ <Popover
230
+ id={popoverId}
231
+ open={popoverOpen}
232
+ anchorEl={popoverAnchorEl}
233
+ onClose={handlePopoverClose}
234
+ anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
235
+ transformOrigin={{ vertical: 'top', horizontal: 'center' }}
236
+ slotProps={{
237
+ paper: { style: { maxWidth: '45ch' } }
238
+ }}
239
+ >
240
+ {getPopoverGrid()}
241
+ </Popover>
242
+ </>
243
+ </StyledPegaDxilMyPageCaseWidgetWrapper>
244
+ );
245
+ }
246
+
201
247
  return (
202
248
  <StyledPegaDxilMyPageCaseWidgetWrapper>
203
249
  <>
204
250
  <TextField
251
+ variant='standard'
205
252
  defaultValue={caseOpName}
206
253
  label={caseOpLabel}
207
254
  onClick={showOperatorDetails}
208
- InputProps={{
209
- readOnly: true,
210
- disableUnderline: true,
211
- inputProps: { style: { cursor: 'pointer' } }
255
+ slotProps={{
256
+ input: {
257
+ readOnly: true,
258
+ disableUnderline: true,
259
+ inputProps: { style: { cursor: 'pointer' } }
260
+ }
212
261
  }}
213
262
  />
214
263
  <br />
@@ -220,7 +269,9 @@ export default function PegaDxilMyPageCaseWidget(props: PegaDxilMyPageCaseWidget
220
269
  onClose={handlePopoverClose}
221
270
  anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
222
271
  transformOrigin={{ vertical: 'top', horizontal: 'center' }}
223
- PaperProps={{ style: { maxWidth: '45ch' } }}
272
+ slotProps={{
273
+ paper: { style: { maxWidth: '45ch' } }
274
+ }}
224
275
  >
225
276
  {getPopoverGrid()}
226
277
  </Popover>
@@ -4,29 +4,12 @@ import {
4
4
  CardHeader,
5
5
  Typography,
6
6
  CardActions,
7
- Button,
8
- TableContainer,
9
- Table,
10
- TableBody,
11
- TableHead,
12
- TableCell,
13
- TableRow
7
+ Button
14
8
  } from '@mui/material';
15
- import { withStyles, createStyles } from '@mui/styles';
16
9
  import makeStyles from '@mui/styles/makeStyles';
17
10
  import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
18
11
 
19
12
  import StyledPegaDxilMyPageWidgetWrapper from './styles';
20
- import isDeepEqual from 'fast-deep-equal/react';
21
- import { Utils } from '@pega/react-sdk-components/lib/components/helpers/utils';
22
- import { useRef, useEffect, useState } from 'react';
23
- import { Theme as MuiTheme } from "@mui/material/styles";
24
-
25
- declare module "@mui/private-theming" {
26
- interface DefaultTheme extends MuiTheme {
27
- spacing: (spacing: number) => string;
28
- }
29
- }
30
13
 
31
14
  interface PegaDxilMyPageWidgetProps extends PConnProps {
32
15
  // If any, enter additional props that only exist on this component
@@ -45,29 +28,11 @@ const useStyles = makeStyles(myTheme => ({
45
28
  }
46
29
  }));
47
30
 
48
- const StyledTableCell = withStyles((myTheme) =>
49
- createStyles({
50
- head: {
51
- borderWidth: '1px',
52
- borderStyle: 'solid',
53
- borderColor: 'silver',
54
- backgroundColor: myTheme.palette.text.disabled,
55
- color: myTheme.palette.getContrastText(myTheme.palette.text.disabled)
56
- },
57
- body: {
58
- borderWidth: '1px',
59
- borderStyle: 'solid',
60
- borderColor: 'silver'
61
- // fontSize: 14,
62
- }
63
- })
64
- )(TableCell);
65
-
66
31
  // Page Widget example is the "App Announcment"
67
32
 
68
33
  // props passed in combination of props from property panel (config.json) and run time props from Constellation
69
34
  export default function PegaDxilMyPageWidget(props: PegaDxilMyPageWidgetProps) {
70
- const { header = '', description = '', datasource = [], whatsnewlink = '', getPConnect } = props;
35
+ const { header = '', description = '', datasource = [], whatsnewlink = '' } = props;
71
36
  let details = [];
72
37
  if (datasource && datasource.source) {
73
38
  details = datasource.source.map(item => {
@@ -75,136 +40,12 @@ export default function PegaDxilMyPageWidget(props: PegaDxilMyPageWidgetProps) {
75
40
  });
76
41
  }
77
42
 
78
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
79
- const [waitingForData, setWaitingForData] = useState<boolean>(true);
80
- const thePConn = getPConnect();
81
- const caseID = thePConn.getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID, ''); // 2nd arg empty string until typedef marked correctly
82
- const dataViewName = 'D_pyMyWorkList';
83
- const context = thePConn.getContextName();
84
-
85
- const rowData: any = useRef([]);
86
-
87
43
  const classes = useStyles();
88
44
 
89
- const displayedColumns = [
90
- {
91
- label: thePConn.getLocalizedValue('Case type', '', ''),
92
- type: 'TextInput',
93
- fieldName: 'pxProcessName'
94
- }, // 2nd and 3rd args empty string until typedef marked correctly
95
- {
96
- label: thePConn.getLocalizedValue('Key', '', ''),
97
- type: 'TextInput',
98
- fieldName: 'pxRefObjectInsName'
99
- }, // 2nd and 3rd args empty string until typedef marked correctly
100
- {
101
- label: thePConn.getLocalizedValue('Status', '', ''),
102
- type: 'TextInput',
103
- fieldName: 'pyAssignmentStatus'
104
- }, // 2nd and 3rd args empty string until typedef marked correctly
105
- {
106
- label: thePConn.getLocalizedValue('Stage', '', ''),
107
- type: 'TextInput',
108
- fieldName: 'pxTaskLabel'
109
- } // 2nd and 3rd args empty string until typedef marked correctly
110
- ];
111
-
112
- function computeRowData(rows: object[]): void {
113
- const theRowData: object[] = [];
114
-
115
- rows?.forEach((row: any, rowIndex: number) => {
116
- // Now, for each property in the index of row properties (displayedColumns), add an object
117
- // to a new array of values
118
- const rowDisplayValues: any = [];
119
-
120
- displayedColumns.forEach((column: any, rowValIndex) => {
121
- const theType = column.type;
122
- const theFieldName = column.fieldName;
123
- const theValue =
124
- theType === 'Date' || theType === 'DateTime' ? Utils.generateDateTime(row[theFieldName], 'DateTime-Short') : row[theFieldName];
125
- rowDisplayValues[rowValIndex] = theValue;
126
- });
127
-
128
- theRowData[rowIndex] = rowDisplayValues;
129
- });
130
-
131
- if (!isDeepEqual(theRowData, rowData.current)) {
132
- // Only update rowData.current when it actually changes (to prevent infinite loop)
133
- rowData.current = theRowData;
134
- }
135
- }
136
-
137
45
  const handleClick = () => {
138
46
  window.open(whatsnewlink);
139
47
  };
140
48
 
141
- // Get the case history data when component mounted/initialized
142
- useEffect(() => {
143
- let bCallSetWaitingForData = true;
144
-
145
- const worklistData = PCore.getDataApiUtils().getData(
146
- dataViewName,
147
- { dataViewParameters: [{ CaseInstanceKey: caseID }] } as any,
148
- context
149
- ) as Promise<any>;
150
-
151
- worklistData.then((worklistJSON: any) => {
152
- const tableDataResults = worklistJSON.data.data;
153
-
154
- // compute the rowData using the tableDataResults
155
- computeRowData(tableDataResults);
156
-
157
- // At this point, if we have data ready to render and haven't been asked
158
- // to NOT call setWaitingForData, we can stop progress indicator
159
- if (bCallSetWaitingForData) {
160
- setWaitingForData(false);
161
- }
162
- });
163
-
164
- return () => {
165
- // Inspired by https://juliangaramendy.dev/blog/use-promise-subscription
166
- // The useEffect closure lets us have access to the bCallSetWaitingForData
167
- // variable inside the useEffect and inside the "then" clause of the
168
- // historyData promise
169
- // So, if this cleanup code gets run before the promise .then is called,
170
- // we can avoid calling the useState setter which would otherwise show a warning
171
- bCallSetWaitingForData = false;
172
- };
173
- }, []);
174
-
175
- function getTableHeader() {
176
- const theRowKey = 'CaseHistory.TableHeader';
177
-
178
- const theHeaderCells: any[] = displayedColumns.map((headerCol, index) => {
179
- const theCellKey = `${theRowKey}.${index}`;
180
- return <StyledTableCell key={theCellKey}>{headerCol.label}</StyledTableCell>;
181
- });
182
-
183
- return <TableRow key={theRowKey}>{theHeaderCells}</TableRow>;
184
- }
185
-
186
- function getTableData() {
187
- const theDataRows: any[] = [];
188
-
189
- // Note: using rowData.current since we're using useRef as a mutatable
190
- // value that's only updated when it changes.
191
- if (rowData.current.length > 0) {
192
- rowData.current.forEach((dataRow: object[], index) => {
193
- // using dataRow[0]-dataRow[1] as the array key since it's a unique value
194
- const theKey = `CaseHistory-${index}`;
195
- theDataRows.push(
196
- <TableRow key={theKey}>
197
- <StyledTableCell>{dataRow[0] ? (dataRow[0]) : '---' as any}</StyledTableCell>
198
- <StyledTableCell>{dataRow[1] ? (dataRow[1]) : '---' as any}</StyledTableCell>
199
- <StyledTableCell>{dataRow[2] ? (dataRow[2]) : '---' as any}</StyledTableCell>
200
- <StyledTableCell>{dataRow[3] ? (dataRow[3]) : '---' as any}</StyledTableCell>
201
- </TableRow>
202
- );
203
- });
204
- }
205
- return theDataRows;
206
- }
207
-
208
49
  return (
209
50
  <StyledPegaDxilMyPageWidgetWrapper>
210
51
  <Card title='AppAnnouncement' className={classes.root}>
@@ -228,12 +69,6 @@ export default function PegaDxilMyPageWidget(props: PegaDxilMyPageWidgetProps) {
228
69
  </Button>
229
70
  </CardActions>
230
71
  </Card>
231
- <TableContainer>
232
- <Table>
233
- <TableHead>{getTableHeader()}</TableHead>
234
- <TableBody>{getTableData()}</TableBody>
235
- </Table>
236
- </TableContainer>
237
72
  </StyledPegaDxilMyPageWidgetWrapper>
238
73
  );
239
74
  }
@@ -0,0 +1,46 @@
1
+ .alert-banner-title {
2
+ font-weight: 700;
3
+ font-size: 1rem;
4
+ display: flex;
5
+ align-items: center;
6
+ gap: 0.25rem;
7
+ }
8
+
9
+ .alert-banner-badge {
10
+ display: inline-flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ min-width: 1rem;
14
+ height: 1rem;
15
+ padding: 0 0.2rem;
16
+ border-radius: 999px;
17
+ font-size: 0.6rem;
18
+ font-weight: 700;
19
+ line-height: 1;
20
+ vertical-align: middle;
21
+ }
22
+
23
+ .alert-banner-badge--urgent {
24
+ background: var(--app-error-dark-color);
25
+ color: #fff;
26
+ }
27
+
28
+ .alert-banner-badge--warning {
29
+ background: var(--app-warning-color-dark);
30
+ color: #fff;
31
+ }
32
+
33
+ .alert-banner-badge--success {
34
+ background: var(--stepper-completed-bg-color);
35
+ color: #fff;
36
+ }
37
+
38
+ .alert-banner-badge--info {
39
+ background: var(--link-button-color);
40
+ color: #fff;
41
+ }
42
+
43
+ .alert-banner-list {
44
+ margin: 0;
45
+ padding-left: 1.25rem;
46
+ }
@@ -1,39 +1,56 @@
1
- import { Alert } from '@mui/material';
1
+ import { Alert, AlertTitle } from '@mui/material';
2
+ import './AlertBanner.css';
2
3
 
3
4
  // AlertBanner is one of the few components that does NOT have getPConnect.
4
5
  // So, no need to extend PConnProps
5
6
  interface AlertBannerProps {
6
- // If any, enter additional props that only exist on Date here
7
7
  id: string;
8
8
  variant: string;
9
9
  messages: string[];
10
10
  onDismiss?: any;
11
11
  }
12
12
 
13
- const SEVERITY_MAP = {
14
- urgent: 'error',
15
- warning: 'warning',
16
- success: 'success',
17
- info: 'info'
13
+ const VARIANT_MAP: Record<string, { severity: string; label: string }> = {
14
+ urgent: { severity: 'error', label: 'Error' },
15
+ warning: { severity: 'warning', label: 'Warning' },
16
+ success: { severity: 'success', label: 'Success' },
17
+ info: { severity: 'info', label: 'Info' }
18
18
  };
19
19
 
20
- export default function AlertBanner(props: AlertBannerProps) {
21
- const { id, variant, messages, onDismiss } = props;
22
- let additionalProps = {};
20
+ function renderMessage(message: string) {
21
+ const colonIndex = message.indexOf(':');
22
+ if (colonIndex === -1) return message;
23
+ return (
24
+ <>
25
+ <strong>{message.slice(0, colonIndex + 1)}</strong>
26
+ {message.slice(colonIndex + 1)}
27
+ </>
28
+ );
29
+ }
23
30
 
24
- if (onDismiss) {
25
- additionalProps = {
26
- onClose: onDismiss
27
- };
28
- }
31
+ export default function AlertBanner({ id, variant, messages, onDismiss }: AlertBannerProps) {
32
+ const { severity, label } = VARIANT_MAP[variant] ?? VARIANT_MAP.info;
33
+ const isMultiple = messages.length > 1;
29
34
 
30
35
  return (
31
36
  <div id={id}>
32
- {messages.map(message => (
33
- <Alert key={message} variant='outlined' severity={SEVERITY_MAP[variant]} {...additionalProps}>
34
- {message}
35
- </Alert>
36
- ))}
37
+ <Alert variant='outlined' severity={severity as any} {...(onDismiss && { onClose: onDismiss })}>
38
+ {isMultiple && (
39
+ <AlertTitle className='alert-banner-title'>
40
+ {label}
41
+ <span className={`alert-banner-badge alert-banner-badge--${variant}`}>{messages.length}</span>
42
+ </AlertTitle>
43
+ )}
44
+ {isMultiple ? (
45
+ <ul className='alert-banner-list'>
46
+ {messages.map(message => (
47
+ <li key={message}>{renderMessage(message)}</li>
48
+ ))}
49
+ </ul>
50
+ ) : (
51
+ renderMessage(messages[0])
52
+ )}
53
+ </Alert>
37
54
  </div>
38
55
  );
39
56
  }
@@ -14,3 +14,17 @@
14
14
  padding: calc(2 * 0.5rem);
15
15
  grid-row-gap: calc(2 * 0.5rem);
16
16
  }
17
+
18
+ .psdk-case-summary-fields .label {
19
+ font-size: 0.8rem;
20
+ color: #c0c0c0;
21
+ }
22
+
23
+ .psdk-case-summary-object-ref {
24
+ text-align: left;
25
+ }
26
+
27
+ .psdk-case-summary-object-ref-value * {
28
+ justify-content: flex-start;
29
+ text-align: left;
30
+ }
@@ -18,13 +18,16 @@ interface CaseSummaryFieldsProps {
18
18
  status?: string;
19
19
  showStatus?: boolean;
20
20
  theFields: any[] | any | never;
21
+ variant?: 'primary' | 'secondary';
21
22
  }
22
23
 
23
24
  export default function CaseSummaryFields(props: CaseSummaryFieldsProps) {
24
25
  // Get emitted components from map (so we can get any override that may exist)
25
26
  const Operator = getComponentFromMap('Operator');
26
-
27
- const { status, showStatus, theFields } = props;
27
+ const ObjectReference = getComponentFromMap('ObjectReference');
28
+ const Reference = getComponentFromMap('reference');
29
+ const FieldValueList = getComponentFromMap('FieldValueList');
30
+ const { status, showStatus, theFields, variant = 'primary' } = props;
28
31
 
29
32
  const [theFieldsToRender, setFieldsToRender] = useState([]);
30
33
  const [theFieldsAsGridItems, setFieldsAsGridItems] = useState<any[]>([]);
@@ -212,6 +215,19 @@ export default function CaseSummaryFields(props: CaseSummaryFieldsProps) {
212
215
  case 'caseoperator':
213
216
  return <Operator {...field.config} />;
214
217
 
218
+ case 'objectreference':
219
+ return (
220
+ <div className='psdk-case-summary-object-ref'>
221
+ <label className='label'>{field.config.displayLabel}</label>
222
+ <div className='psdk-case-summary-object-ref-value'>
223
+ <ObjectReference {...field.config} getPConnect={field.getPConnect} />
224
+ </div>
225
+ </div>
226
+ );
227
+
228
+ case 'reference':
229
+ return <Reference {...field.config} getPConnect={field.getPConnect} displayMode='DISPLAY_ONLY' />;
230
+
215
231
  default:
216
232
  return (
217
233
  <span>
@@ -221,14 +237,50 @@ export default function CaseSummaryFields(props: CaseSummaryFieldsProps) {
221
237
  }
222
238
  }
223
239
 
240
+ function renderSecondaryField(field: any) {
241
+ const fieldTypeLower = field.type.toLowerCase();
242
+
243
+ if (fieldTypeLower === 'caseoperator') {
244
+ return <Operator {...field.config} displayMode='DISPLAY_ONLY' />;
245
+ }
246
+
247
+ // ObjectReference: render label from CaseSummaryFields, value from component
248
+ if (fieldTypeLower === 'objectreference') {
249
+ const name = field.config.label || field.config.displayLabel || '';
250
+ const value = field.getPConnect ? (
251
+ <ObjectReference {...field.config} getPConnect={field.getPConnect} displayMode='DISPLAY_ONLY' hideLabel />
252
+ ) : (
253
+ (field.config.value ?? '---')
254
+ );
255
+
256
+ return <FieldValueList name={name} value={value} variant='inline' />;
257
+ }
258
+
259
+ if (!field.getPConnect) {
260
+ // Fallback if no getPConnect — render using FieldValueList directly
261
+ const name = field.config.label || field.config.displayLabel || '';
262
+ const value = field.config.value ?? '---';
263
+ return <FieldValueList name={name} value={value} variant='inline' />;
264
+ }
265
+
266
+ const pConnect = field.getPConnect();
267
+ return pConnect.createComponent({
268
+ type: field.type,
269
+ config: {
270
+ ...field.config,
271
+ displayMode: 'DISPLAY_ONLY'
272
+ }
273
+ });
274
+ }
275
+
224
276
  // Whenever theFieldsToRender changes, update theFieldsAsGridItems that's used during render
225
277
  useEffect(() => {
226
278
  const arGridItems = theFieldsToRender?.map((field: any) => {
227
279
  // display the field when either visibility property doesn't exist or is true(if exists)
228
280
  if (field.config.visibility === undefined || field.config.visibility === true) {
229
281
  return (
230
- <Grid2 size={{ xs: 6 }} key={field.config.label}>
231
- {getFieldValue(field)}
282
+ <Grid2 size={{ xs: variant === 'secondary' ? 12 : 6 }} key={field.config.label}>
283
+ {variant === 'secondary' ? renderSecondaryField(field) : getFieldValue(field)}
232
284
  </Grid2>
233
285
  );
234
286
  }
@@ -236,7 +288,7 @@ export default function CaseSummaryFields(props: CaseSummaryFieldsProps) {
236
288
  return null;
237
289
  });
238
290
  setFieldsAsGridItems(arGridItems);
239
- }, [theFieldsToRender]);
291
+ }, [theFieldsToRender, variant]);
240
292
 
241
293
  const theFieldsModifiable = theFields;
242
294
 
@@ -1,4 +1,4 @@
1
- import { type PropsWithChildren, useState } from 'react';
1
+ import { type PropsWithChildren } from 'react';
2
2
  import Grid2 from '@mui/material/Grid2';
3
3
  import makeStyles from '@mui/styles/makeStyles';
4
4
  import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';
@@ -9,8 +9,11 @@ import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
9
9
  interface FieldGroupProps {
10
10
  // If any, enter additional props that only exist on this component
11
11
  name?: string;
12
- collapsible?: boolean;
13
12
  instructions?: string;
13
+ defaultCollapsed?: any;
14
+ collapsed?: any;
15
+ onToggleCollapsed?: () => void;
16
+ isCollapsibleMode?: boolean;
14
17
  }
15
18
 
16
19
  const useStyles = makeStyles(theme => ({
@@ -32,7 +35,7 @@ const useStyles = makeStyles(theme => ({
32
35
  display: 'flex',
33
36
  alignItems: 'center',
34
37
  gap: '5px',
35
- cursor: collapsible => (collapsible ? 'pointer' : 'auto')
38
+ cursor: isCollapsibleMode => (isCollapsibleMode ? 'pointer' : 'auto')
36
39
  },
37
40
  instructionText: {
38
41
  padding: '5px 0'
@@ -40,9 +43,8 @@ const useStyles = makeStyles(theme => ({
40
43
  }));
41
44
 
42
45
  export default function FieldGroup(props: PropsWithChildren<FieldGroupProps>) {
43
- const { children, name, collapsible = false, instructions } = props;
44
- const classes = useStyles(collapsible);
45
- const [collapsed, setCollapsed] = useState(false);
46
+ const { children, name, instructions, collapsed, isCollapsibleMode, onToggleCollapsed } = props;
47
+ const classes = useStyles(isCollapsibleMode);
46
48
 
47
49
  const descAndChildren = (
48
50
  <Grid2 container>
@@ -51,7 +53,7 @@ export default function FieldGroup(props: PropsWithChildren<FieldGroupProps>) {
51
53
  );
52
54
 
53
55
  const headerClickHandler = () => {
54
- setCollapsed(current => !current);
56
+ onToggleCollapsed?.();
55
57
  };
56
58
 
57
59
  return (
@@ -59,7 +61,7 @@ export default function FieldGroup(props: PropsWithChildren<FieldGroupProps>) {
59
61
  <Grid2 style={{ width: '100%' }}>
60
62
  {name && (
61
63
  <div className={classes.fieldMargin}>
62
- {collapsible ? (
64
+ {isCollapsibleMode ? (
63
65
  <span id='field-group-header' className={classes.fieldGroupHeader} onClick={headerClickHandler}>
64
66
  {collapsed ? <KeyboardArrowRightIcon /> : <KeyboardArrowDownIcon />}
65
67
  <b>{name}</b>
@@ -69,10 +71,15 @@ export default function FieldGroup(props: PropsWithChildren<FieldGroupProps>) {
69
71
  )}
70
72
  </div>
71
73
  )}
72
- {instructions && instructions !== 'none' && (
73
- <div key='instructions' className={classes.instructionText} dangerouslySetInnerHTML={{ __html: instructions }} />
74
+
75
+ {!collapsed && (
76
+ <>
77
+ {instructions && instructions !== 'none' && (
78
+ <div key='instructions' className={classes.instructionText} dangerouslySetInnerHTML={{ __html: instructions }} />
79
+ )}
80
+ {descAndChildren}
81
+ </>
74
82
  )}
75
- {!collapsed && descAndChildren}
76
83
  </Grid2>
77
84
  </Grid2>
78
85
  );
@@ -24,7 +24,7 @@ export default function FieldGroupList(props: FieldGroupListProps) {
24
24
  <Grid2 style={{ width: '100%' }}>
25
25
  <Grid2 container spacing={1}>
26
26
  {props.items.map(item => (
27
- <Grid2 style={{ width: '100%' }}>
27
+ <Grid2 key={item.name} style={{ width: '100%' }}>
28
28
  <b>{item.name}</b>
29
29
  {props.onDelete && (
30
30
  <button