@solidxai/core-ui 0.1.12-beta.6 → 0.1.12-beta.8

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 (286) hide show
  1. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  2. package/dist/components/auth/AuthLayout.js +19 -17
  3. package/dist/components/auth/AuthLayout.js.map +1 -1
  4. package/dist/components/auth/AuthLayout.tsx +59 -34
  5. package/dist/components/common/BackendReconnectIndicator.d.ts +6 -0
  6. package/dist/components/common/BackendReconnectIndicator.d.ts.map +1 -0
  7. package/dist/components/common/BackendReconnectIndicator.js +25 -0
  8. package/dist/components/common/BackendReconnectIndicator.js.map +1 -0
  9. package/dist/components/common/BackendReconnectIndicator.tsx +45 -0
  10. package/dist/components/common/SettingsComponent.d.ts.map +1 -1
  11. package/dist/components/common/SettingsComponent.js +7 -3
  12. package/dist/components/common/SettingsComponent.js.map +1 -1
  13. package/dist/components/common/SettingsComponent.module.css +144 -12
  14. package/dist/components/common/SettingsComponent.tsx +22 -3
  15. package/dist/components/common/SolidAdmin.d.ts.map +1 -1
  16. package/dist/components/common/SolidAdmin.js +7 -2
  17. package/dist/components/common/SolidAdmin.js.map +1 -1
  18. package/dist/components/common/SolidAdmin.tsx +7 -2
  19. package/dist/components/common/SolidBreadcrumb.d.ts.map +1 -1
  20. package/dist/components/common/SolidBreadcrumb.js +1 -6
  21. package/dist/components/common/SolidBreadcrumb.js.map +1 -1
  22. package/dist/components/common/SolidBreadcrumb.tsx +1 -8
  23. package/dist/components/common/SolidMaterialSymbol.d.ts +10 -0
  24. package/dist/components/common/SolidMaterialSymbol.d.ts.map +1 -0
  25. package/dist/components/common/SolidMaterialSymbol.js +69 -0
  26. package/dist/components/common/SolidMaterialSymbol.js.map +1 -0
  27. package/dist/components/common/SolidMaterialSymbol.tsx +96 -0
  28. package/dist/components/common/SolidToastProvider.d.ts.map +1 -1
  29. package/dist/components/common/SolidToastProvider.js +14 -1
  30. package/dist/components/common/SolidToastProvider.js.map +1 -1
  31. package/dist/components/common/SolidToastProvider.tsx +19 -1
  32. package/dist/components/core/card/CardGrid.d.ts +1 -1
  33. package/dist/components/core/card/CardGrid.d.ts.map +1 -1
  34. package/dist/components/core/card/CardGrid.js +2 -2
  35. package/dist/components/core/card/CardGrid.js.map +1 -1
  36. package/dist/components/core/card/CardGrid.tsx +4 -0
  37. package/dist/components/core/card/CardItem.d.ts +2 -0
  38. package/dist/components/core/card/CardItem.d.ts.map +1 -1
  39. package/dist/components/core/card/CardItem.js +7 -2
  40. package/dist/components/core/card/CardItem.js.map +1 -1
  41. package/dist/components/core/card/CardItem.tsx +30 -8
  42. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  43. package/dist/components/core/card/SolidCardView.js +87 -21
  44. package/dist/components/core/card/SolidCardView.js.map +1 -1
  45. package/dist/components/core/card/SolidCardView.tsx +96 -40
  46. package/dist/components/core/card/SolidCardViewConfigure.d.ts +1 -1
  47. package/dist/components/core/card/SolidCardViewConfigure.d.ts.map +1 -1
  48. package/dist/components/core/card/SolidCardViewConfigure.js +9 -7
  49. package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
  50. package/dist/components/core/card/SolidCardViewConfigure.tsx +14 -1
  51. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +3 -1
  52. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  53. package/dist/components/core/common/SolidGlobalSearchElement.js +4 -3
  54. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  55. package/dist/components/core/common/SolidGlobalSearchElement.tsx +15 -19
  56. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.d.ts.map +1 -1
  57. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +43 -16
  58. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
  59. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +24 -2
  60. package/dist/components/core/form/SolidFormFooter.js +1 -1
  61. package/dist/components/core/form/SolidFormFooter.js.map +1 -1
  62. package/dist/components/core/form/SolidFormFooter.tsx +1 -1
  63. package/dist/components/core/form/SolidFormLayouts.js +1 -1
  64. package/dist/components/core/form/SolidFormLayouts.js.map +1 -1
  65. package/dist/components/core/form/SolidFormLayouts.tsx +2 -2
  66. package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
  67. package/dist/components/core/form/fields/SolidMediaMultipleField.js +120 -56
  68. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  69. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +63 -50
  70. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  71. package/dist/components/core/form/fields/SolidMediaSingleField.js +115 -37
  72. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  73. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +36 -35
  74. package/dist/components/core/form/fields/SolidRichTextField.d.ts.map +1 -1
  75. package/dist/components/core/form/fields/SolidRichTextField.js +67 -4
  76. package/dist/components/core/form/fields/SolidRichTextField.js.map +1 -1
  77. package/dist/components/core/form/fields/SolidRichTextField.tsx +89 -7
  78. package/dist/components/core/form/fields/mediaFieldUtils.d.ts +3 -0
  79. package/dist/components/core/form/fields/mediaFieldUtils.d.ts.map +1 -0
  80. package/dist/components/core/form/fields/mediaFieldUtils.js +30 -0
  81. package/dist/components/core/form/fields/mediaFieldUtils.js.map +1 -0
  82. package/dist/components/core/form/fields/mediaFieldUtils.ts +45 -0
  83. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.d.ts.map +1 -1
  84. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js +1 -1
  85. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js.map +1 -1
  86. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx +3 -1
  87. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  88. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +22 -23
  89. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  90. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +13 -7
  91. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.d.ts.map +1 -1
  92. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js +16 -11
  93. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js.map +1 -1
  94. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.tsx +32 -18
  95. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.d.ts.map +1 -1
  96. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.js +3 -1
  97. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.js.map +1 -1
  98. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.tsx +11 -5
  99. package/dist/components/core/kanban/KanbanBoard.d.ts +1 -1
  100. package/dist/components/core/kanban/KanbanBoard.d.ts.map +1 -1
  101. package/dist/components/core/kanban/KanbanBoard.js +2 -2
  102. package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
  103. package/dist/components/core/kanban/KanbanBoard.tsx +3 -1
  104. package/dist/components/core/kanban/KanbanCard.d.ts +2 -0
  105. package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
  106. package/dist/components/core/kanban/KanbanCard.js +10 -5
  107. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  108. package/dist/components/core/kanban/KanbanCard.tsx +28 -12
  109. package/dist/components/core/kanban/KanbanColumn.d.ts +3 -1
  110. package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
  111. package/dist/components/core/kanban/KanbanColumn.js +2 -2
  112. package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
  113. package/dist/components/core/kanban/KanbanColumn.tsx +4 -2
  114. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  115. package/dist/components/core/kanban/SolidKanbanView.js +154 -25
  116. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  117. package/dist/components/core/kanban/SolidKanbanView.tsx +129 -16
  118. package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts +1 -1
  119. package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts.map +1 -1
  120. package/dist/components/core/kanban/SolidKanbanViewConfigure.js +13 -10
  121. package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
  122. package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +18 -3
  123. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  124. package/dist/components/core/list/SolidDataTable.js +3 -2
  125. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  126. package/dist/components/core/list/SolidDataTable.tsx +3 -2
  127. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  128. package/dist/components/core/list/SolidListView.js +16 -5
  129. package/dist/components/core/list/SolidListView.js.map +1 -1
  130. package/dist/components/core/list/SolidListView.tsx +20 -8
  131. package/dist/components/core/list/SolidListViewColumn.d.ts.map +1 -1
  132. package/dist/components/core/list/SolidListViewColumn.js +1 -0
  133. package/dist/components/core/list/SolidListViewColumn.js.map +1 -1
  134. package/dist/components/core/list/SolidListViewColumn.tsx +1 -0
  135. package/dist/components/core/list/columns/SolidShortTextColumn.d.ts.map +1 -1
  136. package/dist/components/core/list/columns/SolidShortTextColumn.js +7 -2
  137. package/dist/components/core/list/columns/SolidShortTextColumn.js.map +1 -1
  138. package/dist/components/core/list/columns/SolidShortTextColumn.tsx +7 -2
  139. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.d.ts.map +1 -1
  140. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.js +4 -1
  141. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.js.map +1 -1
  142. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.tsx +5 -2
  143. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
  144. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +2 -1
  145. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  146. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +2 -1
  147. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.d.ts.map +1 -1
  148. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.js +4 -1
  149. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.js.map +1 -1
  150. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.tsx +5 -2
  151. package/dist/components/core/locales/SolidLocale.d.ts.map +1 -1
  152. package/dist/components/core/locales/SolidLocale.js +1 -1
  153. package/dist/components/core/locales/SolidLocale.js.map +1 -1
  154. package/dist/components/core/locales/SolidLocale.tsx +1 -0
  155. package/dist/components/core/model/CreateModel.css +26 -0
  156. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  157. package/dist/components/core/model/FieldMetaData.js +21 -3
  158. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  159. package/dist/components/core/model/FieldMetaData.tsx +45 -4
  160. package/dist/components/core/model/FieldMetaDataForm.css +82 -0
  161. package/dist/components/core/model/FieldMetaDataForm.d.ts +1 -0
  162. package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
  163. package/dist/components/core/model/FieldMetaDataForm.js +246 -235
  164. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  165. package/dist/components/core/model/FieldMetaDataForm.tsx +46 -34
  166. package/dist/components/core/model/FieldSelector.js +1 -1
  167. package/dist/components/core/model/FieldSelector.js.map +1 -1
  168. package/dist/components/core/model/FieldSelector.tsx +1 -1
  169. package/dist/components/core/model/ModelMetaData.js +1 -1
  170. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  171. package/dist/components/core/model/ModelMetaData.tsx +1 -1
  172. package/dist/components/core/module/CreateModule.css +55 -2
  173. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  174. package/dist/components/core/module/CreateModule.js +2 -2
  175. package/dist/components/core/module/CreateModule.js.map +1 -1
  176. package/dist/components/core/module/CreateModule.tsx +3 -2
  177. package/dist/components/core/module/ModuleMetadataExplorer.css +27 -0
  178. package/dist/components/core/module/ModuleMetadataExplorer.d.ts.map +1 -1
  179. package/dist/components/core/module/ModuleMetadataExplorer.js +1 -1
  180. package/dist/components/core/module/ModuleMetadataExplorer.js.map +1 -1
  181. package/dist/components/core/module/ModuleMetadataExplorer.tsx +1 -0
  182. package/dist/components/core/tree/SolidTreeTable.d.ts +2 -1
  183. package/dist/components/core/tree/SolidTreeTable.d.ts.map +1 -1
  184. package/dist/components/core/tree/SolidTreeTable.js +2 -2
  185. package/dist/components/core/tree/SolidTreeTable.js.map +1 -1
  186. package/dist/components/core/tree/SolidTreeTable.tsx +3 -1
  187. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  188. package/dist/components/core/tree/SolidTreeView.js +44 -16
  189. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  190. package/dist/components/core/tree/SolidTreeView.tsx +55 -24
  191. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  192. package/dist/components/core/users/CreateUser.js +45 -32
  193. package/dist/components/core/users/CreateUser.js.map +1 -1
  194. package/dist/components/core/users/CreateUser.tsx +15 -4
  195. package/dist/components/layout/AdminHeaderActions.d.ts.map +1 -1
  196. package/dist/components/layout/AdminHeaderActions.js +10 -9
  197. package/dist/components/layout/AdminHeaderActions.js.map +1 -1
  198. package/dist/components/layout/AdminHeaderActions.tsx +2 -0
  199. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  200. package/dist/components/layout/AppSidebar.js +2 -1
  201. package/dist/components/layout/AppSidebar.js.map +1 -1
  202. package/dist/components/layout/AppSidebar.tsx +12 -5
  203. package/dist/components/layout/SolidMenuItemIcon.d.ts +9 -0
  204. package/dist/components/layout/SolidMenuItemIcon.d.ts.map +1 -0
  205. package/dist/components/layout/SolidMenuItemIcon.js +20 -0
  206. package/dist/components/layout/SolidMenuItemIcon.js.map +1 -0
  207. package/dist/components/layout/SolidMenuItemIcon.tsx +45 -0
  208. package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
  209. package/dist/components/layout/navbar-two-menu.js +6 -7
  210. package/dist/components/layout/navbar-two-menu.js.map +1 -1
  211. package/dist/components/layout/navbar-two-menu.tsx +4 -12
  212. package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts.map +1 -1
  213. package/dist/components/shad-cn-ui/SolidCodeEditor.js +30 -2
  214. package/dist/components/shad-cn-ui/SolidCodeEditor.js.map +1 -1
  215. package/dist/components/shad-cn-ui/SolidCodeEditor.tsx +38 -1
  216. package/dist/helpers/backendHealthMonitor.d.ts +39 -0
  217. package/dist/helpers/backendHealthMonitor.d.ts.map +1 -0
  218. package/dist/helpers/backendHealthMonitor.js +255 -0
  219. package/dist/helpers/backendHealthMonitor.js.map +1 -0
  220. package/dist/helpers/backendHealthMonitor.ts +177 -0
  221. package/dist/helpers/helpers.d.ts +1 -0
  222. package/dist/helpers/helpers.d.ts.map +1 -1
  223. package/dist/helpers/helpers.js +9 -0
  224. package/dist/helpers/helpers.js.map +1 -1
  225. package/dist/helpers/helpers.ts +11 -1
  226. package/dist/helpers/menuItemIcons.d.ts +34 -0
  227. package/dist/helpers/menuItemIcons.d.ts.map +1 -0
  228. package/dist/helpers/menuItemIcons.js +144 -0
  229. package/dist/helpers/menuItemIcons.js.map +1 -0
  230. package/dist/helpers/menuItemIcons.ts +191 -0
  231. package/dist/helpers/relationDisplay.d.ts +3 -0
  232. package/dist/helpers/relationDisplay.d.ts.map +1 -0
  233. package/dist/helpers/relationDisplay.js +92 -0
  234. package/dist/helpers/relationDisplay.js.map +1 -0
  235. package/dist/helpers/relationDisplay.ts +101 -0
  236. package/dist/helpers/settingsPayload.d.ts +1 -0
  237. package/dist/helpers/settingsPayload.d.ts.map +1 -1
  238. package/dist/helpers/settingsPayload.js.map +1 -1
  239. package/dist/helpers/settingsPayload.ts +1 -0
  240. package/dist/helpers/solidIcons.d.ts +2 -0
  241. package/dist/helpers/solidIcons.d.ts.map +1 -1
  242. package/dist/helpers/solidIcons.js +8 -0
  243. package/dist/helpers/solidIcons.js.map +1 -1
  244. package/dist/helpers/solidIcons.tsx +10 -1
  245. package/dist/helpers/waitForBackendAvailability.d.ts +1 -0
  246. package/dist/helpers/waitForBackendAvailability.d.ts.map +1 -1
  247. package/dist/helpers/waitForBackendAvailability.js +35 -22
  248. package/dist/helpers/waitForBackendAvailability.js.map +1 -1
  249. package/dist/helpers/waitForBackendAvailability.ts +18 -12
  250. package/dist/http/solidHttp.d.ts.map +1 -1
  251. package/dist/http/solidHttp.js +10 -4
  252. package/dist/http/solidHttp.js.map +1 -1
  253. package/dist/http/solidHttp.ts +9 -4
  254. package/dist/redux/api/datasourceIntrospectionApi.d.ts +4 -0
  255. package/dist/redux/api/datasourceIntrospectionApi.d.ts.map +1 -1
  256. package/dist/redux/api/datasourceIntrospectionApi.js.map +1 -1
  257. package/dist/redux/api/datasourceIntrospectionApi.ts +4 -0
  258. package/dist/redux/api/fetchBaseQuery.d.ts.map +1 -1
  259. package/dist/redux/api/fetchBaseQuery.js +9 -3
  260. package/dist/redux/api/fetchBaseQuery.js.map +1 -1
  261. package/dist/redux/api/fetchBaseQuery.tsx +9 -3
  262. package/dist/redux/store/StoreProvider.d.ts.map +1 -1
  263. package/dist/redux/store/StoreProvider.js +4 -3
  264. package/dist/redux/store/StoreProvider.js.map +1 -1
  265. package/dist/redux/store/StoreProvider.tsx +4 -3
  266. package/dist/redux/store/defaultStoreConfig.d.ts +5 -5
  267. package/dist/resources/globals.css +341 -49
  268. package/dist/resources/solid-custom.css +464 -11
  269. package/dist/resources/solid-responsive.css +31 -20
  270. package/dist/resources/solid-tailwind-generated.css +1 -1
  271. package/dist/routes/AppEventListener.d.ts.map +1 -1
  272. package/dist/routes/AppEventListener.js +23 -0
  273. package/dist/routes/AppEventListener.js.map +1 -1
  274. package/dist/routes/AppEventListener.tsx +29 -0
  275. package/dist/routes/pages/admin/core/DashboardPage.module.css +12 -0
  276. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.css +306 -3
  277. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
  278. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +745 -393
  279. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
  280. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1074 -420
  281. package/dist/routes/pages/admin/core/DatasourcesPage.css +15 -0
  282. package/dist/routes/pages/admin/core/DatasourcesPage.d.ts.map +1 -1
  283. package/dist/routes/pages/admin/core/DatasourcesPage.js +7 -188
  284. package/dist/routes/pages/admin/core/DatasourcesPage.js.map +1 -1
  285. package/dist/routes/pages/admin/core/DatasourcesPage.tsx +3 -393
  286. package/package.json +1 -1
