@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
@@ -1 +1 @@
1
- {"version":3,"file":"UserListView.js","sourceRoot":"","sources":["../../../../src/components/core/users/UserListView.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { useDeleteMultipleUsersMutation, useLazyGetusersQuery } from '../../../redux/api/userApi';\nimport Link from \"../../common/Link\";\nimport { FilterMatchMode } from \"primereact/api\";\nimport { Button } from \"primereact/button\";\nimport { Column } from \"primereact/column\";\nimport {\n DataTable,\n DataTableFilterMeta,\n DataTableStateEvent,\n} from \"primereact/datatable\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { CreateButton } from \"../../../components/common/CreateButton\";\nimport { FetchBaseQueryError } from \"@reduxjs/toolkit/query\";\nimport { Dialog } from \"primereact/dialog\";\nimport { Toast } from \"primereact/toast\";\nimport qs from \"qs\";\nimport { ERROR_MESSAGES } from '../../../constants/error-messages';\n\ninterface Users {\n id: string;\n fullName: string;\n username: string;\n email: string;\n mobile: string;\n // roles: string[];\n}\n\ninterface ErrorResponseData {\n message: string;\n statusCode: number;\n error: string;\n}\n\nexport const UserListView = () => {\n const toast = useRef<Toast>(null);\n const [users, setUsers] = useState<Users[]>([]);\n const [filters, setFilters] = useState<DataTableFilterMeta>({\n fullName: { value: null, matchMode: FilterMatchMode.STARTS_WITH },\n username: { value: null, matchMode: FilterMatchMode.STARTS_WITH },\n email: { value: null, matchMode: FilterMatchMode.STARTS_WITH },\n mobile: { value: null, matchMode: FilterMatchMode.STARTS_WITH },\n // \"roles.name\": { value: null, matchMode: FilterMatchMode.STARTS_WITH },\n });\n const [first, setFirst] = useState(0);\n const [rows, setRows] = useState(25);\n const [totalRecords, setTotalRecords] = useState(0);\n const [sortField, setSortField] = useState(\"\");\n const [sortOrder, setSortOrder] = useState(0);\n const [selectedUsers, setSelectedUsers] = useState<Users[]>([]);\n const [loading, setLoading] = useState<boolean>(true);\n const [isDialogVisible, setDialogVisible] = useState(false);\n const [triggerGetUser, { data: user, isLoading, error, isError }] = useLazyGetusersQuery();\n\n const [\n deleteManyUser,\n {\n isLoading: isUserDeleted,\n isSuccess: isDeleteUserSuceess,\n isError: isUserDeleteError,\n error: UserDeleteError,\n data: DeletedUser,\n },\n ] = useDeleteMultipleUsersMutation();\n\n\n useEffect(() => {\n if (user) {\n setUsers(user?.data.records);\n setTotalRecords(user?.data.meta?.totalRecords);\n setLoading(false);\n }\n }, [user]);\n\n // const initFilters = () => {\n // setFilters(defaultFilters);\n // setGlobalFilterValue('');\n // };\n\n // const clearFilter = () => {\n // initFilters();\n // };\n\n useEffect(() => {\n const queryData = {\n offset: 0,\n limit: 25,\n populate: ['roles']\n };\n const queryString = qs.stringify(queryData, {\n encodeValuesOnly: true\n });\n triggerGetUser(queryString);\n setSelectedUsers([]);\n }, [isDeleteUserSuceess]);\n\n useEffect(() => {\n if (isError || isUserDeleteError) {\n setLoading(false);\n let errorMessage = ERROR_MESSAGES.ERROR_OCCURED;\n\n const errorToast = isError ? error : UserDeleteError;\n\n if (isFetchBaseQueryErrorWithErrorResponse(errorToast)) {\n errorMessage = `${errorToast.data.message}`;\n } else {\n errorMessage = ERROR_MESSAGES.SOMETHING_WRONG;\n }\n\n toast.current?.show({\n severity: 'error',\n summary: ERROR_MESSAGES.ERROR,\n detail: errorMessage,\n life: 3000,\n //@ts-ignore\n content: (props) => (\n <div\n className=\"flex flex-column align-items-left\"\n style={{ flex: \"1\" }}\n >\n <div className=\"flex align-items-center gap-2\" >\n <span className=\"font-bold text-900\">{errorMessage}</span>\n </div>\n </div>\n ),\n });\n }\n }, [isError, isUserDeleteError]);\n\n function isFetchBaseQueryErrorWithErrorResponse(error: any): error is FetchBaseQueryError & { data: ErrorResponseData } {\n return error && typeof error === 'object' && 'data' in error && 'message' in error.data;\n }\n\n const onPageChange = (event: any) => {\n setFirst(event.first);\n setRows(event.rows);\n setQueryString(event.first, event.rows, sortField, sortOrder, filters);\n };\n\n const onSort = (event: DataTableStateEvent) => {\n const { sortField, sortOrder } = event;\n const validSortOrder = sortOrder === 1 || sortOrder === -1 ? sortOrder : 0;\n setSortField(sortField);\n setSortOrder(validSortOrder);\n setFirst(0);\n setQueryString(\n 0,\n rows,\n sortField,\n sortOrder === 1 || sortOrder === -1 ? sortOrder : 0,\n filters\n );\n };\n\n const onSelectionChange = (event: any) => {\n const value = event.value;\n setSelectedUsers(value);\n };\n\n // Filter fuctions\n const setQueryString = async (\n offset?: number,\n row?: number,\n field?: string,\n order?: number,\n filterQuery?: any\n ) => {\n\n const formattedFilters: any = {};\n\n Object.keys(filterQuery).forEach((field) => {\n const filterValue = filterQuery[field].value;\n const matchMode = filterQuery[field].matchMode;\n\n if (filterValue !== null && filterValue !== undefined) {\n let operator = matchMode;\n switch (matchMode) {\n case FilterMatchMode.CONTAINS:\n operator = \"$containsi\";\n break;\n case FilterMatchMode.STARTS_WITH:\n operator = \"$startsWithi\";\n break;\n case FilterMatchMode.EQUALS:\n operator = \"$eqi\";\n break;\n case FilterMatchMode.NOT_CONTAINS:\n operator = \"$notContainsi\";\n break;\n case FilterMatchMode.NOT_EQUALS:\n operator = \"$nei\";\n break;\n case FilterMatchMode.ENDS_WITH:\n operator = \"$endsWithi\";\n break;\n default:\n operator = matchMode;\n }\n\n if (field.includes(\".\")) {\n const fieldParts = field.split(\".\");\n if (!formattedFilters[fieldParts[0]]) {\n formattedFilters[fieldParts[0]] = {};\n }\n formattedFilters[fieldParts[0]][fieldParts[1]] = { [operator]: filterValue };\n } else {\n formattedFilters[field] = { [operator]: filterValue };\n }\n }\n });\n\n const queryData: any = {\n offset: offset ?? first,\n limit: row ?? rows,\n populate: ['roles'],\n filters: formattedFilters,\n };\n\n if (field) {\n queryData.sort = [\n `${field}:${order == 0 ? null : order == 1 ? \"asc\" : \"desc\"}`,\n ];\n }\n\n const queryString = qs.stringify(queryData, {\n encodeValuesOnly: true,\n });\n\n triggerGetUser(queryString);\n };\n\n const onFilter = (e: any) => {\n setFilters(e.filters);\n setQueryString(\n 0,\n rows,\n sortField,\n sortOrder === 1 || sortOrder === -1 ? sortOrder : 0,\n e.filters\n );\n };\n\n const detailsBodyTemplate = (product: Users) => {\n return (\n <Link\n href={`${product.id}`}\n rel=\"noopener noreferrer\"\n className=\"text-sm font-bold p-0\"\n style={{ color: \"#12415D\" }}\n >\n <i className=\"pi pi-pencil\" style={{ fontSize: \"1rem\" }}></i>\n </Link>\n );\n };\n\n const deleteBulk = () => {\n let deleteList: any = [];\n selectedUsers.forEach((element: Users) => {\n deleteList.push(element.id);\n });\n deleteManyUser(deleteList);\n setDialogVisible(false);\n };\n\n const onDeleteClose = () => {\n setDialogVisible(false);\n setSelectedUsers([]);\n }\n\n return (\n <div className=\"\">\n <Toast ref={toast} />\n <div className=\"flex gap-3 mb-4\">\n <CreateButton />\n {selectedUsers.length > 0 && <Button\n type=\"button\"\n label=\"Delete\"\n size=\"small\"\n onClick={() => setDialogVisible(true)}\n className=\"small-button\"\n severity=\"danger\"\n />}\n </div>\n <style>{`\n .p-datatable .p-datatable-loading-overlay {\n background-color: rgba(0, 0, 0, 0.0);\n }\n `}</style>\n <DataTable\n value={users}\n lazy\n tableStyle={{ minWidth: \"60rem\", margin: \"auto\" }}\n size=\"small\"\n paginator\n rows={rows}\n rowsPerPageOptions={[10, 25, 50]}\n dataKey=\"id\"\n filters={filters}\n emptyMessage=\"No users found\"\n onFilter={onFilter}\n filterDisplay=\"row\"\n totalRecords={totalRecords}\n first={first}\n onPage={onPageChange}\n onSort={(e: DataTableStateEvent) => onSort(e)}\n sortField={sortField}\n sortOrder={sortOrder === 1 || sortOrder === -1 ? sortOrder : 0}\n loading={loading || isLoading}\n loadingIcon=\"pi pi-spinner\"\n selection={selectedUsers}\n onSelectionChange={onSelectionChange}\n selectionMode=\"multiple\"\n removableSort\n >\n <Column selectionMode=\"multiple\" headerStyle={{ width: \"3em\" }} />\n <Column field=\"id\" header=\"ID\" className=\"text-sm\" sortable headerClassName=\"table-header-fs\"></Column>\n <Column\n field=\"fullName\"\n header=\"Full Name\"\n className=\"text-sm\"\n sortable\n filter\n filterPlaceholder=\"Search user by full name\"\n style={{ minWidth: \"12rem\" }}\n headerClassName=\"table-header-fs\"\n ></Column>\n <Column\n field=\"username\"\n header=\"Username\"\n className=\"text-sm\"\n sortable\n filter\n filterPlaceholder=\"Search user by username\"\n style={{ minWidth: \"12rem\" }}\n headerClassName=\"table-header-fs\"\n ></Column>\n <Column\n field=\"email\"\n header=\"Email\"\n className=\"text-sm\"\n sortable\n filter\n filterPlaceholder=\"Search user by email\"\n style={{ minWidth: \"12rem\" }}\n headerClassName=\"table-header-fs\"\n ></Column>\n {/* <Column\n field=\"roles.name\"\n header=\"Roles\"\n className=\"text-sm\"\n filter\n filterPlaceholder=\"Search category by parent category\"\n style={{ minWidth: \"12rem\" }}\n headerClassName=\"table-header-fs\"\n ></Column> */}\n <Column body={detailsBodyTemplate}></Column>\n </DataTable>\n <Dialog\n visible={isDialogVisible}\n header=\"Confirm Delete\"\n modal\n className=\"solid-confirm-dialog\"\n footer={() => (\n <div className=\"flex justify-content-center\">\n <Button label=\"Yes\" icon=\"pi pi-check\" className='small-button' severity=\"danger\" autoFocus onClick={deleteBulk} />\n <Button label=\"No\" icon=\"pi pi-times\" className='small-button' onClick={onDeleteClose} />\n </div>\n )}\n onHide={() => setDialogVisible(false)}\n >\n <p>Are you sure you want to delete the selected Users?</p>\n </Dialog>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"UserListView.js","sourceRoot":"","sources":["../../../../src/components/core/users/UserListView.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { useDeleteMultipleUsersMutation, useLazyGetusersQuery } from '../../../redux/api/userApi';\nimport Link from \"../../common/Link\";\nimport { FilterMatchMode } from \"primereact/api\";\nimport { Button } from \"primereact/button\";\nimport { Column } from \"primereact/column\";\nimport {\n DataTable,\n DataTableFilterMeta,\n DataTableStateEvent,\n} from \"primereact/datatable\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\n\nimport { CreateButton } from \"../../../components/common/CreateButton\";\nimport { FetchBaseQueryError } from \"@reduxjs/toolkit/query\";\nimport { Dialog } from \"primereact/dialog\";\nimport qs from \"qs\";\nimport { ERROR_MESSAGES } from '../../../constants/error-messages';\nimport { showToast } from '../../../redux/features/toastSlice';\n\ninterface Users {\n id: string;\n fullName: string;\n username: string;\n email: string;\n mobile: string;\n // roles: string[];\n}\n\ninterface ErrorResponseData {\n message: string;\n statusCode: number;\n error: string;\n}\n\nexport const UserListView = () => {\n const dispatch = useDispatch();\n const [users, setUsers] = useState<Users[]>([]);\n const [filters, setFilters] = useState<DataTableFilterMeta>({\n fullName: { value: null, matchMode: FilterMatchMode.STARTS_WITH },\n username: { value: null, matchMode: FilterMatchMode.STARTS_WITH },\n email: { value: null, matchMode: FilterMatchMode.STARTS_WITH },\n mobile: { value: null, matchMode: FilterMatchMode.STARTS_WITH },\n // \"roles.name\": { value: null, matchMode: FilterMatchMode.STARTS_WITH },\n });\n const [first, setFirst] = useState(0);\n const [rows, setRows] = useState(25);\n const [totalRecords, setTotalRecords] = useState(0);\n const [sortField, setSortField] = useState(\"\");\n const [sortOrder, setSortOrder] = useState(0);\n const [selectedUsers, setSelectedUsers] = useState<Users[]>([]);\n const [loading, setLoading] = useState<boolean>(true);\n const [isDialogVisible, setDialogVisible] = useState(false);\n const [triggerGetUser, { data: user, isLoading, error, isError }] = useLazyGetusersQuery();\n\n const [\n deleteManyUser,\n {\n isLoading: isUserDeleted,\n isSuccess: isDeleteUserSuceess,\n isError: isUserDeleteError,\n error: UserDeleteError,\n data: DeletedUser,\n },\n ] = useDeleteMultipleUsersMutation();\n\n\n useEffect(() => {\n if (user) {\n setUsers(user?.data.records);\n setTotalRecords(user?.data.meta?.totalRecords);\n setLoading(false);\n }\n }, [user]);\n\n // const initFilters = () => {\n // setFilters(defaultFilters);\n // setGlobalFilterValue('');\n // };\n\n // const clearFilter = () => {\n // initFilters();\n // };\n\n useEffect(() => {\n const queryData = {\n offset: 0,\n limit: 25,\n populate: ['roles']\n };\n const queryString = qs.stringify(queryData, {\n encodeValuesOnly: true\n });\n triggerGetUser(queryString);\n setSelectedUsers([]);\n }, [isDeleteUserSuceess]);\n\n useEffect(() => {\n if (isError || isUserDeleteError) {\n setLoading(false);\n let errorMessage = ERROR_MESSAGES.ERROR_OCCURED;\n\n const errorToast = isError ? error : UserDeleteError;\n\n if (isFetchBaseQueryErrorWithErrorResponse(errorToast)) {\n errorMessage = `${errorToast.data.message}`;\n } else {\n errorMessage = ERROR_MESSAGES.SOMETHING_WRONG;\n }\n\n dispatch(showToast({ severity: 'error', summary: ERROR_MESSAGES.ERROR, detail: errorMessage, life: 3000 }));\n }\n }, [isError, isUserDeleteError]);\n\n function isFetchBaseQueryErrorWithErrorResponse(error: any): error is FetchBaseQueryError & { data: ErrorResponseData } {\n return error && typeof error === 'object' && 'data' in error && 'message' in error.data;\n }\n\n const onPageChange = (event: any) => {\n setFirst(event.first);\n setRows(event.rows);\n setQueryString(event.first, event.rows, sortField, sortOrder, filters);\n };\n\n const onSort = (event: DataTableStateEvent) => {\n const { sortField, sortOrder } = event;\n const validSortOrder = sortOrder === 1 || sortOrder === -1 ? sortOrder : 0;\n setSortField(sortField);\n setSortOrder(validSortOrder);\n setFirst(0);\n setQueryString(\n 0,\n rows,\n sortField,\n sortOrder === 1 || sortOrder === -1 ? sortOrder : 0,\n filters\n );\n };\n\n const onSelectionChange = (event: any) => {\n const value = event.value;\n setSelectedUsers(value);\n };\n\n // Filter fuctions\n const setQueryString = async (\n offset?: number,\n row?: number,\n field?: string,\n order?: number,\n filterQuery?: any\n ) => {\n\n const formattedFilters: any = {};\n\n Object.keys(filterQuery).forEach((field) => {\n const filterValue = filterQuery[field].value;\n const matchMode = filterQuery[field].matchMode;\n\n if (filterValue !== null && filterValue !== undefined) {\n let operator = matchMode;\n switch (matchMode) {\n case FilterMatchMode.CONTAINS:\n operator = \"$containsi\";\n break;\n case FilterMatchMode.STARTS_WITH:\n operator = \"$startsWithi\";\n break;\n case FilterMatchMode.EQUALS:\n operator = \"$eqi\";\n break;\n case FilterMatchMode.NOT_CONTAINS:\n operator = \"$notContainsi\";\n break;\n case FilterMatchMode.NOT_EQUALS:\n operator = \"$nei\";\n break;\n case FilterMatchMode.ENDS_WITH:\n operator = \"$endsWithi\";\n break;\n default:\n operator = matchMode;\n }\n\n if (field.includes(\".\")) {\n const fieldParts = field.split(\".\");\n if (!formattedFilters[fieldParts[0]]) {\n formattedFilters[fieldParts[0]] = {};\n }\n formattedFilters[fieldParts[0]][fieldParts[1]] = { [operator]: filterValue };\n } else {\n formattedFilters[field] = { [operator]: filterValue };\n }\n }\n });\n\n const queryData: any = {\n offset: offset ?? first,\n limit: row ?? rows,\n populate: ['roles'],\n filters: formattedFilters,\n };\n\n if (field) {\n queryData.sort = [\n `${field}:${order == 0 ? null : order == 1 ? \"asc\" : \"desc\"}`,\n ];\n }\n\n const queryString = qs.stringify(queryData, {\n encodeValuesOnly: true,\n });\n\n triggerGetUser(queryString);\n };\n\n const onFilter = (e: any) => {\n setFilters(e.filters);\n setQueryString(\n 0,\n rows,\n sortField,\n sortOrder === 1 || sortOrder === -1 ? sortOrder : 0,\n e.filters\n );\n };\n\n const detailsBodyTemplate = (product: Users) => {\n return (\n <Link\n href={`${product.id}`}\n rel=\"noopener noreferrer\"\n className=\"text-sm font-bold p-0\"\n style={{ color: \"#12415D\" }}\n >\n <i className=\"pi pi-pencil\" style={{ fontSize: \"1rem\" }}></i>\n </Link>\n );\n };\n\n const deleteBulk = () => {\n let deleteList: any = [];\n selectedUsers.forEach((element: Users) => {\n deleteList.push(element.id);\n });\n deleteManyUser(deleteList);\n setDialogVisible(false);\n };\n\n const onDeleteClose = () => {\n setDialogVisible(false);\n setSelectedUsers([]);\n }\n\n return (\n <div className=\"\">\n <div className=\"flex gap-3 mb-4\">\n <CreateButton />\n {selectedUsers.length > 0 && <Button\n type=\"button\"\n label=\"Delete\"\n size=\"small\"\n onClick={() => setDialogVisible(true)}\n className=\"small-button\"\n severity=\"danger\"\n />}\n </div>\n <style>{`\n .p-datatable .p-datatable-loading-overlay {\n background-color: rgba(0, 0, 0, 0.0);\n }\n `}</style>\n <DataTable\n value={users}\n lazy\n tableStyle={{ minWidth: \"60rem\", margin: \"auto\" }}\n size=\"small\"\n paginator\n rows={rows}\n rowsPerPageOptions={[10, 25, 50]}\n dataKey=\"id\"\n filters={filters}\n emptyMessage=\"No users found\"\n onFilter={onFilter}\n filterDisplay=\"row\"\n totalRecords={totalRecords}\n first={first}\n onPage={onPageChange}\n onSort={(e: DataTableStateEvent) => onSort(e)}\n sortField={sortField}\n sortOrder={sortOrder === 1 || sortOrder === -1 ? sortOrder : 0}\n loading={loading || isLoading}\n loadingIcon=\"pi pi-spinner\"\n selection={selectedUsers}\n onSelectionChange={onSelectionChange}\n selectionMode=\"multiple\"\n removableSort\n >\n <Column selectionMode=\"multiple\" headerStyle={{ width: \"3em\" }} />\n <Column field=\"id\" header=\"ID\" className=\"text-sm\" sortable headerClassName=\"table-header-fs\"></Column>\n <Column\n field=\"fullName\"\n header=\"Full Name\"\n className=\"text-sm\"\n sortable\n filter\n filterPlaceholder=\"Search user by full name\"\n style={{ minWidth: \"12rem\" }}\n headerClassName=\"table-header-fs\"\n ></Column>\n <Column\n field=\"username\"\n header=\"Username\"\n className=\"text-sm\"\n sortable\n filter\n filterPlaceholder=\"Search user by username\"\n style={{ minWidth: \"12rem\" }}\n headerClassName=\"table-header-fs\"\n ></Column>\n <Column\n field=\"email\"\n header=\"Email\"\n className=\"text-sm\"\n sortable\n filter\n filterPlaceholder=\"Search user by email\"\n style={{ minWidth: \"12rem\" }}\n headerClassName=\"table-header-fs\"\n ></Column>\n {/* <Column\n field=\"roles.name\"\n header=\"Roles\"\n className=\"text-sm\"\n filter\n filterPlaceholder=\"Search category by parent category\"\n style={{ minWidth: \"12rem\" }}\n headerClassName=\"table-header-fs\"\n ></Column> */}\n <Column body={detailsBodyTemplate}></Column>\n </DataTable>\n <Dialog\n visible={isDialogVisible}\n header=\"Confirm Delete\"\n modal\n className=\"solid-confirm-dialog\"\n footer={() => (\n <div className=\"flex justify-content-center\">\n <Button label=\"Yes\" icon=\"pi pi-check\" className='small-button' severity=\"danger\" autoFocus onClick={deleteBulk} />\n <Button label=\"No\" icon=\"pi pi-times\" className='small-button' onClick={onDeleteClose} />\n </div>\n )}\n onHide={() => setDialogVisible(false)}\n >\n <p>Are you sure you want to delete the selected Users?</p>\n </Dialog>\n </div>\n );\n};\n"]}
@@ -9,14 +9,15 @@ import {
9
9
  DataTableFilterMeta,
10
10
  DataTableStateEvent,
11
11
  } from "primereact/datatable";
