@solidxai/core-ui 0.1.5-beta.9 → 0.1.6

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 (296) hide show
  1. package/dist/components/auth/AuthTabs.d.ts +14 -0
  2. package/dist/components/auth/AuthTabs.d.ts.map +1 -0
  3. package/dist/components/auth/AuthTabs.js +19 -0
  4. package/dist/components/auth/AuthTabs.js.map +1 -0
  5. package/dist/components/auth/AuthTabs.tsx +38 -0
  6. package/dist/components/auth/GoogleAuthChecking.d.ts.map +1 -1
  7. package/dist/components/auth/GoogleAuthChecking.js +10 -10
  8. package/dist/components/auth/GoogleAuthChecking.js.map +1 -1
  9. package/dist/components/auth/GoogleAuthChecking.tsx +8 -9
  10. package/dist/components/auth/SolidChangeForcePassword.d.ts.map +1 -1
  11. package/dist/components/auth/SolidChangeForcePassword.js +9 -10
  12. package/dist/components/auth/SolidChangeForcePassword.js.map +1 -1
  13. package/dist/components/auth/SolidChangeForcePassword.tsx +6 -9
  14. package/dist/components/auth/SolidForgotPassword.d.ts.map +1 -1
  15. package/dist/components/auth/SolidForgotPassword.js +8 -8
  16. package/dist/components/auth/SolidForgotPassword.js.map +1 -1
  17. package/dist/components/auth/SolidForgotPassword.tsx +6 -8
  18. package/dist/components/auth/SolidInitialLoginOtp.d.ts.map +1 -1
  19. package/dist/components/auth/SolidInitialLoginOtp.js +57 -57
  20. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  21. package/dist/components/auth/SolidInitialLoginOtp.tsx +10 -11
  22. package/dist/components/auth/SolidInitiateRegisterOtp.d.ts.map +1 -1
  23. package/dist/components/auth/SolidInitiateRegisterOtp.js +57 -57
  24. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  25. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +10 -11
  26. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  27. package/dist/components/auth/SolidLogin.js +12 -12
  28. package/dist/components/auth/SolidLogin.js.map +1 -1
  29. package/dist/components/auth/SolidLogin.tsx +11 -16
  30. package/dist/components/auth/SolidRegister.d.ts.map +1 -1
  31. package/dist/components/auth/SolidRegister.js +19 -19
  32. package/dist/components/auth/SolidRegister.js.map +1 -1
  33. package/dist/components/auth/SolidRegister.tsx +18 -23
  34. package/dist/components/auth/SolidResetPassword.d.ts.map +1 -1
  35. package/dist/components/auth/SolidResetPassword.js +15 -15
  36. package/dist/components/auth/SolidResetPassword.js.map +1 -1
  37. package/dist/components/auth/SolidResetPassword.tsx +7 -8
  38. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  39. package/dist/components/common/GeneralSettings.js +87 -120
  40. package/dist/components/common/GeneralSettings.js.map +1 -1
  41. package/dist/components/common/GeneralSettings.tsx +12 -42
  42. package/dist/components/common/GlobalToast.d.ts +2 -0
  43. package/dist/components/common/GlobalToast.d.ts.map +1 -0
  44. package/dist/components/common/GlobalToast.js +25 -0
  45. package/dist/components/common/GlobalToast.js.map +1 -0
  46. package/dist/components/common/GlobalToast.tsx +25 -0
  47. package/dist/components/common/SolidErrorStatePage.d.ts +12 -0
  48. package/dist/components/common/SolidErrorStatePage.d.ts.map +1 -0
  49. package/dist/components/common/SolidErrorStatePage.js +16 -0
  50. package/dist/components/common/SolidErrorStatePage.js.map +1 -0
  51. package/dist/components/common/SolidErrorStatePage.tsx +55 -0
  52. package/dist/components/common/SolidExport.d.ts.map +1 -1
  53. package/dist/components/common/SolidExport.js +19 -31
  54. package/dist/components/common/SolidExport.js.map +1 -1
  55. package/dist/components/common/SolidExport.tsx +7 -19
  56. package/dist/components/common/SolidFormStepper.d.ts.map +1 -1
  57. package/dist/components/common/SolidFormStepper.js +41 -41
  58. package/dist/components/common/SolidFormStepper.js.map +1 -1
  59. package/dist/components/common/SolidFormStepper.tsx +5 -6
  60. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.d.ts.map +1 -1
  61. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js +9 -9
  62. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js.map +1 -1
  63. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.tsx +8 -9
  64. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
  65. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +8 -8
  66. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
  67. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +7 -9
  68. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.d.ts.map +1 -1
  69. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.js +11 -11
  70. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.js.map +1 -1
  71. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.tsx +10 -11
  72. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.d.ts.map +1 -1
  73. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.js +9 -9
  74. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.js.map +1 -1
  75. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.tsx +8 -9
  76. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.d.ts.map +1 -1
  77. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js +7 -7
  78. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js.map +1 -1
  79. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.tsx +6 -7
  80. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  81. package/dist/components/core/common/SolidGlobalSearchElement.js +78 -21
  82. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  83. package/dist/components/core/common/SolidGlobalSearchElement.tsx +65 -10
  84. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.d.ts.map +1 -1
  85. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +6 -8
  86. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
  87. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +5 -9
  88. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.d.ts.map +1 -1
  89. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js +9 -11
  90. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js.map +1 -1
  91. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx +5 -10
  92. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.d.ts.map +1 -1
  93. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.js +5 -6
  94. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.js.map +1 -1
  95. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.tsx +5 -8
  96. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.d.ts.map +1 -1
  97. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js +10 -12
  98. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js.map +1 -1
  99. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx +6 -11
  100. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.d.ts.map +1 -1
  101. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js +11 -6
  102. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js.map +1 -1
  103. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +13 -1
  104. package/dist/components/core/form/SolidFormUserViewLayout.d.ts.map +1 -1
  105. package/dist/components/core/form/SolidFormUserViewLayout.js +7 -8
  106. package/dist/components/core/form/SolidFormUserViewLayout.js.map +1 -1
  107. package/dist/components/core/form/SolidFormUserViewLayout.tsx +5 -7
  108. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  109. package/dist/components/core/form/SolidFormView.js +12 -21
  110. package/dist/components/core/form/SolidFormView.js.map +1 -1
  111. package/dist/components/core/form/SolidFormView.tsx +11 -33
  112. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  113. package/dist/components/core/form/fields/SolidMediaSingleField.js +22 -15
  114. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  115. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +14 -2
  116. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  117. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +37 -26
  118. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  119. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +38 -5
  120. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  121. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +11 -11
  122. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  123. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +9 -11
  124. package/dist/components/core/kanban/KanbanUserViewLayout.d.ts.map +1 -1
  125. package/dist/components/core/kanban/KanbanUserViewLayout.js +7 -8
  126. package/dist/components/core/kanban/KanbanUserViewLayout.js.map +1 -1
  127. package/dist/components/core/kanban/KanbanUserViewLayout.tsx +4 -6
  128. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  129. package/dist/components/core/kanban/SolidKanbanView.js +5 -7
  130. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  131. package/dist/components/core/kanban/SolidKanbanView.tsx +4 -9
  132. package/dist/components/core/list/PLAN.md +92 -0
  133. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.d.ts.map +1 -1
  134. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js +13 -13
  135. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js.map +1 -1
  136. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx +5 -6
  137. package/dist/components/core/list/SolidDataTable.d.ts +58 -0
  138. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -0
  139. package/dist/components/core/list/SolidDataTable.js +141 -0
  140. package/dist/components/core/list/SolidDataTable.js.map +1 -0
  141. package/dist/components/core/list/SolidDataTable.tsx +314 -0
  142. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  143. package/dist/components/core/list/SolidListView.js +20 -67
  144. package/dist/components/core/list/SolidListView.js.map +1 -1
  145. package/dist/components/core/list/SolidListView.tsx +9 -76
  146. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  147. package/dist/components/core/model/CreateModel.js +15 -25
  148. package/dist/components/core/model/CreateModel.js.map +1 -1
  149. package/dist/components/core/model/CreateModel.tsx +12 -32
  150. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  151. package/dist/components/core/model/FieldMetaData.js +6 -17
  152. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  153. package/dist/components/core/model/FieldMetaData.tsx +5 -26
  154. package/dist/components/core/model/ModelMetaData.d.ts.map +1 -1
  155. package/dist/components/core/model/ModelMetaData.js +48 -55
  156. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  157. package/dist/components/core/model/ModelMetaData.tsx +4 -22
  158. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  159. package/dist/components/core/module/CreateModule.js +42 -44
  160. package/dist/components/core/module/CreateModule.js.map +1 -1
  161. package/dist/components/core/module/CreateModule.tsx +13 -27
  162. package/dist/components/core/module/ModuleListViewData.d.ts.map +1 -1
  163. package/dist/components/core/module/ModuleListViewData.js +11 -7
  164. package/dist/components/core/module/ModuleListViewData.js.map +1 -1
  165. package/dist/components/core/module/ModuleListViewData.tsx +10 -8
  166. package/dist/components/core/solid-ai/SolidAiChat.d.ts +3 -0
  167. package/dist/components/core/solid-ai/SolidAiChat.d.ts.map +1 -0
  168. package/dist/components/core/solid-ai/SolidAiChat.js +1043 -0
  169. package/dist/components/core/solid-ai/SolidAiChat.js.map +1 -0
  170. package/dist/components/core/solid-ai/SolidAiChat.module.css +1339 -0
  171. package/dist/components/core/solid-ai/SolidAiChat.tsx +1237 -0
  172. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  173. package/dist/components/core/tree/SolidTreeView.js +32 -69
  174. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  175. package/dist/components/core/tree/SolidTreeView.tsx +8 -47
  176. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  177. package/dist/components/core/users/CreateUser.js +24 -37
  178. package/dist/components/core/users/CreateUser.js.map +1 -1
  179. package/dist/components/core/users/CreateUser.tsx +8 -46
  180. package/dist/components/core/users/UserListView.d.ts.map +1 -1
  181. package/dist/components/core/users/UserListView.js +9 -16
  182. package/dist/components/core/users/UserListView.js.map +1 -1
  183. package/dist/components/core/users/UserListView.tsx +5 -21
  184. package/dist/components/layout/AdminLayout.d.ts.map +1 -1
  185. package/dist/components/layout/AdminLayout.js +4 -2
  186. package/dist/components/layout/AdminLayout.js.map +1 -1
  187. package/dist/components/layout/AdminLayout.tsx +4 -2
  188. package/dist/components/layout/AdminTopHeader.d.ts +2 -0
  189. package/dist/components/layout/AdminTopHeader.d.ts.map +1 -0
  190. package/dist/components/layout/AdminTopHeader.js +80 -0
  191. package/dist/components/layout/AdminTopHeader.js.map +1 -0
  192. package/dist/components/layout/AdminTopHeader.tsx +165 -0
  193. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  194. package/dist/components/layout/AppSidebar.js +1 -2
  195. package/dist/components/layout/AppSidebar.js.map +1 -1
  196. package/dist/components/layout/AppSidebar.tsx +0 -2
  197. package/dist/components/layout/Layout.d.ts.map +1 -1
  198. package/dist/components/layout/Layout.js +2 -1
  199. package/dist/components/layout/Layout.js.map +1 -1
  200. package/dist/components/layout/Layout.tsx +2 -0
  201. package/dist/components/layout/SolidAiStudioLayout.d.ts +10 -0
  202. package/dist/components/layout/SolidAiStudioLayout.d.ts.map +1 -0
  203. package/dist/components/layout/SolidAiStudioLayout.js +159 -0
  204. package/dist/components/layout/SolidAiStudioLayout.js.map +1 -0
  205. package/dist/components/layout/SolidAiStudioLayout.tsx +333 -0
  206. package/dist/components/layout/navbar-one.d.ts.map +1 -1
  207. package/dist/components/layout/navbar-one.js +1 -2
  208. package/dist/components/layout/navbar-one.js.map +1 -1
  209. package/dist/components/layout/navbar-one.tsx +0 -2
  210. package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
  211. package/dist/components/layout/navbar-two-menu.js +50 -24
  212. package/dist/components/layout/navbar-two-menu.js.map +1 -1
  213. package/dist/components/layout/navbar-two-menu.tsx +48 -30
  214. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts +24 -0
  215. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +1 -0
  216. package/dist/components/shad-cn-ui/SolidAutocomplete.js +224 -0
  217. package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +1 -0
  218. package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +339 -0
  219. package/dist/components/shad-cn-ui/SolidButton.d.ts +14 -0
  220. package/dist/components/shad-cn-ui/SolidButton.d.ts.map +1 -0
  221. package/dist/components/shad-cn-ui/SolidButton.js +36 -0
  222. package/dist/components/shad-cn-ui/SolidButton.js.map +1 -0
  223. package/dist/components/shad-cn-ui/SolidButton.tsx +54 -0
  224. package/dist/components/shad-cn-ui/SolidInput.d.ts +5 -0
  225. package/dist/components/shad-cn-ui/SolidInput.d.ts.map +1 -0
  226. package/dist/components/shad-cn-ui/SolidInput.js +35 -0
  227. package/dist/components/shad-cn-ui/SolidInput.js.map +1 -0
  228. package/dist/components/shad-cn-ui/SolidInput.tsx +12 -0
  229. package/dist/components/shad-cn-ui/SolidNumberInput.d.ts +10 -0
  230. package/dist/components/shad-cn-ui/SolidNumberInput.d.ts.map +1 -0
  231. package/dist/components/shad-cn-ui/SolidNumberInput.js +33 -0
  232. package/dist/components/shad-cn-ui/SolidNumberInput.js.map +1 -0
  233. package/dist/components/shad-cn-ui/SolidNumberInput.tsx +24 -0
  234. package/dist/components/shad-cn-ui/SolidSelect.d.ts +16 -0
  235. package/dist/components/shad-cn-ui/SolidSelect.d.ts.map +1 -0
  236. package/dist/components/shad-cn-ui/SolidSelect.js +26 -0
  237. package/dist/components/shad-cn-ui/SolidSelect.js.map +1 -0
  238. package/dist/components/shad-cn-ui/SolidSelect.tsx +65 -0
  239. package/dist/components/shad-cn-ui/SolidTabs.d.ts +18 -0
  240. package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -0
  241. package/dist/components/shad-cn-ui/SolidTabs.js +22 -0
  242. package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -0
  243. package/dist/components/shad-cn-ui/SolidTabs.tsx +73 -0
  244. package/dist/components/shad-cn-ui/index.d.ts +7 -0
  245. package/dist/components/shad-cn-ui/index.d.ts.map +1 -0
  246. package/dist/components/shad-cn-ui/index.js +7 -0
  247. package/dist/components/shad-cn-ui/index.js.map +1 -0
  248. package/dist/components/shad-cn-ui/index.ts +6 -0
  249. package/dist/helpers/studioSandbox.d.ts +31 -0
  250. package/dist/helpers/studioSandbox.d.ts.map +1 -0
  251. package/dist/helpers/studioSandbox.js +104 -0
  252. package/dist/helpers/studioSandbox.js.map +1 -0
  253. package/dist/helpers/studioSandbox.ts +117 -0
  254. package/dist/index.d.ts +4 -0
  255. package/dist/index.d.ts.map +1 -1
  256. package/dist/index.js +3 -0
  257. package/dist/index.js.map +1 -1
  258. package/dist/index.ts +4 -0
  259. package/dist/redux/features/solidStudioSlice.d.ts +9 -0
  260. package/dist/redux/features/solidStudioSlice.d.ts.map +1 -0
  261. package/dist/redux/features/solidStudioSlice.js +72 -0
  262. package/dist/redux/features/solidStudioSlice.js.map +1 -0
  263. package/dist/redux/features/solidStudioSlice.ts +78 -0
  264. package/dist/redux/features/toastSlice.d.ts +15 -0
  265. package/dist/redux/features/toastSlice.d.ts.map +1 -0
  266. package/dist/redux/features/toastSlice.js +20 -0
  267. package/dist/redux/features/toastSlice.js.map +1 -0
  268. package/dist/redux/features/toastSlice.ts +35 -0
  269. package/dist/redux/store/defaultStoreConfig.d.ts +1 -0
  270. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  271. package/dist/redux/store/defaultStoreConfig.js +2 -1
  272. package/dist/redux/store/defaultStoreConfig.js.map +1 -1
  273. package/dist/redux/store/defaultStoreConfig.ts +2 -0
  274. package/dist/resources/images/errors/error-astronaut-404.png +0 -0
  275. package/dist/resources/shadcn-base.css +4171 -0
  276. package/dist/routes/SolidLayoutRegistry.d.ts +51 -0
  277. package/dist/routes/SolidLayoutRegistry.d.ts.map +1 -0
  278. package/dist/routes/SolidLayoutRegistry.js +108 -0
  279. package/dist/routes/SolidLayoutRegistry.js.map +1 -0
  280. package/dist/routes/SolidLayoutRegistry.tsx +157 -0
  281. package/dist/routes/guards/AdminGuard.d.ts +2 -0
  282. package/dist/routes/guards/AdminGuard.d.ts.map +1 -0
  283. package/dist/routes/guards/AdminGuard.js +16 -0
  284. package/dist/routes/guards/AdminGuard.js.map +1 -0
  285. package/dist/routes/guards/AdminGuard.tsx +17 -0
  286. package/dist/routes/pages/studio/StudioHomePage.d.ts +2 -0
  287. package/dist/routes/pages/studio/StudioHomePage.d.ts.map +1 -0
  288. package/dist/routes/pages/studio/StudioHomePage.js +22 -0
  289. package/dist/routes/pages/studio/StudioHomePage.js.map +1 -0
  290. package/dist/routes/pages/studio/StudioHomePage.tsx +106 -0
  291. package/dist/routes/pages/studio/StudioLandingPage.d.ts +2 -0
  292. package/dist/routes/pages/studio/StudioLandingPage.d.ts.map +1 -0
  293. package/dist/routes/pages/studio/StudioLandingPage.js +78 -0
  294. package/dist/routes/pages/studio/StudioLandingPage.js.map +1 -0
  295. package/dist/routes/pages/studio/StudioLandingPage.tsx +320 -0
  296. package/package.json +1 -1
