@solidxai/core-ui 0.1.8-beta.19 → 0.1.8-beta.20

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 (302) hide show
  1. package/dist/adapters/auth/getSession.d.ts.map +1 -1
  2. package/dist/adapters/auth/getSession.js +1 -1
  3. package/dist/adapters/auth/getSession.js.map +1 -1
  4. package/dist/adapters/auth/getSession.ts +1 -0
  5. package/dist/adapters/auth/helper.d.ts.map +1 -1
  6. package/dist/adapters/auth/helper.js +1 -0
  7. package/dist/adapters/auth/helper.js.map +1 -1
  8. package/dist/adapters/auth/helper.ts +3 -1
  9. package/dist/adapters/auth/signIn.d.ts.map +1 -1
  10. package/dist/adapters/auth/signIn.js +1 -0
  11. package/dist/adapters/auth/signIn.js.map +1 -1
  12. package/dist/adapters/auth/signIn.ts +3 -1
  13. package/dist/adapters/auth/signInWithOAuthAccessCode.d.ts +1 -0
  14. package/dist/adapters/auth/signInWithOAuthAccessCode.d.ts.map +1 -1
  15. package/dist/adapters/auth/signInWithOAuthAccessCode.js +10 -9
  16. package/dist/adapters/auth/signInWithOAuthAccessCode.js.map +1 -1
  17. package/dist/adapters/auth/signInWithOAuthAccessCode.ts +6 -3
  18. package/dist/adapters/auth/signOut.d.ts.map +1 -1
  19. package/dist/adapters/auth/signOut.js +7 -1
  20. package/dist/adapters/auth/signOut.js.map +1 -1
  21. package/dist/adapters/auth/signOut.ts +7 -1
  22. package/dist/adapters/auth/types.d.ts +1 -0
  23. package/dist/adapters/auth/types.d.ts.map +1 -1
  24. package/dist/adapters/auth/types.js.map +1 -1
  25. package/dist/adapters/auth/types.ts +1 -0
  26. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  27. package/dist/components/auth/AuthLayout.js +2 -1
  28. package/dist/components/auth/AuthLayout.js.map +1 -1
  29. package/dist/components/auth/AuthLayout.tsx +2 -1
  30. package/dist/components/auth/FacebookAuthChecking.d.ts +2 -0
  31. package/dist/components/auth/FacebookAuthChecking.d.ts.map +1 -0
  32. package/dist/components/auth/FacebookAuthChecking.js +103 -0
  33. package/dist/components/auth/FacebookAuthChecking.js.map +1 -0
  34. package/dist/components/auth/FacebookAuthChecking.tsx +64 -0
  35. package/dist/components/auth/GoogleAuthChecking.js +0 -1
  36. package/dist/components/auth/GoogleAuthChecking.js.map +1 -1
  37. package/dist/components/auth/GoogleAuthChecking.tsx +1 -1
  38. package/dist/components/auth/MicrosoftAuthChecking.d.ts +2 -0
  39. package/dist/components/auth/MicrosoftAuthChecking.d.ts.map +1 -0
  40. package/dist/components/auth/MicrosoftAuthChecking.js +103 -0
  41. package/dist/components/auth/MicrosoftAuthChecking.js.map +1 -0
  42. package/dist/components/auth/MicrosoftAuthChecking.tsx +64 -0
  43. package/dist/components/auth/SolidInitialLoginOtp.js +0 -1
  44. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  45. package/dist/components/auth/SolidInitialLoginOtp.tsx +1 -1
  46. package/dist/components/auth/SolidInitiateRegisterOtp.d.ts.map +1 -1
  47. package/dist/components/auth/SolidInitiateRegisterOtp.js +28 -12
  48. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  49. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +26 -11
  50. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  51. package/dist/components/auth/SolidLogin.js +7 -4
  52. package/dist/components/auth/SolidLogin.js.map +1 -1
  53. package/dist/components/auth/SolidLogin.tsx +15 -3
  54. package/dist/components/auth/SolidRegister.d.ts.map +1 -1
  55. package/dist/components/auth/SolidRegister.js +48 -17
  56. package/dist/components/auth/SolidRegister.js.map +1 -1
  57. package/dist/components/auth/SolidRegister.tsx +87 -30
  58. package/dist/components/common/AuthBanner.js.map +1 -1
  59. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  60. package/dist/components/common/GeneralSettings.js +228 -146
  61. package/dist/components/common/GeneralSettings.js.map +1 -1
  62. package/dist/components/common/GeneralSettings.tsx +1103 -772
  63. package/dist/components/common/SettingsComponent.d.ts +2 -0
  64. package/dist/components/common/SettingsComponent.d.ts.map +1 -0
  65. package/dist/components/common/SettingsComponent.js +351 -0
  66. package/dist/components/common/SettingsComponent.js.map +1 -0
  67. package/dist/components/common/SettingsComponent.module.css +421 -0
  68. package/dist/components/common/SettingsComponent.tsx +582 -0
  69. package/dist/components/common/SocialMediaLogin.d.ts +8 -1
  70. package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
  71. package/dist/components/common/SocialMediaLogin.js +6 -13
  72. package/dist/components/common/SocialMediaLogin.js.map +1 -1
  73. package/dist/components/common/SocialMediaLogin.tsx +120 -58
  74. package/dist/components/common/SolidExport.d.ts.map +1 -1
  75. package/dist/components/common/SolidExport.js +1 -1
  76. package/dist/components/common/SolidExport.js.map +1 -1
  77. package/dist/components/common/SolidExport.tsx +2 -1
  78. package/dist/components/common/SolidFormStepper.d.ts.map +1 -1
  79. package/dist/components/common/SolidFormStepper.js +2 -1
  80. package/dist/components/common/SolidFormStepper.js.map +1 -1
  81. package/dist/components/common/SolidFormStepper.tsx +2 -1
  82. package/dist/components/common/solid-export.css +26 -0
  83. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  84. package/dist/components/core/card/SolidCardView.js +24 -25
  85. package/dist/components/core/card/SolidCardView.js.map +1 -1
  86. package/dist/components/core/card/SolidCardView.tsx +22 -27
  87. package/dist/components/core/card/SolidCardViewConfigure.js +1 -1
  88. package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
  89. package/dist/components/core/card/SolidCardViewConfigure.tsx +1 -1
  90. package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
  91. package/dist/components/core/chatter/SolidChatter.js +39 -9
  92. package/dist/components/core/chatter/SolidChatter.js.map +1 -1
  93. package/dist/components/core/chatter/SolidChatter.tsx +42 -7
  94. package/dist/components/core/chatter/SolidChatterAuditMessage.d.ts.map +1 -1
  95. package/dist/components/core/chatter/SolidChatterAuditMessage.js +19 -1
  96. package/dist/components/core/chatter/SolidChatterAuditMessage.js.map +1 -1
  97. package/dist/components/core/chatter/SolidChatterAuditMessage.tsx +22 -1
  98. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts +3 -0
  99. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts.map +1 -1
  100. package/dist/components/core/chatter/SolidChatterMessageBox.js +68 -4
  101. package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
  102. package/dist/components/core/chatter/SolidChatterMessageBox.tsx +45 -3
  103. package/dist/components/core/chatter/chatter.module.css +0 -3
  104. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.d.ts.map +1 -1
  105. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js +3 -1
  106. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js.map +1 -1
  107. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.tsx +3 -1
  108. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
  109. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +9 -8
  110. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
  111. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +4 -2
  112. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.d.ts +3 -0
  113. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.d.ts.map +1 -0
  114. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.js +81 -0
  115. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.js.map +1 -0
  116. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.tsx +114 -0
  117. package/dist/components/core/form/SolidFormActionHeader.d.ts +1 -1
  118. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
  119. package/dist/components/core/form/SolidFormActionHeader.js +5 -3
  120. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
  121. package/dist/components/core/form/SolidFormActionHeader.tsx +27 -1
  122. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  123. package/dist/components/core/form/SolidFormView.js +67 -27
  124. package/dist/components/core/form/SolidFormView.js.map +1 -1
  125. package/dist/components/core/form/SolidFormView.tsx +54 -7
  126. package/dist/components/core/form/fields/SolidComputedField.d.ts +25 -0
  127. package/dist/components/core/form/fields/SolidComputedField.d.ts.map +1 -0
  128. package/dist/components/core/form/fields/SolidComputedField.js +128 -0
  129. package/dist/components/core/form/fields/SolidComputedField.js.map +1 -0
  130. package/dist/components/core/form/fields/SolidComputedField.tsx +134 -0
  131. package/dist/components/core/form/fields/SolidSelectionDynamicField.d.ts.map +1 -1
  132. package/dist/components/core/form/fields/SolidSelectionDynamicField.js +11 -3
  133. package/dist/components/core/form/fields/SolidSelectionDynamicField.js.map +1 -1
  134. package/dist/components/core/form/fields/SolidSelectionDynamicField.tsx +13 -4
  135. package/dist/components/core/kanban/KanbanBoard.js +1 -1
  136. package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
  137. package/dist/components/core/kanban/KanbanBoard.tsx +1 -1
  138. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  139. package/dist/components/core/kanban/SolidKanbanView.js +216 -102
  140. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  141. package/dist/components/core/kanban/SolidKanbanView.tsx +204 -72
  142. package/dist/components/core/kanban/SolidKanbanViewConfigure.js +1 -1
  143. package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
  144. package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +1 -1
  145. package/dist/components/core/kanban/SolidManyToOneFilterElement.d.ts.map +1 -1
  146. package/dist/components/core/kanban/SolidManyToOneFilterElement.js.map +1 -1
  147. package/dist/components/core/kanban/SolidManyToOneFilterElement.tsx +1 -2
  148. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.d.ts.map +1 -1
  149. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js +2 -2
  150. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js.map +1 -1
  151. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.tsx +21 -10
  152. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.d.ts.map +1 -1
  153. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js +2 -2
  154. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js.map +1 -1
  155. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.tsx +18 -10
  156. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.d.ts.map +1 -1
  157. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js +3 -6
  158. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js.map +1 -1
  159. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.tsx +30 -24
  160. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.js.map +1 -1
  161. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.tsx +2 -2
  162. package/dist/components/core/list/SolidDataTablePagination.d.ts +15 -0
  163. package/dist/components/core/list/SolidDataTablePagination.d.ts.map +1 -0
  164. package/dist/components/core/list/SolidDataTablePagination.js +22 -0
  165. package/dist/components/core/list/SolidDataTablePagination.js.map +1 -0
  166. package/dist/components/core/list/SolidDataTablePagination.tsx +71 -0
  167. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  168. package/dist/components/core/list/SolidListView.js +58 -61
  169. package/dist/components/core/list/SolidListView.js.map +1 -1
  170. package/dist/components/core/list/SolidListView.tsx +42 -46
  171. package/dist/components/core/list/SolidListViewConfigure.js +1 -1
  172. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  173. package/dist/components/core/list/SolidListViewConfigure.tsx +1 -1
  174. package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts +1 -1
  175. package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts.map +1 -1
  176. package/dist/components/core/list/SolidListViewRowButtonContextMenu.js +6 -7
  177. package/dist/components/core/list/SolidListViewRowButtonContextMenu.js.map +1 -1
  178. package/dist/components/core/list/SolidListViewRowButtonContextMenu.tsx +9 -10
  179. package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
  180. package/dist/components/layout/user-profile-menu.js +15 -14
  181. package/dist/components/layout/user-profile-menu.js.map +1 -1
  182. package/dist/components/layout/user-profile-menu.tsx +8 -6
  183. package/dist/components/shad-cn-ui/SolidDialog.d.ts +1 -1
  184. package/dist/components/shad-cn-ui/SolidDialog.d.ts.map +1 -1
  185. package/dist/components/shad-cn-ui/SolidDialog.js.map +1 -1
  186. package/dist/components/shad-cn-ui/SolidDialog.tsx +1 -1
  187. package/dist/components/shad-cn-ui/SolidIcon.d.ts +2 -2
  188. package/dist/components/shad-cn-ui/SolidIcon.d.ts.map +1 -1
  189. package/dist/components/shad-cn-ui/SolidIcon.js +3 -4
  190. package/dist/components/shad-cn-ui/SolidIcon.js.map +1 -1
  191. package/dist/components/shad-cn-ui/SolidIcon.tsx +12 -15
  192. package/dist/components/shad-cn-ui/SolidRichTextEditor.d.ts.map +1 -1
  193. package/dist/components/shad-cn-ui/SolidRichTextEditor.js +9 -1
  194. package/dist/components/shad-cn-ui/SolidRichTextEditor.js.map +1 -1
  195. package/dist/components/shad-cn-ui/SolidRichTextEditor.tsx +8 -1
  196. package/dist/components/shad-cn-ui/SolidTabs.d.ts +2 -1
  197. package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -1
  198. package/dist/components/shad-cn-ui/SolidTabs.js +2 -2
  199. package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -1
  200. package/dist/components/shad-cn-ui/SolidTabs.tsx +12 -1
  201. package/dist/components/solid-ui/SolidButton.d.ts +14 -0
  202. package/dist/components/solid-ui/SolidButton.d.ts.map +1 -0
  203. package/dist/components/solid-ui/SolidButton.js +36 -0
  204. package/dist/components/solid-ui/SolidButton.js.map +1 -0
  205. package/dist/components/solid-ui/SolidButton.tsx +54 -0
  206. package/dist/components/solid-ui/SolidTabs.d.ts +18 -0
  207. package/dist/components/solid-ui/SolidTabs.d.ts.map +1 -0
  208. package/dist/components/solid-ui/SolidTabs.js +22 -0
  209. package/dist/components/solid-ui/SolidTabs.js.map +1 -0
  210. package/dist/components/solid-ui/SolidTabs.tsx +73 -0
  211. package/dist/components/solid-ui/index.d.ts +3 -0
  212. package/dist/components/solid-ui/index.d.ts.map +1 -0
  213. package/dist/components/solid-ui/index.js +3 -0
  214. package/dist/components/solid-ui/index.js.map +1 -0
  215. package/dist/components/solid-ui/index.ts +2 -0
  216. package/dist/helpers/registry.d.ts +2 -2
  217. package/dist/helpers/registry.d.ts.map +1 -1
  218. package/dist/helpers/registry.js +4 -0
  219. package/dist/helpers/registry.js.map +1 -1
  220. package/dist/helpers/registry.ts +5 -3
  221. package/dist/helpers/settingsPayload.d.ts +32 -0
  222. package/dist/helpers/settingsPayload.d.ts.map +1 -0
  223. package/dist/helpers/settingsPayload.js +72 -0
  224. package/dist/helpers/settingsPayload.js.map +1 -0
  225. package/dist/helpers/settingsPayload.ts +125 -0
  226. package/dist/index.d.ts +4 -0
  227. package/dist/index.d.ts.map +1 -1
  228. package/dist/index.js +4 -0
  229. package/dist/index.js.map +1 -1
  230. package/dist/index.ts +4 -0
  231. package/dist/redux/api/solidChatterMessageApi.d.ts +2 -1
  232. package/dist/redux/api/solidChatterMessageApi.d.ts.map +1 -1
  233. package/dist/redux/api/solidChatterMessageApi.js +11 -1
  234. package/dist/redux/api/solidChatterMessageApi.js.map +1 -1
  235. package/dist/redux/api/solidChatterMessageApi.ts +10 -1
  236. package/dist/redux/store/defaultStoreConfig.d.ts +1 -0
  237. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  238. package/dist/resources/globals.css +5 -1
  239. package/dist/resources/shadcn-base.css +242 -81
  240. package/dist/resources/solid-responsive.css +22 -4
  241. package/dist/routes/AppEventListener.js +1 -1
  242. package/dist/routes/AppEventListener.js.map +1 -1
  243. package/dist/routes/AppEventListener.tsx +1 -1
  244. package/dist/routes/pages/admin/core/SettingsPage.js +2 -2
  245. package/dist/routes/pages/admin/core/SettingsPage.js.map +1 -1
  246. package/dist/routes/pages/admin/core/SettingsPage.tsx +2 -2
  247. package/dist/routes/pages/auth/InitiateFacebookOauthPage.d.ts +2 -0
  248. package/dist/routes/pages/auth/InitiateFacebookOauthPage.d.ts.map +1 -0
  249. package/dist/routes/pages/auth/InitiateFacebookOauthPage.js +6 -0
  250. package/dist/routes/pages/auth/InitiateFacebookOauthPage.js.map +1 -0
  251. package/dist/routes/pages/auth/InitiateFacebookOauthPage.tsx +5 -0
  252. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.d.ts +2 -0
  253. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.d.ts.map +1 -0
  254. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.js +6 -0
  255. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.js.map +1 -0
  256. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.tsx +5 -0
  257. package/dist/routes/solidRoutes.d.ts.map +1 -1
  258. package/dist/routes/solidRoutes.js +5 -1
  259. package/dist/routes/solidRoutes.js.map +1 -1
  260. package/dist/routes/solidRoutes.tsx +5 -1
  261. package/dist/routes/types.d.ts +1 -1
  262. package/dist/routes/types.d.ts.map +1 -1
  263. package/dist/routes/types.js.map +1 -1
  264. package/dist/routes/types.ts +2 -0
  265. package/dist/types/extension-registry.d.ts +1 -0
  266. package/dist/types/extension-registry.d.ts.map +1 -1
  267. package/dist/types/extension-registry.js +1 -0
  268. package/dist/types/extension-registry.js.map +1 -1
  269. package/dist/types/extension-registry.ts +1 -0
  270. package/dist/types/index.d.ts +2 -0
  271. package/dist/types/solid-core.d.ts +10 -0
  272. package/package.json +1 -1
  273. package/dist/components/auth/SolidOTPVerify.d.ts +0 -3
  274. package/dist/components/auth/SolidOTPVerify.d.ts.map +0 -1
  275. package/dist/components/auth/SolidOTPVerify.js +0 -67
  276. package/dist/components/auth/SolidOTPVerify.js.map +0 -1
  277. package/dist/components/auth/SolidOTPVerify.tsx +0 -133
  278. package/dist/components/core/common/LoadDynamicJsxComponent.d.ts +0 -2
  279. package/dist/components/core/common/LoadDynamicJsxComponent.d.ts.map +0 -1
  280. package/dist/components/core/common/LoadDynamicJsxComponent.js +0 -50
  281. package/dist/components/core/common/LoadDynamicJsxComponent.js.map +0 -1
  282. package/dist/components/core/common/LoadDynamicJsxComponent.tsx +0 -70
  283. package/dist/nextAuth/authProviders.d.ts +0 -4
  284. package/dist/nextAuth/authProviders.d.ts.map +0 -1
  285. package/dist/nextAuth/authProviders.js +0 -198
  286. package/dist/nextAuth/authProviders.js.map +0 -1
  287. package/dist/nextAuth/authProviders.tsx +0 -232
  288. package/dist/nextAuth/handleLogout.d.ts +0 -2
  289. package/dist/nextAuth/handleLogout.d.ts.map +0 -1
  290. package/dist/nextAuth/handleLogout.js +0 -36
  291. package/dist/nextAuth/handleLogout.js.map +0 -1
  292. package/dist/nextAuth/handleLogout.tsx +0 -39
  293. package/dist/nextAuth/refreshAccessToken.d.ts +0 -2
  294. package/dist/nextAuth/refreshAccessToken.d.ts.map +0 -1
  295. package/dist/nextAuth/refreshAccessToken.js +0 -24
  296. package/dist/nextAuth/refreshAccessToken.js.map +0 -1
  297. package/dist/nextAuth/refreshAccessToken.tsx +0 -28
  298. package/dist/redux/features/settingsSlice.d.ts +0 -20
  299. package/dist/redux/features/settingsSlice.d.ts.map +0 -1
  300. package/dist/redux/features/settingsSlice.js +0 -39
  301. package/dist/redux/features/settingsSlice.js.map +0 -1
  302. package/dist/redux/features/settingsSlice.ts +0 -60
