@solidxai/core-ui 0.1.9-beta.1 → 0.1.9-beta.11

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 (201) hide show
  1. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  2. package/dist/components/auth/AuthLayout.js +16 -15
  3. package/dist/components/auth/AuthLayout.js.map +1 -1
  4. package/dist/components/auth/AuthLayout.tsx +3 -1
  5. package/dist/components/auth/ForgotPasswordThankYou.js +1 -1
  6. package/dist/components/auth/ForgotPasswordThankYou.js.map +1 -1
  7. package/dist/components/auth/ForgotPasswordThankYou.tsx +2 -2
  8. package/dist/components/auth/SolidForgotPassword.js +1 -1
  9. package/dist/components/auth/SolidForgotPassword.js.map +1 -1
  10. package/dist/components/auth/SolidForgotPassword.tsx +2 -2
  11. package/dist/components/auth/SolidInitialLoginOtp.js +8 -8
  12. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  13. package/dist/components/auth/SolidInitialLoginOtp.tsx +1 -1
  14. package/dist/components/auth/SolidInitiateRegisterOtp.js +8 -8
  15. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  16. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +1 -1
  17. package/dist/components/auth/SolidLogin.js +7 -8
  18. package/dist/components/auth/SolidLogin.js.map +1 -1
  19. package/dist/components/auth/SolidLogin.tsx +1 -1
  20. package/dist/components/auth/SolidRegister.js +9 -9
  21. package/dist/components/auth/SolidRegister.js.map +1 -1
  22. package/dist/components/auth/SolidRegister.tsx +2 -2
  23. package/dist/components/common/AuthBanner.js.map +1 -1
  24. package/dist/components/common/SocialMediaLogin.js +1 -1
  25. package/dist/components/common/SocialMediaLogin.js.map +1 -1
  26. package/dist/components/common/SocialMediaLogin.tsx +4 -4
  27. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
  28. package/dist/components/core/form/SolidFormActionHeader.js +1 -0
  29. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
  30. package/dist/components/core/form/SolidFormActionHeader.tsx +2 -1
  31. package/dist/components/core/form/SolidFormFooter.d.ts.map +1 -1
  32. package/dist/components/core/form/SolidFormFooter.js +14 -7
  33. package/dist/components/core/form/SolidFormFooter.js.map +1 -1
  34. package/dist/components/core/form/SolidFormFooter.tsx +14 -6
  35. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  36. package/dist/components/core/form/SolidFormView.js +7 -3
  37. package/dist/components/core/form/SolidFormView.js.map +1 -1
  38. package/dist/components/core/form/SolidFormView.tsx +5 -2
  39. package/dist/components/core/form/fields/SolidBooleanField.d.ts.map +1 -1
  40. package/dist/components/core/form/fields/SolidBooleanField.js +10 -1
  41. package/dist/components/core/form/fields/SolidBooleanField.js.map +1 -1
  42. package/dist/components/core/form/fields/SolidBooleanField.tsx +13 -1
  43. package/dist/components/core/form/fields/SolidDecimalField.d.ts.map +1 -1
  44. package/dist/components/core/form/fields/SolidDecimalField.js +7 -1
  45. package/dist/components/core/form/fields/SolidDecimalField.js.map +1 -1
  46. package/dist/components/core/form/fields/SolidDecimalField.tsx +10 -1
  47. package/dist/components/core/form/fields/SolidIntegerField.d.ts.map +1 -1
  48. package/dist/components/core/form/fields/SolidIntegerField.js +14 -2
  49. package/dist/components/core/form/fields/SolidIntegerField.js.map +1 -1
  50. package/dist/components/core/form/fields/SolidIntegerField.tsx +20 -2
  51. package/dist/components/core/form/fields/SolidJsonField.d.ts.map +1 -1
  52. package/dist/components/core/form/fields/SolidJsonField.js +9 -1
  53. package/dist/components/core/form/fields/SolidJsonField.js.map +1 -1
  54. package/dist/components/core/form/fields/SolidJsonField.tsx +12 -1
  55. package/dist/components/core/form/fields/SolidLongTextField.d.ts.map +1 -1
  56. package/dist/components/core/form/fields/SolidLongTextField.js +23 -3
  57. package/dist/components/core/form/fields/SolidLongTextField.js.map +1 -1
  58. package/dist/components/core/form/fields/SolidLongTextField.tsx +32 -3
  59. package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
  60. package/dist/components/core/form/fields/SolidMediaMultipleField.js +15 -2
  61. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  62. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +20 -4
  63. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  64. package/dist/components/core/form/fields/SolidMediaSingleField.js +21 -3
  65. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  66. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +30 -3
  67. package/dist/components/core/form/fields/SolidPasswordField.d.ts.map +1 -1
  68. package/dist/components/core/form/fields/SolidPasswordField.js +2 -1
  69. package/dist/components/core/form/fields/SolidPasswordField.js.map +1 -1
  70. package/dist/components/core/form/fields/SolidPasswordField.tsx +13 -1
  71. package/dist/components/core/form/fields/SolidRichTextField.d.ts.map +1 -1
  72. package/dist/components/core/form/fields/SolidRichTextField.js +9 -1
  73. package/dist/components/core/form/fields/SolidRichTextField.js.map +1 -1
  74. package/dist/components/core/form/fields/SolidRichTextField.tsx +12 -1
  75. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  76. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +2 -2
  77. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  78. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +8 -2
  79. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.d.ts.map +1 -1
  80. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js +14 -3
  81. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js.map +1 -1
  82. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.tsx +20 -3
  83. package/dist/components/core/kanban/SolidManyToOneFilterElement.d.ts.map +1 -1
  84. package/dist/components/core/kanban/SolidManyToOneFilterElement.js.map +1 -1
  85. package/dist/components/core/kanban/SolidManyToOneFilterElement.tsx +1 -2
  86. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.d.ts.map +1 -1
  87. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js +2 -2
  88. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js.map +1 -1
  89. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.tsx +21 -10
  90. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.d.ts.map +1 -1
  91. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js +2 -2
  92. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js.map +1 -1
  93. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.tsx +18 -10
  94. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.d.ts.map +1 -1
  95. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js +3 -6
  96. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js.map +1 -1
  97. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.tsx +30 -24
  98. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.js.map +1 -1
  99. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.tsx +2 -2
  100. package/dist/components/core/list/SolidDataTablePagination.d.ts +15 -0
  101. package/dist/components/core/list/SolidDataTablePagination.d.ts.map +1 -0
  102. package/dist/components/core/list/SolidDataTablePagination.js +22 -0
  103. package/dist/components/core/list/SolidDataTablePagination.js.map +1 -0
  104. package/dist/components/core/list/SolidDataTablePagination.tsx +71 -0
  105. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  106. package/dist/components/core/list/SolidListView.js +66 -2
  107. package/dist/components/core/list/SolidListView.js.map +1 -1
  108. package/dist/components/core/list/SolidListView.tsx +67 -2
  109. package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts +1 -1
  110. package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts.map +1 -1
  111. package/dist/components/core/list/SolidListViewRowButtonContextMenu.js +6 -7
  112. package/dist/components/core/list/SolidListViewRowButtonContextMenu.js.map +1 -1
  113. package/dist/components/core/list/SolidListViewRowButtonContextMenu.tsx +9 -10
  114. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.d.ts +3 -0
  115. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.d.ts.map +1 -0
  116. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.js +39 -0
  117. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.js.map +1 -0
  118. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.tsx +50 -0
  119. package/dist/components/core/tree/SolidTreeTable.d.ts +1 -1
  120. package/dist/components/core/tree/SolidTreeTable.d.ts.map +1 -1
  121. package/dist/components/core/tree/SolidTreeTable.js +78 -78
  122. package/dist/components/core/tree/SolidTreeTable.js.map +1 -1
  123. package/dist/components/core/tree/SolidTreeTable.tsx +1 -10
  124. package/dist/components/core/users/CreateUser.css +27 -2
  125. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  126. package/dist/components/core/users/CreateUser.js +52 -24
  127. package/dist/components/core/users/CreateUser.js.map +1 -1
  128. package/dist/components/core/users/CreateUser.tsx +46 -33
  129. package/dist/components/solid-ui/SolidButton.d.ts +14 -0
  130. package/dist/components/solid-ui/SolidButton.d.ts.map +1 -0
  131. package/dist/components/solid-ui/SolidButton.js +36 -0
  132. package/dist/components/solid-ui/SolidButton.js.map +1 -0
  133. package/dist/components/solid-ui/SolidButton.tsx +54 -0
  134. package/dist/components/solid-ui/SolidTabs.d.ts +18 -0
  135. package/dist/components/solid-ui/SolidTabs.d.ts.map +1 -0
  136. package/dist/components/solid-ui/SolidTabs.js +22 -0
  137. package/dist/components/solid-ui/SolidTabs.js.map +1 -0
  138. package/dist/components/solid-ui/SolidTabs.tsx +73 -0
  139. package/dist/components/solid-ui/index.d.ts +3 -0
  140. package/dist/components/solid-ui/index.d.ts.map +1 -0
  141. package/dist/components/solid-ui/index.js +3 -0
  142. package/dist/components/solid-ui/index.js.map +1 -0
  143. package/dist/components/solid-ui/index.ts +2 -0
  144. package/dist/helpers/registry.d.ts.map +1 -1
  145. package/dist/helpers/registry.js +3 -0
  146. package/dist/helpers/registry.js.map +1 -1
  147. package/dist/helpers/registry.ts +4 -0
  148. package/dist/index.d.ts +2 -0
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +1 -0
  151. package/dist/index.js.map +1 -1
  152. package/dist/index.ts +2 -0
  153. package/dist/resources/shadcn-base.css +17 -9
  154. package/dist/routes/SolidRouteMetadataBoundary.d.ts +5 -0
  155. package/dist/routes/SolidRouteMetadataBoundary.d.ts.map +1 -0
  156. package/dist/routes/SolidRouteMetadataBoundary.js +72 -0
  157. package/dist/routes/SolidRouteMetadataBoundary.js.map +1 -0
  158. package/dist/routes/SolidRouteMetadataBoundary.tsx +77 -0
  159. package/dist/routes/pages/studio/StudioLandingPage.d.ts.map +1 -1
  160. package/dist/routes/pages/studio/StudioLandingPage.js +35 -7
  161. package/dist/routes/pages/studio/StudioLandingPage.js.map +1 -1
  162. package/dist/routes/pages/studio/StudioLandingPage.tsx +42 -6
  163. package/dist/routes/solidRoutes.d.ts.map +1 -1
  164. package/dist/routes/solidRoutes.js +47 -26
  165. package/dist/routes/solidRoutes.js.map +1 -1
  166. package/dist/routes/solidRoutes.tsx +47 -26
  167. package/dist/routes/types.d.ts +7 -0
  168. package/dist/routes/types.d.ts.map +1 -1
  169. package/dist/routes/types.js.map +1 -1
  170. package/dist/routes/types.ts +8 -0
  171. package/package.json +1 -1
  172. package/dist/components/auth/SolidOTPVerify.d.ts +0 -3
  173. package/dist/components/auth/SolidOTPVerify.d.ts.map +0 -1
  174. package/dist/components/auth/SolidOTPVerify.js +0 -67
  175. package/dist/components/auth/SolidOTPVerify.js.map +0 -1
  176. package/dist/components/auth/SolidOTPVerify.tsx +0 -133
  177. package/dist/components/core/common/LoadDynamicJsxComponent.d.ts +0 -2
  178. package/dist/components/core/common/LoadDynamicJsxComponent.d.ts.map +0 -1
  179. package/dist/components/core/common/LoadDynamicJsxComponent.js +0 -50
  180. package/dist/components/core/common/LoadDynamicJsxComponent.js.map +0 -1
  181. package/dist/components/core/common/LoadDynamicJsxComponent.tsx +0 -70
  182. package/dist/nextAuth/authProviders.d.ts +0 -4
  183. package/dist/nextAuth/authProviders.d.ts.map +0 -1
  184. package/dist/nextAuth/authProviders.js +0 -198
  185. package/dist/nextAuth/authProviders.js.map +0 -1
  186. package/dist/nextAuth/authProviders.tsx +0 -232
  187. package/dist/nextAuth/handleLogout.d.ts +0 -2
  188. package/dist/nextAuth/handleLogout.d.ts.map +0 -1
  189. package/dist/nextAuth/handleLogout.js +0 -36
  190. package/dist/nextAuth/handleLogout.js.map +0 -1
  191. package/dist/nextAuth/handleLogout.tsx +0 -39
  192. package/dist/nextAuth/refreshAccessToken.d.ts +0 -2
  193. package/dist/nextAuth/refreshAccessToken.d.ts.map +0 -1
  194. package/dist/nextAuth/refreshAccessToken.js +0 -24
  195. package/dist/nextAuth/refreshAccessToken.js.map +0 -1
  196. package/dist/nextAuth/refreshAccessToken.tsx +0 -28
  197. package/dist/redux/features/settingsSlice.d.ts +0 -20
  198. package/dist/redux/features/settingsSlice.d.ts.map +0 -1
  199. package/dist/redux/features/settingsSlice.js +0 -39
  200. package/dist/redux/features/settingsSlice.js.map +0 -1
  201. package/dist/redux/features/settingsSlice.ts +0 -60
