@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
@@ -12,51 +12,15 @@ export default function CaseSummary(props: PropsWithChildren<CaseSummaryProps>)
12
12
  // Get emitted components from map (so we can get any override that may exist)
13
13
  const CaseSummaryFields = getComponentFromMap('CaseSummaryFields');
14
14
 
15
- const { getPConnect, children } = props;
15
+ const { children } = props;
16
16
  let { arPrimaryFields = [], arSecondaryFields = [] } = props;
17
17
 
18
- const thePConn = getPConnect && getPConnect();
19
- const theConfigProps: any = thePConn?.getConfigProps();
20
-
21
- const status = theConfigProps?.status;
22
- const showStatus = theConfigProps?.showStatus;
23
18
  const localizedVal = PCore.getLocaleUtils().getLocaleValue;
24
19
  const localeCategory = 'ModalContainer';
25
20
 
26
- function prepareComponentInCaseSummary(pConnectMeta, getPConnect) {
27
- const { config, children } = pConnectMeta;
28
- const pConnect = getPConnect();
29
-
30
- const caseSummaryComponentObject: any = {};
31
-
32
- const { type } = pConnectMeta;
33
- const createdComponent = pConnect.createComponent({
34
- type,
35
- children: children ? [...children] : [],
36
- config: {
37
- ...config
38
- }
39
- });
40
-
41
- caseSummaryComponentObject.value = createdComponent;
42
- return caseSummaryComponentObject;
43
- }
44
-
45
- function prepareCaseSummaryData(summaryFieldChildren) {
46
- const convertChildrenToSummaryData = kid => {
47
- return kid?.map((childItem, index) => {
48
- const childMeta = childItem.getPConnect().meta;
49
- const caseSummaryComponentObject = prepareComponentInCaseSummary(childMeta, childItem.getPConnect);
50
- caseSummaryComponentObject.id = index + 1;
51
- return caseSummaryComponentObject;
52
- });
53
- };
54
- return summaryFieldChildren ? convertChildrenToSummaryData(summaryFieldChildren?.getChildren()) : undefined;
55
- }
56
-
57
21
  if (arPrimaryFields.length === 0 && arSecondaryFields.length === 0) {
58
22
  for (const child of children as ReactElement[]) {
59
- const childPConn = (child as ReactElement).props.getPConnect();
23
+ const childPConn = (child as ReactElement<any>).props.getPConnect();
60
24
  const childPConnData = childPConn.resolveConfigProps(childPConn.getRawMetadata());
61
25
  if (childPConnData.name.toLowerCase() === 'primary fields') {
62
26
  arPrimaryFields = childPConnData.children;
@@ -66,10 +30,13 @@ export default function CaseSummary(props: PropsWithChildren<CaseSummaryProps>)
66
30
  }
67
31
  });
68
32
  } else if (childPConnData.name.toLowerCase() === 'secondary fields') {
69
- const secondarySummaryFields = prepareCaseSummaryData(childPConn);
33
+ const secondaryChildren = childPConn.getChildren();
70
34
  arSecondaryFields = childPConnData.children;
71
35
  arSecondaryFields.forEach((field, index) => {
72
- field.config.displayLabel = secondarySummaryFields[index]?.value?.props?.label;
36
+ const childItemPConnect = secondaryChildren[index]?.getPConnect();
37
+ const resolvedProps = childItemPConnect?.resolveConfigProps(childItemPConnect.getRawMetadata()?.config);
38
+ field.config.displayLabel = resolvedProps?.label || field.config.label;
39
+ field.getPConnect = secondaryChildren[index]?.getPConnect;
73
40
  });
74
41
  }
75
42
  }
@@ -77,8 +44,8 @@ export default function CaseSummary(props: PropsWithChildren<CaseSummaryProps>)
77
44
 
78
45
  return (
79
46
  <div id='CaseSummary'>
80
- <CaseSummaryFields status={status} showStatus={showStatus} theFields={arPrimaryFields} />
81
- <CaseSummaryFields theFields={arSecondaryFields} />
47
+ <CaseSummaryFields theFields={arPrimaryFields} variant='primary' />
48
+ <CaseSummaryFields theFields={arSecondaryFields} variant='secondary' />
82
49
  </div>
83
50
  );
84
51
  }
