@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
@@ -1,16 +1,27 @@
1
- import { useMemo } from 'react';
1
+ import { useMemo, useEffect, useState } from 'react';
2
2
 
3
3
  import Grid2 from '@mui/material/Grid2';
4
4
 
5
- import { SELECTION_MODE, generateColumns, getDataRelationshipContextFromKey } from './utils';
5
+ import {
6
+ SELECTION_MODE,
7
+ generateColumns,
8
+ getDataRelationshipContextFromKey,
9
+ addCompositeKeysToConfig,
10
+ createNewRecord,
11
+ getAdditionalInfo,
12
+ camelCase
13
+ } from './utils';
6
14
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
15
+ import componentCachePersistUtils from '@pega/react-sdk-components/lib/components/template/AdvancedSearch/SearchGroup/persistUtils';
16
+ import DataReferenceAdvancedSearchContext from '@pega/react-sdk-components/lib/components/template/DataReference/DataReferenceAdvancedSearchContext';
17
+ import { Utils } from '@pega/react-sdk-components/lib/components/helpers/utils';
7
18
  import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
8
19
 
9
20
  interface ObjectReferenceProps extends Omit<PConnFieldProps, 'value'> {
10
- // If any, enter additional props that only exist on ObjectReference here
11
21
  getPConnect: any;
12
- displayMode;
22
+ displayMode: string;
13
23
  allowAndPersistChangesInReviewMode: any;
24
+ allowCreatingRecords?: boolean;
14
25
  targetObjectType: any;
15
26
  mode: string;
16
27
  parameters: object;
@@ -18,12 +29,16 @@ interface ObjectReferenceProps extends Omit<PConnFieldProps, 'value'> {
18
29
  inline: boolean;
19
30
  showPromotedFilters: boolean;
20
31
  additionalFields: any;
32
+ linkReference?: boolean;
33
+ matchPosition?: string;
34
+ children?: any;
21
35
  }
22
36
 
23
37
  export default function ObjectReference(props: ObjectReferenceProps) {
24
38
  const {
25
39
  getPConnect,
26
- displayMode,
40
+ children,
41
+ allowCreatingRecords,
27
42
  allowAndPersistChangesInReviewMode: editableInReview = false,
28
43
  targetObjectType,
29
44
  mode = '',
@@ -31,31 +46,95 @@ export default function ObjectReference(props: ObjectReferenceProps) {
31
46
  hideLabel = false,
32
47
  inline = false,
33
48
  showPromotedFilters = false,
34
- additionalFields
49
+ additionalFields,
50
+ linkReference,
51
+ matchPosition = 'contains'
35
52
  } = props;
36
53
 
54
+ let displayMode = props.displayMode;
55
+
37
56
  const SingleReferenceReadonly = getComponentFromMap('SingleReferenceReadOnly');
57
+ const MultiReferenceReadonly = getComponentFromMap('MultiReferenceReadOnly');
58
+ const SearchForm = getComponentFromMap('SearchForm');
38
59
 
39
60
  // Configs
40
61
  const pConn = getPConnect();
41
- const referenceType = targetObjectType === 'case' ? 'Case' : 'Data';
62
+ const referenceType = targetObjectType?.toLowerCase() === 'case' ? 'Case' : 'Data';
42
63
  const rawViewMetadata = pConn.getRawMetadata();
43
- const refFieldMetadata = pConn.getFieldMetadata(rawViewMetadata?.config?.value?.split('.', 2)[1]);
64
+ const refFieldMetadata = pConn.getFieldMetadata(
65
+ rawViewMetadata.config.mode === SELECTION_MODE.SINGLE
66
+ ? rawViewMetadata?.config?.value?.split('.', 2)[1]
67
+ : rawViewMetadata?.config?.pagelistValue?.substring(4)
68
+ );
44
69
 
45
70
  // Destructured properties
46
- const propsToUse = { ...pConn.getInheritedProps(), ...props };
71
+ const propsToUse: any = { ...pConn.getInheritedProps(), ...props };
72
+ const [parameterizedDataSource, setParameterizedDataSource] = useState<any[]>([]);
73
+
74
+ const { allowImplicitRefresh } = (PCore as any).getFieldDefaultUtils?.()?.fieldDefaults?.DataReference || {};
75
+
76
+ if (rawViewMetadata.config.componentType === 'Combobox') {
77
+ if (mode === SELECTION_MODE.MULTI) {
78
+ rawViewMetadata.config.componentType = 'Multiselect';
79
+ } else {
80
+ rawViewMetadata.config.componentType = 'AutoComplete';
81
+ }
82
+ }
83
+
84
+ useEffect(() => {
85
+ if (rawViewMetadata.config?.parameters && ['CheckboxGroup'].includes(rawViewMetadata.config.componentType)) {
86
+ const { value, key, text } = {
87
+ key: `@P ${rawViewMetadata.config.selectionKey}`,
88
+ text: `@P ${rawViewMetadata.config.displayField}`,
89
+ value: `@P ${rawViewMetadata.config.selectionKey}`
90
+ };
91
+ const refList = rawViewMetadata.config.referenceList;
92
+ (PCore as any)
93
+ .getDataApiUtils()
94
+ .getData(refList, {
95
+ dataViewParameters: parameters
96
+ })
97
+ .then((res: any) => {
98
+ if (res.data.data !== null) {
99
+ const ddDataSource = res.data.data
100
+ .map((listItem: any) => ({
101
+ key: listItem[key.split(' .', 2)[1]],
102
+ text: listItem[text.split(' .', 2)[1]],
103
+ value: listItem[value.split(' .', 2)[1]]
104
+ }))
105
+ .filter((item: any) => item.key);
106
+ setParameterizedDataSource(ddDataSource);
107
+ } else {
108
+ setParameterizedDataSource([]);
109
+ }
110
+ })
111
+ .catch(() => {
112
+ return Promise.resolve({
113
+ data: { data: [] }
114
+ });
115
+ });
116
+ }
117
+ }, [rawViewMetadata, parameters]);
118
+
119
+ if (displayMode !== 'DISPLAY_ONLY' && props.readOnly) {
120
+ if (rawViewMetadata.config.componentType === 'Multiselect') {
121
+ rawViewMetadata.config.componentType = 'SemanticLink';
122
+ } else {
123
+ displayMode = 'DISPLAY_ONLY';
124
+ }
125
+ }
47
126
 
48
127
  // Computed variables
49
128
  const isDisplayModeEnabled = displayMode === 'DISPLAY_ONLY';
50
- const canBeChangedInReviewMode = editableInReview && ['Autocomplete', 'Dropdown'].includes(rawViewMetadata.config.componentType);
129
+ const canBeChangedInReviewMode = editableInReview && ['AutoComplete', 'Dropdown'].includes(rawViewMetadata.config.componentType);
51
130
 
52
131
  // Editable first child on change handler
53
- const onRecordChange = event => {
132
+ const onRecordChange = (event: any) => {
54
133
  const caseKey = pConn.getCaseInfo().getKey();
55
- const refreshOptions = { autoDetectRefresh: true, propertyName: '' };
134
+ const refreshOptions: any = { autoDetectRefresh: true, propertyName: '' };
56
135
  refreshOptions.propertyName = rawViewMetadata.config?.value;
57
136
 
58
- if (!canBeChangedInReviewMode || !pConn.getValue('__currentPageTabViewName')) {
137
+ if (!canBeChangedInReviewMode || !pConn.getValue('__currentPageTabViewName') || allowImplicitRefresh) {
59
138
  const pgRef = pConn.getPageReference().replace('caseInfo.content', '');
60
139
  const viewName = rawViewMetadata.name;
61
140
  if (viewName && viewName.length > 0) {
@@ -63,8 +142,6 @@ export default function ObjectReference(props: ObjectReferenceProps) {
63
142
  }
64
143
  }
65
144
 
66
- // AutoComplete sets value on event.id whereas Dropdown sets it on event.target.value if event.id is unset
67
- // When value is empty propValue will be undefined here and no value will be set for the reference
68
145
  const propValue = event?.id || event?.target?.value;
69
146
  const propName =
70
147
  rawViewMetadata.type === 'SimpleTableSelect' && mode === SELECTION_MODE.MULTI
@@ -74,21 +151,20 @@ export default function ObjectReference(props: ObjectReferenceProps) {
74
151
  if (propValue && canBeChangedInReviewMode && isDisplayModeEnabled) {
75
152
  PCore.getCaseUtils()
76
153
  .getCaseEditLock(caseKey, '')
77
- .then(caseResponse => {
154
+ .then((caseResponse: any) => {
78
155
  const pageTokens = pConn.getPageReference().replace('caseInfo.content', '').split('.');
79
- let curr = {};
156
+ let curr: any = {};
80
157
  const commitData = curr;
81
158
 
82
- pageTokens.forEach(el => {
159
+ pageTokens.forEach((el: string) => {
83
160
  if (el !== '') {
84
161
  curr[el] = {};
85
162
  curr = curr[el];
86
163
  }
87
164
  });
88
165
 
89
- // expecting format like {Customer: {pyID:"C-100"}}
90
166
  const propArr = propName.split('.');
91
- propArr.forEach((element, idx) => {
167
+ propArr.forEach((element: string, idx: number) => {
92
168
  if (idx + 1 === propArr.length) {
93
169
  curr[element] = propValue;
94
170
  } else {
@@ -99,20 +175,23 @@ export default function ObjectReference(props: ObjectReferenceProps) {
99
175
 
100
176
  PCore.getCaseUtils()
101
177
  .updateCaseEditFieldsData(caseKey, { [caseKey]: commitData }, caseResponse.headers.etag, pConn.getContextName())
102
- .then(response => {
178
+ .then((response: any) => {
103
179
  PCore.getContainerUtils().updateParentLastUpdateTime(pConn.getContextName(), (response.data as any).data.caseInfo.lastUpdateTime);
104
180
  PCore.getContainerUtils().updateRelatedContextEtag(pConn.getContextName(), response.headers.etag);
181
+ })
182
+ .catch(e => {
183
+ console.error(e);
105
184
  });
185
+ })
186
+ .catch(e => {
187
+ console.error(e);
106
188
  });
107
189
  }
108
190
  };
109
191
 
110
192
  // Prepare first child
111
- const recreatedFirstChild = useMemo(() => {
112
- const type = rawViewMetadata.config.componentType;
113
-
114
- /* Read-only variants */
115
- if (type === 'SemanticLink' && !canBeChangedInReviewMode) {
193
+ const buildSemanticLinkChild = () => {
194
+ if (mode !== 'readonly-multi') {
116
195
  const config = {
117
196
  ...rawViewMetadata.config,
118
197
  primaryField: rawViewMetadata.config.displayField
@@ -123,41 +202,350 @@ export default function ObjectReference(props: ObjectReferenceProps) {
123
202
  config.contextPage = `@P .${
124
203
  rawViewMetadata.config?.displayField ? getDataRelationshipContextFromKey(rawViewMetadata.config.displayField) : null
125
204
  }`;
126
- config.resourceParams = {
127
- workID: config.value
128
- };
129
- config.resourcePayload = {
130
- caseClassName: config.caseClass
131
- };
205
+ config.resourceParams = { workID: config.value };
206
+ config.resourcePayload = { caseClassName: config.caseClass };
207
+
208
+ return getPConnect().createComponent({
209
+ type: linkReference === false ? 'TextInput' : 'SemanticLink',
210
+ config:
211
+ linkReference === false
212
+ ? { value: config.primaryField, label: propsToUse.label, hideLabel, readOnly: true, displayMode }
213
+ : {
214
+ ...config,
215
+ displayMode,
216
+ referenceType,
217
+ hideLabel,
218
+ dataRelationshipContext: rawViewMetadata.config?.displayField
219
+ ? getDataRelationshipContextFromKey(rawViewMetadata.config.displayField)
220
+ : null
221
+ }
222
+ });
223
+ }
224
+ const displayField = rawViewMetadata.config.displayField;
225
+ const primaryField = displayField?.startsWith('@P') ? displayField?.substring(3) : displayField;
226
+ const presets = [
227
+ {
228
+ children: [{ children: rawViewMetadata.config.columns, name: 'Columns', type: 'Region' }],
229
+ config: {},
230
+ id: 'P_',
231
+ label: '',
232
+ name: 'presets',
233
+ template: 'Table'
234
+ }
235
+ ];
236
+ return (
237
+ <MultiReferenceReadonly
238
+ config={{
239
+ contextClass: rawViewMetadata.config.targetObjectClass,
240
+ defaultRowHeight: rawViewMetadata.config.defaultRowHeight,
241
+ label: propsToUse.label,
242
+ presets,
243
+ primaryField,
244
+ readonlyContextList: rawViewMetadata.config.pagelistValue,
245
+ referenceList: rawViewMetadata.config.pagelistValue,
246
+ referenceType,
247
+ renderMode: 'ReadOnly',
248
+ selectionKey: rawViewMetadata.config.selectionKey
249
+ }}
250
+ displayAs='readonlyMulti'
251
+ displayMode={displayMode}
252
+ getPConnect={getPConnect}
253
+ hideLabel={hideLabel}
254
+ label={propsToUse.label}
255
+ linkReference={linkReference}
256
+ />
257
+ );
258
+ };
259
+
260
+ const buildTableChild = (type: string) => {
261
+ const presets = [
262
+ {
263
+ children: [{ children: rawViewMetadata.config.columns, name: 'Columns', type: 'Region' }],
264
+ config: { filterExpression: rawViewMetadata.config.filterExpression },
265
+ id: 'P_',
266
+ label: '',
267
+ name: 'presets',
268
+ template: 'Table'
269
+ }
270
+ ];
271
+ const tableDisplayAs = camelCase(type);
132
272
 
273
+ if (mode === 'readonly-multi') {
133
274
  return getPConnect().createComponent({
134
- type: 'SemanticLink',
275
+ type: 'SimpleTableSelect',
135
276
  config: {
136
- ...config,
137
- displayMode,
277
+ contextClass: rawViewMetadata.config.targetObjectClass,
278
+ defaultRowHeight: rawViewMetadata.config.defaultRowHeight,
279
+ displayAs: tableDisplayAs,
280
+ hideLabel: false,
281
+ label: propsToUse.label,
282
+ localeReference: rawViewMetadata.config.localeReference,
283
+ presets,
284
+ readOnly: true,
285
+ readonlyContextList: rawViewMetadata.config.pagelistValue,
286
+ referenceList: rawViewMetadata.config.pagelistValue,
138
287
  referenceType,
139
- hideLabel,
140
- dataRelationshipContext: rawViewMetadata.config?.displayField
141
- ? getDataRelationshipContextFromKey(rawViewMetadata.config.displayField)
142
- : null
288
+ renderMode: 'ReadOnly',
289
+ rowHeader: rawViewMetadata.config.rowHeader,
290
+ selectionMode: 'multi',
291
+ required: propsToUse.required,
292
+ visibility: propsToUse.visibility,
293
+ disabled: propsToUse.disabled,
294
+ toggleFieldVisibility: rawViewMetadata.config.toggleFieldVisibility
143
295
  }
144
296
  });
145
297
  }
298
+ const contextPageFromConfig = mode === 'single' ? rawViewMetadata.config.contextPage : rawViewMetadata.config.pagelistValue;
299
+ const contextPageValue = contextPageFromConfig?.startsWith('@P') ? contextPageFromConfig?.substring(3) : contextPageFromConfig;
300
+
301
+ return getPConnect().createComponent({
302
+ type: 'SimpleTableSelect',
303
+ config: {
304
+ ...(mode === 'single'
305
+ ? {
306
+ selectionKey: rawViewMetadata.config.value,
307
+ value: rawViewMetadata.config.value,
308
+ contextPage: rawViewMetadata.config.contextPage
309
+ }
310
+ : {
311
+ readonlyContextList: rawViewMetadata.config.pagelistValue
312
+ }),
313
+ dataRelationshipContext: contextPageValue,
314
+ defaultRowHeight: rawViewMetadata.config.defaultRowHeight,
315
+ displayAs: tableDisplayAs,
316
+ hideLabel: false,
317
+ inline: false,
318
+ label: propsToUse.label,
319
+ localeReference: rawViewMetadata.config.localeReference,
320
+ presets,
321
+ readOnly: false,
322
+ referenceList: rawViewMetadata.config.referenceList,
323
+ referenceType,
324
+ rowHeader: rawViewMetadata.config.rowHeader,
325
+ parameters: rawViewMetadata.config.parameters,
326
+ selectionList: contextPageValue,
327
+ selectionMode: mode,
328
+ showPromotedFilters: false,
329
+ required: propsToUse.required,
330
+ visibility: propsToUse.visibility,
331
+ disabled: propsToUse.disabled,
332
+ toggleFieldVisibility: rawViewMetadata.config.toggleFieldVisibility
333
+ }
334
+ });
335
+ };
336
+
337
+ const buildFieldMetaData = () => {
338
+ const fieldMetaData: any = {
339
+ datasourceMetadata: { datasource: { parameters: {} } }
340
+ };
341
+ if (rawViewMetadata.config?.parameters) {
342
+ fieldMetaData.datasourceMetadata.datasource.parameters = parameters;
343
+ }
344
+ fieldMetaData.datasourceMetadata.datasource.propertyForDisplayText = rawViewMetadata?.config?.datasource?.fields?.text.startsWith('@P')
345
+ ? rawViewMetadata?.config?.datasource?.fields?.text?.substring(3)
346
+ : rawViewMetadata?.config?.datasource?.fields?.text;
347
+ fieldMetaData.datasourceMetadata.datasource.propertyForValue = rawViewMetadata?.config?.datasource?.fields?.value.startsWith('@P')
348
+ ? rawViewMetadata?.config?.datasource?.fields?.value?.substring(3)
349
+ : rawViewMetadata?.config?.datasource?.fields?.value;
350
+ fieldMetaData.datasourceMetadata.datasource.name = rawViewMetadata.config?.referenceList;
351
+ return fieldMetaData;
352
+ };
353
+
354
+ const buildSearchAndSelectChild = (isCreateNewReferenceEnabled: boolean, disableStartingFieldsForReference: boolean) => {
355
+ const rawConfig = rawViewMetadata.config;
356
+ const selectionMode = rawConfig.mode;
357
+ const [firstChildMeta] = structuredClone(rawViewMetadata.children ?? []);
358
+ const pyID = Utils.getMappedKey('pyID');
359
+
360
+ const additionalInfo = refFieldMetadata?.additionalInformation ? { content: refFieldMetadata.additionalInformation } : undefined;
361
+ const pageListValueFromConfig = rawConfig.pagelistValue;
362
+ const selectionList = pageListValueFromConfig?.startsWith('@P') ? pageListValueFromConfig?.substring(3) : pageListValueFromConfig;
363
+ const contextPageFromConfig = rawConfig.contextPage;
364
+ const unannotatedContextPageFromConfig = contextPageFromConfig?.startsWith('@P') ? contextPageFromConfig?.substring(3) : contextPageFromConfig;
365
+ const name = (selectionList ?? unannotatedContextPageFromConfig)?.replace(/^\./, '');
366
+
367
+ const dataReferenceConfigToChild: any = {
368
+ selectionMode,
369
+ additionalInfo,
370
+ descriptors: selectionMode === SELECTION_MODE.SINGLE ? refFieldMetadata?.descriptors : null,
371
+ required: propsToUse.required,
372
+ visibility: propsToUse.visibility,
373
+ disabled: propsToUse.disabled,
374
+ label: propsToUse.label,
375
+ displayAs: 'advancedSearch',
376
+ readOnly: false,
377
+ matchPosition,
378
+ ...(selectionMode === SELECTION_MODE.SINGLE && { referenceType }),
379
+ ...(selectionMode === SELECTION_MODE.SINGLE && {
380
+ value: rawConfig.value,
381
+ contextPage: contextPageFromConfig
382
+ }),
383
+ ...(selectionMode === SELECTION_MODE.MULTI && {
384
+ selectionList,
385
+ readonlyContextList: pageListValueFromConfig,
386
+ referenceType: referenceType || firstChildMeta?.config?.referenceType
387
+ }),
388
+ dataRelationshipContext: rawConfig.targetObjectClass && name ? name : null,
389
+ hideLabel,
390
+ onRecordChange,
391
+ getAdditionalInfo: getAdditionalInfo.bind(null, pConn, rawConfig?.authorContext),
392
+ createNewRecord: isCreateNewReferenceEnabled ? createNewRecord : undefined,
393
+ inline
394
+ };
395
+
396
+ const searchSelectKey = componentCachePersistUtils.getComponentStateKey(getPConnect, name);
397
+
398
+ const dataReferenceAdvancedSearchContext = {
399
+ dataReferenceConfigToChild,
400
+ isCreateNewReferenceEnabled,
401
+ disableStartingFieldsForReference,
402
+ pyID,
403
+ searchSelectKey
404
+ };
405
+
406
+ return (
407
+ <DataReferenceAdvancedSearchContext.Provider value={dataReferenceAdvancedSearchContext}>
408
+ <SearchForm getPConnect={getPConnect} searchSelectCacheKey={searchSelectKey} type='ObjectReference' label={propsToUse.label}>
409
+ {children}
410
+ </SearchForm>
411
+ </DataReferenceAdvancedSearchContext.Provider>
412
+ );
413
+ };
414
+
415
+ const buildCardsChild = () => {
416
+ const rawConfig = rawViewMetadata.config;
417
+ const selectionMode = rawConfig.mode;
418
+
419
+ const componentMeta = {
420
+ type: selectionMode === 'single' ? 'RadioButtons' : 'Checkbox',
421
+ config: {
422
+ ...rawConfig,
423
+ label: rawConfig.label,
424
+ value: selectionMode === 'single' ? rawConfig.value : undefined,
425
+ referenceList: rawConfig.referenceList,
426
+ contextClass: rawConfig.targetObjectClass,
427
+ referenceType: rawConfig.targetObjectType === 'case' ? 'Case' : 'Data',
428
+ readonlyContextList: selectionMode.includes('multi') ? rawConfig.pagelistValue : undefined,
429
+ ...(selectionMode.includes('multi')
430
+ ? {
431
+ selectionList: rawConfig.pagelistValue.substring(3),
432
+ selectionKey: rawConfig.selectionKey
433
+ }
434
+ : { selectionList: rawConfig.contextPage?.substring(3) }),
435
+ selectionMode: selectionMode.includes('multi') ? 'multi' : undefined,
436
+ renderMode: rawConfig.mode === 'readonly-multi' ? 'ReadOnly' : '',
437
+ variant: 'card',
438
+ inlineDisplay: rawConfig.inlineDisplay,
439
+ hideFieldLabels: rawConfig.hideFieldLabels,
440
+ presets: [
441
+ {
442
+ children: [
443
+ {
444
+ children: rawConfig.secondaryFields,
445
+ name: 'AdditionalDetails',
446
+ type: 'Region'
447
+ }
448
+ ],
449
+ config: {},
450
+ id: 'P_',
451
+ label: '',
452
+ name: 'presets',
453
+ template: 'Cards'
454
+ }
455
+ ],
456
+ datasource: {
457
+ fields: {
458
+ key: `@P ${rawConfig.selectionKey || `.${rawConfig.value.trim().split('.').pop()?.trim()}`}`,
459
+ text: `@P .${rawConfig.displayField.trim().split('.').pop()?.trim()}`,
460
+ value: `@P ${rawConfig.selectionKey || `.${rawConfig.value.trim().split('.').pop()?.trim()}`}`
461
+ },
462
+ filterDownloadedFields: true,
463
+ source: `@DATASOURCE ${rawConfig.referenceList}.pxResults`
464
+ },
465
+ displayAs: 'cards',
466
+ hideLabel: rawConfig.hideLabel,
467
+ imagePosition: rawConfig.imagePosition,
468
+ image: rawConfig.image,
469
+ imageSize: rawConfig.imageSize,
470
+ showImageDescription: rawConfig.showImageDescription,
471
+ imageDescription: rawConfig.imageDescription,
472
+ required: rawConfig.required,
473
+ readOnly: false,
474
+ disabled: rawConfig.disabled,
475
+ labelOption: rawConfig.labelOption,
476
+ primaryField: rawConfig.displayField,
477
+ dataRelationshipContext: rawConfig.displayField ? getDataRelationshipContextFromKey(rawConfig.displayField) : null
478
+ }
479
+ };
480
+
481
+ return getPConnect().createComponent(componentMeta);
482
+ };
483
+
484
+ const buildEmbeddedInsightTableChild = (rawConfig: any, referenceType: string, propsToUse: any) => {
485
+ const insightModel = propsToUse.insightModel;
486
+ const insightColumns: any[] = insightModel?.query?.columns ?? [];
487
+
488
+ const columnChildren = insightColumns
489
+ .filter((col: any) => col.type === 'column' && col.field)
490
+ .map((col: any) => ({
491
+ type: 'TextInput',
492
+ config: {
493
+ value: `@P .${col.field.fieldID}`,
494
+ label: col.field.name || col.field.fieldID
495
+ }
496
+ }));
497
+
498
+ const presets = [
499
+ {
500
+ children: [{ children: columnChildren, name: 'Columns', type: 'Region' }],
501
+ config: {},
502
+ id: 'P_',
503
+ label: '',
504
+ name: 'presets',
505
+ template: 'Table'
506
+ }
507
+ ];
508
+ console.log('Building EmbeddedInsightTable child with config', rawConfig);
509
+ const componentMeta = {
510
+ type: 'SimpleTableManual',
511
+ config: {
512
+ contextClass: rawConfig.targetObjectClass,
513
+ presets,
514
+ label: propsToUse.label,
515
+ readonlyContextList: rawConfig.pagelistValue,
516
+ referenceList: rawConfig.pagelistValue,
517
+ renderMode: 'ReadOnly',
518
+ dataPageName: rawConfig.referenceList,
519
+ fieldMetadata: {
520
+ datasource: {
521
+ parameters: rawConfig.parameters ?? {}
522
+ }
523
+ }
524
+ }
525
+ };
526
+
527
+ return getPConnect().createComponent(componentMeta);
528
+ };
529
+
530
+ const recreatedFirstChild = useMemo(() => {
531
+ const type = rawViewMetadata.config.componentType;
532
+
533
+ if (type === 'SemanticLink' && !canBeChangedInReviewMode) {
534
+ return buildSemanticLinkChild();
535
+ }
146
536
  if (isDisplayModeEnabled && !canBeChangedInReviewMode) {
147
537
  return (
148
538
  <SingleReferenceReadonly
149
- config={{
150
- ...rawViewMetadata.config,
151
- primaryField: rawViewMetadata.config.displayField
152
- }}
539
+ config={{ ...rawViewMetadata.config, primaryField: rawViewMetadata.config.displayField }}
153
540
  getPConnect={getPConnect}
154
541
  label={propsToUse.label}
155
542
  type={type}
156
543
  displayAs='readonly'
157
544
  displayMode={displayMode}
158
- activeViewRuleClass={rawViewMetadata.config.targetObjectClass} // for older views which may not have context class set, fall back to previous behavior
545
+ activeViewRuleClass={rawViewMetadata.config.targetObjectClass}
159
546
  referenceType={referenceType}
160
547
  hideLabel={hideLabel}
548
+ linkReference={linkReference}
161
549
  dataRelationshipContext={
162
550
  rawViewMetadata.config?.displayField ? getDataRelationshipContextFromKey(rawViewMetadata.config.displayField) : null
163
551
  }
@@ -166,41 +554,130 @@ export default function ObjectReference(props: ObjectReferenceProps) {
166
554
  );
167
555
  }
168
556
 
169
- // 1) Set datasource
557
+ if (type === 'Cards') {
558
+ return buildCardsChild();
559
+ }
560
+
561
+ // EmbeddedInsightTable type
562
+ if (type === 'EmbeddedInsightTable') {
563
+ return buildEmbeddedInsightTableChild(rawViewMetadata.config, referenceType, propsToUse);
564
+ }
565
+
566
+ if (type === 'CheckboxGroup') {
567
+ const displayField = rawViewMetadata.config.displayField;
568
+ const primaryField = displayField?.startsWith('@P') ? displayField?.substring(3) : displayField;
569
+ const readOnly = !(mode === 'multi' || mode === 'single');
570
+ const pageListValueFromConfig = rawViewMetadata.config.pagelistValue;
571
+ const selectionList = pageListValueFromConfig?.startsWith('@P') ? pageListValueFromConfig?.substring(3) : pageListValueFromConfig;
572
+ return getPConnect().createComponent({
573
+ type: 'Checkbox',
574
+ config: {
575
+ ...rawViewMetadata.config,
576
+ contextClass: rawViewMetadata.config.targetObjectClass,
577
+ datasource: {
578
+ fields: {
579
+ key: `@P ${rawViewMetadata.config.selectionKey}`,
580
+ text: `@P ${rawViewMetadata.config.displayField}`,
581
+ value: `@P ${rawViewMetadata.config.selectionKey}`
582
+ },
583
+ source: !rawViewMetadata.config?.parameters ? `@DATASOURCE ${rawViewMetadata.config.referenceList}.pxResults` : parameterizedDataSource
584
+ },
585
+ descriptors: mode === SELECTION_MODE.SINGLE ? refFieldMetadata?.descriptors : null,
586
+ displayAs: 'checkboxgroup',
587
+ hideLabel,
588
+ inline: rawViewMetadata.config.inline ?? false,
589
+ label: propsToUse.label,
590
+ primaryField,
591
+ readOnly,
592
+ readonlyContextList: pageListValueFromConfig,
593
+ referenceType: rawViewMetadata.config.targetObjectType,
594
+ selectionKey: rawViewMetadata.config.selectionKey,
595
+ selectionList,
596
+ selectionMode: mode,
597
+ disabled: propsToUse.disabled,
598
+ required: propsToUse.required,
599
+ visibility: propsToUse.visibility
600
+ }
601
+ });
602
+ }
603
+
604
+ if (type === 'Table' || type === 'SimpleTable') {
605
+ return buildTableChild(type);
606
+ }
607
+
608
+ // Set datasource
170
609
  generateColumns(rawViewMetadata.config, pConn, referenceType);
610
+ addCompositeKeysToConfig(rawViewMetadata.config, pConn);
171
611
  rawViewMetadata.config.deferDatasource = true;
172
612
  rawViewMetadata.config.listType = 'datapage';
173
613
  if (['Dropdown', 'AutoComplete'].includes(type) && !rawViewMetadata.config.placeholder) {
174
614
  rawViewMetadata.config.placeholder = '@L Select...';
175
615
  }
176
616
 
177
- // 2) Pass through configs
178
617
  rawViewMetadata.config.showPromotedFilters = showPromotedFilters;
179
618
 
180
619
  if (!canBeChangedInReviewMode) {
181
620
  rawViewMetadata.config.displayMode = displayMode;
182
621
  }
183
622
 
184
- // 3) Define field meta
185
- let fieldMetaData: any = null;
623
+ const fieldMetaData = buildFieldMetaData();
186
624
 
187
- fieldMetaData = {
188
- datasourceMetadata: {
189
- datasource: {
190
- parameters: {}
625
+ const { disableStartingFieldsForReference = false } = (PCore as any).getEnvironmentInfo().environmentInfoObject?.features?.form || {};
626
+ const contextClass = rawViewMetadata.config.targetObjectClass;
627
+
628
+ const formFeaturesAvailable = (PCore as any).getEnvironmentInfo().environmentInfoObject?.features?.form;
629
+ const createAuthoringEnabled = allowCreatingRecords ?? formFeaturesAvailable?.isCreateNewReferenceEnabled;
630
+ const userHasCreateAccess = formFeaturesAvailable
631
+ ? formFeaturesAvailable.isCreateNewReferenceEnabled && PCore.getAccessPrivilege().hasCreateAccess(contextClass)
632
+ : PCore.getAccessPrivilege().hasCreateAccess(contextClass);
633
+ const isCreateNewReferenceEnabled = createAuthoringEnabled && userHasCreateAccess;
634
+
635
+ const buildCreateNewRecord = () =>
636
+ createNewRecord({
637
+ referenceType: rawViewMetadata.config.targetObjectType === 'case' ? 'Case' : 'Data',
638
+ pConn,
639
+ getPConnect,
640
+ disableStartingFieldsForReference,
641
+ startingFields: {},
642
+ contextClass
643
+ });
644
+
645
+ if (type === 'SearchAndSelect') {
646
+ return buildSearchAndSelectChild(isCreateNewReferenceEnabled, disableStartingFieldsForReference);
647
+ }
648
+
649
+ if (type === 'Multiselect') {
650
+ return getPConnect().createComponent({
651
+ type,
652
+ config: {
653
+ ...rawViewMetadata.config,
654
+ descriptors: refFieldMetadata?.descriptors,
655
+ datasourceMetadata: fieldMetaData?.datasourceMetadata,
656
+ selectionList: rawViewMetadata.config?.pagelistValue.substring(3),
657
+ readonlyContextList: rawViewMetadata.config?.pagelistValue,
658
+ selectionKey: rawViewMetadata.config?.selectionKey,
659
+ selectionMode: SELECTION_MODE.MULTI,
660
+ required: propsToUse.required,
661
+ visibility: propsToUse.visibility,
662
+ disabled: propsToUse.disabled,
663
+ label: propsToUse.label,
664
+ parameters: rawViewMetadata.config.parameters,
665
+ readOnly: false,
666
+ localeReference: rawViewMetadata.config.localeReference,
667
+ ...(mode === SELECTION_MODE.MULTI ? { referenceType } : ''),
668
+ contextClass: rawViewMetadata.config.targetObjectClass,
669
+ primaryField: rawViewMetadata.config?.displayField?.startsWith('@P')
670
+ ? rawViewMetadata.config.displayField.slice(3)
671
+ : rawViewMetadata.config?.displayField,
672
+ dataRelationshipContext: rawViewMetadata.config?.pagelistValue.substring(4),
673
+ hideLabel: hideLabel ?? false,
674
+ onRecordChange,
675
+ createNewRecord: isCreateNewReferenceEnabled ? buildCreateNewRecord : undefined,
676
+ inline,
677
+ columnsFormatter: rawViewMetadata.config.secondaryFields
191
678
  }
192
- }
193
- };
194
- if (rawViewMetadata.config?.parameters) {
195
- fieldMetaData.datasourceMetadata.datasource.parameters = parameters;
679
+ });
196
680
  }
197
- fieldMetaData.datasourceMetadata.datasource.propertyForDisplayText = rawViewMetadata?.config?.datasource?.fields?.text.startsWith('@P')
198
- ? rawViewMetadata?.config?.datasource?.fields?.text?.substring(3)
199
- : rawViewMetadata?.config?.datasource?.fields?.text;
200
- fieldMetaData.datasourceMetadata.datasource.propertyForValue = rawViewMetadata?.config?.datasource?.fields?.value.startsWith('@P')
201
- ? rawViewMetadata?.config?.datasource?.fields?.value?.substring(3)
202
- : rawViewMetadata?.config?.datasource?.fields?.value;
203
- fieldMetaData.datasourceMetadata.datasource.name = rawViewMetadata.config?.referenceList;
204
681
 
205
682
  return getPConnect().createComponent({
206
683
  type,
@@ -221,14 +698,25 @@ export default function ObjectReference(props: ObjectReferenceProps) {
221
698
  dataRelationshipContext: rawViewMetadata.config?.displayField ? getDataRelationshipContextFromKey(rawViewMetadata.config.displayField) : null,
222
699
  hideLabel,
223
700
  onRecordChange,
224
- inline
701
+ createNewRecord: isCreateNewReferenceEnabled ? buildCreateNewRecord : undefined,
702
+ inline,
703
+ columnsFormatter: rawViewMetadata.config.secondaryFields,
704
+ getAdditionalInfo: getAdditionalInfo.bind(null, pConn, rawViewMetadata.config.displayField),
705
+ linkReference: type === 'AutoComplete' ? linkReference : undefined
225
706
  }
226
707
  });
227
- }, [rawViewMetadata.config?.datasource?.source, parameters, propsToUse.required, propsToUse.disabled, getPConnect().getPageReference()]);
708
+ }, [
709
+ rawViewMetadata.config?.datasource?.source,
710
+ parameters,
711
+ parameterizedDataSource,
712
+ propsToUse.required,
713
+ propsToUse.disabled,
714
+ getPConnect().getPageReference()
715
+ ]);
228
716
 
229
717
  // Prepare children to render
230
718
  return (
231
- <Grid2 container>
719
+ <Grid2 container direction='column'>
232
720
  <Grid2>{recreatedFirstChild}</Grid2>
233
721
  </Grid2>
234
722
  );