@@ -6,7 +6,7 @@ import React, {
6
6
  useRef,
7
7
  useState,
8
8
  } from "react";
9
- import { ChevronLeft, ChevronRight, EllipsisVertical, Pencil, Plus, RefreshCw, Search, Trash2 } from "lucide-react";
9
+ import { ChevronLeft, ChevronRight, EllipsisVertical, Pencil, Plus, RefreshCw, RotateCcw, Search, Trash2 } from "lucide-react";
10
10
  import { showToast } from "../../../redux/features/toastSlice";
11
11
  import { useDispatch, useSelector } from "react-redux";
12
12
  import { showNavbar, toggleNavbar } from "../../../redux/features/navbarSlice";
@@ -35,9 +35,10 @@ import { useRouter } from "../../../hooks/useRouter";
35
35
  import { normalizeSolidListTreeKanbanActionPath } from "../../../helpers/routePaths";
36
36
  import { usePathname } from "../../../hooks/usePathname";
37
37
  import { useHandleListCustomButtonClick } from "../../../components/common/useHandleListCustomButtonClick";
38
- import { SolidButton, SolidDialog, SolidDialogBody, SolidDialogDescription, SolidDialogFooter, SolidDialogHeader, SolidDialogSeparator, SolidDialogTitle, SolidDropdownMenu, SolidDropdownMenuContent, SolidDropdownMenuItem, SolidDropdownMenuSeparator, SolidDropdownMenuTrigger, SolidIcon } from "../../shad-cn-ui";
38
+ import { SolidButton, SolidDialog, SolidDialogBody, SolidDialogDescription, SolidDialogFooter, SolidDialogHeader, SolidDialogSeparator, SolidDialogTitle, SolidDropdownMenu, SolidDropdownMenuContent, SolidDropdownMenuItem, SolidDropdownMenuSeparator, SolidDropdownMenuTrigger, SolidIcon, SolidSelect } from "../../shad-cn-ui";
39
39
  import { SolidHeaderRequestStatus } from "../../common/SolidHeaderRequestStatus";
