@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
@@ -7,6 +7,8 @@ import { format } from '@pega/react-sdk-components/lib/components/helpers/format
7
7
  import { dateFormatInfoDefault, getDateFormatInfo } from '@pega/react-sdk-components/lib/components/helpers/date-format-utils';
8
8
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
9
9
  import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
10
+ import useStatus from '@pega/react-sdk-components/lib/hooks/useStatus';
11
+ import { getFieldSx } from '@pega/react-sdk-components/lib/components/helpers/field-utils';
10
12
 
11
13
  // Will return the date string in YYYY-MM-DD format which we'll be POSTing to the server
12
14
  function getFormattedDate(date) {
@@ -15,6 +17,12 @@ function getFormattedDate(date) {
15
17
 
16
18
  interface DateProps extends PConnFieldProps {
17
19
  // If any, enter additional props that only exist on Date here
20
+ showFieldMessage?: boolean;
21
+ messageConfig?: {
22
+ content?: string;
23
+ visibility?: boolean;
24
+ };
25
+ variant?: string;
18
26
  }
19
27
 
20
28
  export default function Date(props: DateProps) {
@@ -22,14 +30,36 @@ export default function Date(props: DateProps) {
22
30
  const TextInput = getComponentFromMap('TextInput');
23
31
  const FieldValueList = getComponentFromMap('FieldValueList');
24
32
 
25
- const { getPConnect, label, required, disabled, value, validatemessage, status, readOnly, testId, helperText, displayMode, hideLabel } = props;
33
+ const {
34
+ getPConnect,
35
+ label,
36
+ required,
37
+ disabled,
38
+ value,
39
+ validatemessage,
40
+ readOnly,
41
+ testId,
42
+ helperText,
43
+ displayMode,
44
+ hideLabel,
45
+ showFieldMessage,
46
+ messageConfig = {}
47
+ } = props;
26
48
 
27
49
  const [dateValue, setDateValue] = useState<Dayjs | null>(value ? dayjs(value) : null);
28
50
 
29
51
  const pConn = getPConnect();
30
52
  const actions = pConn.getActionsApi();
31
53
  const propName = (pConn.getStateProps() as any).value;
32
- const helperTextToDisplay = validatemessage || helperText;
54
+ const eligibleForFieldWarning = showFieldMessage && messageConfig.visibility && !readOnly;
55
+ const helperTextToDisplay = validatemessage || (eligibleForFieldWarning ? messageConfig.content : helperText);
56
+
57
+ const status = useStatus({
58
+ showFieldMessage,
59
+ messageVisibility: messageConfig.visibility,
60
+ validatemessage,
61
+ readOnly
62
+ });
33
63
 
34
64
  // Start with default dateFormatInfo
35
65
  const dateFormatInfo = dateFormatInfoDefault;
@@ -47,7 +77,7 @@ export default function Date(props: DateProps) {
47
77
  const formattedDate = format(props.value, 'date', {
48
78
  format: dateFormatInfo.dateFormatString
49
79
  });
50
- return <FieldValueList name={hideLabel ? '' : label} value={formattedDate} />;
80
+ return <FieldValueList name={hideLabel ? '' : label} value={formattedDate} variant={props.variant} />;
51
81
  }
52
82
 
53
83
  if (displayMode === 'STACKED_LARGE_VAL') {
@@ -85,7 +115,8 @@ export default function Date(props: DateProps) {
85
115
  error: status === 'error',
86
116
  helperText: helperTextToDisplay,
87
117
  size: 'small',
88
- InputProps: { ...testProps }
118
+ InputProps: { ...testProps },
119
+ sx: getFieldSx(status)
89
120
  }
90
121
  }}
91
122
  onChange={handleChange}
@@ -7,9 +7,17 @@ import { format } from '@pega/react-sdk-components/lib/components/helpers/format
7
7
  import { dateFormatInfoDefault, getDateFormatInfo } from '@pega/react-sdk-components/lib/components/helpers/date-format-utils';
8
8
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
9
9
  import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
10
+ import useStatus from '@pega/react-sdk-components/lib/hooks/useStatus';
11
+ import { getFieldSx } from '@pega/react-sdk-components/lib/components/helpers/field-utils';
10
12
 
11
13
  interface DateTimeProps extends PConnFieldProps {
12
14
  // If any, enter additional props that only exist on DateTime here
15
+ showFieldMessage?: boolean;
16
+ messageConfig?: {
17
+ content?: string;
18
+ visibility?: boolean;
19
+ };
20
+ variant?: string;
13
21
  }
14
22
 
15
23
  export default function DateTime(props: DateTimeProps) {
@@ -17,7 +25,21 @@ export default function DateTime(props: DateTimeProps) {
17
25
  const TextInput = getComponentFromMap('TextInput');
18
26
  const FieldValueList = getComponentFromMap('FieldValueList');
19
27
 
20
- const { getPConnect, label, required, disabled, value = '', validatemessage, status, readOnly, testId, helperText, displayMode, hideLabel } = props;
28
+ const {
29
+ getPConnect,
30
+ label,
31
+ required,
32
+ disabled,
33
+ value = '',
34
+ validatemessage,
35
+ readOnly,
36
+ testId,
37
+ helperText,
38
+ displayMode,
39
+ hideLabel,
40
+ showFieldMessage,
41
+ messageConfig = {}
42
+ } = props;
21
43
 
22
44
  const environmentInfo = PCore.getEnvironmentInfo();
23
45
  const timezone = environmentInfo && environmentInfo.getTimeZone();
@@ -27,7 +49,15 @@ export default function DateTime(props: DateTimeProps) {
27
49
  const pConn = getPConnect();
28
50
  const actions = pConn.getActionsApi();
29
51
  const propName = (pConn.getStateProps() as any).value;
30
- const helperTextToDisplay = validatemessage || helperText;
52
+ const eligibleForFieldWarning = showFieldMessage && messageConfig.visibility && !readOnly;
53
+ const helperTextToDisplay = validatemessage || (eligibleForFieldWarning ? messageConfig.content : helperText);
54
+
55
+ const status = useStatus({
56
+ showFieldMessage,
57
+ messageVisibility: messageConfig.visibility,
58
+ validatemessage,
59
+ readOnly
60
+ });
31
61
 
32
62
  // Start with default dateFormatInfo
33
63
  const dateFormatInfo = dateFormatInfoDefault;
@@ -45,7 +75,7 @@ export default function DateTime(props: DateTimeProps) {
45
75
  const formattedDateTime = format(props.value, 'datetime', {
46
76
  format: `${dateFormatInfo.dateFormatString} hh:mm a`
47
77
  });
48
- return <FieldValueList name={hideLabel ? '' : label} value={formattedDateTime} />;
78
+ return <FieldValueList name={hideLabel ? '' : label} value={formattedDateTime} variant={props.variant} />;
49
79
  }
50
80
 
51
81
  if (displayMode === 'STACKED_LARGE_VAL') {
@@ -93,7 +123,8 @@ export default function DateTime(props: DateTimeProps) {
93
123
  error: status === 'error',
94
124
  helperText: helperTextToDisplay,
95
125
  size: 'small',
96
- InputProps: { ...testProps }
126
+ InputProps: { ...testProps },
127
+ sx: getFieldSx(status)
97
128
  }
98
129
  }}
99
130
  />
@@ -6,6 +6,8 @@ import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event
6
6
  import { format } from '@pega/react-sdk-components/lib/components/helpers/formatters';
7
7
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
8
8
  import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
9
+ import useStatus from '@pega/react-sdk-components/lib/hooks/useStatus';
10
+ import { getFieldSx } from '@pega/react-sdk-components/lib/components/helpers/field-utils';
9
11
 
10
12
  /* Using react-number-format component here, since it allows formatting decimal values,
11
13
  as per the locale.
@@ -17,6 +19,12 @@ interface DecimalProps extends PConnFieldProps {
17
19
  decimalPrecision?: number;
18
20
  showGroupSeparators?: boolean;
19
21
  formatter?: string;
22
+ showFieldMessage?: boolean;
23
+ messageConfig?: {
24
+ content?: string;
25
+ visibility?: boolean;
26
+ };
27
+ variant?: string;
20
28
  }
21
29
 
22
30
  export default function Decimal(props: DecimalProps) {
@@ -30,7 +38,6 @@ export default function Decimal(props: DecimalProps) {
30
38
  disabled,
31
39
  value = '',
32
40
  validatemessage,
33
- status,
34
41
  /* onChange, onBlur, */
35
42
  readOnly,
36
43
  helperText,
@@ -41,7 +48,9 @@ export default function Decimal(props: DecimalProps) {
41
48
  showGroupSeparators,
42
49
  testId,
43
50
  placeholder,
44
- formatter
51
+ formatter,
52
+ showFieldMessage,
53
+ messageConfig = {}
45
54
  } = props;
46
55
 
47
56
  const [values, setValues] = useState(value.toString());
@@ -49,7 +58,15 @@ export default function Decimal(props: DecimalProps) {
49
58
  const pConn = getPConnect();
50
59
  const actions = pConn.getActionsApi();
51
60
  const propName = (pConn.getStateProps() as any).value;
52
- const helperTextToDisplay = validatemessage || helperText;
61
+ const eligibleForFieldWarning = showFieldMessage && messageConfig.visibility && !readOnly;
62
+ const helperTextToDisplay = validatemessage || (eligibleForFieldWarning ? messageConfig.content : helperText);
63
+
64
+ const status = useStatus({
65
+ showFieldMessage,
66
+ messageVisibility: messageConfig.visibility,
67
+ validatemessage,
68
+ readOnly
69
+ });
53
70
 
54
71
  const theSymbols = getCurrencyCharacters(currencyISOCode);
55
72
  const theCurrDec = theSymbols.theDecimalIndicator;
@@ -76,7 +93,7 @@ export default function Decimal(props: DecimalProps) {
76
93
  }
77
94
 
78
95
  if (displayMode === 'DISPLAY_ONLY') {
79
- return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} />;
96
+ return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} variant={props.variant} />;
80
97
  }
81
98
 
82
99
  if (displayMode === 'STACKED_LARGE_VAL') {
@@ -117,6 +134,7 @@ export default function Decimal(props: DecimalProps) {
117
134
  decimalScale={readOnly && formatter === 'Currency' ? undefined : decimalPrecision}
118
135
  slotProps={{ input: { ...readOnlyProp, inputProps: { ...testProps } } }}
119
136
  customInput={TextField}
137
+ sx={getFieldSx(status)}
120
138
  />
121
139
  );
122
140
  }
@@ -7,6 +7,9 @@ import { getDataPage } from '@pega/react-sdk-components/lib/components/helpers/d
7
7
  import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
8
8
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
9
9
  import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
10
+ import { useDeepMemo } from '@pega/react-sdk-components/lib/components/field/Multiselect/utils';
11
+ import useStatus from '@pega/react-sdk-components/lib/hooks/useStatus';
12
+ import { getFieldSx } from '@pega/react-sdk-components/lib/components/helpers/field-utils';
10
13
 
11
14
  interface IOption {
12
15
  key: string;
@@ -56,6 +59,12 @@ interface DropdownProps extends PConnFieldProps {
56
59
  datasourceMetadata?: any;
57
60
  parameters?: any;
58
61
  columns: any[];
62
+ showFieldMessage?: boolean;
63
+ messageConfig?: {
64
+ content?: string;
65
+ visibility?: boolean;
66
+ };
67
+ variant?: string;
59
68
  }
60
69
 
61
70
  export default function Dropdown(props: DropdownProps) {
@@ -69,7 +78,6 @@ export default function Dropdown(props: DropdownProps) {
69
78
  disabled,
70
79
  value = '',
71
80
  validatemessage,
72
- status,
73
81
  readOnly,
74
82
  testId,
75
83
  helperText,
@@ -78,7 +86,9 @@ export default function Dropdown(props: DropdownProps) {
78
86
  datasourceMetadata,
79
87
  hideLabel,
80
88
  onRecordChange,
81
- fieldMetadata
89
+ fieldMetadata,
90
+ showFieldMessage,
91
+ messageConfig = {}
82
92
  } = props;
83
93
  let { placeholder = '' } = props;
84
94
  const context = getPConnect().getContextName();
@@ -86,13 +96,21 @@ export default function Dropdown(props: DropdownProps) {
86
96
  placeholder = placeholder || 'Select...';
87
97
  const [options, setOptions] = useState<IOption[]>([]);
88
98
  const [theDatasource, setDatasource] = useState<any[] | null>(null);
89
- const helperTextToDisplay = validatemessage || helperText;
90
99
 
91
100
  const thePConn = getPConnect();
92
101
  const actionsApi = thePConn.getActionsApi();
93
102
  const propName = (thePConn.getStateProps() as any).value;
94
103
  const className = thePConn.getCaseInfo().getClassName();
95
104
  const refName = propName?.slice(propName.lastIndexOf('.') + 1);
105
+ const eligibleForFieldWarning = showFieldMessage && messageConfig.visibility && !readOnly;
106
+ const helperTextToDisplay = validatemessage || (eligibleForFieldWarning ? messageConfig.content : helperText);
107
+
108
+ const status = useStatus({
109
+ showFieldMessage,
110
+ messageVisibility: messageConfig.visibility,
111
+ validatemessage,
112
+ readOnly
113
+ });
96
114
 
97
115
  if (!isDeepEqual(datasource, theDatasource)) {
98
116
  // inbound datasource is different, so update theDatasource (to trigger useEffect)
@@ -124,6 +142,10 @@ export default function Dropdown(props: DropdownProps) {
124
142
  }
125
143
  columns = preProcessColumns(columns);
126
144
 
145
+ const memoizedParameters = useDeepMemo(() => {
146
+ return parameters;
147
+ }, [parameters]);
148
+
127
149
  useEffect(() => {
128
150
  if (theDatasource) {
129
151
  const list = Utils.getOptionList(props, getPConnect().getDataObject('')); // 1st arg empty string until typedef marked correctly
@@ -138,21 +160,29 @@ export default function Dropdown(props: DropdownProps) {
138
160
 
139
161
  useEffect(() => {
140
162
  if (listType !== 'associated' && typeof datasource === 'string') {
141
- getDataPage(datasource, parameters, context).then((results: any) => {
142
- const optionsData: any[] = [];
143
- const displayColumn = getDisplayFieldsMetaData(columns);
144
- results?.forEach(element => {
145
- const val = element[displayColumn.primary]?.toString();
146
- const obj = {
147
- key: element[displayColumn.key] || element.pyGUID,
148
- value: val
149
- };
150
- optionsData.push(obj);
163
+ getDataPage(datasource, parameters, context)
164
+ .then((results: any) => {
165
+ const optionsData: any[] = [];
166
+ const displayColumn = getDisplayFieldsMetaData(columns);
167
+ results?.forEach(element => {
168
+ const val = element[displayColumn.primary]?.toString();
169
+ const obj = {
170
+ key: element[displayColumn.key] || element.pyGUID,
171
+ value: val
172
+ };
173
+ optionsData.push(obj);
174
+ });
175
+ optionsData.unshift({
176
+ key: placeholder,
177
+ value: thePConn.getLocalizedValue(placeholder, '', '')
178
+ });
179
+ setOptions(optionsData);
180
+ })
181
+ .catch(e => {
182
+ console.error(e);
151
183
  });
152
- setOptions(optionsData);
153
- });
154
184
  }
155
- }, []);
185
+ }, [memoizedParameters]);
156
186
 
157
187
  const metaData = Array.isArray(fieldMetadata) ? fieldMetadata.filter(field => field?.classID === className)[0] : fieldMetadata;
158
188
 
@@ -171,6 +201,7 @@ export default function Dropdown(props: DropdownProps) {
171
201
  <FieldValueList
172
202
  name={hideLabel ? '' : label}
173
203
  value={thePConn.getLocalizedValue(val, localePath, thePConn.getLocaleRuleNameFromKeys(localeClass, localeContext, localeName))}
204
+ variant={props.variant}
174
205
  />
175
206
  );
176
207
  }
@@ -227,6 +258,7 @@ export default function Dropdown(props: DropdownProps) {
227
258
  slotProps={{
228
259
  input: { ...readOnlyProp, ...testProps }
229
260
  }}
261
+ sx={getFieldSx(status)}
230
262
  >
231
263
  {options.map((option: any) => (
232
264
  <MenuItem key={option.key} value={option.key}>
@@ -5,9 +5,17 @@ import MailOutlineIcon from '@mui/icons-material/MailOutline';
5
5
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
6
6
  import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
7
7
  import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
8
+ import useStatus from '@pega/react-sdk-components/lib/hooks/useStatus';
9
+ import { getFieldSx } from '@pega/react-sdk-components/lib/components/helpers/field-utils';
8
10
 
9
11
  interface EmailProps extends PConnFieldProps {
10
12
  // If any, enter additional props that only exist on Date here
13
+ showFieldMessage?: boolean;
14
+ messageConfig?: {
15
+ content?: string;
16
+ visibility?: boolean;
17
+ };
18
+ variant?: string;
11
19
  }
12
20
 
13
21
  export default function Email(props: EmailProps) {
@@ -22,20 +30,28 @@ export default function Email(props: EmailProps) {
22
30
  disabled,
23
31
  value = '',
24
32
  validatemessage,
25
- status,
26
33
  readOnly,
27
34
  testId,
28
35
  helperText,
29
36
  displayMode,
30
37
  hideLabel,
31
- placeholder
38
+ placeholder,
39
+ showFieldMessage,
40
+ messageConfig = {}
32
41
  } = props;
33
42
 
34
43
  const pConn = getPConnect();
35
44
  const actions = pConn.getActionsApi();
36
45
  const propName = (pConn.getStateProps() as any).value;
46
+ const eligibleForFieldWarning = showFieldMessage && messageConfig.visibility && !readOnly;
47
+ const helperTextToDisplay = validatemessage || (eligibleForFieldWarning ? messageConfig.content : helperText);
37
48
 
38
- const helperTextToDisplay = validatemessage || helperText;
49
+ const status = useStatus({
50
+ showFieldMessage,
51
+ messageVisibility: messageConfig.visibility,
52
+ validatemessage,
53
+ readOnly
54
+ });
39
55
 
40
56
  const [inputValue, setInputValue] = useState('');
41
57
 
@@ -44,7 +60,7 @@ export default function Email(props: EmailProps) {
44
60
  }, [value]);
45
61
 
46
62
  if (displayMode === 'DISPLAY_ONLY') {
47
- return <FieldValueList name={hideLabel ? '' : label} value={value} />;
63
+ return <FieldValueList name={hideLabel ? '' : label} value={value} variant={props.variant} />;
48
64
  }
49
65
 
50
66
  if (displayMode === 'STACKED_LARGE_VAL') {
@@ -91,6 +107,7 @@ export default function Email(props: EmailProps) {
91
107
  inputProps: { ...testProps }
92
108
  }
93
109
  }}
110
+ sx={getFieldSx(status)}
94
111
  />
95
112
  );
96
113
  }
@@ -1,6 +1,7 @@
1
1
  import { type ReactElement, useMemo } from 'react';
2
2
  import Grid2 from '@mui/material/Grid2';
3
3
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
4
+ import useCollapsibleState from '@pega/react-sdk-components/lib/hooks/useCollapsibleState';
4
5
  import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
5
6
 
6
7
  interface GroupProps extends PConnFieldProps {
@@ -8,16 +9,33 @@ interface GroupProps extends PConnFieldProps {
8
9
  heading: string;
9
10
  showHeading: boolean;
10
11
  instructions?: string;
11
- collapsible: boolean;
12
+ collapseOnLoad?: any;
12
13
  type: string;
14
+ defaultCollapsed?: any;
15
+ collapsible?: any;
13
16
  }
14
17
 
15
18
  export default function Group(props: GroupProps) {
16
19
  const FieldGroup = getComponentFromMap('FieldGroup');
20
+ const {
21
+ children,
22
+ displayMode,
23
+ type,
24
+ collapseOnLoad = 'none',
25
+ collapsible,
26
+ defaultCollapsed = false,
27
+ showHeading = true,
28
+ heading,
29
+ instructions
30
+ } = props;
31
+ const isReadOnly = displayMode === 'DISPLAY_ONLY';
32
+ const { isCollapsibleMode, collapsed, setCollapsed } = useCollapsibleState(collapseOnLoad, collapsible, defaultCollapsed, showHeading);
17
33
 
18
- const { children, heading, showHeading, instructions, collapsible, displayMode, type } = props;
34
+ const onToggleCollapsed = () => {
35
+ if (collapsed === undefined) return;
19
36
 
20
- const isReadOnly = displayMode === 'DISPLAY_ONLY';
37
+ setCollapsed(current => !current);
38
+ };
21
39
 
22
40
  const content = useMemo(() => {
23
41
  return (
@@ -34,7 +52,13 @@ export default function Group(props: GroupProps) {
34
52
  if (!children) return null;
35
53
 
36
54
  return (
37
- <FieldGroup name={showHeading ? heading : undefined} collapsible={collapsible} instructions={instructions}>
55
+ <FieldGroup
56
+ name={showHeading ? heading : undefined}
57
+ isCollapsibleMode={isCollapsibleMode}
58
+ collapsed={collapsed}
59
+ onToggleCollapsed={onToggleCollapsed}
60
+ instructions={instructions}
61
+ >
38
62
  {content}
39
63
  </FieldGroup>
40
64
  );
@@ -4,9 +4,17 @@ import { TextField } from '@mui/material';
4
4
  import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
5
5
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
6
6
  import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
7
+ import useStatus from '@pega/react-sdk-components/lib/hooks/useStatus';
8
+ import { getFieldSx } from '@pega/react-sdk-components/lib/components/helpers/field-utils';
7
9
 
8
10
  interface IntegerProps extends PConnFieldProps {
9
11
  // If any, enter additional props that only exist on Integer here
12
+ showFieldMessage?: boolean;
13
+ messageConfig?: {
14
+ content?: string;
15
+ visibility?: boolean;
16
+ };
17
+ variant?: string;
10
18
  }
11
19
 
12
20
  export default function Integer(props: IntegerProps) {
@@ -21,20 +29,28 @@ export default function Integer(props: IntegerProps) {
21
29
  disabled,
22
30
  value = '',
23
31
  validatemessage,
24
- status,
25
32
  readOnly,
26
33
  testId,
27
34
  helperText,
28
35
  displayMode,
29
36
  hideLabel,
30
- placeholder
37
+ placeholder,
38
+ showFieldMessage,
39
+ messageConfig = {}
31
40
  } = props;
32
41
 
33
42
  const pConn = getPConnect();
34
43
  const actions = pConn.getActionsApi();
35
44
  const propName = (pConn.getStateProps() as any).value;
45
+ const eligibleForFieldWarning = showFieldMessage && messageConfig.visibility && !readOnly;
46
+ const helperTextToDisplay = validatemessage || (eligibleForFieldWarning ? messageConfig.content : helperText);
36
47
 
37
- const helperTextToDisplay = validatemessage || helperText;
48
+ const status = useStatus({
49
+ showFieldMessage,
50
+ messageVisibility: messageConfig.visibility,
51
+ validatemessage,
52
+ readOnly
53
+ });
38
54
 
39
55
  const [inputValue, setInputValue] = useState('');
40
56
 
@@ -43,7 +59,7 @@ export default function Integer(props: IntegerProps) {
43
59
  }, [value]);
44
60
 
45
61
  if (displayMode === 'DISPLAY_ONLY') {
46
- return <FieldValueList name={hideLabel ? '' : label} value={value} />;
62
+ return <FieldValueList name={hideLabel ? '' : label} value={value} variant={props.variant} />;
47
63
  }
48
64
 
49
65
  if (displayMode === 'STACKED_LARGE_VAL') {
@@ -95,6 +111,7 @@ export default function Integer(props: IntegerProps) {
95
111
  slotProps={{
96
112
  htmlInput: { inputMode: 'numeric', pattern: '[0-9]*', ...testProps }
97
113
  }}
114
+ sx={getFieldSx(status)}
98
115
  />
99
116
  );
100
117
  }
@@ -44,13 +44,32 @@ export default function Multiselect(props) {
44
44
  }
45
45
  ];
46
46
  let secondaryColumns: any = [];
47
- if (secondaryFields) {
48
- secondaryColumns = secondaryFields.map(secondaryField => ({
49
- value: secondaryField,
47
+ // Read columnsFormatter from raw (unresolved) metadata to get field property paths
48
+ // (e.g. "@P .pyLabel") instead of resolved data values (e.g. "New Complex Fields").
49
+ // This matches Constellation's approach: pConn.getRawMetadata()?.config?.columnsFormatter
50
+ const columnsFormatter = (getPConnect().getRawMetadata()?.config as any)?.columnsFormatter;
51
+ const secondaryFieldsFromFormatter = columnsFormatter
52
+ ? columnsFormatter
53
+ .map(item => {
54
+ const property = item?.config?.value;
55
+ if (typeof property === 'string') {
56
+ if (property.startsWith('@USER ')) return property.substring(6);
57
+ if (property.startsWith('@P ')) return property.substring(3);
58
+ return property;
59
+ }
60
+ return undefined;
61
+ })
62
+ .filter(Boolean)
63
+ : undefined;
64
+ const updatedSecondaryFields = secondaryFieldsFromFormatter || secondaryFields;
65
+ if (updatedSecondaryFields) {
66
+ secondaryColumns = updatedSecondaryFields.map(secondaryField => ({
67
+ value: typeof secondaryField === 'string' ? secondaryField : undefined,
50
68
  display: 'true',
51
69
  secondary: 'true',
52
70
  useForSearch: 'true'
53
71
  }));
72
+ secondaryColumns = secondaryColumns.filter(col => col.value);
54
73
  } else {
55
74
  secondaryColumns = [
56
75
  {
@@ -105,28 +124,14 @@ export default function Multiselect(props) {
105
124
  );
106
125
 
107
126
  const displayFieldMeta = listType !== 'associated' ? getDisplayFieldsMetaData(dataConfig.columns) : null;
108
- const getCaseListBasedOnParamsDebounced: any = useRef();
127
+ const getCaseListBasedOnParamsDebounced: any = useRef(null);
109
128
  const pConn = getPConnect();
110
129
  const contextName = pConn.getContextName();
111
130
  const listActions = pConn.getListActions();
112
- const dataApiObj: any = useRef();
131
+ const dataApiObj: any = useRef(null);
113
132
 
114
133
  // main search function trigger
115
134
  const getCaseListBasedOnParams = async (searchText, group, selectedRows, currentItemsTree, isTriggeredFromSearch = false) => {
116
- if (referenceList && referenceList.length > 0) {
117
- selectedRows = await listActions.getSelectedRows(true);
118
-
119
- selectedRows =
120
- selectedRows &&
121
- selectedRows.map(item => {
122
- return {
123
- id: item[selectionKey.startsWith('.') ? selectionKey.substring(1) : selectionKey],
124
- primary: item[primaryField.startsWith('.') ? primaryField.substring(1) : primaryField]
125
- };
126
- });
127
- setSelectedItems(selectedRows);
128
- }
129
-
130
135
  // if items tree is null or text search is triggered then always should use fresh data object, we use the original object
131
136
  const initalItemsTree = isTriggeredFromSearch || !currentItemsTree ? [...itemsTreeBaseData] : [...currentItemsTree];
132
137
  const res = await doSearch(
@@ -141,6 +146,20 @@ export default function Multiselect(props) {
141
146
  selectedRows || []
142
147
  );
143
148
  setItemsTree(res);
149
+ if (referenceList && referenceList.length > 0) {
150
+ selectedRows = await listActions.getSelectedRows(true);
151
+ selectedRows =
152
+ selectedRows &&
153
+ selectedRows.map(item => {
154
+ const id = item[selectionKey.startsWith('.') ? selectionKey.substring(1) : selectionKey];
155
+ let primary = item[primaryField.startsWith('.') ? primaryField.substring(1) : primaryField];
156
+ if (primary === undefined) {
157
+ primary = res.find(r => r.id === id)?.primary;
158
+ }
159
+ return { id, primary, selected: true };
160
+ });
161
+ setSelectedItems(selectedRows);
162
+ }
144
163
  };
145
164
 
146
165
  useEffect(() => {
@@ -162,6 +181,9 @@ export default function Multiselect(props) {
162
181
  if (!isGroupData) {
163
182
  getCaseListBasedOnParamsDebounced.current(inputValue ?? '', '', [...selectedItems], [...itemsTree]);
164
183
  }
184
+ })
185
+ .catch(e => {
186
+ console.error(e);
165
187
  });
166
188
  }
167
189
  }, [dataConfig, listType, dataConfig.columns, inputValue, dataConfig.groupColumnsConfig, showSecondaryInSearchOnly]);
@@ -220,7 +242,7 @@ export default function Multiselect(props) {
220
242
  fullWidth
221
243
  options={itemsTree}
222
244
  disableCloseOnSelect
223
- // getOptionSelected={(option: any, val: any) => option?.primary === val?.primary}
245
+ isOptionEqualToValue={(option: any, val: any) => option?.id === val?.id}
224
246
  getOptionLabel={(option: any) => option?.primary}
225
247
  onChange={handleChange}
226
248
  value={selectedItems}
@@ -12,7 +12,7 @@ export const setVisibilityForList = (c11nEnv, visibility) => {
12
12
  };
13
13
 
14
14
  const useDeepMemo = (memoFn, key) => {
15
- const ref: any = useRef();
15
+ const ref: any = useRef(null);
16
16
  if (!ref.current || !equal(key, ref.current.key)) {
17
17
  ref.current = { key, value: memoFn() };
18
18
  }
@@ -22,8 +22,10 @@ const useDeepMemo = (memoFn, key) => {
22
22
  const preProcessColumns = columns => {
23
23
  return columns?.map(col => {
24
24
  const tempColObj = { ...col };
25
- tempColObj.value = col.value && col.value.startsWith('.') ? col.value.substring(1) : col.value;
26
- if (tempColObj.setProperty) {
25
+ if (typeof col.value === 'string') {
26
+ tempColObj.value = col.value.startsWith('.') ? col.value.substring(1) : col.value;
27
+ }
28
+ if (typeof col.setProperty === 'string') {
27
29
  tempColObj.setProperty = col.setProperty && col.setProperty.startsWith('.') ? col.setProperty.substring(1) : col.setProperty;
28
30
  }
29
31
  return tempColObj;