@@ -0,0 +1,92 @@
1
+ # List View Rewrite Plan (Shadcn + Single Sort)
2
+
3
+ ## Goal
4
+ - [ ] Rebuild list view UX on shadcn primitives while preserving current behavior.
5
+ - [ ] Remove PrimeReact dependencies from list flow.
6
+ - [ ] Replace multi-sort with single-sort everywhere (UI, state, query, imperative API).
7
+
8
+ ## Scope
9
+ - [ ] `SolidListView.tsx`
10
+ - [ ] `SolidListViewColumn.tsx` + `columns/*`
11
+ - [ ] `SolidListViewConfigure.tsx`
12
+ - [ ] `SolidColumnSelector/SolidListColumnSelector.tsx`
13
+ - [ ] `core/common/SolidGlobalSearchElement.tsx`
14
+ - [ ] `core/common/FilterComponent.tsx`
15
+ - [ ] `core/common/SolidGenericImport/*`
16
+ - [ ] `components/common/SolidExport.tsx`
17
+
18
+ ## Phase 1: Architecture Baseline
19
+ - [ ] Define target component map (shadcn): table, dropdown-menu, dialog, popover, tabs, select, checkbox, input, pagination.
20
+ - [ ] Freeze current contract of `SolidListViewHandle` and decide required signature changes for single-sort.
21
+ - [ ] Add migration notes for preserved extension points:
22
+ - [ ] `onListLoad`
23
+ - [ ] `onBeforeListDataLoad`
24
+ - [ ] custom header/row buttons
25
+
26
+ ## Phase 2: Sorting (Drop Multi-sort)
27
+ - [x] Replace `multiSortMeta` state with single sort state (`sortField`, `sortOrder`).
28
+ - [x] Update DataTable/table trigger logic to emit one active sort only.
29
+ - [x] Update `setQueryString()` to serialize exactly one sort expression.
30
+ - [x] Update localStorage restore/persist shape to single-sort.
31
+ - [x] Update `SolidListViewHandle.setSort(...)` to single-sort API.
32
+ - [x] Remove/cleanup all code paths referencing `event.multiSortMeta`.
33
+
34
+ ## Phase 3: Core Table + Pagination
35
+ - [x] Implement shadcn table container and row rendering.
36
+ - [x] Recreate selectable rows (active + deleted split behavior).
37
+ - [x] Recreate paginator with:
38
+ - [x] rows per page
39
+ - [x] current page report
40
+ - [x] next/prev controls
41
+ - [x] Preserve row click routing and session back-navigation markers.
42
+ - [ ] Preserve archived/recover flows.
43
+
44
+ ## Phase 4: Filters + Search
45
+ - [ ] Keep predicate model unchanged (`custom_filter_predicate`, `search_predicate`, `saved_filter_predicate`, `predefined_search_predicate`, grouping/aggregation).
46
+ - [ ] Migrate `SolidGlobalSearchElement` dialogs/popovers to shadcn.
47
+ - [ ] Migrate `FilterComponent` rule builder UI to shadcn controls.
48
+ - [ ] Preserve saved filter URL behavior (`savedQuery`) and local cache behavior.
49
+ - [ ] Confirm relation filter hydration still works.
50
+
51
+ ## Phase 5: Configure Menu + Column Selector
52
+ - [ ] Replace cog overlay/context menu with shadcn dropdown/popover.
53
+ - [ ] Rebuild "Customize Layout" panel in shadcn.
54
+ - [ ] Keep drag-reorder + checkbox visibility behavior in `SolidListColumnSelector`.
55
+ - [ ] Remove page reload after layout save; refetch/re-render list metadata instead.
56
+ - [ ] Fix permission guard checks in configure actions (`actionsAllowed.includes(...)`).
57
+
58
+ ## Phase 6: Import / Export
59
+ - [ ] Migrate `SolidExport` dialog and controls to shadcn.
60
+ - [ ] Preserve template CRUD and filtered export path.
61
+ - [ ] Migrate `SolidGenericImport` stepper/dialog flow to shadcn.
62
+ - [ ] Preserve upload, mapping, sync import, and failed-record download behavior.
63
+
64
+ ## Phase 7: Column Renderers
65
+ - [ ] Keep `SolidListViewColumn` type dispatch pattern.
66
+ - [ ] Migrate per-column cell UI to shadcn styling where applicable.
67
+ - [ ] Preserve widgets loaded via extension registry.
68
+ - [ ] Verify relation columns (many-to-one, one-to-many, many-to-many) behavior parity.
69
+
70
+ ## Phase 8: Cleanup
71
+ - [ ] Remove unused PrimeReact imports/styles from list modules.
72
+ - [ ] Delete obsolete list-specific filter components if fully replaced.
73
+ - [ ] Consolidate duplicated filter helpers between `core/list` and `core/filter` if safe.
74
+
75
+ ## Validation Checklist
76
+ - [ ] List metadata fetch works for list pages and embedded mode.
77
+ - [ ] API query contains correct: `offset`, `limit`, `filters`, `populate`, `populateMedia`, `sort`, `locale`.
78
+ - [ ] Single sort works from UI and imperative API.
79
+ - [ ] Pagination state persists/restores correctly.
80
+ - [ ] Global search + custom filters + saved filters + predefined searches work together.
81
+ - [ ] Grouping/aggregation predicates are preserved in query payload.
82
+ - [ ] Column selector save updates layout reliably.
83
+ - [ ] Import and export end-to-end succeed.
84
+ - [ ] Row actions (default + custom) still honor permissions/roles.
85
+
86
+ ## Suggested Execution Order
87
+ - [ ] 1) Sorting refactor first (single-sort data model).
88
+ - [ ] 2) Table shell + pagination.
89
+ - [ ] 3) Configure menu + column selector.
90
+ - [ ] 4) Global search/filter builder.
91
+ - [ ] 5) Import/export.
92
+ - [ ] 6) Column renderer pass + cleanup.
@@ -1 +1 @@
1
- {"version":3,"file":"SolidListColumnSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx"],"names":[],"mappings":"AAoBA,eAAO,MAAM,uBAAuB,0CAA2C,GAAG,wDA2MjF,CAAA"}
1
+ {"version":3,"file":"SolidListColumnSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx"],"names":[],"mappings":"AAoBA,eAAO,MAAM,uBAAuB,0CAA2C,GAAG,wDA0MjF,CAAA"}
@@ -58,18 +58,18 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
58
58
  import { useFormik } from 'formik';