40
40
  import { storeCurrentModelViewContext } from "../../../helpers/modelViewPersistence";
41
+ import { getRelationDisplayText } from "../../../helpers/relationDisplay";
41
42
  import { Column as SolidTreeColumn, SolidTreeNode as TreeNode, SolidTreeSelectionKeys, SolidTreeTable } from "./SolidTreeTable";
42
43
 
43
44
  // ─── Types ────────────────────────────────────────────────────────────────────
@@ -414,6 +415,11 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
414
415
  setToPopulateMedia(queryObject.populateMedia || []);
415
416
  setSortField(queryObject.sortField || "");
416
417
  setSortOrder(queryObject.sortOrder || 0);
418
+ setShowArchived(
419
+ queryObject.showArchived === true ||
420
+ queryObject.showArchived === "true" ||
421
+ queryObject.showSoftDeleted === "inclusive"
422
+ );
417
423
 
418
424
  const savedLimit = queryObject.limit;
419
425
  if (savedLimit && currentOptions.includes(savedLimit)) {
@@ -448,6 +454,7 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
448
454
  setToPopulate(nextPopulate);
449
455
  setToPopulateMedia(nextPopulateMedia);
450
456
  setGlobalLimit(resolveDefaultPageSize(currentOptions));
457
+ setShowArchived(false);
451
458
  }
452
459
  }, [solidTreeViewLayout, solidTreeViewMetaData]);
453
460
 
@@ -629,6 +636,13 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
629
636
  return derivedAggregates.length > 0 ? derivedAggregates : ["id:count"];
630
637
  };
631
638
 
639
+ const applyArchivedQueryState = (queryData: Record<string, any>) => {
640
+ if (showArchived) {
641
+ queryData.showSoftDeleted = "inclusive";
642
+ }
643
+ return queryData;
644
+ };
645
+
632
646
  const extractGroupCount = (groupMeta: any) => {
633
647
  if (groupMeta?.id_count !== undefined) return groupMeta.id_count;
634
648
  const countKey = Object.keys(groupMeta || {}).find((key) => key.endsWith("_count"));
@@ -717,6 +731,7 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
717
731
  const implicitFilters = buildImplicitFiltersFromPath(groupPath);
718
732
  const mergedFilters = mergeFiltersWithImplicit(implicitFilters);
719
733
  if (mergedFilters) queryData.filters = mergedFilters;
734
+ applyArchivedQueryState(queryData);
720
735
 
721
736
  // event invocation is not tested
722
737
  const dynamicHeader = solidTreeViewMetaData?.data?.solidView?.layout?.onBeforeTreeDataLoad;
@@ -776,6 +791,7 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
776
791
  const implicitFilters = buildImplicitFiltersFromPath(groupPath);
777
792
  const mergedFilters = mergeFiltersWithImplicit(implicitFilters);
778
793
  if (mergedFilters) queryData.filters = mergedFilters;
794
+ applyArchivedQueryState(queryData);
779
795
 
780
796
 
781
797
  // event invocation is not tested
@@ -841,7 +857,12 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
841
857
  // const dateGranularity = dateTimeImplicitFilter(rule);
842
858
  const dateGranularity = getDateGranularity(rule);
843
859
  return (groupMetaRows || []).map((groupMeta, index) => {
844
- const groupLabel = isEmptyGroupValue(groupMeta?.groupName)? "(empty)": groupMeta?.groupName;
860
+ const rawGroupLabel = groupMeta?.groupName;
861
+ const normalizedGroupLabel =
862
+ rawGroupLabel === "[object Object]"
863
+ ? getRelationDisplayText(groupMeta?.groupValue)
864
+ : getRelationDisplayText(rawGroupLabel);
865
+ const groupLabel = isEmptyGroupValue(normalizedGroupLabel) ? "(empty)" : normalizedGroupLabel;
845
866
  const groupValue = groupMeta?.groupValue ?? "(empty)";
846
867
  const idCount = extractGroupCount(groupMeta);
847
868
 
@@ -943,6 +964,7 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
943
964
  populateMedia: toPopulateMedia,
944
965
  sortField: sortField,
945
966
  sortOrder: sortOrder,
967
+ showArchived,
946
968
  custom_filter_predicate: latestFilterPredicatesRef.current.custom_filter_predicate || null,
947
969
  search_predicate: latestFilterPredicatesRef.current.search_predicate || null,
948
970
  saved_filter_predicate: latestFilterPredicatesRef.current.saved_filter_predicate || null,
@@ -950,6 +972,7 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
950
972
  grouping_rules: latestFilterPredicatesRef.current.grouping_rules || null,
951
973
  aggregation_rules: latestFilterPredicatesRef.current.aggregation_rules || null,
952
974
  };
975
+ applyArchivedQueryState(queryData);
953
976
 
954
977
  setFilterObjectToLocalStorage(queryData);
955
978
  }
@@ -969,7 +992,7 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
969
992
  loadRootGroups(0);
970
993
  }
971
994
  // eslint-disable-next-line react-hooks/exhaustive-deps
972
- }, [solidTreeViewMetaData, params.modelName, activeGroupingRules, aggregationRules, filters, sortField, sortOrder, globalLimit]);
995
+ }, [solidTreeViewMetaData, params.modelName, activeGroupingRules, aggregationRules, filters, sortField, sortOrder, globalLimit, showArchived]);
973
996
 
974
997
  // ─── Expand handler ───────────────────────────────────────────────────────
975
998
 
@@ -1164,8 +1187,10 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
1164
1187
  };
1165
1188
 
1166
1189
  walk(treeNodes);
1167
- setSelectedRecords(checkedRecords);
1168
- setSelectedRecoverRecords(checkedRecords);
1190
+ const activeRecords = checkedRecords.filter((record: any) => record.deletedAt === null);
1191
+ const deletedRecords = checkedRecords.filter((record: any) => record.deletedAt !== null);
1192
+ setSelectedRecords(activeRecords);
1193
+ setSelectedRecoverRecords(deletedRecords);
1169
1194
  }, [treeNodes, selectedNodeKeys]);
1170
1195
 
1171
1196
  // ─── Filter handler ───────────────────────────────────────────────────────
@@ -1373,23 +1398,22 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
1373
1398
  const rootHasNext = hasNext("root");
1374
1399
  const start = total === 0 ? 0 : offset + 1;
1375
1400
  const end = total === 0 ? 0 : Math.min(offset + limit, total);
1401
+ const report = `${start} - ${end} of ${total}`;
1376
1402
 
1377
1403
  return (
1378
1404
  <div className="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-2 sm:px-3 py-1.5 bg-background">
1379
1405
  <div className="solid-paginator-meta flex items-center gap-2 sm:ml-auto">
1380
1406
  <span className="solid-paginator-label">Rows</span>
1381
- <select
1407
+ <SolidSelect
1382
1408
  value={limit}
1409
+ className="solid-paginator-select"
1410
+ options={pageSizeOptions.map((option) => ({ label: String(option), value: option }))}
1411
+ native={false}
1383
1412
  onChange={(event) => {
1384
- setGlobalLimit(Number(event.target.value));
1413
+ setGlobalLimit(Number(event.value));
1385
1414
  }}
1386
- className="solid-paginator-select"
1387
- >
1388
- {pageSizeOptions.map((option) => (
1389
- <option key={option} value={option}>{option}</option>
1390
- ))}
1391
- </select>
1392
- <span className="solid-paginator-report">{start} - {end} of {total}</span>
1415
+ />
1416
+ <span className="solid-paginator-report">{report}</span>
1393
1417
  </div>
1394
1418
  <div className="solid-paginator-actions flex items-center gap-2">
1395
1419
  <button
@@ -1439,20 +1463,22 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
1439
1463
  setSortField(nextSortField);
1440
1464
  setSortOrder(nextSortOrder);
1441
1465
  },