@@ -67,6 +67,10 @@ export default function CaseView(props: PropsWithChildren<CaseViewProps>) {
67
67
 
68
68
  const classes = useStyles();
69
69
 
70
+ const dataObjectActions: any = thePConn.getValue('.actions', 'dataInfo') || {};
71
+ const dataObjectAvailableActions: any[] = dataObjectActions.availableActions || [];
72
+ const dataObjectCreateCaseActions: any[] = dataObjectActions.availableCreateCaseActions || [];
73
+
70
74
  const editAction = availableActions.find(action => action.ID === 'pyUpdateCaseDetails');
71
75
 
72
76
  const localizedVal = PCore.getLocaleUtils().getLocaleValue;
@@ -79,8 +83,8 @@ export default function CaseView(props: PropsWithChildren<CaseViewProps>) {
79
83
  */
80
84
  function getChildRegionByName(inName: string): any {
81
85
  for (const child of children as ReactElement[]) {
82
- const theMetadataType: string = (child as ReactElement).props.getPConnect().getRawMetadata().type?.toLowerCase();
83
- const theMetadataName: string = (child as ReactElement).props.getPConnect().getRawMetadata().name?.toLowerCase();
86
+ const theMetadataType: string = (child as ReactElement<any>).props.getPConnect().getRawMetadata().type?.toLowerCase();
87
+ const theMetadataName: string = (child as ReactElement<any>).props.getPConnect().getRawMetadata().name?.toLowerCase();
84
88
  if (theMetadataType === 'region' && theMetadataName === inName) {
85
89
  return child;
86
90
  }
@@ -194,6 +198,8 @@ export default function CaseView(props: PropsWithChildren<CaseViewProps>) {
194
198
  getPConnect={getPConnect}
195
199
  availableActions={availableActions}
196
200
  availableProcesses={availableProcesses}
201
+ dataObjectAvailableActions={dataObjectAvailableActions}
202
+ dataObjectCreateCaseActions={dataObjectCreateCaseActions}
197
203
  caseTypeName={caseTypeName}
198
204
  caseTypeID={caseTypeID}
199
205
  />
@@ -12,12 +12,23 @@ interface CaseViewActionsMenuProps extends PConnProps {
12
12
  // If any, enter additional props that only exist on this component
13
13
  availableActions: any[];
14
14
  availableProcesses: any[];
15
+ // Data object review actions (sourced from dataInfo.actions by the parent CaseView)
16
+ dataObjectAvailableActions?: any[];
17
+ dataObjectCreateCaseActions?: any[];
15
18
  caseTypeID: string;
16
19
  caseTypeName: string;
17
20
  }
18
21
 
19
22
  export default function CaseViewActionsMenu(props: CaseViewActionsMenuProps) {
20
- const { getPConnect, availableActions, availableProcesses, caseTypeID, caseTypeName } = props;
23
+ const {
24
+ getPConnect,
25
+ availableActions,
26
+ availableProcesses,
27
+ dataObjectAvailableActions = [],
28
+ dataObjectCreateCaseActions = [],
29
+ caseTypeID,
30
+ caseTypeName
31
+ } = props;
21
32
  const thePConn = getPConnect();
22
33
 
23
34
  const localizedVal = PCore.getLocaleUtils().getLocaleValue;
@@ -77,6 +88,31 @@ export default function CaseViewActionsMenu(props: CaseViewActionsMenuProps) {
77
88
  handleClose();
78
89
  }
79
90
 
91
+ function _dataObjectActionClick(action) {
92
+ const actionsAPI = thePConn.getActionsApi();
93
+ const openDataObjectAction = actionsAPI.openDataObjectAction.bind(actionsAPI);
94
+ const className = thePConn.getValue('.classID', 'dataInfo.content');
95
+ const dataRecord = thePConn.getValue('.content', 'dataInfo');
96
+ openDataObjectAction(className, dataRecord, action.ID, localizedVal(action.name, '', localeKey));
97
+ handleClose();
98
+ }
99
+
100
+ function _dataObjectCreateCaseClick(action) {
101
+ const actionsAPI = thePConn.getActionsApi();
102
+ const createWork = actionsAPI.createWork.bind(actionsAPI);
103
+ const targetDataReferenceField = action.targetDataReferenceField;
104
+ const field = targetDataReferenceField?.field;
105
+ const startingFields: any = {};
106
+ (targetDataReferenceField?.inputs || []).forEach(input => {
107
+ if (!startingFields[field]) {
108
+ startingFields[field] = {};
109
+ }
110
+ startingFields[field][input.linkedField] = thePConn.getValue(`.${input.linkedField}`, '');
111
+ });
112
+ createWork(action.ID, { startingFields });
113
+ handleClose();
114
+ }
115
+
80
116
  availableActions.forEach(action => {
81
117
  arMenuItems.push(
82
118
  <MenuItem key={action.ID} onClick={() => _actionMenuActionsClick(action)}>
@@ -93,12 +129,31 @@ export default function CaseViewActionsMenu(props: CaseViewActionsMenuProps) {
93
129
  );
94
130
  });
95
131
 
132
+ dataObjectAvailableActions.forEach(action => {
133
+ arMenuItems.push(
134
+ <MenuItem key={action.ID} onClick={() => _dataObjectActionClick(action)}>
135
+ {localizedVal(action.name, '', localeKey)}
136
+ </MenuItem>
137
+ );
138
+ });
139
+
140
+ dataObjectCreateCaseActions.forEach(action => {
141
+ arMenuItems.push(
142
+ <MenuItem key={action.ID} onClick={() => _dataObjectCreateCaseClick(action)}>
143
+ {localizedVal(action.name, '', localeKey)}
144
+ </MenuItem>
145
+ );
146
+ });
147
+
148
+ // Guard against opening an empty menu
149
+ const isMenuOpen = Boolean(anchorEl) && arMenuItems.length > 0;
150
+
96
151
  return (
97
152
  <>
98
- <Button id='actions-menu' aria-controls='simple-menu' aria-haspopup='true' onClick={handleClick}>
153
+ <Button id='actions-menu' aria-controls='simple-menu' aria-haspopup='true' disabled={arMenuItems.length === 0} onClick={handleClick}>
99
154
  {localizedVal('Actions...', localeCategory)}
100
155
  </Button>
101
- <Menu id='simple-menu' anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose}>
156
+ <Menu id='simple-menu' anchorEl={anchorEl} keepMounted open={isMenuOpen} onClose={handleClose}>
102
157
  {arMenuItems}
103
158
  </Menu>
104
159
  <Snackbar
@@ -206,42 +206,65 @@ export default function DataReference(props: PropsWithChildren<DataReferenceProp
206
206
  .refreshCaseView(caseKey, viewName, pgRef, refreshOptions)
207
207
  .catch(() => {});
208
208
  }
209
- } else if (propValue && canBeChangedInReviewMode && isDisplayModeEnabled) {
210
- (PCore.getDataApiUtils().getCaseEditLock(caseKey, '') as Promise<any>).then(caseResponse => {
211
- const pageTokens = pConn.getPageReference().replace('caseInfo.content', '').split('.');
212
- let curr = {};
213
- const commitData = curr;
214
-
215
- pageTokens.forEach(el => {
216
- if (el !== '') {
217
- curr[el] = {};
218
- curr = curr[el];
219
- }
220
- });
209
+ } else if (hasAssociatedViewConfigured || allowImplicitRefresh) {
210
+ const pageReference = pConn.getPageReference();
211
+ let pgRef: any = null;
212
+ if (pageReference.startsWith('objectInfo')) {
213
+ pgRef = pageReference.replace('objectInfo.content', '');
214
+ } else {
215
+ pgRef = pageReference.replace('caseInfo.content', '');
216
+ }
217
+ const viewName = rawViewMetadata.name;
218
+ getPConnect()
219
+ .getActionsApi()
220
+ .refreshCaseView(caseKey, viewName, pgRef, refreshOptions)
221
+ .catch(() => {});
222
+ }
221
223
 
222
- // expecting format like {Customer: {pyID:"C-100"}}
223
- const propArr = propName.split('.');
224
- propArr.forEach((element, idx) => {
225
- if (idx + 1 === propArr.length) {
226
- curr[element] = propValue;
227
- } else {
228
- curr[element] = {};
229
- curr = curr[element];
230
- }
231
- });
224
+ if (propValue && canBeChangedInReviewMode && isDisplayModeEnabled) {
225
+ (PCore.getDataApiUtils().getCaseEditLock(caseKey, '') as Promise<any>)
226
+ .then(caseResponse => {
227
+ const pageTokens = pConn.getPageReference().replace('caseInfo.content', '').split('.');
228
+ let curr = {};
229
+ const commitData = curr;
230
+
231
+ pageTokens.forEach(el => {
232
+ if (el !== '') {
233
+ curr[el] = {};
234
+ curr = curr[el];
235
+ }
236
+ });
232
237
 
233
- (
234
- PCore.getDataApiUtils().updateCaseEditFieldsData(
235
- caseKey,
236
- { [caseKey]: commitData },
237
- caseResponse.headers.etag,
238
- pConn.getContextName()
239
- ) as Promise<any>
240
- ).then(response => {
241
- PCore.getContainerUtils().updateParentLastUpdateTime(pConn.getContextName(), response.data.data.caseInfo.lastUpdateTime);
242
- PCore.getContainerUtils().updateRelatedContextEtag(pConn.getContextName(), response.headers.etag);
238
+ // expecting format like {Customer: {pyID:"C-100"}}
239
+ const propArr = propName.split('.');
240
+ propArr.forEach((element, idx) => {
241
+ if (idx + 1 === propArr.length) {
242
+ curr[element] = propValue;
243
+ } else {
244
+ curr[element] = {};
245
+ curr = curr[element];
246
+ }
247
+ });
248
+
249
+ (
250
+ PCore.getDataApiUtils().updateCaseEditFieldsData(
251
+ caseKey,
252
+ { [caseKey]: commitData },
253
+ caseResponse.headers.etag,
254
+ pConn.getContextName()
255
+ ) as Promise<any>
256
+ )
257
+ .then(response => {
258
+ PCore.getContainerUtils().updateParentLastUpdateTime(pConn.getContextName(), response.data.data.caseInfo.lastUpdateTime);
259
+ PCore.getContainerUtils().updateRelatedContextEtag(pConn.getContextName(), response.headers.etag);
260
+ })
261
+ .catch(e => {
262
+ console.error(e);
263
+ });
264
+ })
265
+ .catch(e => {
266
+ console.error(e);
243
267
  });
244
- });
245
268
  }
246
269
  };
247
270
 
@@ -41,9 +41,8 @@ const checkIfSelectionsExist = getPConnect => {
41
41
  };
42
42
 
43
43
  const SearchForm = props => {
44
- const { children, getPConnect, searchSelectCacheKey } = props;
45
-
46
- const deferLoadedTabs = children[2];
44
+ const { children, getPConnect, searchSelectCacheKey, type, label } = props;
45
+ const deferLoadedTabs = type === 'ObjectReference' ? { props: { getPConnect } } : children[2];
47
46
  const cache: any = PCore.getNavigationUtils().getComponentCache(searchSelectCacheKey) ?? {};
48
47
  const { selectedCategory } = cache;
49
48
  const firstTabId = getFirstVisibleTabId(deferLoadedTabs, selectedCategory);
@@ -114,7 +113,7 @@ const SearchForm = props => {
114
113
 
115
114
  return (
116
115
  <Box display='flex' flexDirection='column' gap={2}>
117
- <Typography variant='h5'>{propsToUse.label}</Typography>
116
+ <Typography variant='h5'>{label ?? propsToUse.label}</Typography>
118
117
  {searchCategoriesComp}
119
118
  <TabContext value={currentTabId}>
120
119
  <Tabs style={{ display: 'none' }} value={currentTabId} onChange={(e, newValue) => setCurrentTabId(newValue)}>
@@ -32,3 +32,74 @@
32
32
  padding-top: 0.625rem;
33
33
  padding-bottom: 0.625rem;
34
34
  }
35
+
36
+ .psdk-default-form-instruction-text ul {
37
+ padding-left: 30px;
38
+ list-style-type: disc;
39
+ }
40
+
41
+ .psdk-default-form-instruction-text ol {
42
+ padding-left: 30px;
43
+ list-style-type: decimal;
44
+ }
45
+
46
+ /* Banner styles */
47
+ .psdk-banner {
48
+ display: flex;
49
+ align-items: flex-start;
50
+ padding: 0.75rem 1rem;
51
+ border-radius: 0.25rem;
52
+ margin-bottom: 1rem;
53
+ border: 1px solid;
54
+ gap: 0.75rem;
55
+ }
56
+
57
+ .psdk-banner-info {
58
+ background-color: color-mix(in srgb, var(--app-neutral-color) 12%, var(--app-form-bg-color));
59
+ border-color: var(--app-neutral-color);
60
+ color: var(--banner-text-color);
61
+ }
62
+
63
+ .psdk-banner-warning {
64
+ background-color: color-mix(in srgb, var(--app-warning-color-dark) 12%, var(--app-form-bg-color));
65
+ border-color: var(--app-warning-color-dark);
66
+ color: var(--app-warning-color-dark);
67
+ }
68
+
69
+ .psdk-banner-success {
70
+ background-color: color-mix(in srgb, var(--stepper-completed-bg-color) 12%, var(--app-form-bg-color));
71
+ border-color: var(--stepper-completed-bg-color);
72
+ color: var(--stepper-completed-bg-color);
73
+ }
74
+
75
+ .psdk-banner-icon {
76
+ flex-shrink: 0;
77
+ display: flex;
78
+ align-items: center;
79
+ padding-top: 0.125rem;
80
+ }
81
+
82
+ .psdk-banner-content {
83
+ flex: 1;
84
+ line-height: 1.5;
85
+ }
86
+
87
+ .psdk-banner-content p {
88
+ margin: 0;
89
+ }
90
+
91
+ .psdk-banner-dismiss {
92
+ flex-shrink: 0;
93
+ background: none;
94
+ border: none;
95
+ cursor: pointer;
96
+ padding: 0.25rem;
97
+ color: inherit;
98
+ opacity: 0.7;
99
+ display: flex;
100
+ align-items: center;
101
+ }
102
+
103
+ .psdk-banner-dismiss:hover {
104
+ opacity: 1;
105
+ }
@@ -1,6 +1,11 @@
1
- import { createElement, type PropsWithChildren } from 'react';
1
+ import { createElement, useState, type PropsWithChildren } from 'react';
2
2
 
3
- import { getInstructions } from '@pega/react-sdk-components/lib/components/helpers/template-utils';
3
+ import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
4
+ import WarningAmberIcon from '@mui/icons-material/WarningAmber';
5
+ import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';
6
+ import CloseIcon from '@mui/icons-material/Close';
7
+
8
+ import { getInstructions, getInstructionsType, getDismissBanner, mapInstructionsTypeToBannerVariant } from '@pega/react-sdk-components/lib/components/helpers/template-utils';
4
9
  import createPConnectComponent from '@pega/react-sdk-components/lib/bridge/react_pconnect';
5
10
  import connectToState from '@pega/react-sdk-components/lib/components/helpers/state-utils';
6
11
 
@@ -21,9 +26,21 @@ const Child = connectToState(mapStateToProps)(props => {
21
26
  return createElement(createPConnectComponent(), { ...rest, key, visibility });
22
27
  });
23
28
 
29
+ const bannerIconMap = {
30
+ info: <InfoOutlinedIcon fontSize='small' />,
31
+ warning: <WarningAmberIcon fontSize='small' />,
32
+ success: <CheckCircleOutlineIcon fontSize='small' />
33
+ };
34
+
24
35
  export default function DefaultForm(props: PropsWithChildren<DefaultFormProps>) {
25
36
  const { getPConnect, NumCols = '1' } = props;
26
37
  const instructions = getInstructions(getPConnect(), props.instructions);
38
+ const [bannerDismissed, setBannerDismissed] = useState(false);
39
+
40
+ const instructionsType = getInstructionsType(props.instructions);
41
+ const isBanner = typeof props.instructions === 'object' && (props.instructions as any)?.isBanner;
42
+ const dismissBanner = getDismissBanner(props.instructions);
43
+ const bannerVariant = mapInstructionsTypeToBannerVariant(instructionsType);
27
44
 
28
45
  let divClass: string;
29
46
 
@@ -51,15 +68,34 @@ export default function DefaultForm(props: PropsWithChildren<DefaultFormProps>)
51
68
  const arChildren = getPConnect().getChildren()[0].getPConnect().getChildren();
52
69
  const dfChildren = arChildren?.map(kid => <Child key={getKeyForMappedField(kid)} {...kid} />);
53
70
 
71
+ const renderInstructions = () => {
72
+ if (!instructions || bannerDismissed) return null;
73
+
74
+ if (isBanner) {
75
+ return (
76
+ <div className={`psdk-banner psdk-banner-${bannerVariant}`}>
77
+ <div className='psdk-banner-icon'>{bannerIconMap[bannerVariant]}</div>
78
+ <div className='psdk-banner-content' dangerouslySetInnerHTML={{ __html: instructions }} />
79
+ {dismissBanner && (
80
+ <button type='button' className='psdk-banner-dismiss' aria-label='Dismiss banner' onClick={() => setBannerDismissed(true)}>
81
+ <CloseIcon fontSize='small' />
82
+ </button>
83
+ )}
84
+ </div>
85
+ );
86
+ }
87
+
88
+ return (
89
+ <div className='psdk-default-form-instruction-text'>
90
+ {/* server performs sanitization method for instructions html content */}
91
+ <div key='instructions' id='instruction-text' dangerouslySetInnerHTML={{ __html: instructions }} />
92
+ </div>
93
+ );
94
+ };
95
+
54
96
  return (
55
97
  <>
56
- {instructions && (
57
- <div className='psdk-default-form-instruction-text'>
58
- {/* server performs sanitization method for instructions html content */}
59
- {}
60
- <div key='instructions' id='instruction-text' dangerouslySetInnerHTML={{ __html: instructions }} />
61
- </div>
62
- )}
98
+ {renderInstructions()}
63
99
  <div className={divClass}>{dfChildren}</div>
64
100
  </>
65
101
  );
@@ -14,6 +14,7 @@ interface FieldGroupTemplateProps extends PConnProps {
14
14
  displayMode?: string;
15
15
  fieldHeader?: string;
16
16
  allowTableEdit: boolean;
17
+ allowActions?: any;
17
18
  }
18
19
 
19
20
  export default function FieldGroupTemplate(props: FieldGroupTemplateProps) {
@@ -30,6 +31,7 @@ export default function FieldGroupTemplate(props: FieldGroupTemplateProps) {
30
31
  heading = '',
31
32
  displayMode,
32
33
  fieldHeader,
34
+ allowActions,
33
35
  allowTableEdit: allowAddEdit
34
36
  } = props;
35
37
  const pConn = getPConnect();
@@ -39,6 +41,11 @@ export default function FieldGroupTemplate(props: FieldGroupTemplateProps) {
39
41
  const isReadonlyMode = renderMode === 'ReadOnly' || displayMode === 'DISPLAY_ONLY';
40
42
  const HEADING = heading ?? 'Row';
41
43
 
44
+ const hasAllowActions = Object.keys(allowActions ?? {}).length > 0;
45
+ const { allowAdd: actionAdd, allowDelete: actionDelete } = allowActions ?? {};
46
+ const allowAdd = hasAllowActions ? (actionAdd ?? true) : (allowAddEdit ?? true);
47
+ const allowDelete = hasAllowActions ? (actionDelete ?? true) : (allowAddEdit ?? true);
48
+
42
49
  useLayoutEffect(() => {
43
50
  if (!isReadonlyMode) {
44
51
  // @ts-expect-error - Expected 3 arguments, but got 1
@@ -72,7 +79,7 @@ export default function FieldGroupTemplate(props: FieldGroupTemplateProps) {
72
79
  pConn.getListActions().deleteEntry(index);
73
80
  }
74
81
  };
75
- if (referenceList.length === 0 && allowAddEdit !== false) {
82
+ if (referenceList.length === 0 && allowAdd) {
76
83
  addFieldGroupItem();
77
84
  }
78
85
 
@@ -87,8 +94,8 @@ export default function FieldGroupTemplate(props: FieldGroupTemplateProps) {
87
94
  return (
88
95
  <FieldGroupList
89
96
  items={MemoisedChildren}
90
- onAdd={allowAddEdit !== false ? addFieldGroupItem : undefined}
91
- onDelete={allowAddEdit !== false ? deleteFieldGroupItem : undefined}
97
+ onAdd={allowAdd ? addFieldGroupItem : undefined}
98
+ onDelete={allowDelete ? deleteFieldGroupItem : undefined}
92
99
  />
93
100
  );
94
101
  }