59
59
  import { Button } from 'primereact/button';
60
60
  import { Checkbox } from 'primereact/checkbox';
61
- import { useRef, useState } from 'react';
61
+ import { useState } from 'react';
62
+ import { useDispatch } from 'react-redux';
62
63
  import { createSolidEntityApi } from '../../../../redux/api/solidEntityApi';
63
- import { Toast } from "primereact/toast";
64
64
  import { DragDropContext, Droppable, Draggable } from '@hello-pangea/dnd';
65
65
  import styles from './SolidListColumnSelector.module.css';
66
66
  import { ERROR_MESSAGES } from '../../../../constants/error-messages';
67
- import showToast from "../../../../helpers/showToast";
67
+ import { showToast } from '../../../../redux/features/toastSlice';
68
68
  export var SolidListColumnSelector = function (_a) {
69
69
  var _b, _c;
70
70
  var listViewMetaData = _a.listViewMetaData, customizeLayout = _a.customizeLayout;
71
71
  console.log("listViewMetaData column selector", listViewMetaData);
72
- var toast = useRef(null);
72
+ var dispatch = useDispatch();
73
73
  var _d = useState(false), isDragging = _d[0], setIsDragging = _d[1];
74
74
  var entityApi = createSolidEntityApi('userViewMetadata');
75
75
  var useUpsertSolidEntityMutation = entityApi.useUpsertSolidEntityMutation;
@@ -170,7 +170,7 @@ export var SolidListColumnSelector = function (_a) {
170
170
  case 2:
171
171
  response = _e.sent();
172
172
  if (response.statusCode === 200) {
173
- showToast(toast, "success", ERROR_MESSAGES.LAYOUT, ERROR_MESSAGES.FORM_LAYOUT_UPDATE);
173
+ dispatch(showToast({ severity: "success", summary: ERROR_MESSAGES.LAYOUT, detail: ERROR_MESSAGES.FORM_LAYOUT_UPDATE }));
174
174
  window.location.reload();
175
175
  }
176
176
  _e.label = 3;
@@ -193,14 +193,14 @@ export var SolidListColumnSelector = function (_a) {
193
193
  reordered.splice(result.destination.index, 0, moved);
194
194
  setFields(reordered);
195
195
  };
196
- return (_jsxs(_Fragment, { children: [_jsx(Toast, { ref: toast }), _jsxs("form", { onSubmit: formik.handleSubmit, className: "flex flex-column gap-1 px-2", children: [_jsx(DragDropContext, { onDragEnd: onDragEnd, onDragStart: function () { return setIsDragging(true); }, children: _jsx(Droppable, { droppableId: "columns", children: function (provided) { return (_jsxs("div", __assign({}, provided.droppableProps, { ref: provided.innerRef, className: "flex flex-column cogwheel-column-filter px-1 ".concat(isDragging ? styles.SolidColumnDragContextActive : ''), style: { maxHeight: 400, overflowY: 'auto' }, children: [fields.map(function (column, index) { return (_jsx(Draggable, { draggableId: column.key, index: index, children: function (provided, snapshot) { return (_jsxs("div", __assign({ ref: provided.innerRef }, provided.draggableProps, provided.dragHandleProps, { className: "flex align-items-center justify-content-between gap-3 px-3 py-2 ".concat(snapshot.isDragging ? styles.SolidColumnDraggedActiveElement : ''), style: __assign({}, provided.draggableProps.style), children: [_jsxs("div", { className: 'flex align-items-center gap-1', children: [_jsx(Checkbox, { inputId: column.key, name: "selectedColumns", value: column, onChange: function () {
197
- var isChecked = formik.values.selectedColumns.some(function (item) { return item.key === column.key; });
198
- formik.setFieldValue("selectedColumns", isChecked
199
- ? formik.values.selectedColumns.filter(function (item) { return item.key !== column.key; })
200
- : __spreadArray(__spreadArray([], formik.values.selectedColumns, true), [column], false));
201
- }, checked: formik.values.selectedColumns.some(function (item) { return item.key === column.key; }), className: "text-base flex align-items-center" }), _jsx("label", { htmlFor: column.key, className: "ml-2 text-base", children: column.name })] }), _jsx(DragActive, { active: snapshot.isDragging })] }))); } }, column.key)); }), provided.placeholder] }))); } }) }), _jsxs("div", { className: "p-3 flex gap-2", children: [_jsx(Button, { type: 'submit', label: "Apply", size: "small" }), _jsx(Button, { type: 'button', outlined: true, label: "Cancel", size: "small",
202
- // @ts-ignore
203
- onClick: function (e) { return customizeLayout.current.hide(e); } })] })] })] }));
196
+ return (_jsx(_Fragment, { children: _jsxs("form", { onSubmit: formik.handleSubmit, className: "flex flex-column gap-1 px-2", children: [_jsx(DragDropContext, { onDragEnd: onDragEnd, onDragStart: function () { return setIsDragging(true); }, children: _jsx(Droppable, { droppableId: "columns", children: function (provided) { return (_jsxs("div", __assign({}, provided.droppableProps, { ref: provided.innerRef, className: "flex flex-column cogwheel-column-filter px-1 ".concat(isDragging ? styles.SolidColumnDragContextActive : ''), style: { maxHeight: 400, overflowY: 'auto' }, children: [fields.map(function (column, index) { return (_jsx(Draggable, { draggableId: column.key, index: index, children: function (provided, snapshot) { return (_jsxs("div", __assign({ ref: provided.innerRef }, provided.draggableProps, provided.dragHandleProps, { className: "flex align-items-center justify-content-between gap-3 px-3 py-2 ".concat(snapshot.isDragging ? styles.SolidColumnDraggedActiveElement : ''), style: __assign({}, provided.draggableProps.style), children: [_jsxs("div", { className: 'flex align-items-center gap-1', children: [_jsx(Checkbox, { inputId: column.key, name: "selectedColumns", value: column, onChange: function () {
197
+ var isChecked = formik.values.selectedColumns.some(function (item) { return item.key === column.key; });
198
+ formik.setFieldValue("selectedColumns", isChecked
199
+ ? formik.values.selectedColumns.filter(function (item) { return item.key !== column.key; })
200
+ : __spreadArray(__spreadArray([], formik.values.selectedColumns, true), [column], false));
201
+ }, checked: formik.values.selectedColumns.some(function (item) { return item.key === column.key; }), className: "text-base flex align-items-center" }), _jsx("label", { htmlFor: column.key, className: "ml-2 text-base", children: column.name })] }), _jsx(DragActive, { active: snapshot.isDragging })] }))); } }, column.key)); }), provided.placeholder] }))); } }) }), _jsxs("div", { className: "p-3 flex gap-2", children: [_jsx(Button, { type: 'submit', label: "Apply", size: "small" }), _jsx(Button, { type: 'button', outlined: true, label: "Cancel", size: "small",
202
+ // @ts-ignore
203
+ onClick: function (e) { return customizeLayout.current.hide(e); } })] })] }) }));
204
204
  };
205
205
  var DragActive = function (_a) {
206
206
  var active = _a.active;
@@ -1 +1 @@
1
- {"version":3,"file":"SolidListColumnSelector.js","sourceRoot":"","sources":["../../../../../src/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useFormik } from 'formik';\nimport { Button } from 'primereact/button';\nimport { Checkbox } from 'primereact/checkbox';\nimport React, { useRef, useState } from 'react'\nimport { createSolidEntityApi } from '../../../../redux/api/solidEntityApi';\nimport { Toast } from \"primereact/toast\";\nimport { DragDropContext, Droppable, Draggable, DropResult } from '@hello-pangea/dnd';\nimport styles from './SolidListColumnSelector.module.css'\nimport { ERROR_MESSAGES } from '../../../../constants/error-messages';\nimport showToast from \"../../../../helpers/showToast\";\n\ninterface FieldMetadata {\n displayName: string;\n}\n\ninterface FilterColumns {\n name: string;\n key: string;\n}\n\nexport const SolidListColumnSelector = ({ listViewMetaData, customizeLayout }: any) => {\n console.log(\"listViewMetaData column selector\", listViewMetaData);\n\n const toast = useRef<Toast>(null);\n const [isDragging, setIsDragging] = useState(false);\n const entityApi = createSolidEntityApi('userViewMetadata');\n const {\n useUpsertSolidEntityMutation\n } = entityApi;\n\n const [upsertUserView, { isLoading, error: viewCreateError, isSuccess, data: data }] = useUpsertSolidEntityMutation();\n\n if (!listViewMetaData) {\n return;\n }\n if (!listViewMetaData.data) {\n return;\n }\n\n const solidView = listViewMetaData?.data?.solidView;\n\n // This is a key value map of field name vs field metadata.\n const solidFieldsMetadata = listViewMetaData?.data?.solidFieldsMetadata as Record<string, FieldMetadata>;\n\n\n if (!solidView || !solidFieldsMetadata) {\n return;\n }\n\n const checkedFieldNames = new Set(solidView.layout.children.map((col: { attrs: { name: string } }) => col.attrs.name));\n\n const solidListColumns: FilterColumns[] = Object.entries(solidFieldsMetadata).map(([key, field]) => ({\n name: field.displayName,\n key,\n }));\n\n const [fields, setFields] = useState<FilterColumns[]>(() => {\n const selectedOrder = solidView.layout.children.map((child: any) => child.attrs.name);\n\n const allColumns: FilterColumns[] = Object.entries(solidFieldsMetadata).map(([key, field]) => ({\n name: field.displayName,\n key,\n }));\n\n const selectedFields: FilterColumns[] = [];\n const remainingFields: FilterColumns[] = [];\n\n const usedKeys = new Set<string>();\n\n // First, add selected fields in the order of solidView\n for (const key of selectedOrder) {\n const column = allColumns.find(col => col.key === key);\n if (column) {\n selectedFields.push(column);\n usedKeys.add(key);\n }\n }\n\n // Then, add remaining fields that are not selected\n for (const col of allColumns) {\n if (!usedKeys.has(col.key)) {\n remainingFields.push(col);\n }\n }\n\n return [...selectedFields, ...remainingFields];\n });\n\n const formik = useFormik({\n initialValues: {\n selectedColumns: solidListColumns.filter(col => checkedFieldNames.has(col.key)),\n },\n onSubmit: async (values) => {\n const selectedKeys = values.selectedColumns.map(col => col.key);\n\n // Step 1: Extract current children\n const currentChildren = solidView.layout.children;\n\n // Step 2: Create a map of all available metadata\n const allFieldMeta = solidFieldsMetadata;\n\n // Step 3: Filter children to include only selected keys\n const newChildren = fields\n .filter(col => selectedKeys.includes(col.key))\n .map(({ key }) => {\n const existingChild = currentChildren.find((child: any) => child.attrs.name === key);\n if (existingChild) return existingChild;\n \n // @ts-ignore\n const fieldType = allFieldMeta[key]?.type;\n const isTextType = fieldType === \"shortText\" || fieldType === \"longText\" || fieldType ===\"selectionStatic\" || fieldType ===\"selectionDynamic\";\n \n return {\n type: 'field',\n attrs: {\n name: key,\n label: allFieldMeta[key]?.displayName || key,\n ...(isTextType ? { isSearchable: true } : {}),\n },\n };\n });\n \n // Now build updated solidView\n const updatedView = {\n layout: {\n ...solidView.layout,\n children: newChildren\n }\n };\n\n try {\n if (listViewMetaData?.data?.solidView?.id) {\n // Update existing user view\n const response = await upsertUserView({\n viewMetadataId: listViewMetaData?.data?.solidView?.id,\n layout: JSON.stringify(updatedView.layout),\n }).unwrap();\n if (response.statusCode === 200) {\n showToast(toast, \"success\", ERROR_MESSAGES.LAYOUT, ERROR_MESSAGES.FORM_LAYOUT_UPDATE);\n window.location.reload();\n }\n }\n } catch (error) {\n console.error(ERROR_MESSAGES.UPDATING_USER, error);\n }\n },\n });\n\n const onDragEnd = (result: DropResult) => {\n setIsDragging(false);\n if (!result.destination) return;\n const reordered = [...fields];\n const [moved] = reordered.splice(result.source.index, 1);\n reordered.splice(result.destination.index, 0, moved);\n setFields(reordered);\n };\n\n return (\n <>\n <Toast ref={toast} />\n <form onSubmit={formik.handleSubmit} className=\"flex flex-column gap-1 px-2\">\n <DragDropContext onDragEnd={onDragEnd} onDragStart={() => setIsDragging(true)}>\n <Droppable droppableId=\"columns\">\n {(provided): React.ReactElement => (\n <div\n {...provided.droppableProps}\n ref={provided.innerRef}\n className={`flex flex-column cogwheel-column-filter px-1 ${isDragging ? styles.SolidColumnDragContextActive : ''}`}\n style={{ maxHeight: 400, overflowY: 'auto' }}\n >\n {fields.map((column, index) => (\n <Draggable key={column.key} draggableId={column.key} index={index}>\n {(provided, snapshot): React.ReactElement => (\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n className={`flex align-items-center justify-content-between gap-3 px-3 py-2 ${snapshot.isDragging ? styles.SolidColumnDraggedActiveElement : ''}`}\n style={{\n ...provided.draggableProps.style,\n }}\n >\n <div className='flex align-items-center gap-1'>\n <Checkbox\n inputId={column.key}\n name=\"selectedColumns\"\n value={column}\n onChange={() => {\n const isChecked = formik.values.selectedColumns.some(item => item.key === column.key);\n formik.setFieldValue(\n \"selectedColumns\",\n isChecked\n ? formik.values.selectedColumns.filter(item => item.key !== column.key)\n : [...formik.values.selectedColumns, column]\n );\n }}\n checked={formik.values.selectedColumns.some(item => item.key === column.key)}\n className=\"text-base flex align-items-center\"\n />\n <label htmlFor={column.key} className=\"ml-2 text-base\">\n {column.name}\n </label>\n </div>\n <DragActive active={snapshot.isDragging} />\n </div>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n <div className=\"p-3 flex gap-2\">\n <Button type='submit' label=\"Apply\" size=\"small\" />\n <Button type='button' outlined label=\"Cancel\" size=\"small\"\n // @ts-ignore\n onClick={(e) => customizeLayout.current.hide(e)}\n />\n </div>\n </form>\n </>\n )\n}\n\nconst DragActive = ({ active }: any) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M7.46354 11.7331C7.46354 12.0997 7.33299 12.4136 7.07187 12.6747C6.81076 12.9359 6.49687 13.0664 6.13021 13.0664C5.76354 13.0664 5.44965 12.9359 5.18854 12.6747C4.92743 12.4136 4.79688 12.0997 4.79688 11.7331C4.79688 11.3664 4.92743 11.0525 5.18854 10.7914C5.44965 10.5303 5.76354 10.3997 6.13021 10.3997C6.49687 10.3997 6.81076 10.5303 7.07187 10.7914C7.33299 11.0525 7.46354 11.3664 7.46354 11.7331ZM7.46354 7.73307C7.46354 8.09974 7.33299 8.41363 7.07187 8.67474C6.81076 8.93585 6.49687 9.06641 6.13021 9.06641C5.76354 9.06641 5.44965 8.93585 5.18854 8.67474C4.92743 8.41363 4.79688 8.09974 4.79688 7.73307C4.79688 7.36641 4.92743 7.05252 5.18854 6.79141C5.44965 6.5303 5.76354 6.39974 6.13021 6.39974C6.49687 6.39974 6.81076 6.5303 7.07187 6.79141C7.33299 7.05252 7.46354 7.36641 7.46354 7.73307ZM7.46354 3.73307C7.46354 4.09974 7.33299 4.41363 7.07187 4.67474C6.81076 4.93585 6.49687 5.06641 6.13021 5.06641C5.76354 5.06641 5.44965 4.93585 5.18854 4.67474C4.92743 4.41363 4.79688 4.09974 4.79688 3.73307C4.79688 3.36641 4.92743 3.05252 5.18854 2.79141C5.44965 2.5303 5.76354 2.39974 6.13021 2.39974C6.49687 2.39974 6.81076 2.5303 7.07187 2.79141C7.33299 3.05252 7.46354 3.36641 7.46354 3.73307Z\" fill=\"var(--icon-color)\" fill-opacity={active ? \"0.75\" : \"0.25\"} />\n <path d=\"M11.737 11.7331C11.737 12.0997 11.6064 12.4136 11.3453 12.6747C11.0842 12.9359 10.7703 13.0664 10.4036 13.0664C10.037 13.0664 9.72309 12.9359 9.46198 12.6747C9.20087 12.4136 9.07031 12.0997 9.07031 11.7331C9.07031 11.3664 9.20087 11.0525 9.46198 10.7914C9.72309 10.5303 10.037 10.3997 10.4036 10.3997C10.7703 10.3997 11.0842 10.5303 11.3453 10.7914C11.6064 11.0525 11.737 11.3664 11.737 11.7331ZM11.737 7.73307C11.737 8.09974 11.6064 8.41363 11.3453 8.67474C11.0842 8.93585 10.7703 9.06641 10.4036 9.06641C10.037 9.06641 9.72309 8.93585 9.46198 8.67474C9.20087 8.41363 9.07031 8.09974 9.07031 7.73307C9.07031 7.36641 9.20087 7.05252 9.46198 6.79141C9.72309 6.5303 10.037 6.39974 10.4036 6.39974C10.7703 6.39974 11.0842 6.5303 11.3453 6.79141C11.6064 7.05252 11.737 7.36641 11.737 7.73307ZM11.737 3.73307C11.737 4.09974 11.6064 4.41363 11.3453 4.67474C11.0842 4.93585 10.7703 5.06641 10.4036 5.06641C10.037 5.06641 9.72309 4.93585 9.46198 4.67474C9.20087 4.41363 9.07031 4.09974 9.07031 3.73307C9.07031 3.36641 9.20087 3.05252 9.46198 2.79141C9.72309 2.5303 10.037 2.39974 10.4036 2.39974C10.7703 2.39974 11.0842 2.5303 11.3453 2.79141C11.6064 3.05252 11.737 3.36641 11.737 3.73307Z\" fill=\"var(--icon-color)\" fill-opacity={active ? \"0.75\" : \"0.25\"} />\n </svg>\n )\n}"]}
1
+ {"version":3,"file":"SolidListColumnSelector.js","sourceRoot":"","sources":["../../../../../src/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useFormik } from 'formik';\nimport { Button } from 'primereact/button';\nimport { Checkbox } from 'primereact/checkbox';\nimport React, { useState } from 'react'\nimport { useDispatch } from 'react-redux';\nimport { createSolidEntityApi } from '../../../../redux/api/solidEntityApi';\nimport { DragDropContext, Droppable, Draggable, DropResult } from '@hello-pangea/dnd';\nimport styles from './SolidListColumnSelector.module.css'\nimport { ERROR_MESSAGES } from '../../../../constants/error-messages';\nimport { showToast } from '../../../../redux/features/toastSlice';\n\ninterface FieldMetadata {\n displayName: string;\n}\n\ninterface FilterColumns {\n name: string;\n key: string;\n}\n\nexport const SolidListColumnSelector = ({ listViewMetaData, customizeLayout }: any) => {\n console.log(\"listViewMetaData column selector\", listViewMetaData);\n\n const dispatch = useDispatch();\n const [isDragging, setIsDragging] = useState(false);\n const entityApi = createSolidEntityApi('userViewMetadata');\n const {\n useUpsertSolidEntityMutation\n } = entityApi;\n\n const [upsertUserView, { isLoading, error: viewCreateError, isSuccess, data: data }] = useUpsertSolidEntityMutation();\n\n if (!listViewMetaData) {\n return;\n }\n if (!listViewMetaData.data) {\n return;\n }\n\n const solidView = listViewMetaData?.data?.solidView;\n\n // This is a key value map of field name vs field metadata.\n const solidFieldsMetadata = listViewMetaData?.data?.solidFieldsMetadata as Record<string, FieldMetadata>;\n\n\n if (!solidView || !solidFieldsMetadata) {\n return;\n }\n\n const checkedFieldNames = new Set(solidView.layout.children.map((col: { attrs: { name: string } }) => col.attrs.name));\n\n const solidListColumns: FilterColumns[] = Object.entries(solidFieldsMetadata).map(([key, field]) => ({\n name: field.displayName,\n key,\n }));\n\n const [fields, setFields] = useState<FilterColumns[]>(() => {\n const selectedOrder = solidView.layout.children.map((child: any) => child.attrs.name);\n\n const allColumns: FilterColumns[] = Object.entries(solidFieldsMetadata).map(([key, field]) => ({\n name: field.displayName,\n key,\n }));\n\n const selectedFields: FilterColumns[] = [];\n const remainingFields: FilterColumns[] = [];\n\n const usedKeys = new Set<string>();\n\n // First, add selected fields in the order of solidView\n for (const key of selectedOrder) {\n const column = allColumns.find(col => col.key === key);\n if (column) {\n selectedFields.push(column);\n usedKeys.add(key);\n }\n }\n\n // Then, add remaining fields that are not selected\n for (const col of allColumns) {\n if (!usedKeys.has(col.key)) {\n remainingFields.push(col);\n }\n }\n\n return [...selectedFields, ...remainingFields];\n });\n\n const formik = useFormik({\n initialValues: {\n selectedColumns: solidListColumns.filter(col => checkedFieldNames.has(col.key)),\n },\n onSubmit: async (values) => {\n const selectedKeys = values.selectedColumns.map(col => col.key);\n\n // Step 1: Extract current children\n const currentChildren = solidView.layout.children;\n\n // Step 2: Create a map of all available metadata\n const allFieldMeta = solidFieldsMetadata;\n\n // Step 3: Filter children to include only selected keys\n const newChildren = fields\n .filter(col => selectedKeys.includes(col.key))\n .map(({ key }) => {\n const existingChild = currentChildren.find((child: any) => child.attrs.name === key);\n if (existingChild) return existingChild;\n \n // @ts-ignore\n const fieldType = allFieldMeta[key]?.type;\n const isTextType = fieldType === \"shortText\" || fieldType === \"longText\" || fieldType ===\"selectionStatic\" || fieldType ===\"selectionDynamic\";\n \n return {\n type: 'field',\n attrs: {\n name: key,\n label: allFieldMeta[key]?.displayName || key,\n ...(isTextType ? { isSearchable: true } : {}),\n },\n };\n });\n \n // Now build updated solidView\n const updatedView = {\n layout: {\n ...solidView.layout,\n children: newChildren\n }\n };\n\n try {\n if (listViewMetaData?.data?.solidView?.id) {\n // Update existing user view\n const response = await upsertUserView({\n viewMetadataId: listViewMetaData?.data?.solidView?.id,\n layout: JSON.stringify(updatedView.layout),\n }).unwrap();\n if (response.statusCode === 200) {\n dispatch(showToast({ severity: \"success\", summary: ERROR_MESSAGES.LAYOUT, detail: ERROR_MESSAGES.FORM_LAYOUT_UPDATE }));\n window.location.reload();\n }\n }\n } catch (error) {\n console.error(ERROR_MESSAGES.UPDATING_USER, error);\n }\n },\n });\n\n const onDragEnd = (result: DropResult) => {\n setIsDragging(false);\n if (!result.destination) return;\n const reordered = [...fields];\n const [moved] = reordered.splice(result.source.index, 1);\n reordered.splice(result.destination.index, 0, moved);\n setFields(reordered);\n };\n\n return (\n <>\n <form onSubmit={formik.handleSubmit} className=\"flex flex-column gap-1 px-2\">\n <DragDropContext onDragEnd={onDragEnd} onDragStart={() => setIsDragging(true)}>\n <Droppable droppableId=\"columns\">\n {(provided): React.ReactElement => (\n <div\n {...provided.droppableProps}\n ref={provided.innerRef}\n className={`flex flex-column cogwheel-column-filter px-1 ${isDragging ? styles.SolidColumnDragContextActive : ''}`}\n style={{ maxHeight: 400, overflowY: 'auto' }}\n >\n {fields.map((column, index) => (\n <Draggable key={column.key} draggableId={column.key} index={index}>\n {(provided, snapshot): React.ReactElement => (\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n className={`flex align-items-center justify-content-between gap-3 px-3 py-2 ${snapshot.isDragging ? styles.SolidColumnDraggedActiveElement : ''}`}\n style={{\n ...provided.draggableProps.style,\n }}\n >\n <div className='flex align-items-center gap-1'>\n <Checkbox\n inputId={column.key}\n name=\"selectedColumns\"\n value={column}\n onChange={() => {\n const isChecked = formik.values.selectedColumns.some(item => item.key === column.key);\n formik.setFieldValue(\n \"selectedColumns\",\n isChecked\n ? formik.values.selectedColumns.filter(item => item.key !== column.key)\n : [...formik.values.selectedColumns, column]\n );\n }}\n checked={formik.values.selectedColumns.some(item => item.key === column.key)}\n className=\"text-base flex align-items-center\"\n />\n <label htmlFor={column.key} className=\"ml-2 text-base\">\n {column.name}\n </label>\n </div>\n <DragActive active={snapshot.isDragging} />\n </div>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n <div className=\"p-3 flex gap-2\">\n <Button type='submit' label=\"Apply\" size=\"small\" />\n <Button type='button' outlined label=\"Cancel\" size=\"small\"\n // @ts-ignore\n onClick={(e) => customizeLayout.current.hide(e)}\n />\n </div>\n </form>\n </>\n )\n}\n\nconst DragActive = ({ active }: any) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M7.46354 11.7331C7.46354 12.0997 7.33299 12.4136 7.07187 12.6747C6.81076 12.9359 6.49687 13.0664 6.13021 13.0664C5.76354 13.0664 5.44965 12.9359 5.18854 12.6747C4.92743 12.4136 4.79688 12.0997 4.79688 11.7331C4.79688 11.3664 4.92743 11.0525 5.18854 10.7914C5.44965 10.5303 5.76354 10.3997 6.13021 10.3997C6.49687 10.3997 6.81076 10.5303 7.07187 10.7914C7.33299 11.0525 7.46354 11.3664 7.46354 11.7331ZM7.46354 7.73307C7.46354 8.09974 7.33299 8.41363 7.07187 8.67474C6.81076 8.93585 6.49687 9.06641 6.13021 9.06641C5.76354 9.06641 5.44965 8.93585 5.18854 8.67474C4.92743 8.41363 4.79688 8.09974 4.79688 7.73307C4.79688 7.36641 4.92743 7.05252 5.18854 6.79141C5.44965 6.5303 5.76354 6.39974 6.13021 6.39974C6.49687 6.39974 6.81076 6.5303 7.07187 6.79141C7.33299 7.05252 7.46354 7.36641 7.46354 7.73307ZM7.46354 3.73307C7.46354 4.09974 7.33299 4.41363 7.07187 4.67474C6.81076 4.93585 6.49687 5.06641 6.13021 5.06641C5.76354 5.06641 5.44965 4.93585 5.18854 4.67474C4.92743 4.41363 4.79688 4.09974 4.79688 3.73307C4.79688 3.36641 4.92743 3.05252 5.18854 2.79141C5.44965 2.5303 5.76354 2.39974 6.13021 2.39974C6.49687 2.39974 6.81076 2.5303 7.07187 2.79141C7.33299 3.05252 7.46354 3.36641 7.46354 3.73307Z\" fill=\"var(--icon-color)\" fill-opacity={active ? \"0.75\" : \"0.25\"} />\n <path d=\"M11.737 11.7331C11.737 12.0997 11.6064 12.4136 11.3453 12.6747C11.0842 12.9359 10.7703 13.0664 10.4036 13.0664C10.037 13.0664 9.72309 12.9359 9.46198 12.6747C9.20087 12.4136 9.07031 12.0997 9.07031 11.7331C9.07031 11.3664 9.20087 11.0525 9.46198 10.7914C9.72309 10.5303 10.037 10.3997 10.4036 10.3997C10.7703 10.3997 11.0842 10.5303 11.3453 10.7914C11.6064 11.0525 11.737 11.3664 11.737 11.7331ZM11.737 7.73307C11.737 8.09974 11.6064 8.41363 11.3453 8.67474C11.0842 8.93585 10.7703 9.06641 10.4036 9.06641C10.037 9.06641 9.72309 8.93585 9.46198 8.67474C9.20087 8.41363 9.07031 8.09974 9.07031 7.73307C9.07031 7.36641 9.20087 7.05252 9.46198 6.79141C9.72309 6.5303 10.037 6.39974 10.4036 6.39974C10.7703 6.39974 11.0842 6.5303 11.3453 6.79141C11.6064 7.05252 11.737 7.36641 11.737 7.73307ZM11.737 3.73307C11.737 4.09974 11.6064 4.41363 11.3453 4.67474C11.0842 4.93585 10.7703 5.06641 10.4036 5.06641C10.037 5.06641 9.72309 4.93585 9.46198 4.67474C9.20087 4.41363 9.07031 4.09974 9.07031 3.73307C9.07031 3.36641 9.20087 3.05252 9.46198 2.79141C9.72309 2.5303 10.037 2.39974 10.4036 2.39974C10.7703 2.39974 11.0842 2.5303 11.3453 2.79141C11.6064 3.05252 11.737 3.36641 11.737 3.73307Z\" fill=\"var(--icon-color)\" fill-opacity={active ? \"0.75\" : \"0.25\"} />\n </svg>\n )\n}"]}
@@ -1,13 +1,13 @@
1
1
  import { useFormik } from 'formik';
2
2
  import { Button } from 'primereact/button';
3
3
  import { Checkbox } from 'primereact/checkbox';
4
- import React, { useRef, useState } from 'react'
4
+ import React, { useState } from 'react'
5
+ import { useDispatch } from 'react-redux';
5
6
  import { createSolidEntityApi } from '../../../../redux/api/solidEntityApi';
6
- import { Toast } from "primereact/toast";
7
7
  import { DragDropContext, Droppable, Draggable, DropResult } from '@hello-pangea/dnd';
8
8
  import styles from './SolidListColumnSelector.module.css'
9
9
  import { ERROR_MESSAGES } from '../../../../constants/error-messages';
10
- import showToast from "../../../../helpers/showToast";
10
+ import { showToast } from '../../../../redux/features/toastSlice';
11
11
 
12
12
  interface FieldMetadata {
13
13
  displayName: string;
@@ -21,7 +21,7 @@ interface FilterColumns {
21
21
  export const SolidListColumnSelector = ({ listViewMetaData, customizeLayout }: any) => {
22
22
  console.log("listViewMetaData column selector", listViewMetaData);
23
23
 
24
- const toast = useRef<Toast>(null);
24
+ const dispatch = useDispatch();
25
25
  const [isDragging, setIsDragging] = useState(false);
26
26
  const entityApi = createSolidEntityApi('userViewMetadata');
27
27
  const {
@@ -136,7 +136,7 @@ export const SolidListColumnSelector = ({ listViewMetaData, customizeLayout }: a
136
136
  layout: JSON.stringify(updatedView.layout),
137
137
  }).unwrap();
138
138
  if (response.statusCode === 200) {
139
- showToast(toast, "success", ERROR_MESSAGES.LAYOUT, ERROR_MESSAGES.FORM_LAYOUT_UPDATE);
139
+ dispatch(showToast({ severity: "success", summary: ERROR_MESSAGES.LAYOUT, detail: ERROR_MESSAGES.FORM_LAYOUT_UPDATE }));
140
140
  window.location.reload();
141
141
  }
142
142
  }
@@ -157,7 +157,6 @@ export const SolidListColumnSelector = ({ listViewMetaData, customizeLayout }: a
157
157
 
158
158
  return (
159
159
  <>
160
- <Toast ref={toast} />
161
160
  <form onSubmit={formik.handleSubmit} className="flex flex-column gap-1 px-2">
162
161
  <DragDropContext onDragEnd={onDragEnd} onDragStart={() => setIsDragging(true)}>
163
162
  <Droppable droppableId="columns">
@@ -0,0 +1,58 @@
1
+ import React from "react";
2
+ export type DataTableStateEvent = {
3
+ sortField?: string;
4
+ sortOrder?: 1 | -1 | 0;
5
+ };
6
+ type HeaderRenderer = React.ReactNode | (() => React.ReactNode);
7
+ type BodyRenderer = (rowData: any) => React.ReactNode;
8
+ export type SolidColumnProps = {
9
+ field?: string;
10
+ header?: HeaderRenderer;
11
+ body?: BodyRenderer;
12
+ sortable?: boolean;
13
+ selectionMode?: "multiple" | "single" | null;
14
+ headerStyle?: React.CSSProperties;
15
+ style?: React.CSSProperties;
16
+ className?: string;
17
+ headerClassName?: string;
18
+ frozen?: boolean;
19
+ alignFrozen?: "left" | "right";
20
+ [key: string]: any;
21
+ };
22
+ export declare function Column(_props: SolidColumnProps): null;
23
+ type SolidDataTableProps = {
24
+ value: any[];
25
+ children: React.ReactNode;
26
+ size?: "small" | "normal" | "large";
27
+ viewportHeight?: string;
28
+ dataKey?: string;
29
+ emptyMessage?: React.ReactNode;
30
+ rows?: number;
31
+ first?: number;
32
+ totalRecords?: number;
33
+ rowsPerPageOptions?: number[];
34
+ onPage?: (event: {
35
+ first: number;
36
+ rows: number;
37
+ }) => void;
38
+ onSort?: (event: DataTableStateEvent) => void;
39
+ sortField?: string;
40
+ sortOrder?: 1 | -1 | 0;
41
+ removableSort?: boolean;
42
+ selection?: any[];
43
+ selectionMode?: "checkbox" | null;
44
+ onSelectionChange?: (event: {
45
+ value: any[];
46
+ }) => void;
47
+ onRowClick?: (event: {
48
+ data: any;
49
+ }) => void;
50
+ rowClassName?: (rowData: any) => string;
51
+ tableClassName?: string;
52
+ paginatorClassName?: string;
53
+ currentPageReportTemplate?: string;
54
+ [key: string]: any;
55
+ };
56
+ export declare function SolidDataTable({ value, children, size, viewportHeight, dataKey, emptyMessage, rows, first, totalRecords, rowsPerPageOptions, onPage, onSort, sortField, sortOrder, removableSort, selection, selectionMode, onSelectionChange, onRowClick, rowClassName, tableClassName, paginatorClassName, currentPageReportTemplate, }: SolidDataTableProps): import("react/jsx-runtime").JSX.Element;
57
+ export {};
58
+ //# sourceMappingURL=SolidDataTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidDataTable.d.ts","sourceRoot":"","sources":["../../../../src/components/core/list/SolidDataTable.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
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
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
+ if (ar || !(i in from)) {
15
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
+ ar[i] = from[i];
17
+ }
18
+ }
19
+ return to.concat(ar || Array.prototype.slice.call(from));
20
+ };
21
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
+ import React from "react";
23
+ export function Column(_props) {
24
+ return null;
25
+ }
26
+ var cx = function () {
27
+ var parts = [];
28
+ for (var _i = 0; _i < arguments.length; _i++) {
29
+ parts[_i] = arguments[_i];
30
+ }
31
+ return parts.filter(Boolean).join(" ");
32
+ };
33
+ function renderHeaderNode(header) {
34
+ if (typeof header === "function")
35
+ return header();
36
+ return header !== null && header !== void 0 ? header : null;
37
+ }
38
+ function normalizeColumns(children) {
39
+ return React.Children.toArray(children).filter(function (child) {
40
+ return React.isValidElement(child);
41
+ });
42
+ }
43
+ function resolveSortIcon(active, order) {
44
+ if (!active || order === 0)
45
+ return "pi pi-sort-alt";
46
+ return order === 1 ? "pi pi-sort-amount-up-alt" : "pi pi-sort-amount-down";
47
+ }
48
+ function nextSortOrder(active, order, removableSort) {
49
+ if (removableSort === void 0) { removableSort = true; }
50
+ if (!active || order === 0)
51
+ return 1;
52
+ if (order === 1)
53
+ return -1;
54
+ return removableSort ? 0 : 1;
55
+ }
56
+ export function SolidDataTable(_a) {
57
+ var value = _a.value, children = _a.children, _b = _a.size, size = _b === void 0 ? "normal" : _b, viewportHeight = _a.viewportHeight, _c = _a.dataKey, dataKey = _c === void 0 ? "id" : _c, emptyMessage = _a.emptyMessage, _d = _a.rows, rows = _d === void 0 ? 25 : _d, _e = _a.first, first = _e === void 0 ? 0 : _e, _f = _a.totalRecords, totalRecords = _f === void 0 ? 0 : _f, _g = _a.rowsPerPageOptions, rowsPerPageOptions = _g === void 0 ? [10, 25, 50, 100] : _g, onPage = _a.onPage, onSort = _a.onSort, sortField = _a.sortField, _h = _a.sortOrder, sortOrder = _h === void 0 ? 0 : _h, _j = _a.removableSort, removableSort = _j === void 0 ? true : _j, _k = _a.selection, selection = _k === void 0 ? [] : _k, selectionMode = _a.selectionMode, onSelectionChange = _a.onSelectionChange, onRowClick = _a.onRowClick, rowClassName = _a.rowClassName, tableClassName = _a.tableClassName, paginatorClassName = _a.paginatorClassName, _l = _a.currentPageReportTemplate, currentPageReportTemplate = _l === void 0 ? "{first} - {last} of {totalRecords}" : _l;
58
+ var columns = normalizeColumns(children);
59
+ var pageRows = value !== null && value !== void 0 ? value : [];
60
+ var selectedKeys = new Set((selection || []).map(function (row) { return String(row === null || row === void 0 ? void 0 : row[dataKey]); }));
61
+ var allSelected = pageRows.length > 0 && pageRows.every(function (row) { return selectedKeys.has(String(row === null || row === void 0 ? void 0 : row[dataKey])); });
62
+ var start = totalRecords === 0 ? 0 : first + 1;
63
+ var end = Math.min(first + rows, totalRecords);
64
+ var currentPage = rows > 0 ? Math.floor(first / rows) + 1 : 1;
65
+ var totalPages = rows > 0 ? Math.max(1, Math.ceil(totalRecords / rows)) : 1;
66
+ var report = currentPageReportTemplate
67
+ .replace("{first}", String(start))
68
+ .replace("{last}", String(end))
69
+ .replace("{totalRecords}", String(totalRecords));
70
+ var emitSelection = function (nextSelection) {
71
+ onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange({ value: nextSelection });
72
+ };
73
+ var toggleSelectAll = function (checked) {
74
+ if (!checked) {
75
+ var pageKeys_1 = new Set(pageRows.map(function (row) { return String(row === null || row === void 0 ? void 0 : row[dataKey]); }));
76
+ emitSelection((selection || []).filter(function (row) { return !pageKeys_1.has(String(row === null || row === void 0 ? void 0 : row[dataKey])); }));
77
+ return;
78
+ }
79
+ var merged = __spreadArray([], (selection || []), true);
80
+ var mergedKeys = new Set(merged.map(function (row) { return String(row === null || row === void 0 ? void 0 : row[dataKey]); }));
81
+ pageRows.forEach(function (row) {
82
+ var key = String(row === null || row === void 0 ? void 0 : row[dataKey]);
83
+ if (!mergedKeys.has(key))
84
+ merged.push(row);
85
+ });
86
+ emitSelection(merged);
87
+ };
88
+ var toggleRowSelection = function (rowData, checked) {
89
+ var key = String(rowData === null || rowData === void 0 ? void 0 : rowData[dataKey]);
90
+ if (!checked) {
91
+ emitSelection((selection || []).filter(function (row) { return String(row === null || row === void 0 ? void 0 : row[dataKey]) !== key; }));
92
+ return;
93
+ }
94
+ emitSelection(__spreadArray(__spreadArray([], (selection || []), true), [rowData], false));
95
+ };
96
+ var densityClass = size === "small"
97
+ ? "solid-table-density-compact"
98
+ : size === "large"
99
+ ? "solid-table-density-comfortable"
100
+ : "solid-table-density-cozy";
101
+ return (_jsxs("div", { className: cx("solid-data-table-root w-full min-h-0", densityClass), style: {
102
+ height: viewportHeight || "100%",
103
+ maxHeight: viewportHeight || "100%",
104
+ }, children: [_jsx("div", { className: "solid-data-table-viewport min-h-0 rounded-md border border-border/60 bg-background", children: _jsxs("table", { className: cx("w-full text-sm border-collapse", tableClassName), children: [_jsx("thead", { className: "solid-data-table-head sticky top-0 z-2", children: _jsx("tr", { children: columns.map(function (column, index) {
105
+ var props = column.props;
106
+ var isSelectionColumn = props.selectionMode === "multiple";
107
+ var isSortable = Boolean(props.sortable && props.field && !isSelectionColumn);
108
+ var isActiveSort = isSortable && sortField === props.field;
109
+ var iconClass = resolveSortIcon(Boolean(isActiveSort), sortOrder);
110
+ return (_jsx("th", { className: cx("solid-data-table-th text-left text-foreground whitespace-nowrap", isSelectionColumn ? "solid-data-table-selection-col" : undefined, props.headerClassName), style: __assign(__assign({}, props.style), props.headerStyle), children: isSelectionColumn ? (_jsx("input", { type: "checkbox", checked: allSelected, onChange: function (e) { return toggleSelectAll(e.currentTarget.checked); }, "aria-label": "Select all rows" })) : (_jsxs("button", { type: "button", className: cx("solid-table-header-button", isSortable ? "is-sortable" : undefined), onClick: function () {
111
+ if (!isSortable)
112
+ return;
113
+ var nextOrder = nextSortOrder(Boolean(isActiveSort), sortOrder, removableSort);
114
+ onSort === null || onSort === void 0 ? void 0 : onSort({
115
+ sortField: nextOrder === 0 ? undefined : props.field,
116
+ sortOrder: nextOrder,
117
+ });
118
+ }, children: [renderHeaderNode(props.header), isSortable ? _jsx("i", { className: iconClass, "aria-hidden": "true" }) : null] })) }, "header-".concat(index)));
119
+ }) }) }), _jsx("tbody", { children: pageRows.length === 0 ? (_jsx("tr", { children: _jsx("td", { className: "px-3 py-6 text-center text-muted-foreground", colSpan: Math.max(columns.length, 1), children: emptyMessage || "No records found" }) })) : (pageRows.map(function (rowData) {
120
+ var key = String(rowData === null || rowData === void 0 ? void 0 : rowData[dataKey]);
121
+ var rowSelected = selectedKeys.has(key);
122
+ return (_jsx("tr", { className: cx("solid-data-table-row", rowClassName === null || rowClassName === void 0 ? void 0 : rowClassName(rowData)), onClick: function (event) {
123
+ var target = event.target;
124
+ if (target.closest("button,a,input,label,[data-no-row-click='true']"))
125
+ return;
126
+ onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick({ data: rowData });
127
+ }, children: columns.map(function (column, index) {
128
+ var props = column.props;
129
+ var isSelectionColumn = props.selectionMode === "multiple";
130
+ var content = isSelectionColumn
131
+ ? (_jsx("input", { type: "checkbox", checked: rowSelected, onChange: function (e) { return toggleRowSelection(rowData, e.currentTarget.checked); }, onClick: function (e) { return e.stopPropagation(); }, "aria-label": "Select row" }))
132
+ : props.body
133
+ ? props.body(rowData)
134
+ : props.field
135
+ ? rowData === null || rowData === void 0 ? void 0 : rowData[props.field]
136
+ : null;
137
+ return (_jsx("td", { className: cx("solid-data-table-td align-top text-foreground", isSelectionColumn ? "solid-data-table-selection-col" : undefined, props.className), style: props.style, children: content }, "cell-".concat(key, "-").concat(index)));
138
+ }) }, key));
139
+ })) })] }) }), typeof onPage === "function" ? (_jsxs("div", { className: cx("w-full solid-table-paginator solid-table-paginator-align-end flex items-center justify-end gap-3 text-sm rounded-md border border-border/60 px-3 py-1.5 bg-background", paginatorClassName), children: [_jsxs("div", { className: "solid-paginator-meta flex items-center gap-2 ml-auto", children: [_jsx("span", { className: "solid-paginator-label", children: "Rows" }), _jsx("select", { value: rows, onChange: function (e) { return onPage({ first: 0, rows: Number(e.target.value) }); }, className: "solid-paginator-select", children: rowsPerPageOptions.map(function (option) { return (_jsx("option", { value: option, children: option }, option)); }) }), _jsx("span", { className: "solid-paginator-report", children: report })] }), _jsxs("div", { className: "solid-paginator-actions flex items-center gap-2", children: [_jsx("button", { type: "button", className: "solid-paginator-btn", onClick: function () { return onPage({ first: Math.max(0, first - rows), rows: rows }); }, disabled: currentPage <= 1, children: "Previous" }), _jsx("button", { type: "button", className: "solid-paginator-btn", onClick: function () { return onPage({ first: Math.min((totalPages - 1) * rows, first + rows), rows: rows }); }, disabled: currentPage >= totalPages, children: "Next" })] })] })) : null] }));
140
+ }
141
+ //# sourceMappingURL=SolidDataTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidDataTable.js","sourceRoot":"","sources":["../../../../src/components/core/list/SolidDataTable.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\nexport type DataTableStateEvent = {\n sortField?: string;\n sortOrder?: 1 | -1 | 0;\n};\n\ntype HeaderRenderer = React.ReactNode | (() => React.ReactNode);\ntype BodyRenderer = (rowData: any) => React.ReactNode;\n\nexport type SolidColumnProps = {\n field?: string;\n header?: HeaderRenderer;\n body?: BodyRenderer;\n sortable?: boolean;\n selectionMode?: \"multiple\" | \"single\" | null;\n headerStyle?: React.CSSProperties;\n style?: React.CSSProperties;\n className?: string;\n headerClassName?: string;\n frozen?: boolean;\n alignFrozen?: \"left\" | \"right\";\n [key: string]: any;\n};\n\nexport function Column(_props: SolidColumnProps) {\n return null;\n}\n\ntype SolidDataTableProps = {\n value: any[];\n children: React.ReactNode;\n size?: \"small\" | \"normal\" | \"large\";\n viewportHeight?: string;\n dataKey?: string;\n emptyMessage?: React.ReactNode;\n rows?: number;\n first?: number;\n totalRecords?: number;\n rowsPerPageOptions?: number[];\n onPage?: (event: { first: number; rows: number }) => void;\n onSort?: (event: DataTableStateEvent) => void;\n sortField?: string;\n sortOrder?: 1 | -1 | 0;\n removableSort?: boolean;\n selection?: any[];\n selectionMode?: \"checkbox\" | null;\n onSelectionChange?: (event: { value: any[] }) => void;\n onRowClick?: (event: { data: any }) => void;\n rowClassName?: (rowData: any) => string;\n tableClassName?: string;\n paginatorClassName?: string;\n currentPageReportTemplate?: string;\n [key: string]: any;\n};\n\nconst cx = (...parts: Array<string | undefined | false>) => parts.filter(Boolean).join(\" \");\n\nfunction renderHeaderNode(header?: HeaderRenderer) {\n if (typeof header === \"function\") return header();\n return header ?? null;\n}\n\nfunction normalizeColumns(children: React.ReactNode): React.ReactElement<SolidColumnProps>[] {\n return React.Children.toArray(children).filter((child): child is React.ReactElement<SolidColumnProps> => {\n return React.isValidElement(child);\n });\n}\n\nfunction resolveSortIcon(active: boolean, order: 1 | -1 | 0): string {\n if (!active || order === 0) return \"pi pi-sort-alt\";\n return order === 1 ? \"pi pi-sort-amount-up-alt\" : \"pi pi-sort-amount-down\";\n}\n\nfunction nextSortOrder(active: boolean, order: 1 | -1 | 0, removableSort = true): 1 | -1 | 0 {\n if (!active || order === 0) return 1;\n if (order === 1) return -1;\n return removableSort ? 0 : 1;\n}\n\nexport function SolidDataTable({\n value,\n children,\n size = \"normal\",\n viewportHeight,\n dataKey = \"id\",\n emptyMessage,\n rows = 25,\n first = 0,\n totalRecords = 0,\n rowsPerPageOptions = [10, 25, 50, 100],\n onPage,\n onSort,\n sortField,\n sortOrder = 0,\n removableSort = true,\n selection = [],\n selectionMode,\n onSelectionChange,\n onRowClick,\n rowClassName,\n tableClassName,\n paginatorClassName,\n currentPageReportTemplate = \"{first} - {last} of {totalRecords}\",\n}: SolidDataTableProps) {\n const columns = normalizeColumns(children);\n const pageRows = value ?? [];\n\n const selectedKeys = new Set((selection || []).map((row: any) => String(row?.[dataKey])));\n const allSelected = pageRows.length > 0 && pageRows.every((row: any) => selectedKeys.has(String(row?.[dataKey])));\n\n const start = totalRecords === 0 ? 0 : first + 1;\n const end = Math.min(first + rows, totalRecords);\n const currentPage = rows > 0 ? Math.floor(first / rows) + 1 : 1;\n const totalPages = rows > 0 ? Math.max(1, Math.ceil(totalRecords / rows)) : 1;\n\n const report = currentPageReportTemplate\n .replace(\"{first}\", String(start))\n .replace(\"{last}\", String(end))\n .replace(\"{totalRecords}\", String(totalRecords));\n\n const emitSelection = (nextSelection: any[]) => {\n onSelectionChange?.({ value: nextSelection });\n };\n\n const toggleSelectAll = (checked: boolean) => {\n if (!checked) {\n const pageKeys = new Set(pageRows.map((row: any) => String(row?.[dataKey])));\n emitSelection((selection || []).filter((row: any) => !pageKeys.has(String(row?.[dataKey]))));\n return;\n }\n const merged = [...(selection || [])];\n const mergedKeys = new Set(merged.map((row: any) => String(row?.[dataKey])));\n pageRows.forEach((row: any) => {\n const key = String(row?.[dataKey]);\n if (!mergedKeys.has(key)) merged.push(row);\n });\n emitSelection(merged);\n };\n\n const toggleRowSelection = (rowData: any, checked: boolean) => {\n const key = String(rowData?.[dataKey]);\n if (!checked) {\n emitSelection((selection || []).filter((row: any) => String(row?.[dataKey]) !== key));\n return;\n }\n emitSelection([...(selection || []), rowData]);\n };\n\n const densityClass =\n size === \"small\"\n ? \"solid-table-density-compact\"\n : size === \"large\"\n ? \"solid-table-density-comfortable\"\n : \"solid-table-density-cozy\";\n\n return (\n <div\n className={cx(\"solid-data-table-root w-full min-h-0\", densityClass)}\n style={{\n height: viewportHeight || \"100%\",\n maxHeight: viewportHeight || \"100%\",\n }}\n >\n <div className=\"solid-data-table-viewport min-h-0 rounded-md border border-border/60 bg-background\">\n <table className={cx(\"w-full text-sm border-collapse\", tableClassName)}>\n <thead className=\"solid-data-table-head sticky top-0 z-2\">\n <tr>\n {columns.map((column, index) => {\n const props = column.props;\n const isSelectionColumn = props.selectionMode === \"multiple\";\n const isSortable = Boolean(props.sortable && props.field && !isSelectionColumn);\n const isActiveSort = isSortable && sortField === props.field;\n const iconClass = resolveSortIcon(Boolean(isActiveSort), sortOrder);\n return (\n <th\n key={`header-${index}`}\n className={cx(\n \"solid-data-table-th text-left text-foreground whitespace-nowrap\",\n isSelectionColumn ? \"solid-data-table-selection-col\" : undefined,\n props.headerClassName\n )}\n style={{ ...props.style, ...props.headerStyle }}\n >\n {isSelectionColumn ? (\n <input\n type=\"checkbox\"\n checked={allSelected}\n onChange={(e) => toggleSelectAll(e.currentTarget.checked)}\n aria-label=\"Select all rows\"\n />\n ) : (\n <button\n type=\"button\"\n className={cx(\"solid-table-header-button\", isSortable ? \"is-sortable\" : undefined)}\n onClick={() => {\n if (!isSortable) return;\n const nextOrder = nextSortOrder(Boolean(isActiveSort), sortOrder, removableSort);\n onSort?.({\n sortField: nextOrder === 0 ? undefined : props.field,\n sortOrder: nextOrder,\n });\n }}\n >\n {renderHeaderNode(props.header)}\n {isSortable ? <i className={iconClass} aria-hidden=\"true\" /> : null}\n </button>\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {pageRows.length === 0 ? (\n <tr>\n <td className=\"px-3 py-6 text-center text-muted-foreground\" colSpan={Math.max(columns.length, 1)}>\n {emptyMessage || \"No records found\"}\n </td>\n </tr>\n ) : (\n pageRows.map((rowData: any) => {\n const key = String(rowData?.[dataKey]);\n const rowSelected = selectedKeys.has(key);\n return (\n <tr\n key={key}\n className={cx(\"solid-data-table-row\", rowClassName?.(rowData))}\n onClick={(event) => {\n const target = event.target as HTMLElement;\n if (target.closest(\"button,a,input,label,[data-no-row-click='true']\")) return;\n onRowClick?.({ data: rowData });\n }}\n >\n {columns.map((column, index) => {\n const props = column.props;\n const isSelectionColumn = props.selectionMode === \"multiple\";\n const content = isSelectionColumn\n ? (\n <input\n type=\"checkbox\"\n checked={rowSelected}\n onChange={(e) => toggleRowSelection(rowData, e.currentTarget.checked)}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Select row\"\n />\n )\n : props.body\n ? props.body(rowData)\n : props.field\n ? rowData?.[props.field]\n : null;\n return (\n <td\n key={`cell-${key}-${index}`}\n className={cx(\n \"solid-data-table-td align-top text-foreground\",\n isSelectionColumn ? \"solid-data-table-selection-col\" : undefined,\n props.className\n )}\n style={props.style}\n >\n {content}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {typeof onPage === \"function\" ? (\n <div\n className={cx(\"w-full solid-table-paginator solid-table-paginator-align-end flex items-center justify-end gap-3 text-sm rounded-md border border-border/60 px-3 py-1.5 bg-background\", paginatorClassName)}\n >\n <div className=\"solid-paginator-meta flex items-center gap-2 ml-auto\">\n <span className=\"solid-paginator-label\">Rows</span>\n <select\n value={rows}\n onChange={(e) => onPage({ first: 0, rows: Number(e.target.value) })}\n className=\"solid-paginator-select\"\n >\n {rowsPerPageOptions.map((option) => (\n <option key={option} value={option}>{option}</option>\n ))}\n </select>\n <span className=\"solid-paginator-report\">{report}</span>\n </div>\n <div className=\"solid-paginator-actions flex items-center gap-2\">\n <button\n type=\"button\"\n className=\"solid-paginator-btn\"\n onClick={() => onPage({ first: Math.max(0, first - rows), rows })}\n disabled={currentPage <= 1}\n >\n Previous\n </button>\n <button\n type=\"button\"\n className=\"solid-paginator-btn\"\n onClick={() => onPage({ first: Math.min((totalPages - 1) * rows, first + rows), rows })}\n disabled={currentPage >= totalPages}\n >\n Next\n </button>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n"]}