1442
- setShowArchived: () => { /* archived toggle for grouped tree will be wired later */ },
1466
+ setShowArchived: (value) => {
1467
+ setShowArchived(value);
1468
+ },
1443
1469
  getState: () => ({
1444
1470
  first: getPagination("root").offset,
1445
1471
  rows: getPagination("root").limit,
1446
1472
  sortField,
1447
1473
  sortOrder: sortOrder as any,
1448
- showArchived: false,
1474
+ showArchived,
1449
1475
  filters,
1450
1476
  filterPredicates,
1451
1477
  listData: treeNodes,
1452
1478
  totalRecords: getPagination("root").total,
1453
1479
  loading: treeLoading,
1454
1480
  }),
1455
- }), [filters, filterPredicates, params.customFilter, treeLoading, treeNodes, paginationMap]);
1481
+ }), [filters, filterPredicates, paginationMap, showArchived, sortField, sortOrder, treeLoading, treeNodes]);
1456
1482
 
1457
1483
 
1458
1484
  const handleCustomButtonClick = useHandleListCustomButtonClick();
@@ -1468,6 +1494,7 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
1468
1494
  };
1469
1495
 
1470
1496
  const canEditRow = (rowData: any, inContextMenu = false) =>
1497
+ !rowData?.deletedAt &&
1471
1498
  actionsAllowed.includes(permissionExpression(params.modelName, "update")) &&
1472
1499
  solidTreeViewLayout?.attrs?.edit !== false &&
1473
1500
  (!inContextMenu || solidTreeViewLayout?.attrs?.showDefaultEditButton !== false) &&
@@ -1475,6 +1502,7 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
1475
1502
  !(isDraftPublishWorkflowEnabled && rowData?.publishedAt);
1476
1503
 
1477
1504
  const canDeleteRow = (rowData: any, inContextMenu = false) =>
1505
+ !rowData?.deletedAt &&
1478
1506
  actionsAllowed.includes(permissionExpression(params.modelName, "delete")) &&
1479
1507
  solidTreeViewLayout?.attrs?.delete !== false &&