@@ -28,6 +28,7 @@ import { SolidSelectionDynamicField } from "./fields/SolidSelectionDynamicField"
28
28
  import { SolidSelectionStaticField } from "./fields/SolidSelectionStaticField";
29
29
  import { SolidShortTextField } from "./fields/SolidShortTextField";
30
30
  import { SolidTimeField } from "./fields/SolidTimeField";
31
+ import { SolidComputedField } from "./fields/SolidComputedField";
31
32
  import { SolidUiEvent } from "../../../types";
32
33
  import { getExtensionComponent, getExtensionFunction } from "../../../helpers/registry";
33
34
  import { SolidFormWidgetProps, SolidUiEventResponse } from "../../../types/solid-core";
@@ -41,6 +42,7 @@ import { hasAnyRole } from "../../../helpers/rolesHelper";
41
42
  import SolidChatterLocaleTabView from "../locales/SolidChatterLocaleTabView";
42
43
  import { ERROR_MESSAGES } from "../../../constants/error-messages";
43
44
  import { useLazyGetMcpUrlQuery, useLazyGetSolidSettingsQuery } from "../../../redux/api/solidSettingsApi";
45
+ import { getSettingsMap } from "../../../helpers/settingsPayload";
44
46
  import { SolidFormFooter } from "./SolidFormFooter";
