@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
@@ -2,9 +2,13 @@ import { Utils } from '@pega/react-sdk-components/lib/components/helpers/utils';
2
2
 
3
3
  export const SELECTION_MODE = { SINGLE: 'single', MULTI: 'multi' };
4
4
 
5
- const getLeafNameFromPropertyName = property => property?.substr(property.lastIndexOf('.'));
5
+ const getLeafNameFromPropertyName = (property: string) => property?.substr(property.lastIndexOf('.') + 1);
6
6
 
7
- const isSelfReferencedProperty = (param, referenceProp) => param === referenceProp?.split('.', 2)[1];
7
+ const isSelfReferencedProperty = (param: string, referenceProp: string) => {
8
+ const propName = getPropertyValue(param);
9
+ const propNameAfterDot = propName.substring(propName.indexOf('.') + 1);
10
+ return referenceProp?.includes(propNameAfterDot);
11
+ };
8
12
 
9
13
  export const AT_FILTEREDLIST = '@FILTERED_LIST';
10
14
  export const AT_PROPERTY = '@P';
@@ -17,12 +21,12 @@ export const PAGELIST = '!PL!';
17
21
  export const PERIOD = '.';
18
22
  const AT = '@';
19
23
 
20
- export function updatePageListPropertyValue(value) {
24
+ export function updatePageListPropertyValue(value: string) {
21
25
  value = value.substring(0, value.indexOf(SQUARE_BRACKET_START)) + value.substring(value.indexOf(SQUARE_BRACKET_END) + 1);
22
26
  return value;
23
27
  }
24
28
 
25
- export function getPropertyValue(value) {
29
+ export function getPropertyValue(value: string) {
26
30
  if (value.startsWith(AT)) {
27
31
  value = value.substring(value.indexOf(' ') + 1);
28
32
  if (value.startsWith(PERIOD)) value = value.substring(1);
@@ -33,25 +37,38 @@ export function getPropertyValue(value) {
33
37
  return value;
34
38
  }
35
39
 
36
- const getCompositeKeys = (c11nEnv, property) => {
40
+ const getReferenceProp = (config: any) => {
41
+ if (config.mode === SELECTION_MODE.MULTI) {
42
+ return config?.pagelistValue?.substring(4) ?? '';
43
+ }
44
+ const property = config.value;
45
+ const arr = property?.split('.') ?? [];
46
+ if (arr.length > 1) {
47
+ arr.pop();
48
+ return arr.slice(1).join('.');
49
+ }
50
+ return '';
51
+ };
52
+
53
+ const getCompositeKeys = (c11nEnv: any, property: string) => {
37
54
  const { datasource: { parameters = {} } = {} } = c11nEnv.getFieldMetadata(property) || {};
38
- return Object.values(parameters).reduce((compositeKeys: any, param) => {
39
- if (isSelfReferencedProperty(property, param)) {
55
+ return Object.values(parameters).reduce((compositeKeys: string[], param: any) => {
56
+ if (isSelfReferencedProperty(param, property)) {
40
57
  let propName = getPropertyValue(param);
41
- propName = propName.substring(propName.indexOf('.'));
58
+ propName = propName.substring(propName.indexOf('.') + 1);
42
59
  compositeKeys.push(propName);
43
60
  }
44
61
  return compositeKeys;
45
62
  }, []);
46
63
  };
47
64
 
48
- export const generateColumns = (config, pConn, referenceType) => {
65
+ export const generateColumns = (config: any, pConn: any, referenceType: string) => {
49
66
  const displayField = getLeafNameFromPropertyName(config.displayField);
50
- const referenceProp = config.value.split('.', 2)[1];
51
- const compositeKeys: any = getCompositeKeys(pConn, referenceProp);
52
- let value = getLeafNameFromPropertyName(config.value);
67
+ const referenceProp = getReferenceProp(config);
68
+ const compositeKeys = getCompositeKeys(pConn, referenceProp);
69
+ let value = getLeafNameFromPropertyName(config.mode === SELECTION_MODE.MULTI ? config.selectionKey : config.value);
53
70
 
54
- const columns: any = [];
71
+ const columns: any[] = [];
55
72
  if (displayField) {
56
73
  columns.push({
57
74
  value: displayField,
@@ -61,6 +78,9 @@ export const generateColumns = (config, pConn, referenceType) => {
61
78
  });
62
79
  }
63
80
  if (value && compositeKeys.indexOf(value) !== -1) {
81
+ if (!config.value) {
82
+ config.value = `@P .${referenceProp}.${value}`;
83
+ }
64
84
  columns.push({
65
85
  value,
66
86
  setProperty: 'Associated property',
@@ -68,7 +88,7 @@ export const generateColumns = (config, pConn, referenceType) => {
68
88
  });
69
89
  } else {
70
90
  const actualValue = compositeKeys.length > 0 ? compositeKeys[0] : value;
71
- config.value = `@P .${referenceProp}${actualValue}`;
91
+ config.value = `@P .${referenceProp}.${actualValue}`;
72
92
  value = actualValue;
73
93
  columns.push({
74
94
  value: actualValue,
@@ -79,9 +99,9 @@ export const generateColumns = (config, pConn, referenceType) => {
79
99
 
80
100
  config.datasource = {
81
101
  fields: {
82
- key: getLeafNameFromPropertyName(config.value),
83
- text: getLeafNameFromPropertyName(config.displayField),
84
- value: getLeafNameFromPropertyName(config.value)
102
+ key: `.${getLeafNameFromPropertyName(config.value)}`,
103
+ text: `.${getLeafNameFromPropertyName(config.displayField)}`,
104
+ value: `.${getLeafNameFromPropertyName(config.value)}`
85
105
  }
86
106
  };
87
107
 
@@ -95,17 +115,85 @@ export const generateColumns = (config, pConn, referenceType) => {
95
115
  }
96
116
 
97
117
  compositeKeys.forEach(key => {
118
+ const descriptorsFieldName = `.${key}`;
98
119
  if (value !== key)
99
120
  columns.push({
100
- value: key,
121
+ value: descriptorsFieldName,
101
122
  display: 'false',
102
123
  secondary: 'true',
103
124
  useForSearch: false,
104
- setProperty: `.${referenceProp}${key}`
125
+ setProperty: `.${referenceProp}.${key}`
105
126
  });
106
127
  });
107
128
 
108
129
  config.columns = columns;
109
130
  };
110
131
 
111
- export const getDataRelationshipContextFromKey = key => key.split('.', 2)[1];
132
+ export const addCompositeKeysToConfig = (config: any, pConn: any) => {
133
+ const referenceProp = getReferenceProp(config);
134
+ const fieldMetadata = pConn.getFieldMetadata(referenceProp) || {};
135
+ const { datasource: { parameters: fieldParameters = {} } = {} } = fieldMetadata;
136
+ const compositeKeys: string[] = [];
137
+ Object.values(fieldParameters).forEach((param: any) => {
138
+ if (isSelfReferencedProperty(param, referenceProp)) {
139
+ compositeKeys.push(param);
140
+ }
141
+ });
142
+ config.compositeKeys = compositeKeys;
143
+ };
144
+
145
+ export const getDataRelationshipContextFromKey = (key: string) => {
146
+ const firstIndexOfDot = key.indexOf('.');
147
+ if (firstIndexOfDot > -1) {
148
+ const lastIndexOfDot = key.lastIndexOf('.');
149
+ if (lastIndexOfDot > firstIndexOfDot) {
150
+ return key.substring(firstIndexOfDot + 1, lastIndexOfDot);
151
+ }
152
+ }
153
+ return '';
154
+ };
155
+
156
+ export const createNewRecord = ({
157
+ referenceType,
158
+ disableStartingFieldsForReference,
159
+ pConn,
160
+ contextClass,
161
+ startingFields,
162
+ getPConnect
163
+ }: {
164
+ referenceType: string;
165
+ disableStartingFieldsForReference: boolean;
166
+ pConn: any;
167
+ contextClass: string;
168
+ startingFields: Record<string, any>;
169
+ getPConnect: any;
170
+ }) => {
171
+ if (referenceType === 'Case') {
172
+ if (!disableStartingFieldsForReference) {
173
+ // @ts-ignore
174
+ startingFields[PCore.getNameSpaceUtils().getDefaultQualifiedName('pyAddCaseContextPage')] = {
175
+ pyID: pConn.getCaseInfo().getKey()?.split(' ')?.pop()
176
+ };
177
+ }
178
+ return pConn.getActionsApi().createWork(contextClass, {
179
+ openCaseViewAfterCreate: false,
180
+ startingFields
181
+ });
182
+ }
183
+ if (referenceType === 'Data') {
184
+ return getPConnect().getActionsApi().showDataObjectCreateView(contextClass);
185
+ }
186
+ };
187
+
188
+ export const getAdditionalInfo = (pConn: any, propertyName: string) => {
189
+ const parentFieldMetadata = pConn.getFieldMetadata(getDataRelationshipContextFromKey(propertyName));
190
+ return parentFieldMetadata?.additionalInformation
191
+ ? {
192
+ content: parentFieldMetadata.additionalInformation
193
+ }
194
+ : undefined;
195
+ };
196
+
197
+ export const camelCase = (str: string) => {
198
+ return str.replace(/[-_\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : '')).replace(/^[A-Z]/, char => char.toLowerCase());
199
+ };
@@ -6,6 +6,8 @@ import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConn
6
6
  import { getCurrencyCharacters, getCurrencyOptions } from '@pega/react-sdk-components/lib/components/field/Currency/currency-utils';
7
7
  import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
8
8
  import { format } from '@pega/react-sdk-components/lib/components/helpers/formatters';
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.
@@ -15,6 +17,12 @@ interface PercentageProps extends PConnFieldProps {
15
17
  currencyISOCode?: string;
16
18
  showGroupSeparators?: string;
17
19
  decimalPrecision?: number;
20
+ showFieldMessage?: boolean;
21
+ messageConfig?: {
22
+ content?: string;
23
+ visibility?: boolean;
24
+ };
25
+ variant?: string;
18
26
  }
19
27
 
20
28
  export default function Percentage(props: PercentageProps) {
@@ -28,7 +36,6 @@ export default function Percentage(props: PercentageProps) {
28
36
  disabled,
29
37
  value = '',
30
38
  validatemessage,
31
- status,
32
39
  // onChange,
33
40
  // onBlur,
34
41
  readOnly,
@@ -39,7 +46,9 @@ export default function Percentage(props: PercentageProps) {
39
46
  hideLabel,
40
47
  placeholder,
41
48
  showGroupSeparators,
42
- decimalPrecision
49
+ decimalPrecision,
50
+ showFieldMessage,
51
+ messageConfig = {}
43
52
  } = props;
44
53
 
45
54
  const [values, setValues] = useState(value.toString());
@@ -47,7 +56,15 @@ export default function Percentage(props: PercentageProps) {
47
56
  const pConn = getPConnect();
48
57
  const actions = pConn.getActionsApi();
49
58
  const propName = (pConn.getStateProps() as any).value;
50
- const helperTextToDisplay = validatemessage || helperText;
59
+ const eligibleForFieldWarning = showFieldMessage && messageConfig.visibility && !readOnly;
60
+ const helperTextToDisplay = validatemessage || (eligibleForFieldWarning ? messageConfig.content : helperText);
61
+
62
+ const status = useStatus({
63
+ showFieldMessage,
64
+ messageVisibility: messageConfig.visibility,
65
+ validatemessage,
66
+ readOnly
67
+ });
51
68
 
52
69
  const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
53
70
  const formattedValue = format(value, pConn.getComponentName()?.toLowerCase(), theCurrencyOptions);
@@ -63,7 +80,7 @@ export default function Percentage(props: PercentageProps) {
63
80
  }
64
81
 
65
82
  if (displayMode === 'DISPLAY_ONLY') {
66
- return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} />;
83
+ return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} variant={props.variant} />;
67
84
  }
68
85
 
69
86
  if (displayMode === 'STACKED_LARGE_VAL') {
@@ -107,6 +124,7 @@ export default function Percentage(props: PercentageProps) {
107
124
  suffix='%'
108
125
  slotProps={{ input: { ...readOnlyProp, inputProps: { ...testProps } } }}
109
126
  customInput={TextField}
127
+ sx={getFieldSx(status)}
110
128
  />
111
129
  );
112
130
  }
@@ -4,9 +4,17 @@ import { MuiTelInput } from 'mui-tel-input';
4
4
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
5
5
  import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
6
6
  import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
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 PhoneProps extends PConnFieldProps {
9
11
  // If any, enter additional props that only exist on Phone 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 Phone(props: PhoneProps) {
@@ -20,14 +28,15 @@ export default function Phone(props: PhoneProps) {
20
28
  disabled,
21
29
  value = '',
22
30
  validatemessage,
23
- status,
24
31
  onChange,
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();
@@ -37,7 +46,15 @@ export default function Phone(props: PhoneProps) {
37
46
  const [inputValue, setInputValue] = useState(value);
38
47
  useEffect(() => setInputValue(value), [value]);
39
48
 
40
- const helperTextToDisplay = validatemessage || helperText;
49
+ const eligibleForFieldWarning = showFieldMessage && messageConfig.visibility && !readOnly;
50
+ const helperTextToDisplay = validatemessage || (eligibleForFieldWarning ? messageConfig.content : helperText);
51
+
52
+ const status = useStatus({
53
+ showFieldMessage,
54
+ messageVisibility: messageConfig.visibility,
55
+ validatemessage,
56
+ readOnly
57
+ });
41
58
 
42
59
  let testProp = {};
43
60
 
@@ -46,7 +63,7 @@ export default function Phone(props: PhoneProps) {
46
63
  };
47
64
 
48
65
  if (displayMode === 'DISPLAY_ONLY') {
49
- return <FieldValueList name={hideLabel ? '' : label} value={value} />;
66
+ return <FieldValueList name={hideLabel ? '' : label} value={value} variant={props.variant} />;
50
67
  }
51
68
 
52
69
  if (displayMode === 'STACKED_LARGE_VAL') {
@@ -76,6 +93,7 @@ export default function Phone(props: PhoneProps) {
76
93
  }
77
94
  }}
78
95
  disableDropdown={disableDropdown}
96
+ sx={getFieldSx(status)}
79
97
  />
80
98
  </div>
81
99
  );
@@ -108,6 +126,7 @@ export default function Phone(props: PhoneProps) {
108
126
  label={label}
109
127
  value={inputValue}
110
128
  slotProps={{ input: { ...testProp } }}
129
+ sx={getFieldSx(status)}
111
130
  />
112
131
  );
113
132
  }
@@ -5,6 +5,8 @@ import Utils from '@pega/react-sdk-components/lib/components/helpers/utils';
5
5
  import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
6
6
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
7
7
  import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
8
+ import useStatus from '@pega/react-sdk-components/lib/hooks/useStatus';
9
+ import { getFormControlSx } from '@pega/react-sdk-components/lib/components/helpers/field-utils';
8
10
 
9
11
  // Can't use RadioButtonProps until getLocaleRuleNameFromKeys is NOT private
10
12
  interface RadioButtonsProps extends PConnFieldProps {
@@ -18,6 +20,11 @@ interface RadioButtonsProps extends PConnFieldProps {
18
20
  imageSize?: string;
19
21
  showImageDescription?: boolean;
20
22
  datasource?: any;
23
+ showFieldMessage?: boolean;
24
+ messageConfig?: {
25
+ content?: string;
26
+ visibility?: boolean;
27
+ };
21
28
  }
22
29
 
23
30
  export default function RadioButtons(props: RadioButtonsProps) {
@@ -32,7 +39,6 @@ export default function RadioButtons(props: RadioButtonsProps) {
32
39
  readOnly,
33
40
  validatemessage,
34
41
  helperText,
35
- status,
36
42
  required,
37
43
  inline,
38
44
  displayMode,
@@ -44,7 +50,9 @@ export default function RadioButtons(props: RadioButtonsProps) {
44
50
  datasource,
45
51
  imagePosition,
46
52
  imageSize,
47
- showImageDescription
53
+ showImageDescription,
54
+ showFieldMessage,
55
+ messageConfig = {}
48
56
  } = props;
49
57
  const [theSelectedButton, setSelectedButton] = useState(value);
50
58
 
@@ -52,9 +60,17 @@ export default function RadioButtons(props: RadioButtonsProps) {
52
60
  const theConfigProps = thePConn.getConfigProps();
53
61
  const actionsApi = thePConn.getActionsApi();
54
62
  const propName = (thePConn.getStateProps() as any).value;
55
- const helperTextToDisplay = validatemessage || helperText;
63
+ const eligibleForFieldWarning = showFieldMessage && messageConfig.visibility && !readOnly;
64
+ const helperTextToDisplay = validatemessage || (eligibleForFieldWarning ? messageConfig.content : helperText);
56
65
  const className = thePConn.getCaseInfo().getClassName();
57
66
 
67
+ const status = useStatus({
68
+ showFieldMessage,
69
+ messageVisibility: messageConfig.visibility,
70
+ validatemessage,
71
+ readOnly
72
+ });
73
+
58
74
  let configProperty = (thePConn.getRawMetadata() as any)?.config?.value || '';
59
75
  configProperty = configProperty.startsWith('@P') ? configProperty.substring(3) : configProperty;
60
76
  configProperty = configProperty.startsWith('.') ? configProperty.substring(1) : configProperty;
@@ -134,7 +150,7 @@ export default function RadioButtons(props: RadioButtonsProps) {
134
150
  }
135
151
 
136
152
  return (
137
- <FormControl variant='standard' error={status === 'error'} required={required}>
153
+ <FormControl variant='standard' error={status === 'error'} required={required} sx={getFormControlSx(status)}>
138
154
  <FormLabel component='legend'>{label}</FormLabel>
139
155
  <RadioGroup value={theSelectedButton} onChange={handleChange} onBlur={!readOnly ? handleBlur : undefined} row={inline}>
140
156
  {theOptions.map(theOption => {
@@ -1,79 +0,0 @@
1
- .tox .tox-toolbar {
2
- background-color: var(--app-background-color) !important;
3
- }
4
-
5
- .tox .tox-toolbar__primary {
6
- background-color: var(--app-background-color) !important;
7
- }
8
-
9
- .tox .tox-toolbar__button {
10
- color: var(--app-text-color) !important;
11
- }
12
-
13
- .tox .tox-toolbar__button--enabled {
14
- background: var(--app-primary-color) !important;
15
- color: #fff !important;
16
- }
17
-
18
- .tox .tox-dialog {
19
- background-color: var(--modal-top-color) !important;
20
- color: var(--app-text-color) !important;
21
- border: 1px solid var(--modal-border-color) !important;
22
- padding: 20px !important;
23
- box-shadow: 0 0 10px 3px var(--modal-box-shadow-color) !important;
24
- }
25
-
26
- .tox .tox-dialog__header {
27
- background-color: var(--modal-top-color) !important;
28
- color: var(--app-text-color) !important;
29
- font-weight: 500;
30
- border-bottom: 1px solid var(--modal-border-color);
31
- }
32
-
33
- .tox .tox-dialog__footer {
34
- background: transparent !important;
35
- border-top: 1px solid var(--modal-border-color);
36
- }
37
-
38
- .tox .tox-dialog-wrap__backdrop {
39
- background-color: var(--modal-background-color) !important;
40
- }
41
-
42
- .tox .tox-dialog__body input,
43
- .tox .tox-dialog__body textarea,
44
- .tox .tox-dialog__body select {
45
- background: initial !important;
46
- color: var(--app-text-color) !important;
47
- border: 1px solid var(--app-neutral-color) !important;
48
- border-radius: 4px !important;
49
- padding: 6px 10px !important;
50
- font-size: 1em !important;
51
- font-family: inherit !important;
52
- }
53
-
54
- .tox .tox-dialog__body button {
55
- background: transparent;
56
- color: #fff !important;
57
- border: none !important;
58
- border-radius: 4px !important;
59
- padding: 8px 16px !important;
60
- font-size: 1em !important;
61
- cursor: pointer !important;
62
- }
63
-
64
- .tox .tox-dialog__footer .tox-button {
65
- background: var(--app-primary-color) !important;
66
- color: #fff !important;
67
- border: none !important;
68
- border-radius: 4px !important;
69
- padding: 8px 16px !important;
70
- font-size: 1em !important;
71
- cursor: pointer !important;
72
- }
73
-
74
- .tox .tox-dialog__footer .tox-button--secondary {
75
- background: var(--app-secondary-color) !important;
76
- color: var(--secondary-button-text-color) !important;
77
- font-size: 0.875rem !important;
78
- cursor: pointer !important;
79
- }
@@ -69,7 +69,7 @@ export default function RichText(props: RichTextProps) {
69
69
 
70
70
  const handleBlur = () => {
71
71
  if (editorRef.current) {
72
- const editorValue = editorRef.current.getContent({ format: 'html' });
72
+ const editorValue = editorRef.current.getHTML();
73
73
  const property = (pConn.getStateProps() as any).value;
74
74
  handleEvent(actionsApi, 'changeNblur', property, editorValue);
75
75
  }
@@ -1,3 +1,4 @@
1
+ import { useEffect } from 'react';
1
2
  import { Radio, Checkbox, FormControlLabel, Card, CardContent, Typography } from '@mui/material';
2
3
  import { resolveReferenceFields } from './utils';
3
4
 
@@ -33,7 +34,22 @@ export default function SelectableCard(props) {
33
34
  const cardDataSource = readOnly || displayMode === 'DISPLAY_ONLY' ? readOnlyList || [] : dataSource?.source;
34
35
  const imageDescriptionKey = showImageDescription ? imageDescription : undefined;
35
36
 
36
- let radioItemSelected = false;
37
+ const handleCardClick = event => {
38
+ if (disabled || readOnly) return;
39
+ // If the click landed on or inside a label/input, native behavior already handles it.
40
+ if (event.target.closest?.('label, input')) return;
41
+ // Find the radio/checkbox input inside this card and click it programmatically.
42
+ const input = event.currentTarget.querySelector('input[type="radio"], input[type="checkbox"]');
43
+ if (input) input.click();
44
+ };
45
+
46
+ const radioItemSelected = type === 'radio' && (cardDataSource || []).some(item => radioBtnValue === item[recordKey]);
47
+
48
+ useEffect(() => {
49
+ if (type === 'radio' && setIsRadioCardSelected) {
50
+ setIsRadioCardSelected(radioItemSelected);
51
+ }
52
+ }, [radioItemSelected, type, setIsRadioCardSelected]);
37
53
 
38
54
  return (
39
55
  <>
@@ -75,7 +91,12 @@ export default function SelectableCard(props) {
75
91
 
76
92
  const component = (
77
93
  <div key={item[recordKey]} style={{ paddingTop: '15px' }}>
78
- <Card className={className} style={{ display: 'flex', flexDirection: 'column', height: '100%' }} data-testid={testId}>
94
+ <Card
95
+ className={className}
96
+ style={{ display: 'flex', flexDirection: 'column', height: '100%', cursor: disabled || readOnly ? 'default' : 'pointer' }}
97
+ data-testid={testId}
98
+ onClick={handleCardClick}
99
+ >
79
100
  <CardContent
80
101
  style={{
81
102
  ...((imagePosition === 'inline-start' || imagePosition === 'inline-end') && { display: 'flex', height: '100%' }),
@@ -118,7 +139,7 @@ export default function SelectableCard(props) {
118
139
  onBlur={onBlur}
119
140
  onClick={onClick}
120
141
  onKeyDown={onKeyDown}
121
- disabled={disabled}
142
+ disabled={disabled || readOnly}
122
143
  {...additionalProps}
123
144
  />
124
145
  }
@@ -135,7 +156,7 @@ export default function SelectableCard(props) {
135
156
  onBlur={onBlur}
136
157
  onClick={onClick}
137
158
  onKeyDown={onKeyDown}
138
- disabled={disabled}
159
+ disabled={disabled || readOnly}
139
160
  {...additionalProps}
140
161
  />
141
162
  }
@@ -162,14 +183,8 @@ export default function SelectableCard(props) {
162
183
  </div>
163
184
  );
164
185
 
165
- if (type === 'radio' && radioBtnValue === item[recordKey]) {
166
- radioItemSelected = true;
167
- }
168
-
169
186
  return component;
170
187
  })}
171
-
172
- {type === 'radio' && setIsRadioCardSelected && setIsRadioCardSelected(radioItemSelected)}
173
188
  </>
174
189
  );
175
190
  }
@@ -4,10 +4,18 @@ 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 TextAreaProps extends PConnFieldProps {
9
11
  // If any, enter additional props that only exist on TextArea here
10
12
  fieldMetadata?: any;
13
+ showFieldMessage?: boolean;
14
+ messageConfig?: {
15
+ content?: string;
16
+ visibility?: boolean;
17
+ };
18
+ variant?: string;
11
19
  }
12
20
 
13
21
  export default function TextArea(props: TextAreaProps) {
@@ -21,21 +29,30 @@ export default function TextArea(props: TextAreaProps) {
21
29
  disabled,
22
30
  value = '',
23
31
  validatemessage,
24
- status,
25
32
  readOnly,
26
33
  testId,
27
34
  fieldMetadata,
28
35
  helperText,
29
36
  displayMode,
30
37
  hideLabel,
31
- placeholder
38
+ placeholder,
39
+ showFieldMessage,
40
+ messageConfig = {}
32
41
  } = props;
33
- const helperTextToDisplay = validatemessage || helperText;
42
+ const eligibleForFieldWarning = showFieldMessage && messageConfig.visibility && !readOnly;
43
+ const helperTextToDisplay = validatemessage || (eligibleForFieldWarning ? messageConfig.content : helperText);
34
44
  const pConn = getPConnect();
35
45
  const actions = pConn.getActionsApi();
36
46
  const propName = (pConn.getStateProps() as any).value;
37
47
  const maxLength = fieldMetadata?.maxLength;
38
48
 
49
+ const status = useStatus({
50
+ showFieldMessage,
51
+ messageVisibility: messageConfig.visibility,
52
+ validatemessage,
53
+ readOnly
54
+ });
55
+
39
56
  const [inputValue, setInputValue] = useState('');
40
57
 
41
58
  let readOnlyProp = {};
@@ -45,7 +62,7 @@ export default function TextArea(props: TextAreaProps) {
45
62
  }, [value]);
46
63
 
47
64
  if (displayMode === 'DISPLAY_ONLY') {
48
- return <FieldValueList name={hideLabel ? '' : label} value={value} />;
65
+ return <FieldValueList name={hideLabel ? '' : label} value={value} variant={props.variant} />;
49
66
  }
50
67
 
51
68
  if (displayMode === 'STACKED_LARGE_VAL') {
@@ -89,6 +106,7 @@ export default function TextArea(props: TextAreaProps) {
89
106
  slotProps={{
90
107
  input: { ...readOnlyProp, inputProps: { maxLength, ...testProps } }
91
108
  }}
109
+ sx={getFieldSx(status)}
92
110
  />
93
111
  );
94
112
  }