1480
1508
  (!inContextMenu
@@ -1741,16 +1769,17 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
1741
1769
  className="solid-icon-button"
1742
1770
  onClick={() => { void loadRootGroups(getPagination("root").offset); }}
1743
1771
  />
1744
- {showArchived && (
1772
+ {showArchived && selectedRecoverRecords.length > 0 && (
1745
1773
  <SolidButton
1746
1774
  type="button"
1747
- label="Recover"
1748
1775
  size="sm"
1749
- variant="outline"
1750
- leftIcon={<RefreshCw size={14} />}
1751
- className="hidden lg:flex solid-icon-button "
1776
+ variant="secondary"
1777
+ className="hidden lg:flex"
1752
1778
  onClick={() => setRecoverDialogVisible(true)}
1753
- />
1779
+ leftIcon={<RotateCcw size={14} />}
1780
+ >
1781
+ Recover
1782
+ </SolidButton>
1754
1783
  )}
1755
1784
 
1756
1785
  {params.embeded === false &&
@@ -1836,6 +1865,7 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
1836
1865
  onExpand={handleNodeExpand}
1837
1866
  tableStyle={{ minWidth: "max-content" }}
1838
1867
  tableClassName="solid-data-table"
1868
+ rowClassName={(node) => node?.data?.deletedAt ? "greyed-out-row" : ""}
1839
1869
  selectionMode="checkbox"
1840
1870
  selectionKeys={selectedNodeKeys}
1841
1871
  sortField={sortField}
@@ -1850,6 +1880,7 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
1850
1880
  const rowData = e.node.data;
1851
1881
 
1852
1882
  if (solidTreeViewLayout?.attrs?.disableRowClick === true) return;
1883
+ if (rowData?.deletedAt) return;
1853
1884
 
1854
1885
  const hasFindPermission = actionsAllowed.includes(
1855
1886
  permissionExpression(params.modelName, 'findOne')
@@ -1 +1 @@
1
- {"version":3,"file":"CreateUser.d.ts","sourceRoot":"","sources":["../../../../src/components/core/users/CreateUser.tsx"],"names":[],"mappings":"AAwBA,OAAO,kBAAkB,CAAC;AAY1B,QAAA,MAAM,UAAU,qBAAsB,GAAG,4CA6RxC,CAAC;AA8KF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"CreateUser.d.ts","sourceRoot":"","sources":["../../../../src/components/core/users/CreateUser.tsx"],"names":[],"mappings":"AAwBA,OAAO,kBAAkB,CAAC;AAY1B,QAAA,MAAM,UAAU,qBAAsB,GAAG,4CAwSxC,CAAC;AA8KF,eAAe,UAAU,CAAC"}
@@ -78,7 +78,7 @@ var CreateUser = function (_a) {
78
78
  var _o = useState(null), newUserIdForApiKey = _o[0], setNewUserIdForApiKey = _o[1];
79
79
  var _p = useState(null), revealKey = _p[0], setRevealKey = _p[1];
80
80
  var _q = useRegisterPrivateMutation(), registerPrivate = _q[0], _r = _q[1], isLoading = _r.isLoading, userCreateError = _r.error;
81
- var _s = useUpdateUserMutation(), updateUser = _s[0], _t = _s[1], isUserUpdating = _t.isLoading, isUpdateUserSuccess = _t.isSuccess, userUpdateError = _t.error;
81
+ var _s = useUpdateUserMutation(), updateUser = _s[0], _t = _s[1], isUserUpdating = _t.isLoading, userUpdateError = _t.error;
82
82
  var _u = useDeleteUserMutation(), deleteUser = _u[0], _v = _u[1], isUserDeleting = _v.isLoading, isDeleteUserSuccess = _v.isSuccess;
83
83
  useEffect(function () {
84
84
  var _a;
@@ -119,30 +119,43 @@ var CreateUser = function (_a) {
119
119
  validationSchema: validationSchema,
120
120
  enableReinitialize: true,
121
121
  onSubmit: function (values) { return __awaiter(void 0, void 0, void 0, function () {
122
- var userData, response, userId, _a;
123
- var _b, _c;
124
- return __generator(this, function (_d) {
125
- switch (_d.label) {
122
+ var userData, _a, response, userId, _b;
123
+ var _c, _d;
124
+ return __generator(this, function (_e) {
125
+ switch (_e.label) {
126
126
  case 0:
127
- if (data) {
128
- userData = {
129
- fullName: values.fullName,
130
- username: values.username,
131
- email: values.email,
132
- mobile: values.mobile,
133
- roles: selectedRoles,
134
- active: values.active,
135
- isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,
136
- };
137
- if (values.password) {
138
- userData.password = values.password;
139
- }
140
- updateUser({ id: data.id, data: userData });
141
- return [2 /*return*/];
127
+ if (!data) return [3 /*break*/, 5];
128
+ userData = {
129
+ fullName: values.fullName,
130
+ username: values.username,
131
+ email: values.email,
132
+ mobile: values.mobile,
133
+ roles: selectedRoles,
134
+ active: values.active,
135
+ isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,
136
+ };
137
+ if (values.password) {
138
+ userData.password = values.password;
142
139
  }
143
- _d.label = 1;
140
+ _e.label = 1;
144
141
  case 1:
145
- _d.trys.push([1, 3, , 4]);
142
+ _e.trys.push([1, 3, , 4]);
143
+ return [4 /*yield*/, updateUser({ id: data.id, data: userData }).unwrap()];
144
+ case 2:
145
+ _e.sent();
146
+ dispatch(showToast({
147
+ severity: "success",
148
+ summary: ERROR_MESSAGES.FORM_UPDATE,
149
+ detail: ERROR_MESSAGES.FORM_UPDATE_SUCCESSFULLY,
150
+ }));
151
+ router.back();
152
+ return [3 /*break*/, 4];
153
+ case 3:
154
+ _a = _e.sent();
155
+ return [3 /*break*/, 4];
156
+ case 4: return [2 /*return*/];
157
+ case 5:
158
+ _e.trys.push([5, 7, , 8]);
146
159
  return [4 /*yield*/, registerPrivate({
147
160
  fullName: values.fullName,
148
161
  username: values.username,
@@ -152,21 +165,21 @@ var CreateUser = function (_a) {
152
165
  roles: selectedRoles,
153
166
  isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,
154
167
  }).unwrap()];
155
- case 2:
156
- response = _d.sent();
168
+ case 6:
169
+ response = _e.sent();
157
170
  if (values.isAllowedToGenerateApiKeys) {
158
- userId = (_c = (_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : response === null || response === void 0 ? void 0 : response.id;
171
+ userId = (_d = (_c = response === null || response === void 0 ? void 0 : response.data) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : response === null || response === void 0 ? void 0 : response.id;
159
172
  if (userId) {
160
173
  setNewUserIdForApiKey(userId);
161
174
  return [2 /*return*/];
162
175
  }
163
176
  }
164
177
  router.back();
165
- return [3 /*break*/, 4];
166
- case 3:
167
- _a = _d.sent();
168
- return [3 /*break*/, 4];
169
- case 4: return [2 /*return*/];
178
+ return [3 /*break*/, 8];
179
+ case 7:
180
+ _b = _e.sent();
181
+ return [3 /*break*/, 8];
182
+ case 8: return [2 /*return*/];
170
183
  }
171
184
  });
172
185
  }); },
@@ -200,10 +213,10 @@ var CreateUser = function (_a) {
200
213
  handleError(userUpdateError);
201
214
  }, [dispatch, userCreateError, userUpdateError]);
202
215
  useEffect(function () {
203
- if (isDeleteUserSuccess || isUpdateUserSuccess) {
216
+ if (isDeleteUserSuccess) {
204
217
  router.back();
205
218
  }
206
- }, [isDeleteUserSuccess, isUpdateUserSuccess, router]);
219
+ }, [isDeleteUserSuccess, router]);
207
220
  var isEditMode = params.id !== "new";
208
221
  var isSaving = isLoading || isUserUpdating;
209
222
  var handleUnblockUser = function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -1 +1 @@
1
- {"version":3,"file":"CreateUser.js","sourceRoot":"","sources":["../../../../src/components/core/users/CreateUser.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FetchBaseQueryError } from \"@reduxjs/toolkit/dist/query\";\nimport { useFormik } from \"formik\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport * as Yup from \"yup\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { CancelButton } from \"../../../components/common/CancelButton\";\nimport { SolidFormHeader } from \"../../../components/common/SolidFormHeader\";\nimport { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport { useRouter } from \"../../../hooks/useRouter\";\nimport { useRegisterPrivateMutation, useUpdateUserMutation } from \"../../../redux/api/authApi\";\nimport { useDeleteUserMutation } from \"../../../redux/api/userApi\";\nimport { RolesGroupedByModuleWidget } from \"../../core/form/fields/relations/RolesGroupedByModuleWidget\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport {\n SolidButton,\n SolidInput,\n SolidMessage,\n SolidPanel,\n SolidPasswordInput,\n SolidSwitch,\n SolidTabGroup,\n} from \"../../shad-cn-ui\";\nimport { ApiKeysTab, GenerateApiKeyModal, RevealApiKeyModal } from \"./ApiKeysTab\";\nimport \"./CreateUser.css\";\n\ninterface ErrorResponseData {\n message: string;\n statusCode: number;\n error: string;\n}\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nconst CreateUser = ({ data, params }: any) => {\n const dispatch = useDispatch();\n const router = useRouter();\n const [selectedRoles, setSelectedRoles] = useState<string[]>([]);\n const [failedAttempts, setFailedAttempts] = useState<number>(data?.failedLoginAttempts ?? 0);\n const [activeTab, setActiveTab] = useState(\"userDetails\");\n const [newUserIdForApiKey, setNewUserIdForApiKey] = useState<number | null>(null);\n const [revealKey, setRevealKey] = useState<{ apiKey: string; keyName: string } | null>(null);\n\n const [registerPrivate, { isLoading, error: userCreateError }] = useRegisterPrivateMutation();\n const [\n updateUser,\n {\n isLoading: isUserUpdating,\n isSuccess: isUpdateUserSuccess,\n error: userUpdateError,\n },\n ] = useUpdateUserMutation();\n\n const [deleteUser, { isLoading: isUserDeleting, isSuccess: isDeleteUserSuccess }] = useDeleteUserMutation();\n\n useEffect(() => {\n if (data?.roles) {\n setSelectedRoles(data.roles.map((role: any) => role.name));\n }\n setFailedAttempts(data?.failedLoginAttempts ?? 0);\n }, [data]);\n\n const initialValues = {\n fullName: data?.fullName ?? \"\",\n username: data?.username ?? \"\",\n email: data?.email ?? \"\",\n mobile: data?.mobile ?? \"\",\n password: \"\",\n confirmPassword: \"\",\n active: data?.active ?? true,\n isAllowedToGenerateApiKeys: data?.isAllowedToGenerateApiKeys ?? false,\n };\n\n const validationSchema = Yup.object({\n fullName: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Full Name\")),\n username: Yup.string().required(\"Username is required\"),\n email: Yup.string()\n .email(ERROR_MESSAGES.FIELD_INVALID(\"email address\"))\n .required(ERROR_MESSAGES.FIELD_REUQIRED(\"Email\")),\n password: Yup.string().min(6, ERROR_MESSAGES.PASSWORD_CHARACTER(6)).nullable(),\n confirmPassword: Yup.string().when(\"password\", {\n is: (val: any) => !!val,\n then: (schema) => schema.oneOf([Yup.ref(\"password\")], ERROR_MESSAGES.FIELD_MUST_MATCH(\"Password\")).nullable(),\n otherwise: (schema) => schema.notRequired().nullable(),\n }),\n mobile: Yup.string().nullable(),\n });\n\n function isFetchBaseQueryErrorWithErrorResponse(\n error: any\n ): error is FetchBaseQueryError & { data: ErrorResponseData } {\n return error && typeof error === \"object\" && \"data\" in error && \"message\" in error.data;\n }\n\n const formik = useFormik({\n initialValues,\n validationSchema,\n enableReinitialize: true,\n onSubmit: async (values) => {\n if (data) {\n const userData: any = {\n fullName: values.fullName,\n username: values.username,\n email: values.email,\n mobile: values.mobile,\n roles: selectedRoles,\n active: values.active,\n isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,\n };\n\n if (values.password) {\n userData.password = values.password;\n }\n\n updateUser({ id: data.id, data: userData });\n return;\n }\n\n try {\n const response = await registerPrivate({\n fullName: values.fullName,\n username: values.username,\n email: values.email,\n mobile: values.mobile,\n password: values.password,\n roles: selectedRoles,\n isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,\n }).unwrap();\n\n if (values.isAllowedToGenerateApiKeys) {\n const userId = (response as any)?.data?.id ?? (response as any)?.id;\n if (userId) {\n setNewUserIdForApiKey(userId);\n return;\n }\n }\n router.back();\n } catch {\n // error shown via userCreateError effect\n }\n },\n });\n\n const fieldError = (fieldName: keyof typeof initialValues) =>\n formik.touched[fieldName] && formik.errors[fieldName] ? String(formik.errors[fieldName]) : \"\";\n\n const handleCheckboxChange = (roleName: string) => {\n const updatedRoles = selectedRoles.includes(roleName)\n ? selectedRoles.filter((name) => name !== roleName)\n : [...selectedRoles, roleName];\n\n setSelectedRoles(updatedRoles);\n formik.setFieldTouched(\"roles\", true);\n formik.setFieldValue(\"roles\", updatedRoles);\n };\n\n useEffect(() => {\n const handleError = (errorToast: any) => {\n let errorMessage: any = [ERROR_MESSAGES.ERROR_OCCURED];\n\n if (isFetchBaseQueryErrorWithErrorResponse(errorToast)) {\n errorMessage = errorToast.data.message;\n } else {\n errorMessage = [ERROR_MESSAGES.SOMETHING_WRONG];\n }\n\n const detail = Array.isArray(errorMessage) ? errorMessage.join(\", \") : errorMessage;\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.ERROR, detail }));\n };\n\n if (userCreateError) handleError(userCreateError);\n if (userUpdateError) handleError(userUpdateError);\n }, [dispatch, userCreateError, userUpdateError]);\n\n useEffect(() => {\n if (isDeleteUserSuccess || isUpdateUserSuccess) {\n router.back();\n }\n }, [isDeleteUserSuccess, isUpdateUserSuccess, router]);\n\n const isEditMode = params.id !== \"new\";\n const isSaving = isLoading || isUserUpdating;\n\n const handleUnblockUser = async () => {\n if (!data?.id) return;\n\n try {\n await updateUser({\n id: data.id,\n data: { failedLoginAttempts: 0 },\n }).unwrap();\n dispatch(\n showToast({\n severity: \"success\",\n summary: \"Success\",\n detail: \"User is unblocked.\",\n })\n );\n setFailedAttempts(0);\n } catch {\n // error shown via userUpdateError effect\n }\n };\n\n return (\n <div className=\"solid-form-wrapper\">\n <div className=\"solid-form-section\">\n <form onSubmit={formik.handleSubmit}>\n <div className=\"solid-form-header flex items-center justify-between gap-4 flex-wrap\">\n <div className=\"solid-user-form-titleblock flex items-center gap-4\">\n <BackButton />\n <div>\n <div className=\"form-wrapper-title\">{isEditMode ? \"Update User\" : \"Create User\"}</div>\n <p className=\"solid-user-form-subtitle m-0\">\n {isEditMode\n ? \"Update account details, access roles, and security controls.\"\n : \"Create a user account and assign the right access roles.\"}\n </p>\n </div>\n </div>\n <div className=\"flex gap-4 flex-wrap\">\n {isEditMode && failedAttempts > 0 ? (\n <SolidButton size=\"small\" type=\"button\" variant=\"outline\" loading={isUserUpdating} onClick={handleUnblockUser}>\n Unblock User\n </SolidButton>\n ) : null}\n {formik.dirty ? (\n <SolidButton size=\"small\" type=\"submit\" loading={isSaving}>\n Save\n </SolidButton>\n ) : null}\n {data ? (\n <SolidButton\n size=\"small\"\n type=\"button\"\n variant=\"destructive\"\n loading={isUserDeleting}\n onClick={() => deleteUser(data.id)}\n >\n Delete\n </SolidButton>\n ) : null}\n <CancelButton />\n </div>\n </div>\n\n <SolidFormHeader />\n\n <div className=\"px-3 py-3 md:p-4 solid-form-content\">\n {isEditMode ? (\n <SolidTabGroup\n value={activeTab}\n onValueChange={setActiveTab}\n tabs={[\n {\n value: \"userDetails\",\n label: \"User Details\",\n content: (\n <UserDetailsContent\n formik={formik}\n fieldError={fieldError}\n selectedRoles={selectedRoles}\n handleCheckboxChange={handleCheckboxChange}\n isEditMode={isEditMode}\n />\n ),\n },\n {\n value: \"apiKeys\",\n label: \"API Keys\",\n content: (\n <div className=\"solid-user-edit-api-keys-pane\">\n <ApiKeysTab userId={data?.id} canCreate={data?.isAllowedToGenerateApiKeys ?? false} />\n </div>\n ),\n },\n ]}\n />\n ) : (\n <UserDetailsContent\n formik={formik}\n fieldError={fieldError}\n selectedRoles={selectedRoles}\n handleCheckboxChange={handleCheckboxChange}\n isEditMode={isEditMode}\n />\n )}\n </div>\n </form>\n </div>\n\n {newUserIdForApiKey !== null && (\n <GenerateApiKeyModal\n open={true}\n userId={newUserIdForApiKey}\n onClose={() => {\n setNewUserIdForApiKey(null);\n router.back();\n }}\n onCreated={(apiKey, keyName) => {\n setNewUserIdForApiKey(null);\n setRevealKey({ apiKey, keyName });\n }}\n />\n )}\n\n {revealKey && (\n <RevealApiKeyModal\n open={true}\n apiKey={revealKey.apiKey}\n keyName={revealKey.keyName}\n onClose={() => {\n setRevealKey(null);\n router.back();\n }}\n />\n )}\n </div>\n );\n};\n\n/** Extracted form body so it can be used both inside and outside the tab wrapper */\nfunction UserDetailsContent({\n formik,\n fieldError,\n selectedRoles,\n handleCheckboxChange,\n isEditMode,\n}: {\n formik: any;\n fieldError: (field: any) => string;\n selectedRoles: string[];\n handleCheckboxChange: (roleName: string) => void;\n isEditMode: boolean;\n}) {\n return (\n <div className=\"solid-user-details-layout\">\n <div className=\"solid-user-details-stack\">\n <SolidPanel header=\"Basic Info\" className=\"solid-column-panel\">\n <div className=\"flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"fullName\" className=\"form-field-label\">\n Full Name\n </label>\n <SolidInput\n type=\"text\"\n id=\"fullName\"\n name=\"fullName\"\n autoComplete=\"off\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.fullName}\n className={cx(fieldError(\"fullName\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"fullName\") ? <SolidMessage severity=\"error\" text={fieldError(\"fullName\")} /> : null}\n </div>\n\n <div className=\"field flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"username\" className=\"form-field-label\">\n Username\n </label>\n <SolidInput\n type=\"text\"\n id=\"username\"\n name=\"username\"\n autoComplete=\"off\"\n disabled={Boolean(formik.values.username) && isEditMode}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.username}\n className={cx(fieldError(\"username\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"username\") ? <SolidMessage severity=\"error\" text={fieldError(\"username\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"email\" className=\"form-field-label\">\n Email\n </label>\n <SolidInput\n type=\"email\"\n id=\"email\"\n name=\"email\"\n autoComplete=\"off\"\n disabled={isEditMode}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.email}\n className={cx(fieldError(\"email\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"email\") ? <SolidMessage severity=\"error\" text={fieldError(\"email\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"mobile\" className=\"form-field-label\">\n Mobile\n </label>\n <SolidInput\n type=\"text\"\n id=\"mobile\"\n name=\"mobile\"\n autoComplete=\"off\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.mobile}\n className={cx(fieldError(\"mobile\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"mobile\") ? <SolidMessage severity=\"error\" text={fieldError(\"mobile\")} /> : null}\n </div>\n\n {!isEditMode ? (\n <>\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"password\" className=\"form-field-label\">\n Password\n </label>\n <SolidPasswordInput\n id=\"password\"\n name=\"password\"\n autoComplete=\"off\"\n value={formik.values.password}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n className={cx(fieldError(\"password\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"password\") ? <SolidMessage severity=\"error\" text={fieldError(\"password\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"confirmPassword\" className=\"form-field-label\">\n Confirm Password\n </label>\n <SolidPasswordInput\n id=\"confirmPassword\"\n name=\"confirmPassword\"\n autoComplete=\"off\"\n value={formik.values.confirmPassword}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n className={cx(fieldError(\"confirmPassword\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"confirmPassword\") ? (\n <SolidMessage severity=\"error\" text={fieldError(\"confirmPassword\")} />\n ) : null}\n </div>\n </>\n ) : null}\n </div>\n </SolidPanel>\n\n <SolidPanel toggleable header=\"Access\" className=\"solid-column-panel\">\n <div className=\"flex flex-wrap -mx-2 -mt-2 solid-user-access-grid\">\n {isEditMode ? (\n <div className=\"field w-full px-2 pt-2 solid-user-access-row\">\n <div className=\"solid-user-access-copy\">\n <p className=\"form-field-label m-0\">Active User</p>\n <p className=\"solid-user-section-helper m-0 mt-1\">\n Control whether this user account is active and allowed to sign in.\n </p>\n </div>\n <SolidSwitch\n checked={formik.values.active}\n onChange={(checked) => formik.setFieldValue(\"active\", checked)}\n />\n </div>\n ) : null}\n <div className=\"field w-full px-2 pt-2 solid-user-access-row\">\n <div className=\"solid-user-access-copy\">\n <p className=\"form-field-label m-0\">Allow API Key Generation</p>\n <p className=\"solid-user-section-helper m-0 mt-1\">\n When enabled, this user can generate API keys for programmatic access.\n </p>\n </div>\n <SolidSwitch\n checked={formik.values.isAllowedToGenerateApiKeys}\n onChange={(checked) => formik.setFieldValue(\"isAllowedToGenerateApiKeys\", checked)}\n />\n </div>\n </div>\n </SolidPanel>\n\n <SolidPanel toggleable header=\"Roles\" className=\"solid-column-panel\">\n <p className=\"solid-user-section-copy\">Select the roles that should be assigned to this user.</p>\n <RolesGroupedByModuleWidget\n selectedRoles={selectedRoles}\n onToggle={handleCheckboxChange}\n />\n </SolidPanel>\n </div>\n </div>\n );\n}\n\nexport default CreateUser;\n"]}
1
+ {"version":3,"file":"CreateUser.js","sourceRoot":"","sources":["../../../../src/components/core/users/CreateUser.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FetchBaseQueryError } from \"@reduxjs/toolkit/dist/query\";\nimport { useFormik } from \"formik\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport * as Yup from \"yup\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { CancelButton } from \"../../../components/common/CancelButton\";\nimport { SolidFormHeader } from \"../../../components/common/SolidFormHeader\";\nimport { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport { useRouter } from \"../../../hooks/useRouter\";\nimport { useRegisterPrivateMutation, useUpdateUserMutation } from \"../../../redux/api/authApi\";\nimport { useDeleteUserMutation } from \"../../../redux/api/userApi\";\nimport { RolesGroupedByModuleWidget } from \"../../core/form/fields/relations/RolesGroupedByModuleWidget\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport {\n SolidButton,\n SolidInput,\n SolidMessage,\n SolidPanel,\n SolidPasswordInput,\n SolidSwitch,\n SolidTabGroup,\n} from \"../../shad-cn-ui\";\nimport { ApiKeysTab, GenerateApiKeyModal, RevealApiKeyModal } from \"./ApiKeysTab\";\nimport \"./CreateUser.css\";\n\ninterface ErrorResponseData {\n message: string;\n statusCode: number;\n error: string;\n}\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nconst CreateUser = ({ data, params }: any) => {\n const dispatch = useDispatch();\n const router = useRouter();\n const [selectedRoles, setSelectedRoles] = useState<string[]>([]);\n const [failedAttempts, setFailedAttempts] = useState<number>(data?.failedLoginAttempts ?? 0);\n const [activeTab, setActiveTab] = useState(\"userDetails\");\n const [newUserIdForApiKey, setNewUserIdForApiKey] = useState<number | null>(null);\n const [revealKey, setRevealKey] = useState<{ apiKey: string; keyName: string } | null>(null);\n\n const [registerPrivate, { isLoading, error: userCreateError }] = useRegisterPrivateMutation();\n const [\n updateUser,\n {\n isLoading: isUserUpdating,\n error: userUpdateError,\n },\n ] = useUpdateUserMutation();\n\n const [deleteUser, { isLoading: isUserDeleting, isSuccess: isDeleteUserSuccess }] = useDeleteUserMutation();\n\n useEffect(() => {\n if (data?.roles) {\n setSelectedRoles(data.roles.map((role: any) => role.name));\n }\n setFailedAttempts(data?.failedLoginAttempts ?? 0);\n }, [data]);\n\n const initialValues = {\n fullName: data?.fullName ?? \"\",\n username: data?.username ?? \"\",\n email: data?.email ?? \"\",\n mobile: data?.mobile ?? \"\",\n password: \"\",\n confirmPassword: \"\",\n active: data?.active ?? true,\n isAllowedToGenerateApiKeys: data?.isAllowedToGenerateApiKeys ?? false,\n };\n\n const validationSchema = Yup.object({\n fullName: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Full Name\")),\n username: Yup.string().required(\"Username is required\"),\n email: Yup.string()\n .email(ERROR_MESSAGES.FIELD_INVALID(\"email address\"))\n .required(ERROR_MESSAGES.FIELD_REUQIRED(\"Email\")),\n password: Yup.string().min(6, ERROR_MESSAGES.PASSWORD_CHARACTER(6)).nullable(),\n confirmPassword: Yup.string().when(\"password\", {\n is: (val: any) => !!val,\n then: (schema) => schema.oneOf([Yup.ref(\"password\")], ERROR_MESSAGES.FIELD_MUST_MATCH(\"Password\")).nullable(),\n otherwise: (schema) => schema.notRequired().nullable(),\n }),\n mobile: Yup.string().nullable(),\n });\n\n function isFetchBaseQueryErrorWithErrorResponse(\n error: any\n ): error is FetchBaseQueryError & { data: ErrorResponseData } {\n return error && typeof error === \"object\" && \"data\" in error && \"message\" in error.data;\n }\n\n const formik = useFormik({\n initialValues,\n validationSchema,\n enableReinitialize: true,\n onSubmit: async (values) => {\n if (data) {\n const userData: any = {\n fullName: values.fullName,\n username: values.username,\n email: values.email,\n mobile: values.mobile,\n roles: selectedRoles,\n active: values.active,\n isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,\n };\n\n if (values.password) {\n userData.password = values.password;\n }\n\n try {\n await updateUser({ id: data.id, data: userData }).unwrap();\n dispatch(\n showToast({\n severity: \"success\",\n summary: ERROR_MESSAGES.FORM_UPDATE,\n detail: ERROR_MESSAGES.FORM_UPDATE_SUCCESSFULLY,\n })\n );\n router.back();\n } catch {\n // error shown via userUpdateError effect\n }\n return;\n }\n\n try {\n const response = await registerPrivate({\n fullName: values.fullName,\n username: values.username,\n email: values.email,\n mobile: values.mobile,\n password: values.password,\n roles: selectedRoles,\n isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,\n }).unwrap();\n\n if (values.isAllowedToGenerateApiKeys) {\n const userId = (response as any)?.data?.id ?? (response as any)?.id;\n if (userId) {\n setNewUserIdForApiKey(userId);\n return;\n }\n }\n router.back();\n } catch {\n // error shown via userCreateError effect\n }\n },\n });\n\n const fieldError = (fieldName: keyof typeof initialValues) =>\n formik.touched[fieldName] && formik.errors[fieldName] ? String(formik.errors[fieldName]) : \"\";\n\n const handleCheckboxChange = (roleName: string) => {\n const updatedRoles = selectedRoles.includes(roleName)\n ? selectedRoles.filter((name) => name !== roleName)\n : [...selectedRoles, roleName];\n\n setSelectedRoles(updatedRoles);\n formik.setFieldTouched(\"roles\", true);\n formik.setFieldValue(\"roles\", updatedRoles);\n };\n\n useEffect(() => {\n const handleError = (errorToast: any) => {\n let errorMessage: any = [ERROR_MESSAGES.ERROR_OCCURED];\n\n if (isFetchBaseQueryErrorWithErrorResponse(errorToast)) {\n errorMessage = errorToast.data.message;\n } else {\n errorMessage = [ERROR_MESSAGES.SOMETHING_WRONG];\n }\n\n const detail = Array.isArray(errorMessage) ? errorMessage.join(\", \") : errorMessage;\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.ERROR, detail }));\n };\n\n if (userCreateError) handleError(userCreateError);\n if (userUpdateError) handleError(userUpdateError);\n }, [dispatch, userCreateError, userUpdateError]);\n\n useEffect(() => {\n if (isDeleteUserSuccess) {\n router.back();\n }\n }, [isDeleteUserSuccess, router]);\n\n const isEditMode = params.id !== \"new\";\n const isSaving = isLoading || isUserUpdating;\n\n const handleUnblockUser = async () => {\n if (!data?.id) return;\n\n try {\n await updateUser({\n id: data.id,\n data: { failedLoginAttempts: 0 },\n }).unwrap();\n dispatch(\n showToast({\n severity: \"success\",\n summary: \"Success\",\n detail: \"User is unblocked.\",\n })\n );\n setFailedAttempts(0);\n } catch {\n // error shown via userUpdateError effect\n }\n };\n\n return (\n <div className=\"solid-form-wrapper\">\n <div className=\"solid-form-section\">\n <form onSubmit={formik.handleSubmit}>\n <div className=\"solid-form-header flex items-center justify-between gap-4 flex-wrap\">\n <div className=\"solid-user-form-titleblock flex items-center gap-4\">\n <BackButton />\n <div>\n <div className=\"form-wrapper-title\">{isEditMode ? \"Update User\" : \"Create User\"}</div>\n <p className=\"solid-user-form-subtitle m-0\">\n {isEditMode\n ? \"Update account details, access roles, and security controls.\"\n : \"Create a user account and assign the right access roles.\"}\n </p>\n </div>\n </div>\n <div className=\"flex gap-4 flex-wrap\">\n {isEditMode && failedAttempts > 0 ? (\n <SolidButton size=\"small\" type=\"button\" variant=\"outline\" loading={isUserUpdating} onClick={handleUnblockUser}>\n Unblock User\n </SolidButton>\n ) : null}\n {formik.dirty ? (\n <SolidButton size=\"small\" type=\"submit\" loading={isSaving}>\n Save\n </SolidButton>\n ) : null}\n {data ? (\n <SolidButton\n size=\"small\"\n type=\"button\"\n variant=\"destructive\"\n loading={isUserDeleting}\n onClick={() => deleteUser(data.id)}\n >\n Delete\n </SolidButton>\n ) : null}\n <CancelButton />\n </div>\n </div>\n\n <SolidFormHeader />\n\n <div className=\"px-3 py-3 md:p-4 solid-form-content\">\n {isEditMode ? (\n <SolidTabGroup\n value={activeTab}\n onValueChange={setActiveTab}\n tabs={[\n {\n value: \"userDetails\",\n label: \"User Details\",\n content: (\n <UserDetailsContent\n formik={formik}\n fieldError={fieldError}\n selectedRoles={selectedRoles}\n handleCheckboxChange={handleCheckboxChange}\n isEditMode={isEditMode}\n />\n ),\n },\n {\n value: \"apiKeys\",\n label: \"API Keys\",\n content: (\n <div className=\"solid-user-edit-api-keys-pane\">\n <ApiKeysTab userId={data?.id} canCreate={data?.isAllowedToGenerateApiKeys ?? false} />\n </div>\n ),\n },\n ]}\n />\n ) : (\n <UserDetailsContent\n formik={formik}\n fieldError={fieldError}\n selectedRoles={selectedRoles}\n handleCheckboxChange={handleCheckboxChange}\n isEditMode={isEditMode}\n />\n )}\n </div>\n </form>\n </div>\n\n {newUserIdForApiKey !== null && (\n <GenerateApiKeyModal\n open={true}\n userId={newUserIdForApiKey}\n onClose={() => {\n setNewUserIdForApiKey(null);\n router.back();\n }}\n onCreated={(apiKey, keyName) => {\n setNewUserIdForApiKey(null);\n setRevealKey({ apiKey, keyName });\n }}\n />\n )}\n\n {revealKey && (\n <RevealApiKeyModal\n open={true}\n apiKey={revealKey.apiKey}\n keyName={revealKey.keyName}\n onClose={() => {\n setRevealKey(null);\n router.back();\n }}\n />\n )}\n </div>\n );\n};\n\n/** Extracted form body so it can be used both inside and outside the tab wrapper */\nfunction UserDetailsContent({\n formik,\n fieldError,\n selectedRoles,\n handleCheckboxChange,\n isEditMode,\n}: {\n formik: any;\n fieldError: (field: any) => string;\n selectedRoles: string[];\n handleCheckboxChange: (roleName: string) => void;\n isEditMode: boolean;\n}) {\n return (\n <div className=\"solid-user-details-layout\">\n <div className=\"solid-user-details-stack\">\n <SolidPanel header=\"Basic Info\" className=\"solid-column-panel\">\n <div className=\"flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"fullName\" className=\"form-field-label\">\n Full Name\n </label>\n <SolidInput\n type=\"text\"\n id=\"fullName\"\n name=\"fullName\"\n autoComplete=\"off\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.fullName}\n className={cx(fieldError(\"fullName\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"fullName\") ? <SolidMessage severity=\"error\" text={fieldError(\"fullName\")} /> : null}\n </div>\n\n <div className=\"field flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"username\" className=\"form-field-label\">\n Username\n </label>\n <SolidInput\n type=\"text\"\n id=\"username\"\n name=\"username\"\n autoComplete=\"off\"\n disabled={Boolean(formik.values.username) && isEditMode}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.username}\n className={cx(fieldError(\"username\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"username\") ? <SolidMessage severity=\"error\" text={fieldError(\"username\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"email\" className=\"form-field-label\">\n Email\n </label>\n <SolidInput\n type=\"email\"\n id=\"email\"\n name=\"email\"\n autoComplete=\"off\"\n disabled={isEditMode}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.email}\n className={cx(fieldError(\"email\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"email\") ? <SolidMessage severity=\"error\" text={fieldError(\"email\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"mobile\" className=\"form-field-label\">\n Mobile\n </label>\n <SolidInput\n type=\"text\"\n id=\"mobile\"\n name=\"mobile\"\n autoComplete=\"off\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.mobile}\n className={cx(fieldError(\"mobile\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"mobile\") ? <SolidMessage severity=\"error\" text={fieldError(\"mobile\")} /> : null}\n </div>\n\n {!isEditMode ? (\n <>\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"password\" className=\"form-field-label\">\n Password\n </label>\n <SolidPasswordInput\n id=\"password\"\n name=\"password\"\n autoComplete=\"off\"\n value={formik.values.password}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n className={cx(fieldError(\"password\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"password\") ? <SolidMessage severity=\"error\" text={fieldError(\"password\")} /> : null}\n </div>\n\n <div className=\"field mt-4 flex w-full flex-col gap-2 px-2 pt-2 md:w-1/2\">\n <label htmlFor=\"confirmPassword\" className=\"form-field-label\">\n Confirm Password\n </label>\n <SolidPasswordInput\n id=\"confirmPassword\"\n name=\"confirmPassword\"\n autoComplete=\"off\"\n value={formik.values.confirmPassword}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n className={cx(fieldError(\"confirmPassword\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"confirmPassword\") ? (\n <SolidMessage severity=\"error\" text={fieldError(\"confirmPassword\")} />\n ) : null}\n </div>\n </>\n ) : null}\n </div>\n </SolidPanel>\n\n <SolidPanel toggleable header=\"Access\" className=\"solid-column-panel\">\n <div className=\"flex flex-wrap -mx-2 -mt-2 solid-user-access-grid\">\n {isEditMode ? (\n <div className=\"field w-full px-2 pt-2 solid-user-access-row\">\n <div className=\"solid-user-access-copy\">\n <p className=\"form-field-label m-0\">Active User</p>\n <p className=\"solid-user-section-helper m-0 mt-1\">\n Control whether this user account is active and allowed to sign in.\n </p>\n </div>\n <SolidSwitch\n checked={formik.values.active}\n onChange={(checked) => formik.setFieldValue(\"active\", checked)}\n />\n </div>\n ) : null}\n <div className=\"field w-full px-2 pt-2 solid-user-access-row\">\n <div className=\"solid-user-access-copy\">\n <p className=\"form-field-label m-0\">Allow API Key Generation</p>\n <p className=\"solid-user-section-helper m-0 mt-1\">\n When enabled, this user can generate API keys for programmatic access.\n </p>\n </div>\n <SolidSwitch\n checked={formik.values.isAllowedToGenerateApiKeys}\n onChange={(checked) => formik.setFieldValue(\"isAllowedToGenerateApiKeys\", checked)}\n />\n </div>\n </div>\n </SolidPanel>\n\n <SolidPanel toggleable header=\"Roles\" className=\"solid-column-panel\">\n <p className=\"solid-user-section-copy\">Select the roles that should be assigned to this user.</p>\n <RolesGroupedByModuleWidget\n selectedRoles={selectedRoles}\n onToggle={handleCheckboxChange}\n />\n </SolidPanel>\n </div>\n </div>\n );\n}\n\nexport default CreateUser;\n"]}
@@ -48,7 +48,6 @@ const CreateUser = ({ data, params }: any) => {
48
48
  updateUser,
49
49
  {
50
50
  isLoading: isUserUpdating,
51
- isSuccess: isUpdateUserSuccess,
52
51
  error: userUpdateError,
53
52
  },
54
53
  ] = useUpdateUserMutation();
@@ -114,7 +113,19 @@ const CreateUser = ({ data, params }: any) => {
114
113
  userData.password = values.password;
115
114
  }
116
115
 
117
- updateUser({ id: data.id, data: userData });
116
+ try {
117
+ await updateUser({ id: data.id, data: userData }).unwrap();
118
+ dispatch(
119
+ showToast({
120
+ severity: "success",
121
+ summary: ERROR_MESSAGES.FORM_UPDATE,
122
+ detail: ERROR_MESSAGES.FORM_UPDATE_SUCCESSFULLY,
123
+ })
124
+ );
125
+ router.back();
126
+ } catch {
127
+ // error shown via userUpdateError effect
128
+ }
118
129
  return;
119
130
  }
120
131
 
@@ -175,10 +186,10 @@ const CreateUser = ({ data, params }: any) => {
175
186
  }, [dispatch, userCreateError, userUpdateError]);
176
187
 
177
188
  useEffect(() => {
178
- if (isDeleteUserSuccess || isUpdateUserSuccess) {
189
+ if (isDeleteUserSuccess) {
179
190
  router.back();
180
191
  }
181
- }, [isDeleteUserSuccess, isUpdateUserSuccess, router]);
192
+ }, [isDeleteUserSuccess, router]);
182
193
 
183
194
  const isEditMode = params.id !== "new";
184
195
  const isSaving = isLoading || isUserUpdating;
@@ -1 +1 @@
1
- {"version":3,"file":"AdminHeaderActions.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AdminHeaderActions.tsx"],"names":[],"mappings":"AAUA,KAAK,uBAAuB,GAAG;IAC7B,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAUF,eAAO,MAAM,iBAAiB,+CAK7B,CAAC;AAYF,eAAO,MAAM,kBAAkB,2BAAiC,uBAAuB,mDAkHtF,CAAC"}
1
+ {"version":3,"file":"AdminHeaderActions.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AdminHeaderActions.tsx"],"names":[],"mappings":"AAWA,KAAK,uBAAuB,GAAG;IAC7B,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAUF,eAAO,MAAM,iBAAiB,+CAK7B,CAAC;AAYF,eAAO,MAAM,kBAAkB,2BAAiC,uBAAuB,mDAmHtF,CAAC"}
@@ -17,6 +17,7 @@ import { env } from "../../adapters/env";
17
17
  import { hasAnyRole } from "../../helpers/rolesHelper";
18
18
  import { enterStudioMode } from "../../redux/features/solidStudioSlice";
19
19
  import { LayoutContext } from "./context/layoutcontext";
20
+ import { BackendReconnectIndicator } from "../common/BackendReconnectIndicator";
20
21
  export 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" })] })); };
21
22
  var ThemeToggleIcon = function () { return (_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" })] })); };
22
23
  export var AdminHeaderActions = function (_a) {
@@ -64,14 +65,14 @@ export var AdminHeaderActions = function (_a) {
64
65
  if (variant === "sidebar") {
65
66
  return (_jsx("div", { className: "solid-sidebar-mobile-actions md:hidden ".concat(className).trim(), children: actions.map(function (action) { return (_jsx("button", { type: "button", className: "solid-sidebar-mobile-action", onClick: action.onClick, title: action.title, "aria-label": action.title, children: action.label }, action.key)); }) }));
66
67
  }
67
- return (_jsx("div", { className: "solid-admin-header-actions hidden md:flex ".concat(className).trim(), children: actions.map(function (action) {
68
- if (action.key === "studio") {
69
- return (_jsxs("button", { type: "button", className: "solid-studio-trigger-btn", onClick: action.onClick, title: action.title, "aria-label": action.title, children: [action.icon, _jsx("span", { className: "solid-studio-trigger-label", children: action.label })] }, action.key));
70
- }
71
- if (action.key === "theme") {
72
- return (_jsxs("button", { type: "button", className: "solid-admin-theme-toggle", onClick: action.onClick, "aria-label": action.title, title: action.title, children: [action.icon, _jsx("span", { className: "solid-sr-only", children: action.label })] }, action.key));
73
- }
74
- return (_jsx("button", { type: "button", className: "solid-admin-back-btn", onClick: action.onClick, "aria-label": action.title, children: action.label }, action.key));
75
- }) }));
68
+ return (_jsxs("div", { className: "solid-admin-header-actions hidden md:flex ".concat(className).trim(), children: [_jsx(BackendReconnectIndicator, {}), actions.map(function (action) {
69
+ if (action.key === "studio") {
70
+ return (_jsxs("button", { type: "button", className: "solid-studio-trigger-btn", onClick: action.onClick, title: action.title, "aria-label": action.title, children: [action.icon, _jsx("span", { className: "solid-studio-trigger-label", children: action.label })] }, action.key));
71
+ }
72
+ if (action.key === "theme") {
73
+ return (_jsxs("button", { type: "button", className: "solid-admin-theme-toggle", onClick: action.onClick, "aria-label": action.title, title: action.title, children: [action.icon, _jsx("span", { className: "solid-sr-only", children: action.label })] }, action.key));
74
+ }
75
+ return (_jsx("button", { type: "button", className: "solid-admin-back-btn", onClick: action.onClick, "aria-label": action.title, children: action.label }, action.key));
76
+ })] }));
76
77
  };
77
78
  //# sourceMappingURL=AdminHeaderActions.js.map