@@ -1 +1 @@
1
- {"version":3,"file":"SolidTreeTable.js","sourceRoot":"","sources":["../../../../src/components/core/tree/SolidTreeTable.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport { ArrowDownWideNarrow, ArrowUpDown, ArrowUpWideNarrow, ChevronRight, Loader2, Minus } from \"lucide-react\";\n\nexport type SolidTreeNode = {\n key?: string | number;\n data?: any;\n children?: SolidTreeNode[];\n leaf?: boolean;\n [key: string]: any;\n};\n\nexport type SolidTreeSelectionKey = {\n checked?: boolean;\n partialChecked?: boolean;\n [key: string]: any;\n};\n\nexport type SolidTreeSelectionKeys = Record<string, SolidTreeSelectionKey>;\n\ntype HeaderRenderer = React.ReactNode | (() => React.ReactNode);\ntype BodyRenderer = (node: SolidTreeNode, options?: { depth: number; rowIndex: number }) => React.ReactNode;\n\nexport type SolidTreeColumnProps = {\n field?: string;\n header?: HeaderRenderer;\n body?: BodyRenderer;\n sortable?: boolean;\n headerStyle?: React.CSSProperties;\n style?: React.CSSProperties;\n className?: string;\n headerClassName?: string;\n bodyClassName?: string;\n align?: \"left\" | \"center\" | \"right\";\n alignHeader?: \"left\" | \"center\" | \"right\";\n expander?: boolean | ((node: SolidTreeNode) => boolean);\n frozen?: boolean;\n alignFrozen?: \"left\" | \"right\";\n [key: string]: any;\n};\n\ntype SolidTreeTableProps = {\n value?: SolidTreeNode[];\n children: React.ReactNode;\n loading?: boolean;\n expandedKeys?: Record<string, boolean>;\n onToggle?: (event: { value: Record<string, boolean> }) => void;\n onExpand?: (event: { node: SolidTreeNode }) => void;\n tableClassName?: string;\n tableStyle?: React.CSSProperties;\n emptyMessage?: React.ReactNode;\n selectionMode?: \"checkbox\" | null;\n selectionKeys?: SolidTreeSelectionKeys;\n onSelectionChange?: (event: {\n value: SolidTreeSelectionKeys;\n originalEvent: React.MouseEvent<HTMLInputElement>;\n }) => void;\n sortField?: string;\n sortOrder?: 1 | -1 | 0;\n removableSort?: boolean;\n onSort?: (event: { sortField?: string; sortOrder?: 1 | -1 | 0 }) => void;\n onRowClick?: (event: { node: SolidTreeNode; originalEvent: React.MouseEvent<HTMLTableRowElement> }) => void;\n};\n\ntype FlattenedTreeRow = {\n node: SolidTreeNode;\n depth: number;\n};\n\nfunction cx(...parts: Array<string | false | null | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nfunction renderHeaderNode(header?: HeaderRenderer) {\n if (typeof header === \"function\") return header();\n return header ?? null;\n}\n\nexport function SolidTreeColumn(_props: SolidTreeColumnProps) {\n return null;\n}\n\nexport const Column = SolidTreeColumn;\n\nfunction normalizeColumns(children: React.ReactNode): React.ReactElement<SolidTreeColumnProps>[] {\n return React.Children.toArray(children).filter((child): child is React.ReactElement<SolidTreeColumnProps> => {\n return React.isValidElement(child);\n });\n}\n\nfunction resolveSortIcon(active: boolean, order: 1 | -1 | 0): React.ReactNode {\n if (!active || order === 0) return <ArrowUpDown size={14} aria-hidden=\"true\" />;\n return order === 1\n ? <ArrowUpWideNarrow size={14} aria-hidden=\"true\" />\n : <ArrowDownWideNarrow size={14} aria-hidden=\"true\" />;\n}\n\nfunction nextSortOrder(active: boolean, order: 1 | -1 | 0, removableSort = true): 1 | -1 | 0 {\n if (!active || order === 0) return 1;\n if (order === 1) return -1;\n return removableSort ? 0 : 1;\n}\n\nfunction flattenVisibleNodes(\n nodes: SolidTreeNode[],\n expandedKeys: Record<string, boolean>,\n depth = 0\n): FlattenedTreeRow[] {\n return (nodes || []).flatMap((node) => {\n const key = String(node.key ?? \"\");\n const rows: FlattenedTreeRow[] = [{ node, depth }];\n if (expandedKeys[key] && node.children?.length) {\n rows.push(...flattenVisibleNodes(node.children, expandedKeys, depth + 1));\n }\n return rows;\n });\n}\n\nfunction updateSubtreeSelection(\n node: SolidTreeNode,\n selected: boolean,\n selection: SolidTreeSelectionKeys\n) {\n const key = String(node.key ?? \"\");\n if (!key) return;\n\n if (selected) {\n selection[key] = {\n ...selection[key],\n checked: true,\n partialChecked: false,\n };\n } else {\n delete selection[key];\n }\n\n node.children?.forEach((child) => updateSubtreeSelection(child, selected, selection));\n}\n\nfunction reconcileSelection(nodes: SolidTreeNode[], selection: SolidTreeSelectionKeys) {\n const next: SolidTreeSelectionKeys = {};\n\n const visit = (node: SolidTreeNode): { checked: boolean; partialChecked: boolean } => {\n const key = String(node.key ?? \"\");\n const existing = selection[key] || {};\n const childStates = (node.children || []).map(visit);\n\n let checked = Boolean(existing.checked);\n let partialChecked = Boolean(existing.partialChecked);\n\n if (childStates.length > 0) {\n const allChecked = childStates.every((state) => state.checked);\n const anySelected = childStates.some((state) => state.checked || state.partialChecked);\n\n checked = allChecked;\n partialChecked = !allChecked && anySelected;\n }\n\n if (checked || partialChecked) {\n next[key] = {\n ...existing,\n checked,\n partialChecked,\n };\n }\n\n return { checked, partialChecked };\n };\n\n nodes.forEach(visit);\n return next;\n}\n\nfunction normalizeTextAlign(value?: \"left\" | \"center\" | \"right\") {\n if (!value) return undefined;\n return value;\n}\n\nfunction parseWidthValue(value: unknown): number | null {\n if (typeof value === \"number\") return value;\n if (typeof value !== \"string\") return null;\n\n const trimmed = value.trim();\n if (trimmed.endsWith(\"px\")) {\n const parsed = Number.parseFloat(trimmed.replace(\"px\", \"\"));\n return Number.isFinite(parsed) ? parsed : null;\n }\n if (trimmed.endsWith(\"rem\")) {\n const parsed = Number.parseFloat(trimmed.replace(\"rem\", \"\"));\n return Number.isFinite(parsed) ? parsed * 16 : null;\n }\n\n const parsed = Number.parseFloat(trimmed);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nexport function SolidTreeTable({\n value = [],\n children,\n loading = false,\n expandedKeys = {},\n onToggle,\n onExpand,\n tableClassName,\n tableStyle,\n emptyMessage,\n selectionMode,\n selectionKeys = {},\n onSelectionChange,\n sortField,\n sortOrder = 0,\n removableSort = true,\n onSort,\n onRowClick,\n}: SolidTreeTableProps) {\n const columns = useMemo(() => normalizeColumns(children), [children]);\n const visibleRows = useMemo(() => flattenVisibleNodes(value, expandedKeys), [value, expandedKeys]);\n const selectionWidth = selectionMode === \"checkbox\" ? 48 : 0;\n\n const frozenColumnMeta = useMemo(() => {\n const getColumnWidth = (props: SolidTreeColumnProps) =>\n parseWidthValue(props.style?.width)\n ?? parseWidthValue(props.style?.minWidth)\n ?? parseWidthValue(props.headerStyle?.width)\n ?? parseWidthValue(props.headerStyle?.minWidth)\n ?? 160;\n\n const leftOffsets = new Map<number, number>();\n const rightOffsets = new Map<number, number>();\n\n let leftOffset = selectionWidth;\n columns.forEach((column, index) => {\n const props = column.props;\n if (props.frozen && (props.alignFrozen ?? \"left\") === \"left\") {\n leftOffsets.set(index, leftOffset);\n leftOffset += getColumnWidth(props);\n }\n });\n\n let rightOffset = 0;\n for (let index = columns.length - 1; index >= 0; index -= 1) {\n const props = columns[index].props;\n if (props.frozen && props.alignFrozen === \"right\") {\n rightOffsets.set(index, rightOffset);\n rightOffset += getColumnWidth(props);\n }\n }\n\n return { leftOffsets, rightOffsets };\n }, [columns, selectionWidth]);\n\n const selectionColSpan = selectionMode === \"checkbox\" ? 1 : 0;\n\n const selectedLeafRows = useMemo(() => {\n return visibleRows.filter(({ node }) => Boolean(selectionKeys[String(node.key ?? \"\")]?.checked));\n }, [visibleRows, selectionKeys]);\n\n const allVisibleSelected =\n selectionMode === \"checkbox\" &&\n visibleRows.length > 0 &&\n selectedLeafRows.length === visibleRows.length;\n\n const getStickyStyles = (\n kind: \"selection\" | \"column\",\n index: number | null,\n position: \"header\" | \"body\"\n ): React.CSSProperties => {\n if (kind === \"selection\") {\n return {\n position: \"sticky\",\n left: 0,\n zIndex: position === \"header\" ? 7 : 5,\n };\n }\n\n if (index === null) return {};\n\n const leftOffset = frozenColumnMeta.leftOffsets.get(index);\n if (leftOffset !== undefined) {\n return {\n position: \"sticky\",\n left: leftOffset,\n zIndex: position === \"header\" ? 6 : 4,\n };\n }\n\n const rightOffset = frozenColumnMeta.rightOffsets.get(index);\n if (rightOffset !== undefined) {\n return {\n position: \"sticky\",\n right: rightOffset,\n zIndex: position === \"header\" ? 6 : 4,\n };\n }\n\n return {};\n };\n\n return (\n <div className=\"solid-tree-table-root\">\n <div className=\"solid-data-table-viewport min-h-0 rounded-md border border-border/60 bg-background\">\n <div className=\"relative min-h-full\">\n <table className={cx(\"w-full text-sm border-collapse\", tableClassName)} style={tableStyle}>\n <thead className=\"solid-data-table-head sticky top-0 z-2\">\n <tr>\n {selectionMode === \"checkbox\" ? (\n <th\n className=\"solid-data-table-th solid-data-table-selection-col solid-tree-sticky-cell solid-tree-sticky-cell-left\"\n style={getStickyStyles(\"selection\", null, \"header\")}\n >\n <input\n type=\"checkbox\"\n checked={Boolean(allVisibleSelected)}\n onChange={(event) => {\n const next = { ...selectionKeys };\n visibleRows.forEach(({ node }) => {\n updateSubtreeSelection(node, event.currentTarget.checked, next);\n });\n const reconciled = reconcileSelection(value, next);\n onSelectionChange?.({\n value: reconciled,\n originalEvent: event as unknown as React.MouseEvent<HTMLInputElement>,\n });\n }}\n aria-label=\"Select visible rows\"\n />\n </th>\n ) : null}\n {columns.map((column, index) => {\n const props = column.props;\n const isSortable = Boolean(props.sortable && props.field);\n const isActiveSort = isSortable && sortField === props.field;\n const iconNode = resolveSortIcon(Boolean(isActiveSort), sortOrder);\n\n return (\n <th\n key={`tree-header-${index}`}\n className={cx(\n \"solid-data-table-th text-left text-foreground whitespace-nowrap\",\n props.frozen && (props.alignFrozen ?? \"left\") === \"left\" && \"solid-tree-sticky-cell solid-tree-sticky-cell-left\",\n props.frozen && props.alignFrozen === \"right\" && \"solid-tree-sticky-cell solid-tree-sticky-cell-right\",\n props.headerClassName\n )}\n style={{\n ...props.style,\n ...props.headerStyle,\n textAlign: normalizeTextAlign(props.alignHeader ?? props.align),\n ...getStickyStyles(\"column\", index, \"header\"),\n }}\n >\n <button\n type=\"button\"\n className={cx(\"solid-table-header-button\", isSortable ? \"is-sortable\" : undefined)}\n onClick={() => {\n if (!isSortable) return;\n const nextOrder = nextSortOrder(Boolean(isActiveSort), sortOrder, removableSort);\n onSort?.({\n sortField: nextOrder === 0 ? undefined : props.field,\n sortOrder: nextOrder,\n });\n }}\n >\n {renderHeaderNode(props.header)}\n {isSortable ? iconNode : null}\n </button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {visibleRows.length === 0 ? (\n <tr>\n <td\n className=\"px-3 py-10 text-center text-muted-foreground\"\n colSpan={Math.max(columns.length + selectionColSpan, 1)}\n >\n {emptyMessage || \"No records found\"}\n </td>\n </tr>\n ) : (\n visibleRows.map(({ node, depth }, rowIndex) => {\n const key = String(node.key ?? rowIndex);\n const isSelected = Boolean(selectionKeys[key]?.checked);\n\n return (\n <tr\n key={key}\n className={cx(\"solid-data-table-row solid-tree-table-row\", isSelected && \"is-selected\")}\n onClick={(event) => {\n const target = event.target as HTMLElement;\n if (target.closest(\"button,a,input,label,[data-no-row-click='true']\")) return;\n onRowClick?.({ node, originalEvent: event });\n }}\n >\n {selectionMode === \"checkbox\" ? (\n <td\n className=\"solid-data-table-td solid-data-table-selection-col solid-tree-sticky-cell solid-tree-sticky-cell-left\"\n style={getStickyStyles(\"selection\", null, \"body\")}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n ref={(element) => {\n if (element) {\n element.indeterminate = Boolean(selectionKeys[key]?.partialChecked);\n }\n }}\n onChange={(event) => {\n const next = { ...selectionKeys };\n updateSubtreeSelection(node, event.currentTarget.checked, next);\n const reconciled = reconcileSelection(value, next);\n onSelectionChange?.({\n value: reconciled,\n originalEvent: event as unknown as React.MouseEvent<HTMLInputElement>,\n });\n }}\n onClick={(event) => event.stopPropagation()}\n aria-label=\"Select row\"\n />\n </td>\n ) : null}\n {columns.map((column, columnIndex) => {\n const props = column.props;\n const canExpand =\n typeof props.expander === \"function\"\n ? props.expander(node)\n : Boolean(props.expander);\n const isExpanded = Boolean(expandedKeys[key]);\n const hasChildren = Boolean(node.children?.length);\n const showExpander = canExpand;\n const expanderDisabled = node.leaf === true;\n\n const content = props.body\n ? props.body(node, { depth, rowIndex })\n : props.field\n ? node?.data?.[props.field]\n : null;\n\n const isExpanderColumn = showExpander && columnIndex === 0;\n\n return (\n <td\n key={`tree-cell-${key}-${columnIndex}`}\n className={cx(\n \"solid-data-table-td align-top text-foreground\",\n props.frozen && (props.alignFrozen ?? \"left\") === \"left\" && \"solid-tree-sticky-cell solid-tree-sticky-cell-left\",\n props.frozen && props.alignFrozen === \"right\" && \"solid-tree-sticky-cell solid-tree-sticky-cell-right\",\n props.className,\n props.bodyClassName\n )}\n style={{\n ...props.style,\n textAlign: normalizeTextAlign(props.align),\n ...getStickyStyles(\"column\", columnIndex, \"body\"),\n }}\n >\n {isExpanderColumn ? (\n <div className=\"solid-tree-cell\">\n <div\n className=\"solid-tree-cell-indent\"\n style={{ width: `${depth * 1.25}rem` }}\n aria-hidden=\"true\"\n />\n <button\n type=\"button\"\n className=\"solid-tree-expander\"\n disabled={expanderDisabled}\n onClick={(event) => {\n event.stopPropagation();\n if (expanderDisabled) return;\n\n const nextExpanded = { ...expandedKeys };\n if (nextExpanded[key]) {\n delete nextExpanded[key];\n } else {\n nextExpanded[key] = true;\n }\n onToggle?.({ value: nextExpanded });\n if (!isExpanded) {\n onExpand?.({ node });\n }\n }}\n aria-label={isExpanded ? \"Collapse row\" : \"Expand row\"}\n >\n {expanderDisabled ? (\n <Minus size={14} aria-hidden=\"true\" />\n ) : (\n <ChevronRight\n size={14}\n aria-hidden=\"true\"\n className={cx(\"solid-tree-expander-icon\", isExpanded && \"is-expanded\")}\n />\n )}\n </button>\n <div className=\"solid-tree-cell-content\">{content}</div>\n </div>\n ) : (\n content\n )}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n\n {loading ? (\n <div className=\"solid-tree-table-loading-overlay\" aria-live=\"polite\" aria-busy=\"true\">\n <div className=\"solid-tree-table-loading-pill\">\n <Loader2 size={14} className=\"animate-spin\" />\n <span>Loading tree…</span>\n </div>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"SolidTreeTable.js","sourceRoot":"","sources":["../../../../src/components/core/tree/SolidTreeTable.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport { ArrowDownWideNarrow, ArrowUpDown, ArrowUpWideNarrow, ChevronRight, Minus } from \"lucide-react\";\n\nexport type SolidTreeNode = {\n key?: string | number;\n data?: any;\n children?: SolidTreeNode[];\n leaf?: boolean;\n [key: string]: any;\n};\n\nexport type SolidTreeSelectionKey = {\n checked?: boolean;\n partialChecked?: boolean;\n [key: string]: any;\n};\n\nexport type SolidTreeSelectionKeys = Record<string, SolidTreeSelectionKey>;\n\ntype HeaderRenderer = React.ReactNode | (() => React.ReactNode);\ntype BodyRenderer = (node: SolidTreeNode, options?: { depth: number; rowIndex: number }) => React.ReactNode;\n\nexport type SolidTreeColumnProps = {\n field?: string;\n header?: HeaderRenderer;\n body?: BodyRenderer;\n sortable?: boolean;\n headerStyle?: React.CSSProperties;\n style?: React.CSSProperties;\n className?: string;\n headerClassName?: string;\n bodyClassName?: string;\n align?: \"left\" | \"center\" | \"right\";\n alignHeader?: \"left\" | \"center\" | \"right\";\n expander?: boolean | ((node: SolidTreeNode) => boolean);\n frozen?: boolean;\n alignFrozen?: \"left\" | \"right\";\n [key: string]: any;\n};\n\ntype SolidTreeTableProps = {\n value?: SolidTreeNode[];\n children: React.ReactNode;\n loading?: boolean;\n expandedKeys?: Record<string, boolean>;\n onToggle?: (event: { value: Record<string, boolean> }) => void;\n onExpand?: (event: { node: SolidTreeNode }) => void;\n tableClassName?: string;\n tableStyle?: React.CSSProperties;\n emptyMessage?: React.ReactNode;\n selectionMode?: \"checkbox\" | null;\n selectionKeys?: SolidTreeSelectionKeys;\n onSelectionChange?: (event: {\n value: SolidTreeSelectionKeys;\n originalEvent: React.MouseEvent<HTMLInputElement>;\n }) => void;\n sortField?: string;\n sortOrder?: 1 | -1 | 0;\n removableSort?: boolean;\n onSort?: (event: { sortField?: string; sortOrder?: 1 | -1 | 0 }) => void;\n onRowClick?: (event: { node: SolidTreeNode; originalEvent: React.MouseEvent<HTMLTableRowElement> }) => void;\n};\n\ntype FlattenedTreeRow = {\n node: SolidTreeNode;\n depth: number;\n};\n\nfunction cx(...parts: Array<string | false | null | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nfunction renderHeaderNode(header?: HeaderRenderer) {\n if (typeof header === \"function\") return header();\n return header ?? null;\n}\n\nexport function SolidTreeColumn(_props: SolidTreeColumnProps) {\n return null;\n}\n\nexport const Column = SolidTreeColumn;\n\nfunction normalizeColumns(children: React.ReactNode): React.ReactElement<SolidTreeColumnProps>[] {\n return React.Children.toArray(children).filter((child): child is React.ReactElement<SolidTreeColumnProps> => {\n return React.isValidElement(child);\n });\n}\n\nfunction resolveSortIcon(active: boolean, order: 1 | -1 | 0): React.ReactNode {\n if (!active || order === 0) return <ArrowUpDown size={14} aria-hidden=\"true\" />;\n return order === 1\n ? <ArrowUpWideNarrow size={14} aria-hidden=\"true\" />\n : <ArrowDownWideNarrow size={14} aria-hidden=\"true\" />;\n}\n\nfunction nextSortOrder(active: boolean, order: 1 | -1 | 0, removableSort = true): 1 | -1 | 0 {\n if (!active || order === 0) return 1;\n if (order === 1) return -1;\n return removableSort ? 0 : 1;\n}\n\nfunction flattenVisibleNodes(\n nodes: SolidTreeNode[],\n expandedKeys: Record<string, boolean>,\n depth = 0\n): FlattenedTreeRow[] {\n return (nodes || []).flatMap((node) => {\n const key = String(node.key ?? \"\");\n const rows: FlattenedTreeRow[] = [{ node, depth }];\n if (expandedKeys[key] && node.children?.length) {\n rows.push(...flattenVisibleNodes(node.children, expandedKeys, depth + 1));\n }\n return rows;\n });\n}\n\nfunction updateSubtreeSelection(\n node: SolidTreeNode,\n selected: boolean,\n selection: SolidTreeSelectionKeys\n) {\n const key = String(node.key ?? \"\");\n if (!key) return;\n\n if (selected) {\n selection[key] = {\n ...selection[key],\n checked: true,\n partialChecked: false,\n };\n } else {\n delete selection[key];\n }\n\n node.children?.forEach((child) => updateSubtreeSelection(child, selected, selection));\n}\n\nfunction reconcileSelection(nodes: SolidTreeNode[], selection: SolidTreeSelectionKeys) {\n const next: SolidTreeSelectionKeys = {};\n\n const visit = (node: SolidTreeNode): { checked: boolean; partialChecked: boolean } => {\n const key = String(node.key ?? \"\");\n const existing = selection[key] || {};\n const childStates = (node.children || []).map(visit);\n\n let checked = Boolean(existing.checked);\n let partialChecked = Boolean(existing.partialChecked);\n\n if (childStates.length > 0) {\n const allChecked = childStates.every((state) => state.checked);\n const anySelected = childStates.some((state) => state.checked || state.partialChecked);\n\n checked = allChecked;\n partialChecked = !allChecked && anySelected;\n }\n\n if (checked || partialChecked) {\n next[key] = {\n ...existing,\n checked,\n partialChecked,\n };\n }\n\n return { checked, partialChecked };\n };\n\n nodes.forEach(visit);\n return next;\n}\n\nfunction normalizeTextAlign(value?: \"left\" | \"center\" | \"right\") {\n if (!value) return undefined;\n return value;\n}\n\nfunction parseWidthValue(value: unknown): number | null {\n if (typeof value === \"number\") return value;\n if (typeof value !== \"string\") return null;\n\n const trimmed = value.trim();\n if (trimmed.endsWith(\"px\")) {\n const parsed = Number.parseFloat(trimmed.replace(\"px\", \"\"));\n return Number.isFinite(parsed) ? parsed : null;\n }\n if (trimmed.endsWith(\"rem\")) {\n const parsed = Number.parseFloat(trimmed.replace(\"rem\", \"\"));\n return Number.isFinite(parsed) ? parsed * 16 : null;\n }\n\n const parsed = Number.parseFloat(trimmed);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nexport function SolidTreeTable({\n value = [],\n children,\n expandedKeys = {},\n onToggle,\n onExpand,\n tableClassName,\n tableStyle,\n emptyMessage,\n selectionMode,\n selectionKeys = {},\n onSelectionChange,\n sortField,\n sortOrder = 0,\n removableSort = true,\n onSort,\n onRowClick,\n}: SolidTreeTableProps) {\n const columns = useMemo(() => normalizeColumns(children), [children]);\n const visibleRows = useMemo(() => flattenVisibleNodes(value, expandedKeys), [value, expandedKeys]);\n const selectionWidth = selectionMode === \"checkbox\" ? 48 : 0;\n\n const frozenColumnMeta = useMemo(() => {\n const getColumnWidth = (props: SolidTreeColumnProps) =>\n parseWidthValue(props.style?.width)\n ?? parseWidthValue(props.style?.minWidth)\n ?? parseWidthValue(props.headerStyle?.width)\n ?? parseWidthValue(props.headerStyle?.minWidth)\n ?? 160;\n\n const leftOffsets = new Map<number, number>();\n const rightOffsets = new Map<number, number>();\n\n let leftOffset = selectionWidth;\n columns.forEach((column, index) => {\n const props = column.props;\n if (props.frozen && (props.alignFrozen ?? \"left\") === \"left\") {\n leftOffsets.set(index, leftOffset);\n leftOffset += getColumnWidth(props);\n }\n });\n\n let rightOffset = 0;\n for (let index = columns.length - 1; index >= 0; index -= 1) {\n const props = columns[index].props;\n if (props.frozen && props.alignFrozen === \"right\") {\n rightOffsets.set(index, rightOffset);\n rightOffset += getColumnWidth(props);\n }\n }\n\n return { leftOffsets, rightOffsets };\n }, [columns, selectionWidth]);\n\n const selectionColSpan = selectionMode === \"checkbox\" ? 1 : 0;\n\n const selectedLeafRows = useMemo(() => {\n return visibleRows.filter(({ node }) => Boolean(selectionKeys[String(node.key ?? \"\")]?.checked));\n }, [visibleRows, selectionKeys]);\n\n const allVisibleSelected =\n selectionMode === \"checkbox\" &&\n visibleRows.length > 0 &&\n selectedLeafRows.length === visibleRows.length;\n\n const getStickyStyles = (\n kind: \"selection\" | \"column\",\n index: number | null,\n position: \"header\" | \"body\"\n ): React.CSSProperties => {\n if (kind === \"selection\") {\n return {\n position: \"sticky\",\n left: 0,\n zIndex: position === \"header\" ? 7 : 5,\n };\n }\n\n if (index === null) return {};\n\n const leftOffset = frozenColumnMeta.leftOffsets.get(index);\n if (leftOffset !== undefined) {\n return {\n position: \"sticky\",\n left: leftOffset,\n zIndex: position === \"header\" ? 6 : 4,\n };\n }\n\n const rightOffset = frozenColumnMeta.rightOffsets.get(index);\n if (rightOffset !== undefined) {\n return {\n position: \"sticky\",\n right: rightOffset,\n zIndex: position === \"header\" ? 6 : 4,\n };\n }\n\n return {};\n };\n\n return (\n <div className=\"solid-tree-table-root\">\n <div className=\"solid-data-table-viewport min-h-0 rounded-md border border-border/60 bg-background\">\n <div className=\"relative min-h-full\">\n <table className={cx(\"w-full text-sm border-collapse\", tableClassName)} style={tableStyle}>\n <thead className=\"solid-data-table-head sticky top-0 z-2\">\n <tr>\n {selectionMode === \"checkbox\" ? (\n <th\n className=\"solid-data-table-th solid-data-table-selection-col solid-tree-sticky-cell solid-tree-sticky-cell-left\"\n style={getStickyStyles(\"selection\", null, \"header\")}\n >\n <input\n type=\"checkbox\"\n checked={Boolean(allVisibleSelected)}\n onChange={(event) => {\n const next = { ...selectionKeys };\n visibleRows.forEach(({ node }) => {\n updateSubtreeSelection(node, event.currentTarget.checked, next);\n });\n const reconciled = reconcileSelection(value, next);\n onSelectionChange?.({\n value: reconciled,\n originalEvent: event as unknown as React.MouseEvent<HTMLInputElement>,\n });\n }}\n aria-label=\"Select visible rows\"\n />\n </th>\n ) : null}\n {columns.map((column, index) => {\n const props = column.props;\n const isSortable = Boolean(props.sortable && props.field);\n const isActiveSort = isSortable && sortField === props.field;\n const iconNode = resolveSortIcon(Boolean(isActiveSort), sortOrder);\n\n return (\n <th\n key={`tree-header-${index}`}\n className={cx(\n \"solid-data-table-th text-left text-foreground whitespace-nowrap\",\n props.frozen && (props.alignFrozen ?? \"left\") === \"left\" && \"solid-tree-sticky-cell solid-tree-sticky-cell-left\",\n props.frozen && props.alignFrozen === \"right\" && \"solid-tree-sticky-cell solid-tree-sticky-cell-right\",\n props.headerClassName\n )}\n style={{\n ...props.style,\n ...props.headerStyle,\n textAlign: normalizeTextAlign(props.alignHeader ?? props.align),\n ...getStickyStyles(\"column\", index, \"header\"),\n }}\n >\n <button\n type=\"button\"\n className={cx(\"solid-table-header-button\", isSortable ? \"is-sortable\" : undefined)}\n onClick={() => {\n if (!isSortable) return;\n const nextOrder = nextSortOrder(Boolean(isActiveSort), sortOrder, removableSort);\n onSort?.({\n sortField: nextOrder === 0 ? undefined : props.field,\n sortOrder: nextOrder,\n });\n }}\n >\n {renderHeaderNode(props.header)}\n {isSortable ? iconNode : null}\n </button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {visibleRows.length === 0 ? (\n <tr>\n <td\n className=\"px-3 py-10 text-center text-muted-foreground\"\n colSpan={Math.max(columns.length + selectionColSpan, 1)}\n >\n {emptyMessage || \"No records found\"}\n </td>\n </tr>\n ) : (\n visibleRows.map(({ node, depth }, rowIndex) => {\n const key = String(node.key ?? rowIndex);\n const isSelected = Boolean(selectionKeys[key]?.checked);\n\n return (\n <tr\n key={key}\n className={cx(\"solid-data-table-row solid-tree-table-row\", isSelected && \"is-selected\")}\n onClick={(event) => {\n const target = event.target as HTMLElement;\n if (target.closest(\"button,a,input,label,[data-no-row-click='true']\")) return;\n onRowClick?.({ node, originalEvent: event });\n }}\n >\n {selectionMode === \"checkbox\" ? (\n <td\n className=\"solid-data-table-td solid-data-table-selection-col solid-tree-sticky-cell solid-tree-sticky-cell-left\"\n style={getStickyStyles(\"selection\", null, \"body\")}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n ref={(element) => {\n if (element) {\n element.indeterminate = Boolean(selectionKeys[key]?.partialChecked);\n }\n }}\n onChange={(event) => {\n const next = { ...selectionKeys };\n updateSubtreeSelection(node, event.currentTarget.checked, next);\n const reconciled = reconcileSelection(value, next);\n onSelectionChange?.({\n value: reconciled,\n originalEvent: event as unknown as React.MouseEvent<HTMLInputElement>,\n });\n }}\n onClick={(event) => event.stopPropagation()}\n aria-label=\"Select row\"\n />\n </td>\n ) : null}\n {columns.map((column, columnIndex) => {\n const props = column.props;\n const canExpand =\n typeof props.expander === \"function\"\n ? props.expander(node)\n : Boolean(props.expander);\n const isExpanded = Boolean(expandedKeys[key]);\n const hasChildren = Boolean(node.children?.length);\n const showExpander = canExpand;\n const expanderDisabled = node.leaf === true;\n\n const content = props.body\n ? props.body(node, { depth, rowIndex })\n : props.field\n ? node?.data?.[props.field]\n : null;\n\n const isExpanderColumn = showExpander && columnIndex === 0;\n\n return (\n <td\n key={`tree-cell-${key}-${columnIndex}`}\n className={cx(\n \"solid-data-table-td align-top text-foreground\",\n props.frozen && (props.alignFrozen ?? \"left\") === \"left\" && \"solid-tree-sticky-cell solid-tree-sticky-cell-left\",\n props.frozen && props.alignFrozen === \"right\" && \"solid-tree-sticky-cell solid-tree-sticky-cell-right\",\n props.className,\n props.bodyClassName\n )}\n style={{\n ...props.style,\n textAlign: normalizeTextAlign(props.align),\n ...getStickyStyles(\"column\", columnIndex, \"body\"),\n }}\n >\n {isExpanderColumn ? (\n <div className=\"solid-tree-cell\">\n <div\n className=\"solid-tree-cell-indent\"\n style={{ width: `${depth * 1.25}rem` }}\n aria-hidden=\"true\"\n />\n <button\n type=\"button\"\n className=\"solid-tree-expander\"\n disabled={expanderDisabled}\n onClick={(event) => {\n event.stopPropagation();\n if (expanderDisabled) return;\n\n const nextExpanded = { ...expandedKeys };\n if (nextExpanded[key]) {\n delete nextExpanded[key];\n } else {\n nextExpanded[key] = true;\n }\n onToggle?.({ value: nextExpanded });\n if (!isExpanded) {\n onExpand?.({ node });\n }\n }}\n aria-label={isExpanded ? \"Collapse row\" : \"Expand row\"}\n >\n {expanderDisabled ? (\n <Minus size={14} aria-hidden=\"true\" />\n ) : (\n <ChevronRight\n size={14}\n aria-hidden=\"true\"\n className={cx(\"solid-tree-expander-icon\", isExpanded && \"is-expanded\")}\n />\n )}\n </button>\n <div className=\"solid-tree-cell-content\">{content}</div>\n </div>\n ) : (\n content\n )}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import React, { useMemo } from "react";
2
- import { ArrowDownWideNarrow, ArrowUpDown, ArrowUpWideNarrow, ChevronRight, Loader2, Minus } from "lucide-react";
2
+ import { ArrowDownWideNarrow, ArrowUpDown, ArrowUpWideNarrow, ChevronRight, Minus } from "lucide-react";
3
3
 
4
4
  export type SolidTreeNode = {
5
5
  key?: string | number;
@@ -196,7 +196,6 @@ function parseWidthValue(value: unknown): number | null {
196
196
  export function SolidTreeTable({
197
197
  value = [],
198
198
  children,
199
- loading = false,
200
199
  expandedKeys = {},
201
200
  onToggle,
202
201
  onExpand,
@@ -507,14 +506,6 @@ export function SolidTreeTable({
507
506
  </tbody>
508
507
  </table>
509
508
 
510
- {loading ? (
511
- <div className="solid-tree-table-loading-overlay" aria-live="polite" aria-busy="true">
512
- <div className="solid-tree-table-loading-pill">
513
- <Loader2 size={14} className="animate-spin" />
514
- <span>Loading tree…</span>
515
- </div>
516
- </div>
517
- ) : null}
518
509
  </div>
519
510
  </div>
520
511
  </div>
@@ -39,15 +39,39 @@
39
39
  padding: 14px 16px 16px;
40
40
  }
41
41
 
42
+ .solid-user-access-grid {
43
+ row-gap: 0;
44
+ }
45
+
42
46
  .solid-user-access-row {
43
47
  display: flex;
44
48
  align-items: center;
45
49
  justify-content: space-between;
46
- gap: 18px;
50
+ gap: 22px;
51
+ margin: 0;
52
+ padding: 16px 18px;
53
+ border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
54
+ border-radius: 12px;
55
+ background: color-mix(in srgb, var(--card) 96%, white 4%);
56
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.03);
57
+ }
58
+
59
+ .solid-user-access-row + .solid-user-access-row {
60
+ margin-top: 12px;
47
61
  }
48
62
 
49
63
  .solid-user-access-copy {
50
- max-width: 720px;
64
+ flex: 1;
65
+ max-width: 640px;
66
+ }
67
+
68
+ .solid-user-access-copy .form-field-label {
69
+ font-size: 13px;
70
+ font-weight: 600;
71
+ }
72
+
73
+ .solid-user-access-row .solid-switch {
74
+ flex-shrink: 0;
51
75
  }
52
76
 
53
77
  .solid-user-role-grid {
@@ -106,6 +130,7 @@
106
130
  .solid-user-access-row {
107
131
  flex-direction: column;
108
132
  align-items: stretch;
133
+ padding: 14px;
109
134
  }
110
135
 
111
136
  .solid-user-access-row .solid-switch {
@@ -1 +1 @@
1
- {"version":3,"file":"CreateUser.d.ts","sourceRoot":"","sources":["../../../../src/components/core/users/CreateUser.tsx"],"names":[],"mappings":"AAyBA,OAAO,kBAAkB,CAAC;AAY1B,QAAA,MAAM,UAAU,qBAAsB,GAAG,4CA0QxC,CAAC;AAqMF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"CreateUser.d.ts","sourceRoot":"","sources":["../../../../src/components/core/users/CreateUser.tsx"],"names":[],"mappings":"AAyBA,OAAO,kBAAkB,CAAC;AAY1B,QAAA,MAAM,UAAU,qBAAsB,GAAG,4CAgSxC,CAAC;AA4LF,eAAe,UAAU,CAAC"}
@@ -68,32 +68,35 @@ function cx() {
68
68
  return parts.filter(Boolean).join(" ");
69
69
  }
70
70
  var CreateUser = function (_a) {
71
- var _b, _c, _d, _e, _f, _g, _h;
71
+ var _b, _c, _d, _e, _f, _g, _h, _j;
72
72
  var data = _a.data, params = _a.params;
73
73
  var dispatch = useDispatch();
74
74
  var router = useRouter();
75
- var _j = useState([]), selectedRoles = _j[0], setSelectedRoles = _j[1];
76
- var _k = useState("userDetails"), activeTab = _k[0], setActiveTab = _k[1];
77
- var _l = useState(null), newUserIdForApiKey = _l[0], setNewUserIdForApiKey = _l[1];
78
- var _m = useState(null), revealKey = _m[0], setRevealKey = _m[1];
79
- var _o = useRegisterPrivateMutation(), registerPrivate = _o[0], _p = _o[1], isLoading = _p.isLoading, userCreateError = _p.error;
80
- var _q = useUpdateUserMutation(), updateUser = _q[0], _r = _q[1], isUserUpdating = _r.isLoading, isUpdateUserSuccess = _r.isSuccess, userUpdateError = _r.error;
81
- var _s = useDeleteUserMutation(), deleteUser = _s[0], _t = _s[1], isUserDeleting = _t.isLoading, isDeleteUserSuccess = _t.isSuccess;
75
+ var _k = useState([]), selectedRoles = _k[0], setSelectedRoles = _k[1];
76
+ var _l = useState((_b = data === null || data === void 0 ? void 0 : data.failedLoginAttempts) !== null && _b !== void 0 ? _b : 0), failedAttempts = _l[0], setFailedAttempts = _l[1];
77
+ var _m = useState("userDetails"), activeTab = _m[0], setActiveTab = _m[1];
78
+ var _o = useState(null), newUserIdForApiKey = _o[0], setNewUserIdForApiKey = _o[1];
79
+ var _p = useState(null), revealKey = _p[0], setRevealKey = _p[1];
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;
82
+ var _u = useDeleteUserMutation(), deleteUser = _u[0], _v = _u[1], isUserDeleting = _v.isLoading, isDeleteUserSuccess = _v.isSuccess;
82
83
  var rolesData = useGetrolesQuery("").data;
83
84
  useEffect(function () {
85
+ var _a;
84
86
  if (data === null || data === void 0 ? void 0 : data.roles) {
85
87
  setSelectedRoles(data.roles.map(function (role) { return role.name; }));
86
88
  }
89
+ setFailedAttempts((_a = data === null || data === void 0 ? void 0 : data.failedLoginAttempts) !== null && _a !== void 0 ? _a : 0);
87
90
  }, [data]);
88
91
  var initialValues = {
89
- fullName: (_b = data === null || data === void 0 ? void 0 : data.fullName) !== null && _b !== void 0 ? _b : "",
90
- username: (_c = data === null || data === void 0 ? void 0 : data.username) !== null && _c !== void 0 ? _c : "",
91
- email: (_d = data === null || data === void 0 ? void 0 : data.email) !== null && _d !== void 0 ? _d : "",
92
- mobile: (_e = data === null || data === void 0 ? void 0 : data.mobile) !== null && _e !== void 0 ? _e : "",
92
+ fullName: (_c = data === null || data === void 0 ? void 0 : data.fullName) !== null && _c !== void 0 ? _c : "",
93
+ username: (_d = data === null || data === void 0 ? void 0 : data.username) !== null && _d !== void 0 ? _d : "",
94
+ email: (_e = data === null || data === void 0 ? void 0 : data.email) !== null && _e !== void 0 ? _e : "",
95
+ mobile: (_f = data === null || data === void 0 ? void 0 : data.mobile) !== null && _f !== void 0 ? _f : "",
93
96
  password: "",
94
97
  confirmPassword: "",
95
- failedLoginAttempts: (_f = data === null || data === void 0 ? void 0 : data.failedLoginAttempts) !== null && _f !== void 0 ? _f : 0,
96
- isAllowedToGenerateApiKeys: (_g = data === null || data === void 0 ? void 0 : data.isAllowedToGenerateApiKeys) !== null && _g !== void 0 ? _g : false,
98
+ active: (_g = data === null || data === void 0 ? void 0 : data.active) !== null && _g !== void 0 ? _g : true,
99
+ isAllowedToGenerateApiKeys: (_h = data === null || data === void 0 ? void 0 : data.isAllowedToGenerateApiKeys) !== null && _h !== void 0 ? _h : false,
97
100
  };
98
101
  var validationSchema = Yup.object({
99
102
  fullName: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED("Full Name")),
@@ -107,11 +110,7 @@ var CreateUser = function (_a) {
107
110
  then: function (schema) { return schema.oneOf([Yup.ref("password")], ERROR_MESSAGES.FIELD_MUST_MATCH("Password")).nullable(); },
108
111
  otherwise: function (schema) { return schema.notRequired().nullable(); },
109
112
  }),
110
- mobile: Yup.number().required(ERROR_MESSAGES.FIELD_REUQIRED("Mobile")),
111
- failedLoginAttempts: Yup.number()
112
- .typeError("Failed Login Attempts must be a number")
113
- .nullable()
114
- .transform(function (value, originalValue) { return (originalValue === "" ? null : value); }),
113
+ mobile: Yup.string().nullable(),
115
114
  });
116
115
  function isFetchBaseQueryErrorWithErrorResponse(error) {
117
116
  return error && typeof error === "object" && "data" in error && "message" in error.data;
@@ -133,7 +132,7 @@ var CreateUser = function (_a) {
133
132
  email: values.email,
134
133
  mobile: values.mobile,
135
134
  roles: selectedRoles,
136
- failedLoginAttempts: values.failedLoginAttempts,
135
+ active: values.active,
137
136
  isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,
138
137
  };
139
138
  if (values.password) {
@@ -152,7 +151,6 @@ var CreateUser = function (_a) {
152
151
  mobile: values.mobile,
153
152
  password: values.password,
154
153
  roles: selectedRoles,
155
- failedLoginAttempts: values.failedLoginAttempts,
156
154
  isAllowedToGenerateApiKeys: values.isAllowedToGenerateApiKeys,
157
155
  }).unwrap()];
158
156
  case 2:
@@ -209,9 +207,39 @@ var CreateUser = function (_a) {
209
207
  }, [isDeleteUserSuccess, isUpdateUserSuccess, router]);
210
208
  var isEditMode = params.id !== "new";
211
209
  var isSaving = isLoading || isUserUpdating;
210
+ var handleUnblockUser = function () { return __awaiter(void 0, void 0, void 0, function () {
211
+ var _a;
212
+ return __generator(this, function (_b) {
213
+ switch (_b.label) {
214
+ case 0:
215
+ if (!(data === null || data === void 0 ? void 0 : data.id))
216
+ return [2 /*return*/];
217
+ _b.label = 1;
218
+ case 1:
219
+ _b.trys.push([1, 3, , 4]);
220
+ return [4 /*yield*/, updateUser({
221
+ id: data.id,
222
+ data: { failedLoginAttempts: 0 },
223
+ }).unwrap()];
224
+ case 2:
225
+ _b.sent();
226
+ dispatch(showToast({
227
+ severity: "success",
228
+ summary: "Success",
229
+ detail: "User is unblocked.",
230
+ }));
231
+ setFailedAttempts(0);
232
+ return [3 /*break*/, 4];
233
+ case 3:
234
+ _a = _b.sent();
235
+ return [3 /*break*/, 4];
236
+ case 4: return [2 /*return*/];
237
+ }
238
+ });
239
+ }); };
212
240
  return (_jsxs("div", { className: "solid-form-wrapper", children: [_jsx("div", { className: "solid-form-section", children: _jsxs("form", { onSubmit: formik.handleSubmit, children: [_jsxs("div", { className: "solid-form-header flex align-items-center justify-content-between gap-3 flex-wrap", children: [_jsxs("div", { className: "solid-user-form-titleblock flex align-items-center gap-3", children: [_jsx(BackButton, {}), _jsxs("div", { children: [_jsx("div", { className: "form-wrapper-title", children: isEditMode ? "Update User" : "Create User" }), _jsx("p", { className: "solid-user-form-subtitle m-0", children: isEditMode
213
241
  ? "Update account details, access roles, and security controls."
214
- : "Create a user account and assign the right access roles." })] })] }), _jsxs("div", { className: "gap-3 flex flex-wrap", children: [formik.dirty ? (_jsx(SolidButton, { size: "small", type: "submit", loading: isSaving, children: "Save" })) : null, data ? (_jsx(SolidButton, { size: "small", type: "button", variant: "destructive", loading: isUserDeleting, onClick: function () { return deleteUser(data.id); }, children: "Delete" })) : null, _jsx(CancelButton, {})] })] }), _jsx(SolidFormHeader, {}), _jsx("div", { className: "px-4 py-3 md:p-4 solid-form-content", children: isEditMode ? (_jsx(SolidTabGroup, { value: activeTab, onValueChange: setActiveTab, tabs: [
242
+ : "Create a user account and assign the right access roles." })] })] }), _jsxs("div", { className: "gap-3 flex flex-wrap", children: [isEditMode && failedAttempts > 0 ? (_jsx(SolidButton, { size: "small", type: "button", variant: "outline", loading: isUserUpdating, onClick: handleUnblockUser, children: "Unblock User" })) : null, formik.dirty ? (_jsx(SolidButton, { size: "small", type: "submit", loading: isSaving, children: "Save" })) : null, data ? (_jsx(SolidButton, { size: "small", type: "button", variant: "destructive", loading: isUserDeleting, onClick: function () { return deleteUser(data.id); }, children: "Delete" })) : null, _jsx(CancelButton, {})] })] }), _jsx(SolidFormHeader, {}), _jsx("div", { className: "px-4 py-3 md:p-4 solid-form-content", children: isEditMode ? (_jsx(SolidTabGroup, { value: activeTab, onValueChange: setActiveTab, tabs: [
215
243
  {
216
244
  value: "userDetails",
217
245
  label: "User Details",
@@ -220,7 +248,7 @@ var CreateUser = function (_a) {
220
248
  {
221
249
  value: "apiKeys",
222
250
  label: "API Keys",
223
- content: (_jsx("div", { className: "solid-user-edit-api-keys-pane", children: _jsx(ApiKeysTab, { userId: data === null || data === void 0 ? void 0 : data.id, canCreate: (_h = data === null || data === void 0 ? void 0 : data.isAllowedToGenerateApiKeys) !== null && _h !== void 0 ? _h : false }) })),
251
+ content: (_jsx("div", { className: "solid-user-edit-api-keys-pane", children: _jsx(ApiKeysTab, { userId: data === null || data === void 0 ? void 0 : data.id, canCreate: (_j = data === null || data === void 0 ? void 0 : data.isAllowedToGenerateApiKeys) !== null && _j !== void 0 ? _j : false }) })),
224
252
  },
225
253
  ] })) : (_jsx(UserDetailsContent, { formik: formik, fieldError: fieldError, rolesData: rolesData, selectedRoles: selectedRoles, handleCheckboxChange: handleCheckboxChange, isEditMode: isEditMode })) })] }) }), newUserIdForApiKey !== null && (_jsx(GenerateApiKeyModal, { open: true, userId: newUserIdForApiKey, onClose: function () {
226
254
  setNewUserIdForApiKey(null);
@@ -237,7 +265,7 @@ var CreateUser = function (_a) {
237
265
  function UserDetailsContent(_a) {
238
266
  var _b, _c;
239
267
  var formik = _a.formik, fieldError = _a.fieldError, rolesData = _a.rolesData, selectedRoles = _a.selectedRoles, handleCheckboxChange = _a.handleCheckboxChange, isEditMode = _a.isEditMode;
240
- return (_jsx("div", { className: "solid-user-details-layout", children: _jsxs("div", { className: "solid-user-details-stack", children: [_jsx(SolidPanel, { header: "Basic Info", className: "solid-column-panel", children: _jsxs("div", { className: "grid formgrid", children: [_jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2", children: [_jsx("label", { htmlFor: "fullName", className: "form-field-label", children: "Full Name" }), _jsx(SolidInput, { type: "text", id: "fullName", name: "fullName", autoComplete: "off", onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.fullName, className: cx(fieldError("fullName") && "solid-user-form-input-invalid") }), fieldError("fullName") ? _jsx(SolidMessage, { severity: "error", text: fieldError("fullName") }) : null] }), _jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2", children: [_jsx("label", { htmlFor: "username", className: "form-field-label", children: "Username" }), _jsx(SolidInput, { type: "text", id: "username", name: "username", autoComplete: "off", disabled: Boolean(formik.values.username) && isEditMode, onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.username, className: cx(fieldError("username") && "solid-user-form-input-invalid") }), fieldError("username") ? _jsx(SolidMessage, { severity: "error", text: fieldError("username") }) : null] }), _jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2 mt-3", children: [_jsx("label", { htmlFor: "email", className: "form-field-label", children: "Email" }), _jsx(SolidInput, { type: "email", id: "email", name: "email", autoComplete: "off", disabled: isEditMode, onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.email, className: cx(fieldError("email") && "solid-user-form-input-invalid") }), fieldError("email") ? _jsx(SolidMessage, { severity: "error", text: fieldError("email") }) : null] }), _jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2 mt-3", children: [_jsx("label", { htmlFor: "mobile", className: "form-field-label", children: "Mobile" }), _jsx(SolidInput, { type: "text", id: "mobile", name: "mobile", autoComplete: "off", onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.mobile, className: cx(fieldError("mobile") && "solid-user-form-input-invalid") }), fieldError("mobile") ? _jsx(SolidMessage, { severity: "error", text: fieldError("mobile") }) : null] }), !isEditMode ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2 mt-3", children: [_jsx("label", { htmlFor: "password", className: "form-field-label", children: "Password" }), _jsx(SolidPasswordInput, { id: "password", name: "password", autoComplete: "off", value: formik.values.password, onChange: formik.handleChange, onBlur: formik.handleBlur, className: cx(fieldError("password") && "solid-user-form-input-invalid") }), fieldError("password") ? _jsx(SolidMessage, { severity: "error", text: fieldError("password") }) : null] }), _jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2 mt-3", children: [_jsx("label", { htmlFor: "confirmPassword", className: "form-field-label", children: "Confirm Password" }), _jsx(SolidPasswordInput, { id: "confirmPassword", name: "confirmPassword", autoComplete: "off", value: formik.values.confirmPassword, onChange: formik.handleChange, onBlur: formik.handleBlur, className: cx(fieldError("confirmPassword") && "solid-user-form-input-invalid") }), fieldError("confirmPassword") ? (_jsx(SolidMessage, { severity: "error", text: fieldError("confirmPassword") })) : null] })] })) : (_jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2 mt-3", children: [_jsx("label", { htmlFor: "failedLoginAttempts", className: "form-field-label", children: "Failed Login Attempts" }), _jsx(SolidInput, { type: "number", id: "failedLoginAttempts", name: "failedLoginAttempts", autoComplete: "off", onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.failedLoginAttempts, className: cx(fieldError("failedLoginAttempts") && "solid-user-form-input-invalid") }), fieldError("failedLoginAttempts") ? (_jsx(SolidMessage, { severity: "error", text: fieldError("failedLoginAttempts") })) : null, _jsx("p", { className: "solid-user-section-helper", children: "Your account has been locked due to repeated unsuccessful login attempts. Please contact your system admin." })] }))] }) }), _jsx(SolidPanel, { toggleable: true, header: "Access", className: "solid-column-panel", children: _jsx("div", { className: "formgrid grid", children: _jsxs("div", { className: "field col-12 solid-user-access-row", children: [_jsxs("div", { className: "solid-user-access-copy", children: [_jsx("p", { className: "form-field-label m-0", children: "Allow API Key Generation" }), _jsx("p", { className: "solid-user-section-helper m-0 mt-1", children: "When enabled, this user can generate API keys for programmatic access." })] }), _jsx(SolidSwitch, { checked: formik.values.isAllowedToGenerateApiKeys, onChange: function (checked) { return formik.setFieldValue("isAllowedToGenerateApiKeys", checked); } })] }) }) }), _jsxs(SolidPanel, { toggleable: true, header: "Roles", className: "solid-column-panel", children: [_jsx("p", { className: "solid-user-section-copy", children: "Select the roles that should be assigned to this user." }), _jsx("div", { className: "solid-user-role-grid", children: (_c = (_b = rolesData === null || rolesData === void 0 ? void 0 : rolesData.data) === null || _b === void 0 ? void 0 : _b.records) === null || _c === void 0 ? void 0 : _c.map(function (role) { return (_jsx("div", { className: cx("solid-user-role-card", selectedRoles.includes(role.name) && "is-selected"), children: _jsx(SolidCheckbox, { id: role.name, checked: selectedRoles.includes(role.name), onChange: function () { return handleCheckboxChange(role.name); }, label: role.name, className: "solid-user-role-control" }) }, role.name)); }) })] })] }) }));
268
+ return (_jsx("div", { className: "solid-user-details-layout", children: _jsxs("div", { className: "solid-user-details-stack", children: [_jsx(SolidPanel, { header: "Basic Info", className: "solid-column-panel", children: _jsxs("div", { className: "grid formgrid", children: [_jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2", children: [_jsx("label", { htmlFor: "fullName", className: "form-field-label", children: "Full Name" }), _jsx(SolidInput, { type: "text", id: "fullName", name: "fullName", autoComplete: "off", onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.fullName, className: cx(fieldError("fullName") && "solid-user-form-input-invalid") }), fieldError("fullName") ? _jsx(SolidMessage, { severity: "error", text: fieldError("fullName") }) : null] }), _jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2", children: [_jsx("label", { htmlFor: "username", className: "form-field-label", children: "Username" }), _jsx(SolidInput, { type: "text", id: "username", name: "username", autoComplete: "off", disabled: Boolean(formik.values.username) && isEditMode, onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.username, className: cx(fieldError("username") && "solid-user-form-input-invalid") }), fieldError("username") ? _jsx(SolidMessage, { severity: "error", text: fieldError("username") }) : null] }), _jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2 mt-3", children: [_jsx("label", { htmlFor: "email", className: "form-field-label", children: "Email" }), _jsx(SolidInput, { type: "email", id: "email", name: "email", autoComplete: "off", disabled: isEditMode, onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.email, className: cx(fieldError("email") && "solid-user-form-input-invalid") }), fieldError("email") ? _jsx(SolidMessage, { severity: "error", text: fieldError("email") }) : null] }), _jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2 mt-3", children: [_jsx("label", { htmlFor: "mobile", className: "form-field-label", children: "Mobile" }), _jsx(SolidInput, { type: "text", id: "mobile", name: "mobile", autoComplete: "off", onChange: formik.handleChange, onBlur: formik.handleBlur, value: formik.values.mobile, className: cx(fieldError("mobile") && "solid-user-form-input-invalid") }), fieldError("mobile") ? _jsx(SolidMessage, { severity: "error", text: fieldError("mobile") }) : null] }), !isEditMode ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2 mt-3", children: [_jsx("label", { htmlFor: "password", className: "form-field-label", children: "Password" }), _jsx(SolidPasswordInput, { id: "password", name: "password", autoComplete: "off", value: formik.values.password, onChange: formik.handleChange, onBlur: formik.handleBlur, className: cx(fieldError("password") && "solid-user-form-input-invalid") }), fieldError("password") ? _jsx(SolidMessage, { severity: "error", text: fieldError("password") }) : null] }), _jsxs("div", { className: "field col-12 md:col-6 flex flex-column gap-2 mt-3", children: [_jsx("label", { htmlFor: "confirmPassword", className: "form-field-label", children: "Confirm Password" }), _jsx(SolidPasswordInput, { id: "confirmPassword", name: "confirmPassword", autoComplete: "off", value: formik.values.confirmPassword, onChange: formik.handleChange, onBlur: formik.handleBlur, className: cx(fieldError("confirmPassword") && "solid-user-form-input-invalid") }), fieldError("confirmPassword") ? (_jsx(SolidMessage, { severity: "error", text: fieldError("confirmPassword") })) : null] })] })) : null] }) }), _jsx(SolidPanel, { toggleable: true, header: "Access", className: "solid-column-panel", children: _jsxs("div", { className: "formgrid grid solid-user-access-grid", children: [isEditMode ? (_jsxs("div", { className: "field col-12 solid-user-access-row", children: [_jsxs("div", { className: "solid-user-access-copy", children: [_jsx("p", { className: "form-field-label m-0", children: "Active User" }), _jsx("p", { className: "solid-user-section-helper m-0 mt-1", children: "Control whether this user account is active and allowed to sign in." })] }), _jsx(SolidSwitch, { checked: formik.values.active, onChange: function (checked) { return formik.setFieldValue("active", checked); } })] })) : null, _jsxs("div", { className: "field col-12 solid-user-access-row", children: [_jsxs("div", { className: "solid-user-access-copy", children: [_jsx("p", { className: "form-field-label m-0", children: "Allow API Key Generation" }), _jsx("p", { className: "solid-user-section-helper m-0 mt-1", children: "When enabled, this user can generate API keys for programmatic access." })] }), _jsx(SolidSwitch, { checked: formik.values.isAllowedToGenerateApiKeys, onChange: function (checked) { return formik.setFieldValue("isAllowedToGenerateApiKeys", checked); } })] })] }) }), _jsxs(SolidPanel, { toggleable: true, header: "Roles", className: "solid-column-panel", children: [_jsx("p", { className: "solid-user-section-copy", children: "Select the roles that should be assigned to this user." }), _jsx("div", { className: "solid-user-role-grid", children: (_c = (_b = rolesData === null || rolesData === void 0 ? void 0 : rolesData.data) === null || _b === void 0 ? void 0 : _b.records) === null || _c === void 0 ? void 0 : _c.map(function (role) { return (_jsx("div", { className: cx("solid-user-role-card", selectedRoles.includes(role.name) && "is-selected"), children: _jsx(SolidCheckbox, { id: role.name, checked: selectedRoles.includes(role.name), onChange: function () { return handleCheckboxChange(role.name); }, label: role.name, className: "solid-user-role-control" }) }, role.name)); }) })] })] }) }));
241
269
  }
242
270
  export default CreateUser;
243
271
  //# sourceMappingURL=CreateUser.js.map
@@ -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 { useGetrolesQuery } from \"../../../redux/api/roleApi\";\nimport { useDeleteUserMutation } from \"../../../redux/api/userApi\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport {\n SolidButton,\n SolidCheckbox,\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 [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 const { data: rolesData } = useGetrolesQuery(\"\");\n\n useEffect(() => {\n if (data?.roles) {\n setSelectedRoles(data.roles.map((role: any) => role.name));\n }\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 failedLoginAttempts: data?.failedLoginAttempts ?? 0,\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.number().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Mobile\")),\n failedLoginAttempts: Yup.number()\n .typeError(\"Failed Login Attempts must be a number\")\n .nullable()\n .transform((value, originalValue) => (originalValue === \"\" ? null : value)),\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 failedLoginAttempts: values.failedLoginAttempts,\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 failedLoginAttempts: values.failedLoginAttempts,\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\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 align-items-center justify-content-between gap-3 flex-wrap\">\n <div className=\"solid-user-form-titleblock flex align-items-center gap-3\">\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=\"gap-3 flex flex-wrap\">\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-4 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 rolesData={rolesData}\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 rolesData={rolesData}\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 rolesData,\n selectedRoles,\n handleCheckboxChange,\n isEditMode,\n}: {\n formik: any;\n fieldError: (field: any) => string;\n rolesData: any;\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=\"grid formgrid\">\n <div className=\"field col-12 md:col-6 flex flex-column gap-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 col-12 md:col-6 flex flex-column gap-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 col-12 md:col-6 flex flex-column gap-2 mt-3\">\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 col-12 md:col-6 flex flex-column gap-2 mt-3\">\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 col-12 md:col-6 flex flex-column gap-2 mt-3\">\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 col-12 md:col-6 flex flex-column gap-2 mt-3\">\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 ) : (\n <div className=\"field col-12 md:col-6 flex flex-column gap-2 mt-3\">\n <label htmlFor=\"failedLoginAttempts\" className=\"form-field-label\">\n Failed Login Attempts\n </label>\n <SolidInput\n type=\"number\"\n id=\"failedLoginAttempts\"\n name=\"failedLoginAttempts\"\n autoComplete=\"off\"\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n value={formik.values.failedLoginAttempts}\n className={cx(fieldError(\"failedLoginAttempts\") && \"solid-user-form-input-invalid\")}\n />\n {fieldError(\"failedLoginAttempts\") ? (\n <SolidMessage severity=\"error\" text={fieldError(\"failedLoginAttempts\")} />\n ) : null}\n <p className=\"solid-user-section-helper\">\n Your account has been locked due to repeated unsuccessful login attempts. Please contact your\n system admin.\n </p>\n </div>\n )}\n </div>\n </SolidPanel>\n\n <SolidPanel toggleable header=\"Access\" className=\"solid-column-panel\">\n <div className=\"formgrid grid\">\n <div className=\"field col-12 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 <div className=\"solid-user-role-grid\">\n {rolesData?.data?.records?.map((role: any) => (\n <div\n key={role.name}\n className={cx(\"solid-user-role-card\", selectedRoles.includes(role.name) && \"is-selected\")}\n >\n <SolidCheckbox\n id={role.name}\n checked={selectedRoles.includes(role.name)}\n onChange={() => handleCheckboxChange(role.name)}\n label={role.name}\n className=\"solid-user-role-control\"\n />\n </div>\n ))}\n </div>\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 { useGetrolesQuery } from \"../../../redux/api/roleApi\";\nimport { useDeleteUserMutation } from \"../../../redux/api/userApi\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport {\n SolidButton,\n SolidCheckbox,\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 const { data: rolesData } = useGetrolesQuery(\"\");\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 align-items-center justify-content-between gap-3 flex-wrap\">\n <div className=\"solid-user-form-titleblock flex align-items-center gap-3\">\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=\"gap-3 flex 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-4 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 rolesData={rolesData}\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 rolesData={rolesData}\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 rolesData,\n selectedRoles,\n handleCheckboxChange,\n isEditMode,\n}: {\n formik: any;\n fieldError: (field: any) => string;\n rolesData: any;\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=\"grid formgrid\">\n <div className=\"field col-12 md:col-6 flex flex-column gap-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 col-12 md:col-6 flex flex-column gap-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 col-12 md:col-6 flex flex-column gap-2 mt-3\">\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 col-12 md:col-6 flex flex-column gap-2 mt-3\">\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 col-12 md:col-6 flex flex-column gap-2 mt-3\">\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 col-12 md:col-6 flex flex-column gap-2 mt-3\">\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=\"formgrid grid solid-user-access-grid\">\n {isEditMode ? (\n <div className=\"field col-12 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 col-12 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 <div className=\"solid-user-role-grid\">\n {rolesData?.data?.records?.map((role: any) => (\n <div\n key={role.name}\n className={cx(\"solid-user-role-card\", selectedRoles.includes(role.name) && \"is-selected\")}\n >\n <SolidCheckbox\n id={role.name}\n checked={selectedRoles.includes(role.name)}\n onChange={() => handleCheckboxChange(role.name)}\n label={role.name}\n className=\"solid-user-role-control\"\n />\n </div>\n ))}\n </div>\n </SolidPanel>\n </div>\n </div>\n );\n}\n\nexport default CreateUser;\n"]}