12
- import { useEffect, useRef, useState } from "react";
12
+ import { useEffect, useState } from "react";
13
+ import { useDispatch } from "react-redux";
13
14
 
14
15
  import { CreateButton } from "../../../components/common/CreateButton";
15
16
  import { FetchBaseQueryError } from "@reduxjs/toolkit/query";
16
17
  import { Dialog } from "primereact/dialog";
17
- import { Toast } from "primereact/toast";
18
18
  import qs from "qs";
19
19
  import { ERROR_MESSAGES } from '../../../constants/error-messages';
20
+ import { showToast } from '../../../redux/features/toastSlice';
20
21
 
21
22
  interface Users {
22
23
  id: string;
@@ -34,7 +35,7 @@ interface ErrorResponseData {
34
35
  }
35
36
 
36
37
  export const UserListView = () => {
37
- const toast = useRef<Toast>(null);
38
+ const dispatch = useDispatch();
38
39
  const [users, setUsers] = useState<Users[]>([]);
39
40
  const [filters, setFilters] = useState<DataTableFilterMeta>({
40
41
  fullName: { value: null, matchMode: FilterMatchMode.STARTS_WITH },
@@ -108,23 +109,7 @@ export const UserListView = () => {
108
109
  errorMessage = ERROR_MESSAGES.SOMETHING_WRONG;
109
110
  }
110
111
 
111
- toast.current?.show({
112
- severity: 'error',
113
- summary: ERROR_MESSAGES.ERROR,
114
- detail: errorMessage,
115
- life: 3000,
116
- //@ts-ignore
117
- content: (props) => (
118
- <div
119
- className="flex flex-column align-items-left"
120
- style={{ flex: "1" }}
121
- >
122
- <div className="flex align-items-center gap-2" >
123
- <span className="font-bold text-900">{errorMessage}</span>
124
- </div>
125
- </div>
126
- ),
127
- });
112
+ dispatch(showToast({ severity: 'error', summary: ERROR_MESSAGES.ERROR, detail: errorMessage, life: 3000 }));
128
113
  }
129
114
  }, [isError, isUserDeleteError]);
130
115
 
@@ -270,7 +255,6 @@ export const UserListView = () => {
270
255
 
271
256
  return (
272
257
  <div className="">
273
- <Toast ref={toast} />
274
258
  <div className="flex gap-3 mb-4">
275
259
  <CreateButton />
276
260
  {selectedUsers.length > 0 && <Button
@@ -1 +1 @@
1
- {"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AdminLayout.tsx"],"names":[],"mappings":"AAWA,eAAO,MAAM,WAAW;cAA8B,MAAM,SAAS;6CA2CpE,CAAA"}
1
+ {"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AdminLayout.tsx"],"names":[],"mappings":"AAYA,eAAO,MAAM,WAAW;cAA8B,MAAM,SAAS;6CA4CpE,CAAA"}
@@ -1,9 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { handleError } from "../../helpers/ToastContainer";
3
2
  import { signOut } from "../../adapters/auth/index";
4
3
  import { useSession } from "../../hooks/useSession";
5
4
  import { useRouter } from "../../hooks/useRouter";
6
5
  import { useEffect, useState } from "react";
6
+ import { useDispatch } from 'react-redux';
7
+ import { showToast } from '../../redux/features/toastSlice';
7
8
  import { Layout } from "./Layout";
8
9
  import { Dialog } from "primereact/dialog";
9
10
  import { Divider } from "primereact/divider";
@@ -12,6 +13,7 @@ import { ERROR_MESSAGES } from "../../constants/error-messages";
12
13
  export var AdminLayout = function (_a) {
13
14
  var children = _a.children;
14
15
  // const theme = useSelector((state: any) => state.theme.mode);
16
+ var dispatch = useDispatch();
15
17
  var _b = useSession(), session = _b.data, status = _b.status;
16
18
  var _c = useState(false), isForcePasswordChange = _c[0], setIsForcePasswordChange = _c[1];
17
19
  useEffect(function () {
@@ -29,7 +31,7 @@ export var AdminLayout = function (_a) {
29
31
  if (status === "loading")
30
32
  return;
31
33
  if (!session || (session === null || session === void 0 ? void 0 : session.error) === "RefreshAccessTokenError") {
32
- handleError([ERROR_MESSAGES.SESSION_EXPIRED]);
34
+ dispatch(showToast({ severity: 'error', summary: 'Error', detail: ERROR_MESSAGES.SESSION_EXPIRED }));
33
35
  signOut({ callbackUrl: "/auth/login" });
34
36
  }
35
37
  }, [session, status]);
@@ -1 +1 @@
1
- {"version":3,"file":"AdminLayout.js","sourceRoot":"","sources":["../../../src/components/layout/AdminLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,CAAC,IAAM,WAAW,GAAG,UAAC,EAA2C;QAAzC,QAAQ,cAAA;IAClC,+DAA+D;IACzD,IAAA,KAA4B,UAAU,EAAE,EAAhC,OAAO,UAAA,EAAE,MAAM,YAAiB,CAAC;IACzC,IAAA,KAAoD,QAAQ,CAAC,KAAK,CAAC,EAAlE,qBAAqB,QAAA,EAAE,wBAAwB,QAAmB,CAAA;IACzE,SAAS,CAAC;;QACN,IAAI,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,mBAAmB,MAAK,IAAI,EAAE;YAC7C,wBAAwB,CAAC,IAAI,CAAC,CAAA;SACjC;aAAM;YACH,wBAAwB,CAAC,KAAK,CAAC,CAAA;SAClC;IACL,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACb,kCAAkC;IAClC,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,SAAS,CAAC;QACN,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,IAAI,CAAC,OAAO,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,MAAK,yBAAyB,EAAE;YAC1D,WAAW,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAA;YAC7C,OAAO,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;SAC3C;IAEL,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;IAErB,OAAO,CACH,MAAC,MAAM,eAQF,QAAQ,EAIR,qBAAqB;gBAClB,MAAC,MAAM,IAAC,MAAM,EAAC,yBAAyB,EAAC,SAAS,EAAC,qBAAqB,EAAC,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAM,OAAA,wBAAwB,CAAC,KAAK,CAAC,EAA/B,CAA+B,aAC/M,KAAC,OAAO,IAAC,SAAS,EAAC,MAAM,GAAG,EAC5B,KAAC,wBAAwB,KAAG,IACvB,IAER,CACZ,CAAA;AACL,CAAC,CAAA","sourcesContent":["import { handleError } from \"../../helpers/ToastContainer\";\nimport { signOut } from \"../../adapters/auth/index\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useEffect, useState } from \"react\";\nimport { Layout } from \"./Layout\";\nimport { Dialog } from \"primereact/dialog\";\nimport { Divider } from \"primereact/divider\";\nimport SolidChangeForcePassword from \"../auth/SolidChangeForcePassword\";\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\n\nexport const AdminLayout = ({ children }: { children: React.ReactNode }) => {\n // const theme = useSelector((state: any) => state.theme.mode);\n const { data: session, status } = useSession();\n const [isForcePasswordChange, setIsForcePasswordChange] = useState(false)\n useEffect(() => {\n if (session?.user?.forcePasswordChange === true) {\n setIsForcePasswordChange(true)\n } else {\n setIsForcePasswordChange(false)\n }\n }, [session])\n // const pathname = usePathname();\n const router = useRouter();\n useEffect(() => {\n if (status === \"loading\") return;\n if (!session || session?.error === \"RefreshAccessTokenError\") {\n handleError([ERROR_MESSAGES.SESSION_EXPIRED])\n signOut({ callbackUrl: \"/auth/login\" });\n }\n\n }, [session, status])\n\n return (\n <Layout>\n {/* <div className={`${getEnv(\"NEXT_PUBLIC_ENABLE_CUSTOM_HEADER_FOOTER\") == \"true\" && 'header-margin-top'}`} style={{ minHeight: `${getEnv(\"NEXT_PUBLIC_ENABLE_CUSTOM_HEADER_FOOTER\") == \"true\" ? 'calc(100vh - 70px)' : 'calc(100vh)'}` }}> */}\n\n {/* <div className=\"min-h-full max-h-full flex flex-column relative flex-auto overflow-x-auto\"> */}\n {/* <DashboardHeader /> */}\n {/* <SolidListingHeader></SolidListingHeader> */}\n {/* {pathname.includes('all') && <ListingHeader />} */}\n {/* <div className=\"flex flex-column flex-auto\" style={{ backgroundColor: '#f6f6f9', padding: '1.5rem 1.5rem 1.5rem', }}> */}\n {children}\n {/* </div> */}\n {/* </div> */}\n {/* </div> */}\n {isForcePasswordChange &&\n <Dialog header=\"Change Default Password\" className=\"solid-change-dialog\" visible={isForcePasswordChange} closable={false} draggable={false} style={{ width: '25vw' }} onHide={() => setIsForcePasswordChange(false)}>\n <Divider className=\"mt-0\" />\n <SolidChangeForcePassword />\n </Dialog>\n }\n </Layout>\n )\n}\n"]}
1
+ {"version":3,"file":"AdminLayout.js","sourceRoot":"","sources":["../../../src/components/layout/AdminLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,CAAC,IAAM,WAAW,GAAG,UAAC,EAA2C;QAAzC,QAAQ,cAAA;IAClC,+DAA+D;IAC/D,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IACzB,IAAA,KAA4B,UAAU,EAAE,EAAhC,OAAO,UAAA,EAAE,MAAM,YAAiB,CAAC;IACzC,IAAA,KAAoD,QAAQ,CAAC,KAAK,CAAC,EAAlE,qBAAqB,QAAA,EAAE,wBAAwB,QAAmB,CAAA;IACzE,SAAS,CAAC;;QACN,IAAI,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,mBAAmB,MAAK,IAAI,EAAE;YAC7C,wBAAwB,CAAC,IAAI,CAAC,CAAA;SACjC;aAAM;YACH,wBAAwB,CAAC,KAAK,CAAC,CAAA;SAClC;IACL,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACb,kCAAkC;IAClC,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,SAAS,CAAC;QACN,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,IAAI,CAAC,OAAO,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,MAAK,yBAAyB,EAAE;YAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;YACpG,OAAO,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;SAC3C;IAEL,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;IAErB,OAAO,CACH,MAAC,MAAM,eAQF,QAAQ,EAIR,qBAAqB;gBAClB,MAAC,MAAM,IAAC,MAAM,EAAC,yBAAyB,EAAC,SAAS,EAAC,qBAAqB,EAAC,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAM,OAAA,wBAAwB,CAAC,KAAK,CAAC,EAA/B,CAA+B,aAC/M,KAAC,OAAO,IAAC,SAAS,EAAC,MAAM,GAAG,EAC5B,KAAC,wBAAwB,KAAG,IACvB,IAER,CACZ,CAAA;AACL,CAAC,CAAA","sourcesContent":["import { signOut } from \"../../adapters/auth/index\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from 'react-redux';\nimport { showToast } from '../../redux/features/toastSlice';\nimport { Layout } from \"./Layout\";\nimport { Dialog } from \"primereact/dialog\";\nimport { Divider } from \"primereact/divider\";\nimport SolidChangeForcePassword from \"../auth/SolidChangeForcePassword\";\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\n\nexport const AdminLayout = ({ children }: { children: React.ReactNode }) => {\n // const theme = useSelector((state: any) => state.theme.mode);\n const dispatch = useDispatch();\n const { data: session, status } = useSession();\n const [isForcePasswordChange, setIsForcePasswordChange] = useState(false)\n useEffect(() => {\n if (session?.user?.forcePasswordChange === true) {\n setIsForcePasswordChange(true)\n } else {\n setIsForcePasswordChange(false)\n }\n }, [session])\n // const pathname = usePathname();\n const router = useRouter();\n useEffect(() => {\n if (status === \"loading\") return;\n if (!session || session?.error === \"RefreshAccessTokenError\") {\n dispatch(showToast({ severity: 'error', summary: 'Error', detail: ERROR_MESSAGES.SESSION_EXPIRED }))\n signOut({ callbackUrl: \"/auth/login\" });\n }\n\n }, [session, status])\n\n return (\n <Layout>\n {/* <div className={`${getEnv(\"NEXT_PUBLIC_ENABLE_CUSTOM_HEADER_FOOTER\") == \"true\" && 'header-margin-top'}`} style={{ minHeight: `${getEnv(\"NEXT_PUBLIC_ENABLE_CUSTOM_HEADER_FOOTER\") == \"true\" ? 'calc(100vh - 70px)' : 'calc(100vh)'}` }}> */}\n\n {/* <div className=\"min-h-full max-h-full flex flex-column relative flex-auto overflow-x-auto\"> */}\n {/* <DashboardHeader /> */}\n {/* <SolidListingHeader></SolidListingHeader> */}\n {/* {pathname.includes('all') && <ListingHeader />} */}\n {/* <div className=\"flex flex-column flex-auto\" style={{ backgroundColor: '#f6f6f9', padding: '1.5rem 1.5rem 1.5rem', }}> */}\n {children}\n {/* </div> */}\n {/* </div> */}\n {/* </div> */}\n {isForcePasswordChange &&\n <Dialog header=\"Change Default Password\" className=\"solid-change-dialog\" visible={isForcePasswordChange} closable={false} draggable={false} style={{ width: '25vw' }} onHide={() => setIsForcePasswordChange(false)}>\n <Divider className=\"mt-0\" />\n <SolidChangeForcePassword />\n </Dialog>\n }\n </Layout>\n )\n}\n"]}
@@ -1,8 +1,9 @@
1
- import { handleError } from "../../helpers/ToastContainer";
2
1
  import { signOut } from "../../adapters/auth/index";
3
2
  import { useSession } from "../../hooks/useSession";
4
3
  import { useRouter } from "../../hooks/useRouter";
5
4
  import { useEffect, useState } from "react";
5
+ import { useDispatch } from 'react-redux';
6
+ import { showToast } from '../../redux/features/toastSlice';
6
7
  import { Layout } from "./Layout";
7
8
  import { Dialog } from "primereact/dialog";
8
9
  import { Divider } from "primereact/divider";
@@ -11,6 +12,7 @@ import { ERROR_MESSAGES } from "../../constants/error-messages";
11
12
 
12
13
  export const AdminLayout = ({ children }: { children: React.ReactNode }) => {
13
14
  // const theme = useSelector((state: any) => state.theme.mode);
15
+ const dispatch = useDispatch();
14
16
  const { data: session, status } = useSession();
15
17
  const [isForcePasswordChange, setIsForcePasswordChange] = useState(false)
16
18
  useEffect(() => {
@@ -25,7 +27,7 @@ export const AdminLayout = ({ children }: { children: React.ReactNode }) => {
25
27
  useEffect(() => {
26
28
  if (status === "loading") return;
27
29
  if (!session || session?.error === "RefreshAccessTokenError") {
28
- handleError([ERROR_MESSAGES.SESSION_EXPIRED])
30
+ dispatch(showToast({ severity: 'error', summary: 'Error', detail: ERROR_MESSAGES.SESSION_EXPIRED }))
29
31
  signOut({ callbackUrl: "/auth/login" });
30
32
  }
31
33
 
@@ -0,0 +1,2 @@
1
+ export declare const AdminTopHeader: () => import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=AdminTopHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminTopHeader.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AdminTopHeader.tsx"],"names":[],"mappings":"AA0BA,eAAO,MAAM,cAAc,+CA0I1B,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useContext, useMemo } from "react";
3
+ import { useDispatch, useSelector } from "react-redux";
4
+ import { usePathname } from "../../hooks/usePathname";
5
+ import { useSearchParams } from "../../hooks/useSearchParams";
6
+ import { useRouter } from "../../hooks/useRouter";
7
+ import { useSession } from "../../hooks/useSession";
8
+ import { useGetSolidActionByIdQuery } from "../../redux/api/solidActionApi";
9
+ import { LayoutContext } from "./context/layoutcontext";
10
+ import { enterStudioMode } from "../../redux/features/solidStudioSlice";
11
+ import { hasAnyRole } from "../../helpers/rolesHelper";
12
+ import { env } from "../../adapters/env";
13
+ var SIDEBAR_TOGGLE_EVENT = "solidx:sidebar-toggle";
14
+ var toLabel = function (value) {
15
+ return decodeURIComponent(value)
16
+ .replace(/[-_]/g, " ")
17
+ .replace(/\b\w/g, function (m) { return m.toUpperCase(); });
18
+ };
19
+ var StudioSparkleIcon = function () { return (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: [_jsx("path", { d: "M7 1v2M7 11v2M1 7h2M11 7h2M2.93 2.93l1.41 1.41M9.66 9.66l1.41 1.41M2.93 11.07l1.41-1.41M9.66 4.34l1.41-1.41", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round" }), _jsx("circle", { cx: "7", cy: "7", r: "2", stroke: "currentColor", strokeWidth: "1.4" })] })); };
20
+ export var AdminTopHeader = function () {
21
+ var pathname = usePathname();
22
+ var searchParams = useSearchParams();
23
+ var router = useRouter();
24
+ var dispatch = useDispatch();
25
+ var toggleThemeMode = useContext(LayoutContext).toggleThemeMode;
26
+ var session = useSession().data;
27
+ var user = session === null || session === void 0 ? void 0 : session.user;
28
+ var isAdmin = hasAnyRole(user === null || user === void 0 ? void 0 : user.roles, ["Admin"]);
29
+ var isStudioMode = useSelector(function (state) { var _a, _b; return (_b = (_a = state.solidStudio) === null || _a === void 0 ? void 0 : _a.isStudioMode) !== null && _b !== void 0 ? _b : false; });
30
+ var isDev = env("VITE_SOLIDX_ENV") === "dev";
31
+ // We treat actionId as the source of truth for breadcrumb labels.
32
+ // If present, we resolve module/model/action via action-metadata API
33
+ // so breadcrumbs are consistent across list/form/tree/kanban pages.
34
+ var actionId = searchParams.get("actionId");
35
+ var actionResponse = useGetSolidActionByIdQuery(actionId, {
36
+ skip: !actionId,
37
+ }).data;
38
+ var crumbs = useMemo(function () {
39
+ var _a, _b, _c, _d, _e, _f, _g;
40
+ // API response shapes vary by adapter layer, so normalize defensively.
41
+ var actionData = (_c = (_b = (_a = actionResponse === null || actionResponse === void 0 ? void 0 : actionResponse.data) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : actionResponse === null || actionResponse === void 0 ? void 0 : actionResponse.data) !== null && _c !== void 0 ? _c : actionResponse;
42
+ var moduleFromApi = ((_d = actionData === null || actionData === void 0 ? void 0 : actionData.module) === null || _d === void 0 ? void 0 : _d.displayName) || ((_e = actionData === null || actionData === void 0 ? void 0 : actionData.module) === null || _e === void 0 ? void 0 : _e.name);
43
+ var modelFromApi = ((_f = actionData === null || actionData === void 0 ? void 0 : actionData.model) === null || _f === void 0 ? void 0 : _f.displayName) || ((_g = actionData === null || actionData === void 0 ? void 0 : actionData.model) === null || _g === void 0 ? void 0 : _g.name);
44
+ var actionFromApi = (actionData === null || actionData === void 0 ? void 0 : actionData.displayName) || (actionData === null || actionData === void 0 ? void 0 : actionData.name);
45
+ var actionDataId = (actionData === null || actionData === void 0 ? void 0 : actionData.id) != null ? String(actionData.id) : null;
46
+ var hasMatchingActionData = Boolean(actionId) && actionDataId === actionId;
47
+ // Priority 1: exact business breadcrumb contract requested:
48
+ // <module> > <model> > <action>.
49
+ // We only trust API crumbs when they belong to the current URL's actionId.
50
+ // This avoids stale list breadcrumbs bleeding into form routes that do not
51
+ // carry actionId in their query string.
52
+ if (hasMatchingActionData && (moduleFromApi || modelFromApi || actionFromApi)) {
53
+ return [moduleFromApi, modelFromApi, actionFromApi].filter(Boolean);
54
+ }
55
+ var segments = pathname.split("/").filter(Boolean);
56
+ // Priority 2: derive from route segments when API data is unavailable.
57
+ // This is intentionally ahead of query fallback so form pages don't
58
+ // inherit stale list query labels after list -> form navigation.
59
+ if (segments[0] === "admin" && segments[1] === "core") {
60
+ var moduleName = segments[2];
61
+ var modelName = segments[3];
62
+ var viewName = segments[4];
63
+ var next = [moduleName, modelName, viewName].filter(Boolean).map(function (item) { return toLabel(item); });
64
+ return next.length ? next : ["Admin"];
65
+ }
66
+ var menuItemName = searchParams.get("menuItemName");
67
+ var actionName = searchParams.get("actionName");
68
+ // Priority 3: legacy URL-query fallback for older links/pages.
69
+ if (menuItemName || actionName) {
70
+ return [menuItemName, actionName].filter(Boolean).map(function (item) { return toLabel(item); });
71
+ }
72
+ return ["Admin"];
73
+ }, [actionId, actionResponse, pathname, searchParams]);
74
+ var showBack = /\/admin\/core\/[^/]+\/[^/]+\/form\/[^/]+/.test(pathname);
75
+ var triggerSidebar = function () {
76
+ window.dispatchEvent(new CustomEvent(SIDEBAR_TOGGLE_EVENT));
77
+ };
78
+ return (_jsx("header", { className: "solid-admin-header", children: _jsxs("div", { className: "solid-admin-header-inner", children: [_jsx("button", { type: "button", className: "solid-admin-sidebar-trigger", onClick: triggerSidebar, "aria-label": "Toggle sidebar", children: _jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [_jsx("rect", { x: "1.5", y: "2", width: "13", height: "12", rx: "2", stroke: "currentColor" }), _jsx("path", { d: "M5.5 2V14", stroke: "currentColor" }), _jsx("rect", { x: "8", y: "5.25", width: "4.5", height: "5.5", rx: "0.9", stroke: "currentColor" })] }) }), _jsx("div", { className: "solid-admin-header-sep" }), _jsx("nav", { className: "solid-admin-breadcrumbs", "aria-label": "Breadcrumb", children: crumbs.map(function (crumb, index) { return (_jsxs("span", { className: "solid-admin-crumb", children: [index > 0 && _jsx("span", { className: "solid-admin-crumb-sep", children: "\u203A" }), _jsx("span", { children: crumb })] }, "".concat(crumb, "-").concat(index))); }) }), _jsxs("div", { className: "solid-admin-header-actions", children: [isAdmin && isDev && !isStudioMode && (_jsxs("button", { type: "button", className: "solid-studio-trigger-btn", onClick: function () { dispatch(enterStudioMode()); router.push("/studio"); }, title: "Enter SolidX Studio", children: [_jsx(StudioSparkleIcon, {}), "Studio"] })), _jsxs("button", { type: "button", className: "solid-admin-theme-toggle", onClick: toggleThemeMode, "aria-label": "Toggle theme", title: "Toggle theme", children: [_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [_jsx("path", { d: "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 3l0 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 9l4.65 -4.65", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 14.3l7.37 -7.37", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 19.6l8.85 -8.85", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })] }), _jsx("span", { className: "solid-sr-only", children: "Toggle theme" })] }), showBack && (_jsx("button", { type: "button", className: "solid-admin-back-btn", onClick: function () { return router.back(); }, "aria-label": "Go back", children: "Back" }))] })] }) }));
79
+ };
80
+ //# sourceMappingURL=AdminTopHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminTopHeader.js","sourceRoot":"","sources":["../../../src/components/layout/AdminTopHeader.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useMemo } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useSearchParams } from \"../../hooks/useSearchParams\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useGetSolidActionByIdQuery } from \"../../redux/api/solidActionApi\";\nimport { LayoutContext } from \"./context/layoutcontext\";\nimport { enterStudioMode } from \"../../redux/features/solidStudioSlice\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { env } from \"../../adapters/env\";\n\nconst SIDEBAR_TOGGLE_EVENT = \"solidx:sidebar-toggle\";\n\nconst toLabel = (value: string) =>\n decodeURIComponent(value)\n .replace(/[-_]/g, \" \")\n .replace(/\\b\\w/g, (m) => m.toUpperCase());\n\nconst StudioSparkleIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M7 1v2M7 11v2M1 7h2M11 7h2M2.93 2.93l1.41 1.41M9.66 9.66l1.41 1.41M2.93 11.07l1.41-1.41M9.66 4.34l1.41-1.41\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n <circle cx=\"7\" cy=\"7\" r=\"2\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n </svg>\n);\n\nexport const AdminTopHeader = () => {\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const router = useRouter();\n const dispatch = useDispatch();\n const { toggleThemeMode } = useContext(LayoutContext);\n const { data: session } = useSession();\n const user = session?.user;\n const isAdmin = hasAnyRole(user?.roles, [\"Admin\"]);\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n\n // We treat actionId as the source of truth for breadcrumb labels.\n // If present, we resolve module/model/action via action-metadata API\n // so breadcrumbs are consistent across list/form/tree/kanban pages.\n const actionId = searchParams.get(\"actionId\");\n const { data: actionResponse } = useGetSolidActionByIdQuery(actionId as string, {\n skip: !actionId,\n });\n\n const crumbs = useMemo(() => {\n // API response shapes vary by adapter layer, so normalize defensively.\n const actionData = actionResponse?.data?.data ?? actionResponse?.data ?? actionResponse;\n const moduleFromApi = actionData?.module?.displayName || actionData?.module?.name;\n const modelFromApi = actionData?.model?.displayName || actionData?.model?.name;\n const actionFromApi = actionData?.displayName || actionData?.name;\n const actionDataId = actionData?.id != null ? String(actionData.id) : null;\n const hasMatchingActionData = Boolean(actionId) && actionDataId === actionId;\n\n // Priority 1: exact business breadcrumb contract requested:\n // <module> > <model> > <action>.\n // We only trust API crumbs when they belong to the current URL's actionId.\n // This avoids stale list breadcrumbs bleeding into form routes that do not\n // carry actionId in their query string.\n if (hasMatchingActionData && (moduleFromApi || modelFromApi || actionFromApi)) {\n return [moduleFromApi, modelFromApi, actionFromApi].filter(Boolean);\n }\n\n const segments = pathname.split(\"/\").filter(Boolean);\n // Priority 2: derive from route segments when API data is unavailable.\n // This is intentionally ahead of query fallback so form pages don't\n // inherit stale list query labels after list -> form navigation.\n if (segments[0] === \"admin\" && segments[1] === \"core\") {\n const moduleName = segments[2];\n const modelName = segments[3];\n const viewName = segments[4];\n const next = [moduleName, modelName, viewName].filter(Boolean).map((item) => toLabel(item!));\n return next.length ? next : [\"Admin\"];\n }\n\n const menuItemName = searchParams.get(\"menuItemName\");\n const actionName = searchParams.get(\"actionName\");\n\n // Priority 3: legacy URL-query fallback for older links/pages.\n if (menuItemName || actionName) {\n return [menuItemName, actionName].filter(Boolean).map((item) => toLabel(item!));\n }\n\n return [\"Admin\"];\n }, [actionId, actionResponse, pathname, searchParams]);\n\n const showBack = /\\/admin\\/core\\/[^/]+\\/[^/]+\\/form\\/[^/]+/.test(pathname);\n\n const triggerSidebar = () => {\n window.dispatchEvent(new CustomEvent(SIDEBAR_TOGGLE_EVENT));\n };\n\n return (\n <header className=\"solid-admin-header\">\n <div className=\"solid-admin-header-inner\">\n <button\n type=\"button\"\n className=\"solid-admin-sidebar-trigger\"\n onClick={triggerSidebar}\n aria-label=\"Toggle sidebar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1.5\" y=\"2\" width=\"13\" height=\"12\" rx=\"2\" stroke=\"currentColor\" />\n <path d=\"M5.5 2V14\" stroke=\"currentColor\" />\n <rect x=\"8\" y=\"5.25\" width=\"4.5\" height=\"5.5\" rx=\"0.9\" stroke=\"currentColor\" />\n </svg>\n </button>\n\n <div className=\"solid-admin-header-sep\" />\n\n <nav className=\"solid-admin-breadcrumbs\" aria-label=\"Breadcrumb\">\n {crumbs.map((crumb, index) => (\n <span key={`${crumb}-${index}`} className=\"solid-admin-crumb\">\n {index > 0 && <span className=\"solid-admin-crumb-sep\">›</span>}\n <span>{crumb}</span>\n </span>\n ))}\n </nav>\n\n <div className=\"solid-admin-header-actions\">\n {isAdmin && isDev && !isStudioMode && (\n <button\n type=\"button\"\n className=\"solid-studio-trigger-btn\"\n onClick={() => { dispatch(enterStudioMode()); router.push(\"/studio\"); }}\n title=\"Enter SolidX Studio\"\n >\n <StudioSparkleIcon />\n Studio\n </button>\n )}\n\n <button\n type=\"button\"\n className=\"solid-admin-theme-toggle\"\n onClick={toggleThemeMode}\n aria-label=\"Toggle theme\"\n title=\"Toggle theme\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 3l0 18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 9l4.65 -4.65\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 14.3l7.37 -7.37\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 19.6l8.85 -8.85\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n <span className=\"solid-sr-only\">Toggle theme</span>\n </button>\n\n {showBack && (\n <button\n type=\"button\"\n className=\"solid-admin-back-btn\"\n onClick={() => router.back()}\n aria-label=\"Go back\"\n >\n Back\n </button>\n )}\n </div>\n </div>\n </header>\n );\n};\n"]}
@@ -0,0 +1,165 @@
1
+ import { useContext, useMemo } from "react";
2
+ import { useDispatch, useSelector } from "react-redux";
3
+ import { usePathname } from "../../hooks/usePathname";
4
+ import { useSearchParams } from "../../hooks/useSearchParams";
5
+ import { useRouter } from "../../hooks/useRouter";
6
+ import { useSession } from "../../hooks/useSession";
7
+ import { useGetSolidActionByIdQuery } from "../../redux/api/solidActionApi";
8
+ import { LayoutContext } from "./context/layoutcontext";
9
+ import { enterStudioMode } from "../../redux/features/solidStudioSlice";
10
+ import { hasAnyRole } from "../../helpers/rolesHelper";
11
+ import { env } from "../../adapters/env";
12
+
13
+ const SIDEBAR_TOGGLE_EVENT = "solidx:sidebar-toggle";
14
+
15
+ const toLabel = (value: string) =>
16
+ decodeURIComponent(value)
17
+ .replace(/[-_]/g, " ")
18
+ .replace(/\b\w/g, (m) => m.toUpperCase());
19
+
20
+ const StudioSparkleIcon = () => (
21
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true">
22
+ <path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.93 2.93l1.41 1.41M9.66 9.66l1.41 1.41M2.93 11.07l1.41-1.41M9.66 4.34l1.41-1.41" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" />
23
+ <circle cx="7" cy="7" r="2" stroke="currentColor" strokeWidth="1.4" />
24
+ </svg>
25
+ );
26
+
27
+ export const AdminTopHeader = () => {
28
+ const pathname = usePathname();
29
+ const searchParams = useSearchParams();
30
+ const router = useRouter();
31
+ const dispatch = useDispatch();
32
+ const { toggleThemeMode } = useContext(LayoutContext);
33
+ const { data: session } = useSession();
34
+ const user = session?.user;
35
+ const isAdmin = hasAnyRole(user?.roles, ["Admin"]);
36
+ const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);
37
+ const isDev = env("VITE_SOLIDX_ENV") === "dev";
38
+
39
+ // We treat actionId as the source of truth for breadcrumb labels.
40
+ // If present, we resolve module/model/action via action-metadata API
41
+ // so breadcrumbs are consistent across list/form/tree/kanban pages.
42
+ const actionId = searchParams.get("actionId");
43
+ const { data: actionResponse } = useGetSolidActionByIdQuery(actionId as string, {
44
+ skip: !actionId,
45
+ });
46
+
47
+ const crumbs = useMemo(() => {
48
+ // API response shapes vary by adapter layer, so normalize defensively.
49
+ const actionData = actionResponse?.data?.data ?? actionResponse?.data ?? actionResponse;
50
+ const moduleFromApi = actionData?.module?.displayName || actionData?.module?.name;
51
+ const modelFromApi = actionData?.model?.displayName || actionData?.model?.name;
52
+ const actionFromApi = actionData?.displayName || actionData?.name;
53
+ const actionDataId = actionData?.id != null ? String(actionData.id) : null;
54
+ const hasMatchingActionData = Boolean(actionId) && actionDataId === actionId;
55
+
56
+ // Priority 1: exact business breadcrumb contract requested:
57
+ // <module> > <model> > <action>.
58
+ // We only trust API crumbs when they belong to the current URL's actionId.
59
+ // This avoids stale list breadcrumbs bleeding into form routes that do not
60
+ // carry actionId in their query string.
61
+ if (hasMatchingActionData && (moduleFromApi || modelFromApi || actionFromApi)) {
62
+ return [moduleFromApi, modelFromApi, actionFromApi].filter(Boolean);
63
+ }
64
+
65
+ const segments = pathname.split("/").filter(Boolean);
66
+ // Priority 2: derive from route segments when API data is unavailable.
67
+ // This is intentionally ahead of query fallback so form pages don't
68
+ // inherit stale list query labels after list -> form navigation.
69
+ if (segments[0] === "admin" && segments[1] === "core") {
70
+ const moduleName = segments[2];
71
+ const modelName = segments[3];
72
+ const viewName = segments[4];
73
+ const next = [moduleName, modelName, viewName].filter(Boolean).map((item) => toLabel(item!));
74
+ return next.length ? next : ["Admin"];
75
+ }
76
+
77
+ const menuItemName = searchParams.get("menuItemName");
78
+ const actionName = searchParams.get("actionName");
79
+
80
+ // Priority 3: legacy URL-query fallback for older links/pages.
81
+ if (menuItemName || actionName) {
82
+ return [menuItemName, actionName].filter(Boolean).map((item) => toLabel(item!));
83
+ }
84
+
85
+ return ["Admin"];
86
+ }, [actionId, actionResponse, pathname, searchParams]);
87
+
88
+ const showBack = /\/admin\/core\/[^/]+\/[^/]+\/form\/[^/]+/.test(pathname);
89
+
90
+ const triggerSidebar = () => {
91
+ window.dispatchEvent(new CustomEvent(SIDEBAR_TOGGLE_EVENT));
92
+ };
93
+
94
+ return (
95
+ <header className="solid-admin-header">
96
+ <div className="solid-admin-header-inner">
97
+ <button
98
+ type="button"
99
+ className="solid-admin-sidebar-trigger"
100
+ onClick={triggerSidebar}
101
+ aria-label="Toggle sidebar"
102
+ >
103
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true">
104
+ <rect x="1.5" y="2" width="13" height="12" rx="2" stroke="currentColor" />
105
+ <path d="M5.5 2V14" stroke="currentColor" />
106
+ <rect x="8" y="5.25" width="4.5" height="5.5" rx="0.9" stroke="currentColor" />
107
+ </svg>
108
+ </button>
109
+
110
+ <div className="solid-admin-header-sep" />
111
+
112
+ <nav className="solid-admin-breadcrumbs" aria-label="Breadcrumb">
113
+ {crumbs.map((crumb, index) => (
114
+ <span key={`${crumb}-${index}`} className="solid-admin-crumb">
115
+ {index > 0 && <span className="solid-admin-crumb-sep">›</span>}
116
+ <span>{crumb}</span>
117
+ </span>
118
+ ))}
119
+ </nav>
120
+
121
+ <div className="solid-admin-header-actions">
122
+ {isAdmin && isDev && !isStudioMode && (
123
+ <button
124
+ type="button"
125
+ className="solid-studio-trigger-btn"
126
+ onClick={() => { dispatch(enterStudioMode()); router.push("/studio"); }}
127
+ title="Enter SolidX Studio"
128
+ >
129
+ <StudioSparkleIcon />
130
+ Studio
131
+ </button>
132
+ )}
133
+
134
+ <button
135
+ type="button"
136
+ className="solid-admin-theme-toggle"
137
+ onClick={toggleThemeMode}
138
+ aria-label="Toggle theme"
139
+ title="Toggle theme"
140
+ >
141
+ <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" aria-hidden="true">
142
+ <path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
143
+ <path d="M12 3l0 18" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
144
+ <path d="M12 9l4.65 -4.65" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
145
+ <path d="M12 14.3l7.37 -7.37" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
146
+ <path d="M12 19.6l8.85 -8.85" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
147
+ </svg>
148
+ <span className="solid-sr-only">Toggle theme</span>
149
+ </button>
150
+
151
+ {showBack && (
152
+ <button
153
+ type="button"
154
+ className="solid-admin-back-btn"
155
+ onClick={() => router.back()}
156
+ aria-label="Go back"
157
+ >
158
+ Back
159
+ </button>
160
+ )}
161
+ </div>
162
+ </div>
163
+ </header>
164
+ );
165
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"AppSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"AAeA,QAAA,MAAM,UAAU,+CAsMf,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"AppSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"AAcA,QAAA,MAAM,UAAU,+CAqMf,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { ToastContainer } from "../../helpers/ToastContainer";
3
2
  import { useGetSolidMenuBasedOnRoleQuery } from "../../redux/api/solidMenuApi";
4
3
  import { showNavbar, toggleNavbar, hideNavbar } from "../../redux/features/navbarSlice";
5
4
  import { setIsAuthenticated, setUser } from "../../redux/features/userSlice";
@@ -97,7 +96,7 @@ var AppSidebar = function () {
97
96
  ],
98
97
  icon: env("NEXT_PUBLIC_SETTINGS_ICON") ? env("NEXT_PUBLIC_SETTINGS_ICON") : SettingImage
99
98
  };
100
- return (_jsxs(_Fragment, { children: [_jsx(ToastContainer, {}), visibleNavbar && (_jsx("div", { className: "sidebar-backdrop", onClick: handleToggle })), (visibleNavbar || currentMainMenu) && (_jsx("div", { className: "sidebar-toggle-button ".concat(!visibleNavbar || !currentMainMenu ? "s-collapsed hidden md:flex" : ""), onClick: handleToggle, children: _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", children: [_jsx("rect", { x: "0.3", y: "0.3", width: "23.4", height: "23.4", rx: "2.1", fill: "white" }), _jsx("rect", { x: "0.3", y: "0.3", width: "23.4", height: "23.4", rx: "2.1", stroke: "#D8E2EA", strokeWidth: "0.6" }), _jsx("path", { d: "M5.09735 16V14.6667H13.5929V16H5.09735ZM5.09735 12.6667V11.3333H11.6324V12.6667H5.09735ZM5.09735 9.33333V8H13.5929V9.33333H5.09735Z", fill: "#8D9199" }), _jsx("path", { d: "M16.2621 12L18.9026 14.3L18.099 15L14.6549 12L18.099 9L18.9026 9.7L16.2621 12Z", fill: "#8D9199" })] }) })), _jsxs("div", { className: "sidebar-left ".concat(visibleNavbar ? "open" : ""), children: [_jsx("div", { className: "navbar-menu", children: (menu === null || menu === void 0 ? void 0 : menu.data.length) > 0 && (menu === null || menu === void 0 ? void 0 : menu.data.map(function (m) {
99
+ return (_jsxs(_Fragment, { children: [visibleNavbar && (_jsx("div", { className: "sidebar-backdrop", onClick: handleToggle })), (visibleNavbar || currentMainMenu) && (_jsx("div", { className: "sidebar-toggle-button ".concat(!visibleNavbar || !currentMainMenu ? "s-collapsed hidden md:flex" : ""), onClick: handleToggle, children: _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", children: [_jsx("rect", { x: "0.3", y: "0.3", width: "23.4", height: "23.4", rx: "2.1", fill: "white" }), _jsx("rect", { x: "0.3", y: "0.3", width: "23.4", height: "23.4", rx: "2.1", stroke: "#D8E2EA", strokeWidth: "0.6" }), _jsx("path", { d: "M5.09735 16V14.6667H13.5929V16H5.09735ZM5.09735 12.6667V11.3333H11.6324V12.6667H5.09735ZM5.09735 9.33333V8H13.5929V9.33333H5.09735Z", fill: "#8D9199" }), _jsx("path", { d: "M16.2621 12L18.9026 14.3L18.099 15L14.6549 12L18.099 9L18.9026 9.7L16.2621 12Z", fill: "#8D9199" })] }) })), _jsxs("div", { className: "sidebar-left ".concat(visibleNavbar ? "open" : ""), children: [_jsx("div", { className: "navbar-menu", children: (menu === null || menu === void 0 ? void 0 : menu.data.length) > 0 && (menu === null || menu === void 0 ? void 0 : menu.data.map(function (m) {
101
100
  var iconSrc = typeof m.icon === "string"
102
101
  ? m.icon
103
102
  : m.icon && typeof m.icon.src === "string"