45
47
  import { normalizeSolidFormActionPath } from "../../../helpers/routePaths";
46
48
  import { showToast } from "../../../redux/features/toastSlice";
@@ -171,6 +173,9 @@ const fieldFactory = (type: string, fieldContext: SolidFieldProps, setLightboxUr
171
173
  if (type === 'email') {
172
174
  return new SolidEmailField(fieldContext);
173
175
  }
176
+ if (type === 'computed') {
177
+ return new SolidComputedField(fieldContext);
178
+ }
174
179
  return null;
175
180
  }
176
181
 
@@ -469,6 +474,8 @@ const SolidFormView = (params: SolidFormViewProps) => {
469
474
  const [chatterLocaleWidth, setChatterLocaleWidth] = useState(360);
470
475
  const [isResizingChatterLocale, setIsResizingChatterLocale] = useState(false);
471
476
  const [isSubmitting, setIsSubmitting] = useState(false);
477
+ const [isMobileViewport, setIsMobileViewport] = useState(false);
478
+ const solidFormWrapperRef = useRef<HTMLDivElement | null>(null);
472
479
 
473
480
  const tabFieldsRef = useRef<Array<{ tabKey: string; fields: string[] }>>([]);
474
481
  const [requestedTab, setRequestedTab] = useState<string | null>(null);
@@ -490,15 +497,16 @@ const SolidFormView = (params: SolidFormViewProps) => {
490
497
  const actionContext = searchParams.get('actionContext');
491
498
 
492
499
  const [trigger, { data: solidSettingsData }] = useLazyGetSolidSettingsQuery();
500
+ const solidSettingsMap = useMemo(() => getSettingsMap(solidSettingsData), [solidSettingsData]);
493
501
  useEffect(() => {
494
502
  trigger("") // Fetch settings on mount
495
503
  }, [])
496
504
 
497
505
  useEffect(() => {
498
- if (solidSettingsData?.data?.mcpEnabled && solidSettingsData?.data?.mcpServerUrl) {
506
+ if (solidSettingsMap?.mcpEnabled && solidSettingsMap?.mcpServerUrl) {
499
507
  enableSolidXAiPanel();
500
508
  }
501
- }, [solidSettingsData]);
509
+ }, [solidSettingsMap]);
502
510
 
503
511
 
504
512
  const enableSolidXAiPanel = async () => {
@@ -519,19 +527,34 @@ const SolidFormView = (params: SolidFormViewProps) => {
519
527
  }
520
528
 
521
529
  const op = useRef(null);
530
+ const MIN_CHATTER_WIDTH = 320;
531
+ const MIN_FORM_SECTION_WIDTH = 420;
532
+
533
+ const getMaxChatterWidth = () => {
534
+ const wrapperWidth = solidFormWrapperRef.current?.getBoundingClientRect().width ?? window.innerWidth;
535
+ return Math.max(MIN_CHATTER_WIDTH, wrapperWidth - MIN_FORM_SECTION_WIDTH);
536
+ };
537
+
538
+ const clampChatterWidth = (width: number) => {
539
+ const maxWidth = getMaxChatterWidth();
540
+ return Math.max(MIN_CHATTER_WIDTH, Math.min(width, maxWidth));
541
+ };
542
+
522
543
  useEffect(() => {
523
544
  const stored = localStorage.getItem('chatter_locale_width');
524
545
  if (stored) {
525
546
  const parsed = parseInt(stored, 10);
526
- const clampedWidth = Math.max(320, Math.min(parsed, 420));
547
+ const clampedWidth = clampChatterWidth(parsed);
527
548
  setChatterLocaleWidth(clampedWidth);
528
549
  }
529
550
  }, []);
530
551
  useEffect(() => {
531
552
  const handleMouseMove = (e: MouseEvent) => {
532
553
  if (!isResizingChatterLocale) return;
533
- const newWidth = window.innerWidth - e.clientX;
534
- const clampedWidth = Math.max(320, Math.min(newWidth, 420));
554
+ const wrapperRect = solidFormWrapperRef.current?.getBoundingClientRect();
555
+ const rightEdge = wrapperRect?.right ?? window.innerWidth;
556
+ const newWidth = rightEdge - e.clientX;
557
+ const clampedWidth = clampChatterWidth(newWidth);
535
558
  setChatterLocaleWidth(clampedWidth);
536
559
  localStorage.setItem('chatter_locale_width', clampedWidth.toString());
537
560
  };
@@ -551,6 +574,28 @@ const SolidFormView = (params: SolidFormViewProps) => {
551
574
  };
552
575
  }, [isResizingChatterLocale]);
553
576
 
577
+ useEffect(() => {
578
+ const updateViewportFlag = () => setIsMobileViewport(window.innerWidth <= 1199);
579
+ updateViewportFlag();
580
+ window.addEventListener('resize', updateViewportFlag);
581
+ return () => window.removeEventListener('resize', updateViewportFlag);
582
+ }, []);
583
+
584
+ useEffect(() => {
585
+ const handleWindowResize = () => {
586
+ setChatterLocaleWidth((currentWidth) => {
587
+ const clamped = clampChatterWidth(currentWidth);
588
+ if (clamped !== currentWidth) {
589
+ localStorage.setItem('chatter_locale_width', clamped.toString());
590
+ }
591
+ return clamped;
592
+ });
593
+ };
594
+
595
+ window.addEventListener('resize', handleWindowResize);
596
+ return () => window.removeEventListener('resize', handleWindowResize);
597
+ }, []);
598
+
554
599
 
555
600
  useEffect(() => {
556
601
  const mode = searchParams.get('viewMode');
@@ -1242,7 +1287,7 @@ const SolidFormView = (params: SolidFormViewProps) => {
1242
1287
  });
1243
1288
 
1244
1289
  return (
1245
- <div className="solid-form-wrapper">
1290
+ <div className="solid-form-wrapper" ref={solidFormWrapperRef}>
1246
1291
  <div className="solid-form-section">
1247
1292
  <div className="page-header solid-list-toolbar flex-column lg:flex-row">
1248
1293
  <div className="flex justify-content-between w-full solid-form-toolbar-row">
@@ -1679,7 +1724,7 @@ const SolidFormView = (params: SolidFormViewProps) => {
1679
1724
 
1680
1725
 
1681
1726
  return (
1682
- <div className="solid-form-wrapper">
1727
+ <div className="solid-form-wrapper" ref={solidFormWrapperRef}>
1683
1728
  <div className="solid-form-section">
1684
1729
  <form style={{ width: '100%' }} onSubmit={formik.handleSubmit}>
1685
1730
  <FormikSubmitWatcher
@@ -1713,6 +1758,8 @@ const SolidFormView = (params: SolidFormViewProps) => {
1713
1758
  onStepperUpdate={() => setRefreshChatterMessage(true)}
1714
1759
  isSubmitting={isSubmitting}
1715
1760
  headerRequestStatusLabel={isSubmitting ? "Saving..." : null}
1761
+ showMobileOpenChatter={isMobileViewport && !isShowChatter && params.embeded !== true}
1762
+ onMobileOpenChatter={() => setShowChatter(true)}
1716
1763
  />
1717
1764
  <div className={`px-4 py-3 md:p-4 solid-form-content md:pt-1 ${createMode ? 'solid-create-mode-form-content' : ''} ${params.embeded === true ? 'h-auto' : ''}`} style={{ maxHeight: params.embeded === true ? '80vh' : '', overflowY: 'auto' }}>
1718
1765
  {DynamicHeaderComponent && <DynamicHeaderComponent />}
@@ -0,0 +1,25 @@
1
+ import * as Yup from 'yup';
2
+ import { FormikObject, ISolidField, SolidFieldProps } from "./ISolidField";
3
+ import { SolidFormFieldWidgetProps } from "../../../../types/solid-core";
4
+ /**
5
+ * SolidComputedField
6
+ *
7
+ * Computed fields are server-generated values (e.g. auto-calculated totals, slugs, codes).
8
+ * They are always read-only in the UI and are only shown when a record already exists
9
+ * (i.e., the form is in view or edit mode for an existing record, NOT during creation).
10
+ */
11
+ export declare class SolidComputedField implements ISolidField {
12
+ private fieldContext;
13
+ constructor(fieldContext: SolidFieldProps);
14
+ updateFormData(_value: any, _formData: FormData): any;
15
+ initialValue(): any;
16
+ validationSchema(): Yup.Schema;
17
+ render(formik: FormikObject): import("react/jsx-runtime").JSX.Element | null;
18
+ renderExtensionRenderMode(widget: string, formik: FormikObject): import("react/jsx-runtime").JSX.Element;
19
+ }
20
+ /**
21
+ * Default widget for computed fields — renders as a read-only input in edit mode.
22
+ * Uses the same layout as the short-text view widget for consistency.
23
+ */
24
+ export declare const DefaultComputedFormWidget: ({ formik, fieldContext }: SolidFormFieldWidgetProps) => import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=SolidComputedField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidComputedField.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidComputedField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAIzE;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IAElD,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,GAAG,GAAG;IAIrD,YAAY,IAAI,GAAG;IAMnB,gBAAgB,IAAI,GAAG,CAAC,MAAM;IAK9B,MAAM,CAAC,MAAM,EAAE,YAAY;IAoC3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;CAYjE;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,6BAA8B,yBAAyB,4CAwC5F,CAAC"}
@@ -0,0 +1,128 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsxs as _jsxs, Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
13
+ import * as Yup from 'yup';
14
+ import styles from './solidFields.module.css';
15
+ import { getExtensionComponent } from "../../../../helpers/registry";
16
+ import { SolidFieldTooltip } from "../../../../components/common/SolidFieldTooltip";
17
+ import { SolidInput } from "../../../shad-cn-ui";
18
+ /**
19
+ * SolidComputedField
20
+ *
21
+ * Computed fields are server-generated values (e.g. auto-calculated totals, slugs, codes).
22
+ * They are always read-only in the UI and are only shown when a record already exists
23
+ * (i.e., the form is in view or edit mode for an existing record, NOT during creation).
24
+ */
25
+ var SolidComputedField = /** @class */ (function () {
26
+ function SolidComputedField(fieldContext) {
27
+ Object.defineProperty(this, "fieldContext", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: void 0
32
+ });
33
+ this.fieldContext = fieldContext;
34
+ }
35
+ Object.defineProperty(SolidComputedField.prototype, "updateFormData", {
36
+ enumerable: false,
37
+ configurable: true,
38
+ writable: true,
39
+ value: function (_value, _formData) {
40
+ // Computed fields are never submitted — the server calculates them.
41
+ }
42
+ });
43
+ Object.defineProperty(SolidComputedField.prototype, "initialValue", {
44
+ enumerable: false,
45
+ configurable: true,
46
+ writable: true,
47
+ value: function () {
48
+ var _a;
49
+ var fieldName = this.fieldContext.field.attrs.name;
50
+ var existingValue = (_a = this.fieldContext.data) === null || _a === void 0 ? void 0 : _a[fieldName];
51
+ return existingValue !== undefined && existingValue !== null ? existingValue : '';
52
+ }
53
+ });
54
+ Object.defineProperty(SolidComputedField.prototype, "validationSchema", {
55
+ enumerable: false,
56
+ configurable: true,
57
+ writable: true,
58
+ value: function () {
59
+ // Computed fields are always optional; they are never set by the user.
60
+ return Yup.mixed().nullable();
61
+ }
62
+ });
63
+ Object.defineProperty(SolidComputedField.prototype, "render", {
64
+ enumerable: false,
65
+ configurable: true,
66
+ writable: true,
67
+ value: function (formik) {
68
+ var _a, _b;
69
+ var fieldLayoutInfo = this.fieldContext.field;
70
+ var className = ((_a = fieldLayoutInfo.attrs) === null || _a === void 0 ? void 0 : _a.className) || 'field col-12';
71
+ // Computed fields are only relevant for existing records.
72
+ // Check by whether the underlying data has an `id` (record exists).
73
+ var recordExists = !!((_b = this.fieldContext.data) === null || _b === void 0 ? void 0 : _b.id);
74
+ if (!recordExists) {
75
+ return null;
76
+ }
77
+ var viewWidget = fieldLayoutInfo.attrs.viewWidget;
78
+ var editWidget = fieldLayoutInfo.attrs.editWidget;
79
+ if (!editWidget) {
80
+ editWidget = 'DefaultComputedFormWidget';
81
+ }
82
+ if (!viewWidget) {
83
+ viewWidget = 'DefaultComputedFormWidget';
84
+ }
85
+ var viewMode = this.fieldContext.viewMode;
86
+ return (_jsx(_Fragment, { children: _jsxs("div", { className: className, children: [viewMode === "view" &&
87
+ this.renderExtensionRenderMode(viewWidget, formik), viewMode === "edit" &&
88
+ this.renderExtensionRenderMode(editWidget, formik)] }) }));
89
+ }
90
+ });
91
+ Object.defineProperty(SolidComputedField.prototype, "renderExtensionRenderMode", {
92
+ enumerable: false,
93
+ configurable: true,
94
+ writable: true,
95
+ value: function (widget, formik) {
96
+ var DynamicWidget = getExtensionComponent(widget);
97
+ var widgetProps = {
98
+ formik: formik,
99
+ fieldContext: this.fieldContext,
100
+ };
101
+ return (_jsx(_Fragment, { children: DynamicWidget && _jsx(DynamicWidget, __assign({}, widgetProps)) }));
102
+ }
103
+ });
104
+ return SolidComputedField;
105
+ }());
106
+ export { SolidComputedField };
107
+ /**
108
+ * Default widget for computed fields — renders as a read-only input in edit mode.
109
+ * Uses the same layout as the short-text view widget for consistency.
110
+ */
111
+ export var DefaultComputedFormWidget = function (_a) {
112
+ var _b, _c;
113
+ var formik = _a.formik, fieldContext = _a.fieldContext;
114
+ var fieldMetadata = fieldContext.fieldMetadata;
115
+ var fieldLayoutInfo = fieldContext.field;
116
+ var fieldLabel = (_b = fieldLayoutInfo.attrs.label) !== null && _b !== void 0 ? _b : fieldMetadata === null || fieldMetadata === void 0 ? void 0 : fieldMetadata.displayName;
117
+ var showFieldLabel = (_c = fieldLayoutInfo === null || fieldLayoutInfo === void 0 ? void 0 : fieldLayoutInfo.attrs) === null || _c === void 0 ? void 0 : _c.showLabel;
118
+ var viewMode = fieldContext.viewMode;
119
+ var value = formik.values[fieldLayoutInfo.attrs.name];
120
+ if (viewMode === 'view') {
121
+ // View mode: display as plain text (same as DefaultShortTextFormViewWidget)
122
+ return (_jsxs("div", { className: styles.fieldViewWrapper, children: [showFieldLabel !== false && (_jsx("p", { className: "".concat(styles.fieldViewLabel, " form-field-label"), children: fieldLabel })), _jsx("p", { className: styles.fieldViewValue, children: value && typeof value === 'string' ? value : '' })] }));
123
+ }
124
+ // Edit mode: read-only input to make it clear this is a server-computed value
125
+ return (_jsxs("div", { className: styles.fieldWrapper, children: [showFieldLabel != false &&
126
+ _jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldLabel, " form-field-label"), children: [fieldLabel, _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), _jsx(SolidInput, { type: "text", id: fieldLayoutInfo.attrs.name, name: fieldLayoutInfo.attrs.name, value: value || '', readOnly: true, disabled: true, className: styles.fieldInput })] }));
127
+ };
128
+ //# sourceMappingURL=SolidComputedField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidComputedField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidComputedField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,MAAM,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;GAMG;AACH;IAII,4BAAY,YAA6B;QAFjC;;;;;WAA8B;QAGlC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;;;;;eAED,UAAe,MAAW,EAAE,SAAmB;YAC3C,oEAAoE;QACxE,CAAC;;;;;;eAED;;YACI,IAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YACrD,IAAM,aAAa,GAAG,MAAA,IAAI,CAAC,YAAY,CAAC,IAAI,0CAAG,SAAS,CAAC,CAAC;YAC1D,OAAO,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,CAAC;;;;;;eAED;YACI,uEAAuE;YACvE,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC;;;;;;eAED,UAAO,MAAoB;;YACvB,IAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAChD,IAAM,SAAS,GAAG,CAAA,MAAA,eAAe,CAAC,KAAK,0CAAE,SAAS,KAAI,cAAc,CAAC;YAErE,0DAA0D;YAC1D,oEAAoE;YACpE,IAAM,YAAY,GAAG,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,YAAY,CAAC,IAAI,0CAAE,EAAE,CAAA,CAAC;YAClD,IAAI,CAAC,YAAY,EAAE;gBACf,OAAO,IAAI,CAAC;aACf;YAED,IAAI,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;YAClD,IAAI,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;YAClD,IAAI,CAAC,UAAU,EAAE;gBACb,UAAU,GAAG,2BAA2B,CAAC;aAC5C;YACD,IAAI,CAAC,UAAU,EAAE;gBACb,UAAU,GAAG,2BAA2B,CAAC;aAC5C;YAED,IAAM,QAAQ,GAAW,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAEpD,OAAO,CACH,4BACI,eAAK,SAAS,EAAE,SAAS,aACpB,QAAQ,KAAK,MAAM;4BAChB,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,MAAM,CAAC,EAErD,QAAQ,KAAK,MAAM;4BAChB,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,MAAM,CAAC,IAEpD,GACP,CACN,CAAC;QACN,CAAC;;;;;;eAED,UAA0B,MAAc,EAAE,MAAoB;YAC1D,IAAI,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAClD,IAAM,WAAW,GAA8B;gBAC3C,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,IAAI,CAAC,YAAY;aAClC,CAAA;YACD,OAAO,CACH,4BACK,aAAa,IAAI,KAAC,aAAa,eAAK,WAAW,EAAI,GACrD,CACN,CAAA;QACL,CAAC;;IACL,yBAAC;AAAD,CAAC,AAvED,IAuEC;;AAED;;;GAGG;AACH,MAAM,CAAC,IAAM,yBAAyB,GAAG,UAAC,EAAmD;;QAAjD,MAAM,YAAA,EAAE,YAAY,kBAAA;IAC5D,IAAM,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC;IACjD,IAAM,eAAe,GAAG,YAAY,CAAC,KAAK,CAAC;IAC3C,IAAM,UAAU,GAAG,MAAA,eAAe,CAAC,KAAK,CAAC,KAAK,mCAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,CAAC;IAC7E,IAAM,cAAc,GAAG,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,KAAK,0CAAE,SAAS,CAAC;IACzD,IAAM,QAAQ,GAAW,YAAY,CAAC,QAAQ,CAAC;IAC/C,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAExD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACrB,4EAA4E;QAC5E,OAAO,CACH,eAAK,SAAS,EAAE,MAAM,CAAC,gBAAgB,aAClC,cAAc,KAAK,KAAK,IAAI,CACzB,YAAG,SAAS,EAAE,UAAG,MAAM,CAAC,cAAc,sBAAmB,YAAG,UAAU,GAAK,CAC9E,EACD,YAAG,SAAS,EAAE,MAAM,CAAC,cAAc,YAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAK,IACxF,CACT,CAAC;KACL;IAED,8EAA8E;IAC9E,OAAO,CACH,eAAK,SAAS,EAAE,MAAM,CAAC,YAAY,aAC9B,cAAc,IAAI,KAAK;gBACpB,iBAAO,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,UAAG,MAAM,CAAC,UAAU,sBAAmB,aACzF,UAAU,EACX,KAAC,iBAAiB,IAAC,YAAY,EAAE,YAAY,GAAI,IAC7C,EAEZ,KAAC,UAAU,IACP,IAAI,EAAC,MAAM,EACX,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,EAC9B,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,EAChC,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,QAAQ,QACR,QAAQ,QACR,SAAS,EAAE,MAAM,CAAC,UAAU,GAC9B,IACA,CACT,CAAC;AACN,CAAC,CAAC","sourcesContent":["\nimport * as Yup from 'yup';\nimport styles from './solidFields.module.css';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { SolidInput } from \"../../../shad-cn-ui\";\n\n/**\n * SolidComputedField\n *\n * Computed fields are server-generated values (e.g. auto-calculated totals, slugs, codes).\n * They are always read-only in the UI and are only shown when a record already exists\n * (i.e., the form is in view or edit mode for an existing record, NOT during creation).\n */\nexport class SolidComputedField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n\n constructor(fieldContext: SolidFieldProps) {\n this.fieldContext = fieldContext;\n }\n\n updateFormData(_value: any, _formData: FormData): any {\n // Computed fields are never submitted — the server calculates them.\n }\n\n initialValue(): any {\n const fieldName = this.fieldContext.field.attrs.name;\n const existingValue = this.fieldContext.data?.[fieldName];\n return existingValue !== undefined && existingValue !== null ? existingValue : '';\n }\n\n validationSchema(): Yup.Schema {\n // Computed fields are always optional; they are never set by the user.\n return Yup.mixed().nullable();\n }\n\n render(formik: FormikObject) {\n const fieldLayoutInfo = this.fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field col-12';\n\n // Computed fields are only relevant for existing records.\n // Check by whether the underlying data has an `id` (record exists).\n const recordExists = !!this.fieldContext.data?.id;\n if (!recordExists) {\n return null;\n }\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultComputedFormWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultComputedFormWidget';\n }\n\n const viewMode: string = this.fieldContext.viewMode;\n\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </div>\n </>\n );\n }\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n/**\n * Default widget for computed fields — renders as a read-only input in edit mode.\n * Uses the same layout as the short-text view widget for consistency.\n */\nexport const DefaultComputedFormWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata?.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const viewMode: string = fieldContext.viewMode;\n const value = formik.values[fieldLayoutInfo.attrs.name];\n\n if (viewMode === 'view') {\n // View mode: display as plain text (same as DefaultShortTextFormViewWidget)\n return (\n <div className={styles.fieldViewWrapper}>\n {showFieldLabel !== false && (\n <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>\n )}\n <p className={styles.fieldViewValue}>{value && typeof value === 'string' ? value : ''}</p>\n </div>\n );\n }\n\n // Edit mode: read-only input to make it clear this is a server-computed value\n return (\n <div className={styles.fieldWrapper}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>\n {fieldLabel}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n <SolidInput\n type=\"text\"\n id={fieldLayoutInfo.attrs.name}\n name={fieldLayoutInfo.attrs.name}\n value={value || ''}\n readOnly\n disabled\n className={styles.fieldInput}\n />\n </div>\n );\n};\n"]}
@@ -0,0 +1,134 @@
1
+
2
+ import * as Yup from 'yup';
3
+ import styles from './solidFields.module.css';
4
+ import { FormikObject, ISolidField, SolidFieldProps } from "./ISolidField";
5
+ import { getExtensionComponent } from "../../../../helpers/registry";
6
+ import { SolidFormFieldWidgetProps } from "../../../../types/solid-core";
7
+ import { SolidFieldTooltip } from "../../../../components/common/SolidFieldTooltip";
8
+ import { SolidInput } from "../../../shad-cn-ui";
9
+
10
+ /**
11
+ * SolidComputedField
12
+ *
13
+ * Computed fields are server-generated values (e.g. auto-calculated totals, slugs, codes).
14
+ * They are always read-only in the UI and are only shown when a record already exists
15
+ * (i.e., the form is in view or edit mode for an existing record, NOT during creation).
16
+ */
17
+ export class SolidComputedField implements ISolidField {
18
+
19
+ private fieldContext: SolidFieldProps;
20
+
21
+ constructor(fieldContext: SolidFieldProps) {
22
+ this.fieldContext = fieldContext;
23
+ }
24
+
25
+ updateFormData(_value: any, _formData: FormData): any {
26
+ // Computed fields are never submitted — the server calculates them.
27
+ }
28
+
29
+ initialValue(): any {
30
+ const fieldName = this.fieldContext.field.attrs.name;
31
+ const existingValue = this.fieldContext.data?.[fieldName];
32
+ return existingValue !== undefined && existingValue !== null ? existingValue : '';
33
+ }
34
+
35
+ validationSchema(): Yup.Schema {
36
+ // Computed fields are always optional; they are never set by the user.
37
+ return Yup.mixed().nullable();
38
+ }
39
+
40
+ render(formik: FormikObject) {
41
+ const fieldLayoutInfo = this.fieldContext.field;
42
+ const className = fieldLayoutInfo.attrs?.className || 'field col-12';
43
+
44
+ // Computed fields are only relevant for existing records.
45
+ // Check by whether the underlying data has an `id` (record exists).
46
+ const recordExists = !!this.fieldContext.data?.id;
47
+ if (!recordExists) {
48
+ return null;
49
+ }
50
+
51
+ let viewWidget = fieldLayoutInfo.attrs.viewWidget;
52
+ let editWidget = fieldLayoutInfo.attrs.editWidget;
53
+ if (!editWidget) {
54
+ editWidget = 'DefaultComputedFormWidget';
55
+ }
56
+ if (!viewWidget) {
57
+ viewWidget = 'DefaultComputedFormWidget';
58
+ }
59
+
60
+ const viewMode: string = this.fieldContext.viewMode;
61
+
62
+ return (
63
+ <>
64
+ <div className={className}>
65
+ {viewMode === "view" &&
66
+ this.renderExtensionRenderMode(viewWidget, formik)
67
+ }
68
+ {viewMode === "edit" &&
69
+ this.renderExtensionRenderMode(editWidget, formik)
70
+ }
71
+ </div>
72
+ </>
73
+ );
74
+ }
75
+
76
+ renderExtensionRenderMode(widget: string, formik: FormikObject) {
77
+ let DynamicWidget = getExtensionComponent(widget);
78
+ const widgetProps: SolidFormFieldWidgetProps = {
79
+ formik: formik,
80
+ fieldContext: this.fieldContext,
81
+ }
82
+ return (
83
+ <>
84
+ {DynamicWidget && <DynamicWidget {...widgetProps} />}
85
+ </>
86
+ )
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Default widget for computed fields — renders as a read-only input in edit mode.
92
+ * Uses the same layout as the short-text view widget for consistency.
93
+ */
94
+ export const DefaultComputedFormWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {
95
+ const fieldMetadata = fieldContext.fieldMetadata;
96
+ const fieldLayoutInfo = fieldContext.field;
97
+ const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata?.displayName;
98
+ const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
99
+ const viewMode: string = fieldContext.viewMode;
100
+ const value = formik.values[fieldLayoutInfo.attrs.name];
101
+
102
+ if (viewMode === 'view') {
103
+ // View mode: display as plain text (same as DefaultShortTextFormViewWidget)
104
+ return (
105
+ <div className={styles.fieldViewWrapper}>
106
+ {showFieldLabel !== false && (
107
+ <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>
108
+ )}
109
+ <p className={styles.fieldViewValue}>{value && typeof value === 'string' ? value : ''}</p>
110
+ </div>
111
+ );
112
+ }
113
+
114
+ // Edit mode: read-only input to make it clear this is a server-computed value
115
+ return (
116
+ <div className={styles.fieldWrapper}>
117
+ {showFieldLabel != false &&
118
+ <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>
119
+ {fieldLabel}
120
+ <SolidFieldTooltip fieldContext={fieldContext} />
121
+ </label>
122
+ }
123
+ <SolidInput
124
+ type="text"
125
+ id={fieldLayoutInfo.attrs.name}
126
+ name={fieldLayoutInfo.attrs.name}
127
+ value={value || ''}
128
+ readOnly
129
+ disabled
130
+ className={styles.fieldInput}
131
+ />
132
+ </div>
133
+ );
134
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"SolidSelectionDynamicField.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidSelectionDynamicField.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AASzE,qBAAa,0BAA2B,YAAW,WAAW;IAE1D,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,YAAY,IAAI,GAAG;IAoDnB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG;IAwBnD,gBAAgB,IAAI,GAAG,CAAC,MAAM;IAkC9B,MAAM,CAAC,MAAM,EAAE,YAAY;IAmC3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;CAYjE;AAKD,eAAO,MAAM,qCAAqC,6BAA8B,yBAAyB,4CAuGxG,CAAA;AAGD,eAAO,MAAM,qCAAqC,6BAA8B,yBAAyB,4CA+CxG,CAAA"}
1
+ {"version":3,"file":"SolidSelectionDynamicField.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidSelectionDynamicField.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AASzE,qBAAa,0BAA2B,YAAW,WAAW;IAE1D,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,YAAY,IAAI,GAAG;IAoDnB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG;IAwBnD,gBAAgB,IAAI,GAAG,CAAC,MAAM;IA2C9B,MAAM,CAAC,MAAM,EAAE,YAAY;IAmC3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;CAYjE;AAKD,eAAO,MAAM,qCAAqC,6BAA8B,yBAAyB,4CAuGxG,CAAA;AAGD,eAAO,MAAM,qCAAqC,6BAA8B,yBAAyB,4CA+CxG,CAAA"}
@@ -182,14 +182,22 @@ var SolidSelectionDynamicField = /** @class */ (function () {
182
182
  // return schema;
183
183
  var isMultiSelect = (_b = fieldLayoutInfo.attrs.multiSelect) !== null && _b !== void 0 ? _b : fieldMetadata === null || fieldMetadata === void 0 ? void 0 : fieldMetadata.isMultiSelect;
184
184
  var isRequired = (_d = (_c = fieldLayoutInfo.attrs) === null || _c === void 0 ? void 0 : _c.required) !== null && _d !== void 0 ? _d : fieldMetadata.required;
185
- if (!isRequired) {
186
- return Yup.mixed();
187
- }
188
185
  if (isMultiSelect) {
186
+ if (!isRequired) {
187
+ return Yup.array()
188
+ .of(Yup.object().shape({ label: Yup.string(), value: Yup.string() }))
189
+ .nullable();
190
+ }
189
191
  return Yup.array()
190
192
  .min(1, ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel))
191
193
  .of(Yup.object().shape({ label: Yup.string(), value: Yup.string() }));
192
194
  }
195
+ if (!isRequired) {
196
+ return Yup.object().shape({
197
+ label: Yup.string(),
198
+ value: Yup.string(),
199
+ }).nullable();
200
+ }
193
201
  return Yup.object().shape({
194
202
  label: Yup.string(),
195
203
  value: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel)),
@@ -1 +1 @@
1
- {"version":3,"file":"SolidSelectionDynamicField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidSelectionDynamicField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { useLazyGetSelectionDynamicValuesQuery } from \"../../../../redux/api/fieldApi\";\nimport { SolidAutocomplete } from \"../../../shad-cn-ui/SolidAutocomplete\";\nimport { buildSyntheticChangeEvent } from \"./fieldEventUtils\";\nimport qs from \"qs\";\nimport { useState } from \"react\";\nimport * as Yup from 'yup';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { formikValuestoQueryString } from \"../../../../helpers/helpers\";\nimport { ERROR_MESSAGES } from \"../../../../constants/error-messages\";\nimport styles from \"./solidFields.module.css\";\n\ntype AutoCompleteCompleteEvent = { query: string };\n\n\nexport class SolidSelectionDynamicField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n\n constructor(fieldContext: SolidFieldProps) {\n this.fieldContext = fieldContext;\n }\n\n initialValue(): any {\n // TODO: Use the field metadata to re-create the object in the valid format \n // {label: '', value: ''}\n const fieldLayoutInfo = this.fieldContext.field;\n const optionValue = this.fieldContext.data[fieldLayoutInfo.attrs.name];\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n // isMultiSelect: fieldMetaData ? fieldMetaData?.isMultiSelect : false,\n\n // return { label: optionValue || '', value: optionValue || '' };\n const stripBracketsAndQuotes = (str: string) =>\n str.replace(/^\\[?\"?/, '').replace(/\"?\\]?$/, '').trim();\n\n const cleanValue = (val: any) => {\n if (typeof val === 'string') {\n const cleaned = stripBracketsAndQuotes(val);\n return { label: cleaned, value: cleaned };\n } else if (val && typeof val === 'object') {\n const label = stripBracketsAndQuotes(String(val.label ?? val));\n const value = stripBracketsAndQuotes(String(val.value ?? val));\n return { label, value };\n } else {\n const strVal = stripBracketsAndQuotes(String(val));\n return { label: strVal, value: strVal };\n }\n };\n\n if (optionValue === '' || optionValue === null || optionValue === undefined || (Array.isArray(optionValue) && optionValue.length === 0)) {\n return null;\n }\n\n if (isMultiSelect) {\n if (Array.isArray(optionValue)) {\n return optionValue.map(cleanValue);\n } else if (typeof optionValue === 'string') {\n try {\n const parsed = JSON.parse(optionValue); // try to parse as JSON array\n if (Array.isArray(parsed)) {\n return parsed.map(cleanValue);\n }\n } catch {\n // fallback to comma-split only if not valid JSON\n const splitValues = optionValue.split(',').map(v => v.trim()).filter(Boolean);\n return splitValues.map(cleanValue);\n }\n }\n return [];\n } else {\n return cleanValue(optionValue || '');\n }\n }\n\n updateFormData(value: any, formData: FormData): any {\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n const stripQuotes = (str: string) => str.replace(/^\"+|\"+$/g, '').replace(/^'+|'+$/g, '');\n\n if (value) {\n if (isMultiSelect) {\n const selectedValues = value.map((v: any) => {\n const cleanedValue = stripQuotes(v.value); // still fine\n return cleanedValue;\n });\n const jsonString = JSON.stringify(selectedValues); // ✅ Proper JSON array\n formData.append(fieldLayoutInfo.attrs.name, jsonString);\n } else {\n const cleanedValue = stripQuotes(value.value);\n formData.append(fieldLayoutInfo.attrs.name, cleanedValue);\n }\n }\n // if (value) {\n // formData.append(fieldLayoutInfo.attrs.name, value.value);\n // }\n }\n\n validationSchema(): Yup.Schema {\n let schema = Yup.object();\n\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n\n // 1. required \n // if (fieldMetadata.required) {\n // schema = schema.required(`${fieldLabel} is required.`);\n // }\n\n // return schema;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n\n const isRequired = fieldLayoutInfo.attrs?.required ?? fieldMetadata.required;\n \n if (!isRequired) {\n return Yup.mixed();\n }\n\n if (isMultiSelect) {\n return Yup.array()\n .min(1, ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel))\n .of(Yup.object().shape({ label: Yup.string(), value: Yup.string() }));\n }\n\n return Yup.object().shape({\n label: Yup.string(),\n value: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel)),\n });\n }\n\n render(formik: FormikObject) {\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field col-12';\n\n // const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n const isFormFieldValid = (formik: any, fieldName: string) => formik.errors[fieldName];\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultSelectionDynamicFormEditWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultSelectionDynamicFormViewWidget';\n }\n const viewMode: string = this.fieldContext.viewMode;\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n <>\n {editWidget &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </>\n }\n </div>\n </>\n );\n }\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n\n\n\nexport const DefaultSelectionDynamicFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field col-12';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const readOnlyPermission = fieldContext.readOnly;\n\n const fieldDisabled = fieldLayoutInfo.attrs?.disabled;\n const fieldReadonly = fieldLayoutInfo.attrs?.readonly;\n\n const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;\n const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;\n const whereClause = fieldLayoutInfo.attrs.whereClause;\n\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n // selection dynamic specific code. \n const [triggerGetSelectionDynamicValues] = useLazyGetSelectionDynamicValuesQuery();\n const [selectionDynamicItems, setSelectionDynamicItems] = useState([]);\n const isFormFieldValid = (formik: any, fieldName: string) =>\n (formik.touched[fieldName] || formik.submitCount > 0) && !!formik.errors[fieldName];\n\n const isRequired = fieldLayoutInfo.attrs?.required ?? fieldMetadata.required;\n\n const selectionDynamicSearch = async (event: AutoCompleteCompleteEvent) => {\n try {\n // const query = event.query ?? \"\";\n const queryData = {\n offset: 0,\n limit: 10,\n query: event.query,\n fieldId: fieldMetadata.id,\n formValues: formikValuestoQueryString(formik.values),\n };\n if (whereClause) {\n queryData.query = whereClause;\n }\n let sdQs = qs.stringify(queryData, {\n encodeValuesOnly: true,\n // encoder: (str, defaultEncoder, charset, type) => {\n // if (type === 'key' || type === 'value') {\n // if (str === queryData.query) return str;\n // }\n // return defaultEncoder(str);\n // }\n });\n // TODO: do error handling here, possible errors like modelname is incorrect etc...\n const sdResponse = await triggerGetSelectionDynamicValues(sdQs).unwrap();\n const items = Array.isArray(sdResponse?.data) ? sdResponse.data : [];\n\n // TODO: if no data found then can we show no matching \"entities\", where entities can be replaced with the model plural name,\n // const sdData = sdResponse.data.data;\n\n // @ts-ignore\n setSelectionDynamicItems([...items]);\n } catch (err) {\n setSelectionDynamicItems([]);\n }\n }\n\n\n return (\n <div className={`${styles.fieldWrapper} ${isFormFieldValid(formik, fieldLayoutInfo.attrs.name) ? styles.fieldInvalid : \"\"}`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>\n {fieldLabel}\n {isRequired && <span className=\"text-red-500\"> *</span>}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n <SolidAutocomplete\n multiple={isMultiSelect}\n field=\"label\"\n className={`solid-standard-autocomplete ${isFormFieldValid(formik, fieldLayoutInfo.attrs.name) ? styles.fieldInvalidControl : \"\"}`}\n value={formik.values[fieldLayoutInfo.attrs.name] || (isMultiSelect ? [] : null)}\n dropdown\n suggestions={selectionDynamicItems}\n completeMethod={(e) => selectionDynamicSearch(e)}\n emptyMessage=\"No records found\"\n onChange={({ value }) => {\n if (formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled) return;\n const syntheticEvent = buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, \"text\");\n // console.log(`SolidSelectionDynamicField > SolidAutocomplete > onChange`, syntheticEvent);\n fieldContext.onChange(syntheticEvent, \"onFieldChange\");\n }}\n // onSelect={({ value }) => {\n // const syntheticEvent = buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, \"text\");\n // console.log(`SolidSelectionDynamicField > SolidAutocomplete > onSelect`, syntheticEvent);\n // fieldContext.onChange(syntheticEvent, \"onFieldChange\");\n // }}\n />\n {isFormFieldValid(formik, fieldLayoutInfo.attrs.name) && (\n <p className={styles.fieldError}>\n {typeof formik.errors[fieldLayoutInfo?.attrs?.name] === 'object'\n ? formik.errors[fieldLayoutInfo?.attrs?.name]?.value?.toString()\n : formik.errors[fieldLayoutInfo?.attrs?.name]?.toString()}\n </p>\n )}\n </div>\n );\n}\n\n\nexport const DefaultSelectionDynamicFormViewWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const value = formik.values[fieldLayoutInfo.attrs.name];\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n const toLabel = (val: any) => {\n if (!val) return '';\n if (typeof val === 'string' || typeof val === 'number') return String(val);\n if (typeof val === 'object') return val.label ?? val.value ?? '';\n return '';\n };\n\n let values: string[] = [];\n if (isMultiSelect) {\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n values = parsed.map(toLabel);\n }\n } catch {\n values = value.split(',').map(v => v.trim()).map(toLabel);\n }\n } else if (Array.isArray(value)) {\n values = value.map(toLabel);\n }\n }\n\n return (\n <div className={styles.fieldViewWrapper}>\n {showFieldLabel !== false && (\n <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>\n )}\n <p className={styles.fieldViewValue}>\n {isMultiSelect\n ? (values.length > 0 ? values.join(', ') : 'No selection')\n : (() => {\n const single = toLabel(value);\n return single ? single : 'No selection';\n })()}\n </p>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"SolidSelectionDynamicField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidSelectionDynamicField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { useLazyGetSelectionDynamicValuesQuery } from \"../../../../redux/api/fieldApi\";\nimport { SolidAutocomplete } from \"../../../shad-cn-ui/SolidAutocomplete\";\nimport { buildSyntheticChangeEvent } from \"./fieldEventUtils\";\nimport qs from \"qs\";\nimport { useState } from \"react\";\nimport * as Yup from 'yup';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { formikValuestoQueryString } from \"../../../../helpers/helpers\";\nimport { ERROR_MESSAGES } from \"../../../../constants/error-messages\";\nimport styles from \"./solidFields.module.css\";\n\ntype AutoCompleteCompleteEvent = { query: string };\n\n\nexport class SolidSelectionDynamicField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n\n constructor(fieldContext: SolidFieldProps) {\n this.fieldContext = fieldContext;\n }\n\n initialValue(): any {\n // TODO: Use the field metadata to re-create the object in the valid format \n // {label: '', value: ''}\n const fieldLayoutInfo = this.fieldContext.field;\n const optionValue = this.fieldContext.data[fieldLayoutInfo.attrs.name];\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n // isMultiSelect: fieldMetaData ? fieldMetaData?.isMultiSelect : false,\n\n // return { label: optionValue || '', value: optionValue || '' };\n const stripBracketsAndQuotes = (str: string) =>\n str.replace(/^\\[?\"?/, '').replace(/\"?\\]?$/, '').trim();\n\n const cleanValue = (val: any) => {\n if (typeof val === 'string') {\n const cleaned = stripBracketsAndQuotes(val);\n return { label: cleaned, value: cleaned };\n } else if (val && typeof val === 'object') {\n const label = stripBracketsAndQuotes(String(val.label ?? val));\n const value = stripBracketsAndQuotes(String(val.value ?? val));\n return { label, value };\n } else {\n const strVal = stripBracketsAndQuotes(String(val));\n return { label: strVal, value: strVal };\n }\n };\n\n if (optionValue === '' || optionValue === null || optionValue === undefined || (Array.isArray(optionValue) && optionValue.length === 0)) {\n return null;\n }\n\n if (isMultiSelect) {\n if (Array.isArray(optionValue)) {\n return optionValue.map(cleanValue);\n } else if (typeof optionValue === 'string') {\n try {\n const parsed = JSON.parse(optionValue); // try to parse as JSON array\n if (Array.isArray(parsed)) {\n return parsed.map(cleanValue);\n }\n } catch {\n // fallback to comma-split only if not valid JSON\n const splitValues = optionValue.split(',').map(v => v.trim()).filter(Boolean);\n return splitValues.map(cleanValue);\n }\n }\n return [];\n } else {\n return cleanValue(optionValue || '');\n }\n }\n\n updateFormData(value: any, formData: FormData): any {\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n const stripQuotes = (str: string) => str.replace(/^\"+|\"+$/g, '').replace(/^'+|'+$/g, '');\n\n if (value) {\n if (isMultiSelect) {\n const selectedValues = value.map((v: any) => {\n const cleanedValue = stripQuotes(v.value); // still fine\n return cleanedValue;\n });\n const jsonString = JSON.stringify(selectedValues); // ✅ Proper JSON array\n formData.append(fieldLayoutInfo.attrs.name, jsonString);\n } else {\n const cleanedValue = stripQuotes(value.value);\n formData.append(fieldLayoutInfo.attrs.name, cleanedValue);\n }\n }\n // if (value) {\n // formData.append(fieldLayoutInfo.attrs.name, value.value);\n // }\n }\n\n validationSchema(): Yup.Schema {\n let schema = Yup.object();\n\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n\n // 1. required \n // if (fieldMetadata.required) {\n // schema = schema.required(`${fieldLabel} is required.`);\n // }\n\n // return schema;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n\n const isRequired = fieldLayoutInfo.attrs?.required ?? fieldMetadata.required;\n \n if (isMultiSelect) {\n if (!isRequired) {\n return Yup.array()\n .of(Yup.object().shape({ label: Yup.string(), value: Yup.string() }))\n .nullable();\n }\n\n return Yup.array()\n .min(1, ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel))\n .of(Yup.object().shape({ label: Yup.string(), value: Yup.string() }));\n }\n\n if (!isRequired) {\n return Yup.object().shape({\n label: Yup.string(),\n value: Yup.string(),\n }).nullable();\n }\n\n return Yup.object().shape({\n label: Yup.string(),\n value: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel)),\n });\n }\n\n render(formik: FormikObject) {\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field col-12';\n\n // const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n const isFormFieldValid = (formik: any, fieldName: string) => formik.errors[fieldName];\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultSelectionDynamicFormEditWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultSelectionDynamicFormViewWidget';\n }\n const viewMode: string = this.fieldContext.viewMode;\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n <>\n {editWidget &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </>\n }\n </div>\n </>\n );\n }\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n\n\n\nexport const DefaultSelectionDynamicFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field col-12';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const readOnlyPermission = fieldContext.readOnly;\n\n const fieldDisabled = fieldLayoutInfo.attrs?.disabled;\n const fieldReadonly = fieldLayoutInfo.attrs?.readonly;\n\n const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;\n const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;\n const whereClause = fieldLayoutInfo.attrs.whereClause;\n\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n // selection dynamic specific code. \n const [triggerGetSelectionDynamicValues] = useLazyGetSelectionDynamicValuesQuery();\n const [selectionDynamicItems, setSelectionDynamicItems] = useState([]);\n const isFormFieldValid = (formik: any, fieldName: string) =>\n (formik.touched[fieldName] || formik.submitCount > 0) && !!formik.errors[fieldName];\n\n const isRequired = fieldLayoutInfo.attrs?.required ?? fieldMetadata.required;\n\n const selectionDynamicSearch = async (event: AutoCompleteCompleteEvent) => {\n try {\n // const query = event.query ?? \"\";\n const queryData = {\n offset: 0,\n limit: 10,\n query: event.query,\n fieldId: fieldMetadata.id,\n formValues: formikValuestoQueryString(formik.values),\n };\n if (whereClause) {\n queryData.query = whereClause;\n }\n let sdQs = qs.stringify(queryData, {\n encodeValuesOnly: true,\n // encoder: (str, defaultEncoder, charset, type) => {\n // if (type === 'key' || type === 'value') {\n // if (str === queryData.query) return str;\n // }\n // return defaultEncoder(str);\n // }\n });\n // TODO: do error handling here, possible errors like modelname is incorrect etc...\n const sdResponse = await triggerGetSelectionDynamicValues(sdQs).unwrap();\n const items = Array.isArray(sdResponse?.data) ? sdResponse.data : [];\n\n // TODO: if no data found then can we show no matching \"entities\", where entities can be replaced with the model plural name,\n // const sdData = sdResponse.data.data;\n\n // @ts-ignore\n setSelectionDynamicItems([...items]);\n } catch (err) {\n setSelectionDynamicItems([]);\n }\n }\n\n\n return (\n <div className={`${styles.fieldWrapper} ${isFormFieldValid(formik, fieldLayoutInfo.attrs.name) ? styles.fieldInvalid : \"\"}`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>\n {fieldLabel}\n {isRequired && <span className=\"text-red-500\"> *</span>}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n <SolidAutocomplete\n multiple={isMultiSelect}\n field=\"label\"\n className={`solid-standard-autocomplete ${isFormFieldValid(formik, fieldLayoutInfo.attrs.name) ? styles.fieldInvalidControl : \"\"}`}\n value={formik.values[fieldLayoutInfo.attrs.name] || (isMultiSelect ? [] : null)}\n dropdown\n suggestions={selectionDynamicItems}\n completeMethod={(e) => selectionDynamicSearch(e)}\n emptyMessage=\"No records found\"\n onChange={({ value }) => {\n if (formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled) return;\n const syntheticEvent = buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, \"text\");\n // console.log(`SolidSelectionDynamicField > SolidAutocomplete > onChange`, syntheticEvent);\n fieldContext.onChange(syntheticEvent, \"onFieldChange\");\n }}\n // onSelect={({ value }) => {\n // const syntheticEvent = buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, \"text\");\n // console.log(`SolidSelectionDynamicField > SolidAutocomplete > onSelect`, syntheticEvent);\n // fieldContext.onChange(syntheticEvent, \"onFieldChange\");\n // }}\n />\n {isFormFieldValid(formik, fieldLayoutInfo.attrs.name) && (\n <p className={styles.fieldError}>\n {typeof formik.errors[fieldLayoutInfo?.attrs?.name] === 'object'\n ? formik.errors[fieldLayoutInfo?.attrs?.name]?.value?.toString()\n : formik.errors[fieldLayoutInfo?.attrs?.name]?.toString()}\n </p>\n )}\n </div>\n );\n}\n\n\nexport const DefaultSelectionDynamicFormViewWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const value = formik.values[fieldLayoutInfo.attrs.name];\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n const toLabel = (val: any) => {\n if (!val) return '';\n if (typeof val === 'string' || typeof val === 'number') return String(val);\n if (typeof val === 'object') return val.label ?? val.value ?? '';\n return '';\n };\n\n let values: string[] = [];\n if (isMultiSelect) {\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n values = parsed.map(toLabel);\n }\n } catch {\n values = value.split(',').map(v => v.trim()).map(toLabel);\n }\n } else if (Array.isArray(value)) {\n values = value.map(toLabel);\n }\n }\n\n return (\n <div className={styles.fieldViewWrapper}>\n {showFieldLabel !== false && (\n <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>\n )}\n <p className={styles.fieldViewValue}>\n {isMultiSelect\n ? (values.length > 0 ? values.join(', ') : 'No selection')\n : (() => {\n const single = toLabel(value);\n return single ? single : 'No selection';\n })()}\n </p>\n </div>\n );\n}\n"]}