@burdenoff/microfe-organization 2026.510.110

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 (244) hide show
  1. package/README.md +64 -0
  2. package/dist/generated/global-operations.d.ts +1647 -0
  3. package/dist/generated/global-operations.d.ts.map +1 -0
  4. package/dist/generated/global-operations.js +724 -0
  5. package/dist/generated/global-operations.js.map +1 -0
  6. package/dist/generated/global-types.d.ts +20716 -0
  7. package/dist/generated/global-types.d.ts.map +1 -0
  8. package/dist/generated/global-types.js +8 -0
  9. package/dist/generated/global-types.js.map +1 -0
  10. package/dist/generated/wspace-operations.d.ts +2 -0
  11. package/dist/generated/wspace-operations.d.ts.map +1 -0
  12. package/dist/generated/wspace-types.d.ts +53363 -0
  13. package/dist/generated/wspace-types.d.ts.map +1 -0
  14. package/dist/index.d.ts +56 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +3 -0
  17. package/dist/node_modules/sonner/dist/index.js +163 -0
  18. package/dist/node_modules/sonner/dist/index.js.map +1 -0
  19. package/dist/node_modules/zod/v3/ZodError.js +82 -0
  20. package/dist/node_modules/zod/v3/ZodError.js.map +1 -0
  21. package/dist/node_modules/zod/v3/errors.js +10 -0
  22. package/dist/node_modules/zod/v3/errors.js.map +1 -0
  23. package/dist/node_modules/zod/v3/helpers/errorUtil.js +9 -0
  24. package/dist/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  25. package/dist/node_modules/zod/v3/helpers/parseUtil.js +93 -0
  26. package/dist/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  27. package/dist/node_modules/zod/v3/helpers/util.js +76 -0
  28. package/dist/node_modules/zod/v3/helpers/util.js.map +1 -0
  29. package/dist/node_modules/zod/v3/locales/en.js +62 -0
  30. package/dist/node_modules/zod/v3/locales/en.js.map +1 -0
  31. package/dist/node_modules/zod/v3/types.js +2441 -0
  32. package/dist/node_modules/zod/v3/types.js.map +1 -0
  33. package/dist/organization-management/AdminOrganizationRoot.d.ts +16 -0
  34. package/dist/organization-management/AdminOrganizationRoot.d.ts.map +1 -0
  35. package/dist/organization-management/AdminOrganizationRoot.js +76 -0
  36. package/dist/organization-management/AdminOrganizationRoot.js.map +1 -0
  37. package/dist/organization-management/AdminOrganizationRoutes.d.ts +16 -0
  38. package/dist/organization-management/AdminOrganizationRoutes.d.ts.map +1 -0
  39. package/dist/organization-management/AdminOrganizationRoutes.js +73 -0
  40. package/dist/organization-management/AdminOrganizationRoutes.js.map +1 -0
  41. package/dist/organization-management/UserOrganizationRoot.d.ts +17 -0
  42. package/dist/organization-management/UserOrganizationRoot.d.ts.map +1 -0
  43. package/dist/organization-management/UserOrganizationRoot.js +45 -0
  44. package/dist/organization-management/UserOrganizationRoot.js.map +1 -0
  45. package/dist/organization-management/UserOrganizationRoutes.d.ts +12 -0
  46. package/dist/organization-management/UserOrganizationRoutes.d.ts.map +1 -0
  47. package/dist/organization-management/UserOrganizationRoutes.js +30 -0
  48. package/dist/organization-management/UserOrganizationRoutes.js.map +1 -0
  49. package/dist/organization-management/constants/permissions.d.ts +30 -0
  50. package/dist/organization-management/constants/permissions.d.ts.map +1 -0
  51. package/dist/organization-management/constants/permissions.js +22 -0
  52. package/dist/organization-management/constants/permissions.js.map +1 -0
  53. package/dist/organization-management/hooks/useOrganizationEventEmitter.d.ts +19 -0
  54. package/dist/organization-management/hooks/useOrganizationEventEmitter.d.ts.map +1 -0
  55. package/dist/organization-management/hooks/useOrganizationEventEmitter.js +15 -0
  56. package/dist/organization-management/hooks/useOrganizationEventEmitter.js.map +1 -0
  57. package/dist/organization-management/hooks/useOrganizationPageView.d.ts +11 -0
  58. package/dist/organization-management/hooks/useOrganizationPageView.d.ts.map +1 -0
  59. package/dist/organization-management/hooks/useOrganizationPageView.js +24 -0
  60. package/dist/organization-management/hooks/useOrganizationPageView.js.map +1 -0
  61. package/dist/organization-management/modules/members/components/InviteMemberForm.d.ts +18 -0
  62. package/dist/organization-management/modules/members/components/InviteMemberForm.d.ts.map +1 -0
  63. package/dist/organization-management/modules/members/components/InviteMemberForm.js +119 -0
  64. package/dist/organization-management/modules/members/components/InviteMemberForm.js.map +1 -0
  65. package/dist/organization-management/modules/members/components/InviteStatusBadge.d.ts +6 -0
  66. package/dist/organization-management/modules/members/components/InviteStatusBadge.d.ts.map +1 -0
  67. package/dist/organization-management/modules/members/components/InviteStatusBadge.js +51 -0
  68. package/dist/organization-management/modules/members/components/InviteStatusBadge.js.map +1 -0
  69. package/dist/organization-management/modules/members/components/MemberRoleBadge.d.ts +11 -0
  70. package/dist/organization-management/modules/members/components/MemberRoleBadge.d.ts.map +1 -0
  71. package/dist/organization-management/modules/members/components/MemberRoleBadge.js +56 -0
  72. package/dist/organization-management/modules/members/components/MemberRoleBadge.js.map +1 -0
  73. package/dist/organization-management/modules/members/components/MyInviteCard.d.ts +22 -0
  74. package/dist/organization-management/modules/members/components/MyInviteCard.d.ts.map +1 -0
  75. package/dist/organization-management/modules/members/components/MyInviteCard.js +70 -0
  76. package/dist/organization-management/modules/members/components/MyInviteCard.js.map +1 -0
  77. package/dist/organization-management/modules/members/components/PendingInvitesList.d.ts +6 -0
  78. package/dist/organization-management/modules/members/components/PendingInvitesList.d.ts.map +1 -0
  79. package/dist/organization-management/modules/members/components/PendingInvitesList.js +141 -0
  80. package/dist/organization-management/modules/members/components/PendingInvitesList.js.map +1 -0
  81. package/dist/organization-management/modules/members/hooks/useInvites.d.ts +75 -0
  82. package/dist/organization-management/modules/members/hooks/useInvites.d.ts.map +1 -0
  83. package/dist/organization-management/modules/members/hooks/useInvites.js +253 -0
  84. package/dist/organization-management/modules/members/hooks/useInvites.js.map +1 -0
  85. package/dist/organization-management/modules/members/hooks/useMembers.d.ts +84 -0
  86. package/dist/organization-management/modules/members/hooks/useMembers.d.ts.map +1 -0
  87. package/dist/organization-management/modules/members/hooks/useMembers.js +95 -0
  88. package/dist/organization-management/modules/members/hooks/useMembers.js.map +1 -0
  89. package/dist/organization-management/modules/members/pages/InviteMemberPage.d.ts +6 -0
  90. package/dist/organization-management/modules/members/pages/InviteMemberPage.d.ts.map +1 -0
  91. package/dist/organization-management/modules/members/pages/InviteMemberPage.js +91 -0
  92. package/dist/organization-management/modules/members/pages/InviteMemberPage.js.map +1 -0
  93. package/dist/organization-management/modules/members/pages/MemberDetailPage.d.ts +6 -0
  94. package/dist/organization-management/modules/members/pages/MemberDetailPage.d.ts.map +1 -0
  95. package/dist/organization-management/modules/members/pages/MemberDetailPage.js +115 -0
  96. package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -0
  97. package/dist/organization-management/modules/members/pages/MembersListPage.d.ts +2 -0
  98. package/dist/organization-management/modules/members/pages/MembersListPage.d.ts.map +1 -0
  99. package/dist/organization-management/modules/members/pages/MembersListPage.js +424 -0
  100. package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -0
  101. package/dist/organization-management/modules/members/pages/MyInvitesPage.d.ts +6 -0
  102. package/dist/organization-management/modules/members/pages/MyInvitesPage.d.ts.map +1 -0
  103. package/dist/organization-management/modules/members/pages/MyInvitesPage.js +114 -0
  104. package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -0
  105. package/dist/organization-management/modules/members/types/index.d.ts +35 -0
  106. package/dist/organization-management/modules/members/types/index.d.ts.map +1 -0
  107. package/dist/organization-management/modules/organizations/components/OrganizationForm.d.ts +13 -0
  108. package/dist/organization-management/modules/organizations/components/OrganizationForm.d.ts.map +1 -0
  109. package/dist/organization-management/modules/organizations/components/OrganizationForm.js +325 -0
  110. package/dist/organization-management/modules/organizations/components/OrganizationForm.js.map +1 -0
  111. package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.d.ts +13 -0
  112. package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.d.ts.map +1 -0
  113. package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js +49 -0
  114. package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js.map +1 -0
  115. package/dist/organization-management/modules/organizations/hooks/useOrganizations.d.ts +86 -0
  116. package/dist/organization-management/modules/organizations/hooks/useOrganizations.d.ts.map +1 -0
  117. package/dist/organization-management/modules/organizations/hooks/useOrganizations.js +164 -0
  118. package/dist/organization-management/modules/organizations/hooks/useOrganizations.js.map +1 -0
  119. package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.d.ts +6 -0
  120. package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.d.ts.map +1 -0
  121. package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js +76 -0
  122. package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -0
  123. package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.d.ts +2 -0
  124. package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.d.ts.map +1 -0
  125. package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +306 -0
  126. package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -0
  127. package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.d.ts +6 -0
  128. package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.d.ts.map +1 -0
  129. package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +93 -0
  130. package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -0
  131. package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.d.ts +2 -0
  132. package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.d.ts.map +1 -0
  133. package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +448 -0
  134. package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -0
  135. package/dist/organization-management/modules/organizations/schemas/index.d.ts +53 -0
  136. package/dist/organization-management/modules/organizations/schemas/index.d.ts.map +1 -0
  137. package/dist/organization-management/modules/organizations/schemas/index.js +25 -0
  138. package/dist/organization-management/modules/organizations/schemas/index.js.map +1 -0
  139. package/dist/organization-management/modules/organizations/types/index.d.ts +34 -0
  140. package/dist/organization-management/modules/organizations/types/index.d.ts.map +1 -0
  141. package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.d.ts +13 -0
  142. package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.d.ts.map +1 -0
  143. package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js +147 -0
  144. package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js.map +1 -0
  145. package/dist/organization-management/modules/workspaces/components/WorkspaceCard.d.ts +16 -0
  146. package/dist/organization-management/modules/workspaces/components/WorkspaceCard.d.ts.map +1 -0
  147. package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js +107 -0
  148. package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js.map +1 -0
  149. package/dist/organization-management/modules/workspaces/components/WorkspaceForm.d.ts +16 -0
  150. package/dist/organization-management/modules/workspaces/components/WorkspaceForm.d.ts.map +1 -0
  151. package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js +386 -0
  152. package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js.map +1 -0
  153. package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.d.ts +13 -0
  154. package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.d.ts.map +1 -0
  155. package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js +49 -0
  156. package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js.map +1 -0
  157. package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.d.ts +47 -0
  158. package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.d.ts.map +1 -0
  159. package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js +46 -0
  160. package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js.map +1 -0
  161. package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.d.ts +133 -0
  162. package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.d.ts.map +1 -0
  163. package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js +111 -0
  164. package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js.map +1 -0
  165. package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.d.ts +2 -0
  166. package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.d.ts.map +1 -0
  167. package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js +82 -0
  168. package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -0
  169. package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.d.ts +2 -0
  170. package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.d.ts.map +1 -0
  171. package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +438 -0
  172. package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -0
  173. package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.d.ts +2 -0
  174. package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.d.ts.map +1 -0
  175. package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +90 -0
  176. package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -0
  177. package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.d.ts +2 -0
  178. package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.d.ts.map +1 -0
  179. package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +465 -0
  180. package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -0
  181. package/dist/organization-management/modules/workspaces/schemas/index.d.ts +44 -0
  182. package/dist/organization-management/modules/workspaces/schemas/index.d.ts.map +1 -0
  183. package/dist/organization-management/modules/workspaces/schemas/index.js +22 -0
  184. package/dist/organization-management/modules/workspaces/schemas/index.js.map +1 -0
  185. package/dist/organization-management/modules/workspaces/types/index.d.ts +39 -0
  186. package/dist/organization-management/modules/workspaces/types/index.d.ts.map +1 -0
  187. package/dist/organization-management/modules/workspaces/types/workspace-member.d.ts +48 -0
  188. package/dist/organization-management/modules/workspaces/types/workspace-member.d.ts.map +1 -0
  189. package/dist/organization-management/providers/OrgConsoleProvider.d.ts +19 -0
  190. package/dist/organization-management/providers/OrgConsoleProvider.d.ts.map +1 -0
  191. package/dist/organization-management/providers/OrgConsoleProvider.js +24 -0
  192. package/dist/organization-management/providers/OrgConsoleProvider.js.map +1 -0
  193. package/dist/organization-management/shared/components/dialog/ConfirmDialog.d.ts +28 -0
  194. package/dist/organization-management/shared/components/dialog/ConfirmDialog.d.ts.map +1 -0
  195. package/dist/organization-management/shared/components/dialog/ConfirmDialog.js +105 -0
  196. package/dist/organization-management/shared/components/dialog/ConfirmDialog.js.map +1 -0
  197. package/dist/organization-management/shared/components/feedback/EmptyState.d.ts +14 -0
  198. package/dist/organization-management/shared/components/feedback/EmptyState.d.ts.map +1 -0
  199. package/dist/organization-management/shared/components/feedback/EmptyState.js +30 -0
  200. package/dist/organization-management/shared/components/feedback/EmptyState.js.map +1 -0
  201. package/dist/organization-management/shared/components/feedback/ErrorState.d.ts +11 -0
  202. package/dist/organization-management/shared/components/feedback/ErrorState.d.ts.map +1 -0
  203. package/dist/organization-management/shared/components/feedback/ErrorState.js +37 -0
  204. package/dist/organization-management/shared/components/feedback/ErrorState.js.map +1 -0
  205. package/dist/organization-management/shared/components/feedback/LoadingState.d.ts +6 -0
  206. package/dist/organization-management/shared/components/feedback/LoadingState.d.ts.map +1 -0
  207. package/dist/organization-management/shared/components/feedback/LoadingState.js +24 -0
  208. package/dist/organization-management/shared/components/feedback/LoadingState.js.map +1 -0
  209. package/dist/organization-management/shared/components/input/SearchInput.d.ts +15 -0
  210. package/dist/organization-management/shared/components/input/SearchInput.d.ts.map +1 -0
  211. package/dist/organization-management/shared/components/input/SearchInput.js +40 -0
  212. package/dist/organization-management/shared/components/input/SearchInput.js.map +1 -0
  213. package/dist/organization-management/shared/components/input/SelectionCheckbox.d.ts +10 -0
  214. package/dist/organization-management/shared/components/input/SelectionCheckbox.d.ts.map +1 -0
  215. package/dist/organization-management/shared/components/input/SelectionCheckbox.js +21 -0
  216. package/dist/organization-management/shared/components/input/SelectionCheckbox.js.map +1 -0
  217. package/dist/organization-management/shared/hooks/useDebouncedValue.d.ts +2 -0
  218. package/dist/organization-management/shared/hooks/useDebouncedValue.d.ts.map +1 -0
  219. package/dist/organization-management/shared/hooks/useDebouncedValue.js +17 -0
  220. package/dist/organization-management/shared/hooks/useDebouncedValue.js.map +1 -0
  221. package/dist/organization-management/shared/hooks/useTr.d.ts +14 -0
  222. package/dist/organization-management/shared/hooks/useTr.d.ts.map +1 -0
  223. package/dist/organization-management/shared/hooks/useTr.js +14 -0
  224. package/dist/organization-management/shared/hooks/useTr.js.map +1 -0
  225. package/dist/organization-management/shared/logger.d.ts +11 -0
  226. package/dist/organization-management/shared/logger.d.ts.map +1 -0
  227. package/dist/organization-management/shared/logger.js +46 -0
  228. package/dist/organization-management/shared/logger.js.map +1 -0
  229. package/dist/organization-management/shared/recaptcha.d.ts +2 -0
  230. package/dist/organization-management/shared/recaptcha.d.ts.map +1 -0
  231. package/dist/organization-management/shared/recaptcha.js +6 -0
  232. package/dist/organization-management/shared/recaptcha.js.map +1 -0
  233. package/dist/organization-management/shared/types/graphql.d.ts +131 -0
  234. package/dist/organization-management/shared/types/graphql.d.ts.map +1 -0
  235. package/dist/organization-management/shared/types/graphql.js +10 -0
  236. package/dist/organization-management/shared/types/graphql.js.map +1 -0
  237. package/dist/organization-management/shared/utils/cn.d.ts +8 -0
  238. package/dist/organization-management/shared/utils/cn.d.ts.map +1 -0
  239. package/dist/organization-management/types/index.d.ts +46 -0
  240. package/dist/organization-management/types/index.d.ts.map +1 -0
  241. package/dist/utils/nativeBridge.d.ts +3 -0
  242. package/dist/utils/nativeBridge.d.ts.map +1 -0
  243. package/dist/utils/nativeBridge.js +2 -0
  244. package/package.json +116 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationForm.js","names":[],"sources":["../../../../../src/organization-management/modules/organizations/components/OrganizationForm.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { ZodError } from 'zod';\nimport { useGetOrganizationBySlugLazyQuery } from '../../../../generated/global-operations';\nimport { useDebouncedValue } from '../../../shared/hooks/useDebouncedValue';\nimport { useTr } from '../../../shared/hooks/useTr';\nimport type { CreateOrganizationInput, UpdateOrganizationInput, Organization } from '../types';\nimport { createOrganizationSchema, updateOrganizationSchema } from '../schemas';\n\ninterface OrganizationFormProps {\n organization?: Organization | null;\n tenantId?: string;\n tenantName?: string;\n onSubmit: (data: CreateOrganizationInput | UpdateOrganizationInput) => Promise<void>;\n onCancel: () => void;\n loading?: boolean;\n}\n\ntype SlugStatus =\n | { tone: 'muted'; message: string }\n | { tone: 'success'; message: string }\n | { tone: 'warning'; message: string };\n\nfunction slugify(value: string): string {\n return value\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9\\s-]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\nfunction getSlugStatusClassName(tone: SlugStatus['tone']): string {\n switch (tone) {\n case 'success':\n return 'text-[var(--color-status-success-text)]';\n case 'warning':\n return 'text-[var(--color-status-warning-text)]';\n default:\n return 'text-[var(--color-text-muted)]';\n }\n}\n\nexport function OrganizationForm({\n organization,\n tenantId,\n tenantName,\n onSubmit,\n onCancel,\n loading,\n}: OrganizationFormProps) {\n const tr = useTr();\n const isCreateMode = !organization;\n const currentOrganizationId = organization?.id ?? null;\n const [formData, setFormData] = useState({\n name: organization?.name || '',\n slug: organization?.slug || '',\n description: organization?.description || '',\n logo: organization?.logo || '',\n website: organization?.website || '',\n tenantId: tenantId || organization?.tenantId || '',\n });\n\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [hasManualSlugEdits, setHasManualSlugEdits] = useState(false);\n const [slugStatus, setSlugStatus] = useState<SlugStatus>({\n tone: 'muted',\n message: tr(\n 'organizations.form.slugAutoGenerated',\n 'Slug is auto-generated from the organization name.'\n ),\n });\n const slugRequestIdRef = useRef(0);\n const lastAdjustedSlugRef = useRef<string | null>(null);\n const lastAdjustedBaseSlugRef = useRef<string | null>(null);\n const debouncedSlug = useDebouncedValue(formData.slug, 350);\n const [fetchOrganizationBySlug] = useGetOrganizationBySlugLazyQuery({\n fetchPolicy: 'network-only',\n });\n\n const tenantDisplayValue = useMemo(() => {\n if (!formData.tenantId) {\n return '';\n }\n\n if (tenantName) {\n return `${tenantName} (${formData.tenantId})`;\n }\n\n return formData.tenantId;\n }, [formData.tenantId, tenantName]);\n\n useEffect(() => {\n if (!isCreateMode || tenantId === undefined) {\n return;\n }\n\n setFormData((previousState) => {\n if (previousState.tenantId === tenantId) {\n return previousState;\n }\n\n return {\n ...previousState,\n tenantId,\n };\n });\n }, [isCreateMode, tenantId]);\n\n useEffect(() => {\n if (!isCreateMode) {\n return;\n }\n\n const generatedSlug = slugify(formData.name);\n lastAdjustedSlugRef.current = null;\n lastAdjustedBaseSlugRef.current = null;\n\n if (!hasManualSlugEdits) {\n setFormData((previousState) => ({\n ...previousState,\n slug: generatedSlug,\n }));\n }\n\n if (!generatedSlug) {\n setSlugStatus({\n tone: 'muted',\n message: tr(\n 'organizations.form.slugAutoGenerated',\n 'Slug is auto-generated from the organization name.'\n ),\n });\n }\n }, [formData.name, hasManualSlugEdits, isCreateMode, tr]);\n\n useEffect(() => {\n if (!isCreateMode) {\n return;\n }\n\n if (!formData.tenantId || !debouncedSlug) {\n lastAdjustedSlugRef.current = null;\n lastAdjustedBaseSlugRef.current = null;\n setSlugStatus({\n tone: 'muted',\n message: tr(\n 'organizations.form.slugAutoGenerated',\n 'Slug is auto-generated from the organization name.'\n ),\n });\n return;\n }\n\n if (lastAdjustedSlugRef.current === debouncedSlug && lastAdjustedBaseSlugRef.current !== null) {\n setSlugStatus({\n tone: 'warning',\n message: `${tr('organizations.form.slugAdjustedTo', 'Slug adjusted to')} “${debouncedSlug}” ${tr('organizations.form.slugBecause', 'because')} “${lastAdjustedBaseSlugRef.current}” ${tr('organizations.form.slugAlreadyTaken', 'is already taken.')}`,\n });\n return;\n }\n\n let isCancelled = false;\n const requestId = ++slugRequestIdRef.current;\n\n const resolveAvailableSlug = async () => {\n setSlugStatus({\n tone: 'muted',\n message: tr('organizations.form.slugChecking', 'Checking slug availability…'),\n });\n\n const baseSlug = debouncedSlug;\n let suffix = 2;\n let candidateSlug = baseSlug;\n\n while (true) {\n const result = await fetchOrganizationBySlug({\n variables: {\n tenantId: formData.tenantId,\n slug: candidateSlug,\n },\n });\n\n if (isCancelled || slugRequestIdRef.current !== requestId) {\n return;\n }\n\n const existingOrganizationId = (\n result.data?.organizationBySlug as { id?: string } | null | undefined\n )?.id;\n if (!existingOrganizationId || existingOrganizationId === currentOrganizationId) {\n if (candidateSlug !== baseSlug) {\n lastAdjustedSlugRef.current = candidateSlug;\n lastAdjustedBaseSlugRef.current = baseSlug;\n setFormData((previousState) => {\n if (previousState.slug !== baseSlug) {\n return previousState;\n }\n\n return {\n ...previousState,\n slug: candidateSlug,\n };\n });\n\n setSlugStatus({\n tone: 'warning',\n message: `${tr('organizations.form.slugAdjustedTo', 'Slug adjusted to')} “${candidateSlug}” ${tr('organizations.form.slugBecause', 'because')} “${baseSlug}” ${tr('organizations.form.slugAlreadyTaken', 'is already taken.')}`,\n });\n } else {\n lastAdjustedSlugRef.current = null;\n lastAdjustedBaseSlugRef.current = null;\n setSlugStatus({\n tone: 'success',\n message: `${tr('organizations.form.slugPrefix', 'Slug')} “${candidateSlug}” ${tr('organizations.form.slugAvailable', 'is available.')}`,\n });\n }\n\n return;\n }\n\n candidateSlug = `${baseSlug}-${suffix}`;\n suffix += 1;\n }\n };\n\n void resolveAvailableSlug();\n\n return () => {\n isCancelled = true;\n };\n }, [\n currentOrganizationId,\n debouncedSlug,\n fetchOrganizationBySlug,\n formData.tenantId,\n isCreateMode,\n tr,\n ]);\n\n const validate = () => {\n try {\n const schema = organization ? updateOrganizationSchema : createOrganizationSchema;\n schema.parse(formData);\n setErrors({});\n return true;\n } catch (error) {\n if (error instanceof ZodError) {\n const newErrors: Record<string, string> = {};\n error.issues.forEach((issue) => {\n const path = issue.path.join('.');\n newErrors[path] = issue.message;\n });\n setErrors(newErrors);\n }\n return false;\n }\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!validate()) {\n return;\n }\n\n const submitData = organization\n ? {\n // Update only changed fields\n name: formData.name !== organization.name ? formData.name : undefined,\n description:\n formData.description !== organization.description ? formData.description : undefined,\n logo: formData.logo !== organization.logo ? formData.logo : undefined,\n website: formData.website !== organization.website ? formData.website : undefined,\n }\n : {\n // Create with all fields\n tenantId: formData.tenantId,\n name: formData.name,\n slug: formData.slug,\n description: formData.description || undefined,\n logo: formData.logo || undefined,\n website: formData.website || undefined,\n };\n\n await onSubmit(submitData);\n };\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n {/* Tenant ID (only for create) */}\n {isCreateMode && (\n <div>\n <label\n htmlFor=\"tenantId\"\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1\"\n >\n {tr('organizations.form.tenant', 'Tenant')}{' '}\n <span className=\"text-[var(--color-status-error-text)]\">*</span>\n </label>\n {tenantId ? (\n <input\n id=\"tenantId\"\n type=\"text\"\n value={tenantDisplayValue}\n className=\"\n w-full px-3 py-2\n bg-[var(--color-bg-muted)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n disabled:cursor-not-allowed\n \"\n disabled\n readOnly\n aria-label={tr('organizations.form.selectedTenant', 'Selected tenant')}\n />\n ) : (\n <input\n id=\"tenantId\"\n type=\"text\"\n value={formData.tenantId}\n onChange={(e) => setFormData({ ...formData, tenantId: e.target.value })}\n className=\"\n w-full px-3 py-2\n bg-[var(--color-bg-surface)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-border-focus)]\n disabled:bg-[var(--color-bg-muted)] disabled:cursor-not-allowed\n \"\n placeholder={tr('organizations.form.tenantPlaceholder', 'Enter tenant ID')}\n disabled={loading}\n required\n autoComplete=\"off\"\n />\n )}\n {errors.tenantId && (\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">{errors.tenantId}</p>\n )}\n </div>\n )}\n\n {/* Name */}\n <div>\n <label\n htmlFor=\"name\"\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1\"\n >\n {tr('organizations.form.name', 'Organization Name')}{' '}\n <span className=\"text-[var(--color-status-error-text)]\">*</span>\n </label>\n <input\n id=\"name\"\n type=\"text\"\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n className=\"\n w-full px-3 py-2\n bg-[var(--color-bg-surface)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-border-focus)]\n disabled:bg-[var(--color-bg-muted)] disabled:cursor-not-allowed\n \"\n placeholder={tr('organizations.form.namePlaceholder', 'Enter organization name')}\n disabled={loading}\n required\n autoComplete=\"organization\"\n />\n {errors.name && (\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">{errors.name}</p>\n )}\n </div>\n\n {/* Slug */}\n <div>\n <label\n htmlFor=\"slug\"\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1\"\n >\n {tr('common.slug', 'Slug')}{' '}\n <span className=\"text-[var(--color-status-error-text)]\">*</span>\n </label>\n <input\n id=\"slug\"\n type=\"text\"\n value={formData.slug}\n onChange={(e) => {\n setHasManualSlugEdits(true);\n lastAdjustedSlugRef.current = null;\n lastAdjustedBaseSlugRef.current = null;\n setFormData({\n ...formData,\n slug: slugify(e.target.value),\n });\n }}\n className=\"\n w-full px-3 py-2\n bg-[var(--color-bg-surface)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-border-focus)]\n disabled:bg-[var(--color-bg-muted)] disabled:cursor-not-allowed\n \"\n placeholder={tr('organizations.form.slugPlaceholder', 'organization-slug')}\n disabled={loading || !!organization}\n required={!organization}\n autoComplete=\"off\"\n />\n <p\n className={`text-xs mt-1 ${getSlugStatusClassName(\n isCreateMode ? slugStatus.tone : 'muted'\n )}`}\n >\n {isCreateMode\n ? slugStatus.message\n : tr(\n 'organizations.form.slugImmutable',\n 'Lowercase letters, numbers, and hyphens only. Cannot be changed after creation.'\n )}\n </p>\n {errors.slug && (\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">{errors.slug}</p>\n )}\n </div>\n\n {/* Description */}\n <div>\n <label\n htmlFor=\"description\"\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1\"\n >\n {tr('common.description', 'Description')}\n </label>\n <textarea\n id=\"description\"\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n rows={4}\n className=\"\n w-full px-3 py-2\n bg-[var(--color-bg-surface)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-border-focus)]\n disabled:bg-[var(--color-bg-muted)] disabled:cursor-not-allowed\n \"\n placeholder={tr(\n 'organizations.form.descriptionPlaceholder',\n 'Enter organization description'\n )}\n disabled={loading}\n autoComplete=\"off\"\n />\n </div>\n\n {/* Logo URL */}\n <div>\n <label\n htmlFor=\"logo\"\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1\"\n >\n {tr('organizations.form.logoUrl', 'Logo URL')}\n </label>\n <input\n id=\"logo\"\n type=\"url\"\n value={formData.logo}\n onChange={(e) => setFormData({ ...formData, logo: e.target.value })}\n className=\"\n w-full px-3 py-2\n bg-[var(--color-bg-surface)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-border-focus)]\n disabled:bg-[var(--color-bg-muted)] disabled:cursor-not-allowed\n \"\n placeholder=\"https://example.com/logo.png\"\n disabled={loading}\n autoComplete=\"url\"\n />\n </div>\n\n {/* Website */}\n <div>\n <label\n htmlFor=\"website\"\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1\"\n >\n {tr('organizations.detail.website', 'Website')}\n </label>\n <input\n id=\"website\"\n type=\"url\"\n value={formData.website}\n onChange={(e) => setFormData({ ...formData, website: e.target.value })}\n className=\"\n w-full px-3 py-2\n bg-[var(--color-bg-surface)]\n border border-[var(--color-border-default)]\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n focus:outline-none focus:ring-2 focus:ring-[var(--color-border-focus)]\n disabled:bg-[var(--color-bg-muted)] disabled:cursor-not-allowed\n \"\n placeholder=\"https://example.com\"\n disabled={loading}\n autoComplete=\"url\"\n />\n </div>\n\n {/* Form Actions */}\n <div className=\"flex flex-col gap-3 border-t border-[var(--color-border-default)] pt-4 sm:flex-row\">\n <button\n type=\"submit\"\n disabled={loading}\n className=\"\n inline-flex items-center gap-2 px-6 py-2.5\n bg-[var(--color-action-primary-bg)]\n text-[var(--color-action-primary-text)]\n rounded-lg\n hover:opacity-90 hover:scale-[1.02]\n active:scale-[0.98]\n transition-all duration-200\n font-medium\n disabled:opacity-50 disabled:cursor-not-allowed\n sm:min-w-[220px]\n \"\n >\n {loading && <Loader2 size={16} className=\"animate-spin\" />}\n {organization\n ? tr('organizations.form.updateSubmit', 'Update Organization')\n : tr('organizations.create.button', 'Create Organization')}\n </button>\n\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={loading}\n className=\"\n px-6 py-2.5\n bg-transparent\n text-[var(--color-text-primary)]\n border border-[var(--color-border-default)]\n rounded-lg\n hover:bg-[var(--color-bg-subtle)]\n active:scale-[0.98]\n transition-all duration-200\n font-medium\n disabled:opacity-50 disabled:cursor-not-allowed\n sm:min-w-[140px]\n \"\n >\n {tr('common.cancel', 'Cancel')}\n </button>\n </div>\n </form>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { OrganizationStatus } from '../types';
2
+
3
+ interface OrganizationStatusBadgeProps {
4
+ status: OrganizationStatus;
5
+ showIcon?: boolean;
6
+ }
7
+ /**
8
+ * OrganizationStatusBadge
9
+ * Displays the status of an organization with color coding and optional icon
10
+ */
11
+ export declare function OrganizationStatusBadge({ status, showIcon }: OrganizationStatusBadgeProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=OrganizationStatusBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationStatusBadge.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/organizations/components/OrganizationStatusBadge.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,UAAU,4BAA4B;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,MAAM,EAAE,QAAe,EAAE,EAAE,4BAA4B,2CA2DhG"}
@@ -0,0 +1,49 @@
1
+ import { OrganizationStatus as e } from "../../../shared/types/graphql.js";
2
+ import { useCallback as t } from "react";
3
+ import { CircleAlert as n, CircleCheck as r, CircleX as i } from "lucide-react";
4
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
+ import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
+ //#region src/organization-management/modules/organizations/components/OrganizationStatusBadge.tsx
7
+ function c({ status: c, showIcon: l = !0 }) {
8
+ let { t: u } = s(), d = t((e, t) => {
9
+ let n = u(e);
10
+ return n === e ? t : n;
11
+ }, [u]), f = (() => {
12
+ switch (c) {
13
+ case e.ACTIVE: return {
14
+ label: d("organizations.status.active", "Active"),
15
+ icon: r,
16
+ className: "bg-[var(--color-status-success-bgSubtle)] text-[var(--color-status-success-text)] border-[var(--color-status-success-border)]"
17
+ };
18
+ case e.INACTIVE: return {
19
+ label: d("organizations.status.inactive", "Inactive"),
20
+ icon: i,
21
+ className: "bg-[var(--color-bg-muted)] text-[var(--color-text-secondary)] border-[var(--color-border-default)]"
22
+ };
23
+ case e.ARCHIVED: return {
24
+ label: d("organizations.status.archived", "Archived"),
25
+ icon: n,
26
+ className: "bg-[var(--color-status-warning-bgSubtle)] text-[var(--color-status-warning-text)] border-[var(--color-status-warning-border)]"
27
+ };
28
+ default: return {
29
+ label: c,
30
+ icon: n,
31
+ className: "bg-[var(--color-bg-muted)] text-[var(--color-text-secondary)] border-[var(--color-border-default)]"
32
+ };
33
+ }
34
+ })(), p = f.icon;
35
+ return /* @__PURE__ */ o("span", {
36
+ className: `
37
+ inline-flex items-center gap-1.5 px-2.5 py-1
38
+ rounded-full text-xs font-medium
39
+ border
40
+ transition-colors duration-200
41
+ ${f.className}
42
+ `,
43
+ children: [l && /* @__PURE__ */ a(p, { size: 14 }), f.label]
44
+ });
45
+ }
46
+ //#endregion
47
+ export { c as OrganizationStatusBadge };
48
+
49
+ //# sourceMappingURL=OrganizationStatusBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationStatusBadge.js","names":[],"sources":["../../../../../src/organization-management/modules/organizations/components/OrganizationStatusBadge.tsx"],"sourcesContent":["import { CircleCheck, CircleX, CircleAlert } from 'lucide-react';\nimport { useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { OrganizationStatus } from '../types';\n\ninterface OrganizationStatusBadgeProps {\n status: OrganizationStatus;\n showIcon?: boolean;\n}\n\n/**\n * OrganizationStatusBadge\n * Displays the status of an organization with color coding and optional icon\n */\nexport function OrganizationStatusBadge({ status, showIcon = true }: OrganizationStatusBadgeProps) {\n const { t } = useI18n();\n const tr = useCallback(\n (key: string, fallback: string) => {\n const translated = t(key);\n return translated === key ? fallback : translated;\n },\n [t]\n );\n const getStatusConfig = () => {\n switch (status) {\n case OrganizationStatus.ACTIVE:\n return {\n label: tr('organizations.status.active', 'Active'),\n icon: CircleCheck,\n className:\n 'bg-[var(--color-status-success-bgSubtle)] text-[var(--color-status-success-text)] border-[var(--color-status-success-border)]',\n };\n case OrganizationStatus.INACTIVE:\n return {\n label: tr('organizations.status.inactive', 'Inactive'),\n icon: CircleX,\n className:\n 'bg-[var(--color-bg-muted)] text-[var(--color-text-secondary)] border-[var(--color-border-default)]',\n };\n case OrganizationStatus.ARCHIVED:\n return {\n label: tr('organizations.status.archived', 'Archived'),\n icon: CircleAlert,\n className:\n 'bg-[var(--color-status-warning-bgSubtle)] text-[var(--color-status-warning-text)] border-[var(--color-status-warning-border)]',\n };\n default:\n return {\n label: status,\n icon: CircleAlert,\n className:\n 'bg-[var(--color-bg-muted)] text-[var(--color-text-secondary)] border-[var(--color-border-default)]',\n };\n }\n };\n\n const config = getStatusConfig();\n const Icon = config.icon;\n\n return (\n <span\n className={`\n inline-flex items-center gap-1.5 px-2.5 py-1\n rounded-full text-xs font-medium\n border\n transition-colors duration-200\n ${config.className}\n `}\n >\n {showIcon && <Icon size={14} />}\n {config.label}\n </span>\n );\n}\n"],"mappings":";;;;;;AAcA,SAAgB,EAAwB,EAAE,WAAQ,cAAW,MAAsC;CACjG,IAAM,EAAE,SAAM,GAAS,EACjB,IAAK,GACR,GAAa,MAAqB;EACjC,IAAM,IAAa,EAAE,EAAI;AACzB,SAAO,MAAe,IAAM,IAAW;IAEzC,CAAC,EAAE,CACJ,EAkCK,WAjCwB;AAC5B,UAAQ,GAAR;GACE,KAAK,EAAmB,OACtB,QAAO;IACL,OAAO,EAAG,+BAA+B,SAAS;IAClD,MAAM;IACN,WACE;IACH;GACH,KAAK,EAAmB,SACtB,QAAO;IACL,OAAO,EAAG,iCAAiC,WAAW;IACtD,MAAM;IACN,WACE;IACH;GACH,KAAK,EAAmB,SACtB,QAAO;IACL,OAAO,EAAG,iCAAiC,WAAW;IACtD,MAAM;IACN,WACE;IACH;GACH,QACE,QAAO;IACL,OAAO;IACP,MAAM;IACN,WACE;IACH;;KAIyB,EAC1B,IAAO,EAAO;AAEpB,QACE,kBAAC,QAAD;EACE,WAAW;;;;;UAKP,EAAO,UAAU;;YANvB,CASG,KAAY,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA,EAC9B,EAAO,MACH"}
@@ -0,0 +1,86 @@
1
+ import { Organization, OrganizationFilterInput, CreateOrganizationInput, UpdateOrganizationInput } from '../types';
2
+
3
+ /**
4
+ * Hook to fetch organizations with filtering and pagination
5
+ */
6
+ export declare function useOrganizations(filter?: OrganizationFilterInput, limit?: number, offset?: number, enabled?: boolean): {
7
+ organizations: Organization[];
8
+ total: any;
9
+ limit: any;
10
+ offset: any;
11
+ hasMore: any;
12
+ loading: boolean;
13
+ error: import('@apollo/client').ApolloError | undefined;
14
+ refetch: (variables?: any) => Promise<import('@apollo/client').ApolloQueryResult<Types.GetOrganizationsQuery>>;
15
+ fetchMore: <TFetchData = Types.GetOrganizationsQuery, TFetchVars extends import('@apollo/client').OperationVariables = Types.GetOrganizationsQueryVariables>(fetchMoreOptions: import('@apollo/client').FetchMoreQueryOptions<TFetchVars, TFetchData> & {
16
+ updateQuery?: ((previousQueryResult: any, options: {
17
+ fetchMoreResult: import('@apollo/client').Unmasked<TFetchData>;
18
+ variables: TFetchVars;
19
+ }) => any) | undefined;
20
+ }) => Promise<import('@apollo/client').ApolloQueryResult<TFetchData>>;
21
+ };
22
+ /**
23
+ * Hook to fetch a single organization by ID
24
+ */
25
+ export declare function useOrganization(id: string): {
26
+ organization: Organization | undefined;
27
+ loading: boolean;
28
+ error: import('@apollo/client').ApolloError | undefined;
29
+ refetch: (variables?: any) => Promise<import('@apollo/client').ApolloQueryResult<Types.GetOrganizationQuery>>;
30
+ };
31
+ /**
32
+ * Hook to fetch an organization by slug
33
+ */
34
+ export declare function useOrganizationBySlug(tenantId: string, slug: string): {
35
+ organization: Organization | undefined;
36
+ loading: boolean;
37
+ error: import('@apollo/client').ApolloError | undefined;
38
+ refetch: (variables?: any) => Promise<import('@apollo/client').ApolloQueryResult<Types.GetOrganizationBySlugQuery>>;
39
+ };
40
+ /**
41
+ * Hook to fetch organizations by tenant ID
42
+ */
43
+ export declare function useOrganizationsByTenant(tenantId: string, limit?: number, offset?: number): {
44
+ organizations: Organization[];
45
+ total: any;
46
+ limit: any;
47
+ offset: any;
48
+ hasMore: any;
49
+ loading: boolean;
50
+ error: import('@apollo/client').ApolloError | undefined;
51
+ refetch: (variables?: any) => Promise<import('@apollo/client').ApolloQueryResult<Types.GetOrganizationsByTenantQuery>>;
52
+ fetchMore: <TFetchData = Types.GetOrganizationsByTenantQuery, TFetchVars extends import('@apollo/client').OperationVariables = Types.GetOrganizationsByTenantQueryVariables>(fetchMoreOptions: import('@apollo/client').FetchMoreQueryOptions<TFetchVars, TFetchData> & {
53
+ updateQuery?: ((previousQueryResult: any, options: {
54
+ fetchMoreResult: import('@apollo/client').Unmasked<TFetchData>;
55
+ variables: TFetchVars;
56
+ }) => any) | undefined;
57
+ }) => Promise<import('@apollo/client').ApolloQueryResult<TFetchData>>;
58
+ };
59
+ /**
60
+ * Hook to create a new organization
61
+ */
62
+ export declare function useCreateOrganization(): {
63
+ createOrganization: (input: CreateOrganizationInput) => Promise<import('@apollo/client').FetchResult<Types.CreateOrganizationMutation>>;
64
+ data: any;
65
+ loading: boolean;
66
+ error: import('@apollo/client').ApolloError | undefined;
67
+ };
68
+ /**
69
+ * Hook to update an organization
70
+ */
71
+ export declare function useUpdateOrganization(): {
72
+ updateOrganization: (id: string, input: UpdateOrganizationInput) => Promise<import('@apollo/client').FetchResult<Types.UpdateOrganizationMutation>>;
73
+ data: any;
74
+ loading: boolean;
75
+ error: import('@apollo/client').ApolloError | undefined;
76
+ };
77
+ /**
78
+ * Hook to delete an organization
79
+ */
80
+ export declare function useDeleteOrganization(): {
81
+ deleteOrganization: (id: string) => Promise<import('@apollo/client').FetchResult<Types.DeleteOrganizationMutation>>;
82
+ data: any;
83
+ loading: boolean;
84
+ error: import('@apollo/client').ApolloError | undefined;
85
+ };
86
+ //# sourceMappingURL=useOrganizations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOrganizations.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/organizations/hooks/useOrganizations.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AA8BlB;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,CAAC,EAAE,uBAAuB,EAChC,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,EAClB,OAAO,GAAE,OAAc;;;;;;;;;;;;;;;EAoBxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM;;;;;EAgBzC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;kBAStB,YAAY,GAAG,SAAS;;;;EAKrE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,EAAE,MAAM,GAAE,MAAU;;;;;;;;;;;;;;;EAmBhG;AAED;;GAEG;AACH,wBAAgB,qBAAqB;gCAKC,uBAAuB;;;;EAuC5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB;6BAKF,MAAM,SAAS,uBAAuB;;;;EAuCxE;AAED;;GAEG;AACH,wBAAgB,qBAAqB;6BAKF,MAAM;;;;EAuCxC"}
@@ -0,0 +1,164 @@
1
+ import { useCreateOrganizationMutation as e, useDeleteOrganizationMutation as t, useGetOrganizationQuery as n, useGetOrganizationsQuery as r, useUpdateOrganizationMutation as i } from "../../../../generated/global-operations.js";
2
+ import { useOrganizationEventEmitter as a } from "../../../hooks/useOrganizationEventEmitter.js";
3
+ import { logger as o, redactId as s } from "../../../shared/logger.js";
4
+ import { executeRecaptcha as c } from "../../../shared/recaptcha.js";
5
+ //#region src/organization-management/modules/organizations/hooks/useOrganizations.ts
6
+ function l(e) {
7
+ return e?.graphQLErrors?.[0]?.extensions?.code;
8
+ }
9
+ function u(e) {
10
+ return e instanceof Error ? e.message : e?.message ?? "Unknown error";
11
+ }
12
+ function d(e, t = 20, n = 0, i = !0) {
13
+ let { data: a, loading: o, error: s, refetch: c, fetchMore: l } = r({
14
+ variables: {
15
+ filter: e,
16
+ limit: t,
17
+ offset: n
18
+ },
19
+ skip: !i,
20
+ fetchPolicy: "cache-first",
21
+ nextFetchPolicy: "cache-first"
22
+ });
23
+ return {
24
+ organizations: a?.organizations?.items || [],
25
+ total: a?.organizations?.total || 0,
26
+ limit: a?.organizations?.limit || t,
27
+ offset: a?.organizations?.offset || n,
28
+ hasMore: a?.organizations?.hasMore || !1,
29
+ loading: o,
30
+ error: s,
31
+ refetch: c,
32
+ fetchMore: l
33
+ };
34
+ }
35
+ function f(e) {
36
+ let { data: t, loading: r, error: i, refetch: a } = n({
37
+ variables: { id: e },
38
+ skip: !e,
39
+ fetchPolicy: "cache-first",
40
+ nextFetchPolicy: "cache-first"
41
+ }), o = t?.organization;
42
+ return {
43
+ organization: o,
44
+ loading: r && !o,
45
+ error: i,
46
+ refetch: a
47
+ };
48
+ }
49
+ function p() {
50
+ let { emit: t } = a(), [n, { data: r, loading: i, error: d }] = e();
51
+ return {
52
+ createOrganization: async (e) => {
53
+ o.info("mutation.start", { name: "createOrganization" });
54
+ try {
55
+ let r = await c("organization_create"), i = await n({ variables: { input: {
56
+ ...e,
57
+ ...r ? { recaptchaToken: r } : {}
58
+ } } }), a = i.data?.createOrganization?.id;
59
+ return t("organization.created", {
60
+ organizationId: a,
61
+ source: "microfe-organization"
62
+ }), o.info("mutation.success", {
63
+ name: "createOrganization",
64
+ organizationId: s(a)
65
+ }), i;
66
+ } catch (e) {
67
+ let n = l(e), r = u(e);
68
+ throw t("organization.create_failed", {
69
+ source: "microfe-organization",
70
+ errorCode: n,
71
+ errorMessage: r
72
+ }), o.error("mutation.failed", {
73
+ name: "createOrganization",
74
+ errorCode: n,
75
+ errorMessage: r
76
+ }, e), e;
77
+ }
78
+ },
79
+ data: r,
80
+ loading: i,
81
+ error: d
82
+ };
83
+ }
84
+ function m() {
85
+ let { emit: e } = a(), [t, { data: n, loading: r, error: c }] = i();
86
+ return {
87
+ updateOrganization: async (n, r) => {
88
+ o.info("mutation.start", {
89
+ name: "updateOrganization",
90
+ organizationId: s(n)
91
+ });
92
+ try {
93
+ let i = await t({ variables: {
94
+ id: n,
95
+ input: r
96
+ } });
97
+ return e("organization.updated", {
98
+ organizationId: n,
99
+ source: "microfe-organization"
100
+ }), o.info("mutation.success", {
101
+ name: "updateOrganization",
102
+ organizationId: s(n)
103
+ }), i;
104
+ } catch (t) {
105
+ let r = l(t), i = u(t);
106
+ throw e("organization.update_failed", {
107
+ organizationId: n,
108
+ source: "microfe-organization",
109
+ errorCode: r,
110
+ errorMessage: i
111
+ }), o.error("mutation.failed", {
112
+ name: "updateOrganization",
113
+ organizationId: s(n),
114
+ errorCode: r,
115
+ errorMessage: i
116
+ }, t), t;
117
+ }
118
+ },
119
+ data: n,
120
+ loading: r,
121
+ error: c
122
+ };
123
+ }
124
+ function h() {
125
+ let { emit: e } = a(), [n, { data: r, loading: i, error: c }] = t();
126
+ return {
127
+ deleteOrganization: async (t) => {
128
+ o.info("mutation.start", {
129
+ name: "deleteOrganization",
130
+ organizationId: s(t)
131
+ });
132
+ try {
133
+ let r = await n({ variables: { id: t } });
134
+ return e("organization.deleted", {
135
+ organizationId: t,
136
+ source: "microfe-organization"
137
+ }), o.info("mutation.success", {
138
+ name: "deleteOrganization",
139
+ organizationId: s(t)
140
+ }), r;
141
+ } catch (n) {
142
+ let r = l(n), i = u(n);
143
+ throw e("organization.delete_failed", {
144
+ organizationId: t,
145
+ source: "microfe-organization",
146
+ errorCode: r,
147
+ errorMessage: i
148
+ }), o.error("mutation.failed", {
149
+ name: "deleteOrganization",
150
+ organizationId: s(t),
151
+ errorCode: r,
152
+ errorMessage: i
153
+ }, n), n;
154
+ }
155
+ },
156
+ data: r,
157
+ loading: i,
158
+ error: c
159
+ };
160
+ }
161
+ //#endregion
162
+ export { p as useCreateOrganization, h as useDeleteOrganization, f as useOrganization, d as useOrganizations, m as useUpdateOrganization };
163
+
164
+ //# sourceMappingURL=useOrganizations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOrganizations.js","names":[],"sources":["../../../../../src/organization-management/modules/organizations/hooks/useOrganizations.ts"],"sourcesContent":["import {\n useGetOrganizationsQuery,\n useGetOrganizationQuery,\n useGetOrganizationBySlugQuery,\n useGetOrganizationsByTenantQuery,\n useCreateOrganizationMutation,\n useUpdateOrganizationMutation,\n useDeleteOrganizationMutation,\n} from '../../../../generated/global-operations';\nimport type {\n Organization,\n OrganizationFilterInput,\n CreateOrganizationInput,\n UpdateOrganizationInput,\n} from '../types';\nimport { useOrganizationEventEmitter } from '../../../hooks/useOrganizationEventEmitter';\nimport { logger, redactId } from '../../../shared/logger';\nimport { executeRecaptcha } from '../../../shared/recaptcha';\n\ninterface GraphqlExtensions {\n code?: string;\n}\n\ninterface GraphqlError {\n message?: string;\n extensions?: GraphqlExtensions;\n}\n\ninterface ApolloLikeError {\n message?: string;\n graphQLErrors?: ReadonlyArray<GraphqlError>;\n}\n\nfunction extractErrorCode(error: unknown): string | undefined {\n const apolloError = error as ApolloLikeError | undefined;\n return apolloError?.graphQLErrors?.[0]?.extensions?.code;\n}\n\nfunction extractErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n const apolloError = error as ApolloLikeError | undefined;\n return apolloError?.message ?? 'Unknown error';\n}\n\n/**\n * Hook to fetch organizations with filtering and pagination\n */\nexport function useOrganizations(\n filter?: OrganizationFilterInput,\n limit: number = 20,\n offset: number = 0,\n enabled: boolean = true\n) {\n const { data, loading, error, refetch, fetchMore } = useGetOrganizationsQuery({\n variables: { filter, limit, offset },\n skip: !enabled,\n fetchPolicy: 'cache-first',\n nextFetchPolicy: 'cache-first',\n });\n\n return {\n organizations: (data?.organizations?.items as Organization[]) || [],\n total: data?.organizations?.total || 0,\n limit: data?.organizations?.limit || limit,\n offset: data?.organizations?.offset || offset,\n hasMore: data?.organizations?.hasMore || false,\n loading,\n error,\n refetch,\n fetchMore,\n };\n}\n\n/**\n * Hook to fetch a single organization by ID\n */\nexport function useOrganization(id: string) {\n const { data, loading, error, refetch } = useGetOrganizationQuery({\n variables: { id },\n skip: !id,\n fetchPolicy: 'cache-first',\n nextFetchPolicy: 'cache-first',\n });\n\n const organization = data?.organization as Organization | undefined;\n\n return {\n organization,\n loading: loading && !organization,\n error,\n refetch,\n };\n}\n\n/**\n * Hook to fetch an organization by slug\n */\nexport function useOrganizationBySlug(tenantId: string, slug: string) {\n const { data, loading, error, refetch } = useGetOrganizationBySlugQuery({\n variables: { tenantId, slug },\n skip: !tenantId || !slug,\n fetchPolicy: 'cache-first',\n nextFetchPolicy: 'cache-first',\n });\n\n return {\n organization: data?.organizationBySlug as Organization | undefined,\n loading,\n error,\n refetch,\n };\n}\n\n/**\n * Hook to fetch organizations by tenant ID\n */\nexport function useOrganizationsByTenant(tenantId: string, limit: number = 20, offset: number = 0) {\n const { data, loading, error, refetch, fetchMore } = useGetOrganizationsByTenantQuery({\n variables: { tenantId, limit, offset },\n skip: !tenantId,\n fetchPolicy: 'cache-first',\n nextFetchPolicy: 'cache-first',\n });\n\n return {\n organizations: (data?.organizations?.items as Organization[]) || [],\n total: data?.organizations?.total || 0,\n limit: data?.organizations?.limit || limit,\n offset: data?.organizations?.offset || offset,\n hasMore: data?.organizations?.hasMore || false,\n loading,\n error,\n refetch,\n fetchMore,\n };\n}\n\n/**\n * Hook to create a new organization\n */\nexport function useCreateOrganization() {\n const { emit } = useOrganizationEventEmitter();\n const [createOrganization, { data, loading, error }] = useCreateOrganizationMutation();\n\n return {\n createOrganization: async (input: CreateOrganizationInput) => {\n logger.info('mutation.start', { name: 'createOrganization' });\n try {\n const recaptchaToken = await executeRecaptcha('organization_create');\n const result = await createOrganization({\n variables: {\n input: {\n ...input,\n ...(recaptchaToken ? { recaptchaToken } : {}),\n },\n },\n });\n const organizationId = result.data?.createOrganization?.id;\n emit('organization.created', { organizationId, source: 'microfe-organization' });\n logger.info('mutation.success', {\n name: 'createOrganization',\n organizationId: redactId(organizationId),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('organization.create_failed', {\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n { name: 'createOrganization', errorCode, errorMessage },\n mutationError\n );\n throw mutationError;\n }\n },\n data,\n loading,\n error,\n };\n}\n\n/**\n * Hook to update an organization\n */\nexport function useUpdateOrganization() {\n const { emit } = useOrganizationEventEmitter();\n const [updateOrganization, { data, loading, error }] = useUpdateOrganizationMutation();\n\n return {\n updateOrganization: async (id: string, input: UpdateOrganizationInput) => {\n logger.info('mutation.start', {\n name: 'updateOrganization',\n organizationId: redactId(id),\n });\n try {\n const result = await updateOrganization({ variables: { id, input } });\n emit('organization.updated', { organizationId: id, source: 'microfe-organization' });\n logger.info('mutation.success', {\n name: 'updateOrganization',\n organizationId: redactId(id),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('organization.update_failed', {\n organizationId: id,\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n {\n name: 'updateOrganization',\n organizationId: redactId(id),\n errorCode,\n errorMessage,\n },\n mutationError\n );\n throw mutationError;\n }\n },\n data,\n loading,\n error,\n };\n}\n\n/**\n * Hook to delete an organization\n */\nexport function useDeleteOrganization() {\n const { emit } = useOrganizationEventEmitter();\n const [deleteOrganization, { data, loading, error }] = useDeleteOrganizationMutation();\n\n return {\n deleteOrganization: async (id: string) => {\n logger.info('mutation.start', {\n name: 'deleteOrganization',\n organizationId: redactId(id),\n });\n try {\n const result = await deleteOrganization({ variables: { id } });\n emit('organization.deleted', { organizationId: id, source: 'microfe-organization' });\n logger.info('mutation.success', {\n name: 'deleteOrganization',\n organizationId: redactId(id),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('organization.delete_failed', {\n organizationId: id,\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n {\n name: 'deleteOrganization',\n organizationId: redactId(id),\n errorCode,\n errorMessage,\n },\n mutationError\n );\n throw mutationError;\n }\n },\n data,\n loading,\n error,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Organization Create Page
3
+ * Form to create a new organization
4
+ */
5
+ export declare function OrganizationCreatePage(): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=OrganizationCreatePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationCreatePage.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/organizations/pages/OrganizationCreatePage.tsx"],"names":[],"mappings":"AAaA;;;GAGG;AACH,wBAAgB,sBAAsB,4CAyGrC"}
@@ -0,0 +1,76 @@
1
+ import { useOrgConsole as e } from "../../../providers/OrgConsoleProvider.js";
2
+ import { toast as t } from "../../../../node_modules/sonner/dist/index.js";
3
+ import { useCreateOrganization as n } from "../hooks/useOrganizations.js";
4
+ import { useTr as r } from "../../../shared/hooks/useTr.js";
5
+ import { LoadingState as i } from "../../../shared/components/feedback/LoadingState.js";
6
+ import { PERMISSIONS as a } from "../../../constants/permissions.js";
7
+ import { useOrganizationPageView as o } from "../../../hooks/useOrganizationPageView.js";
8
+ import { useTenants as s } from "../../workspaces/hooks/useWorkspaces.js";
9
+ import { OrganizationForm as c } from "../components/OrganizationForm.js";
10
+ import { ArrowLeft as l } from "lucide-react";
11
+ import { usePermissions as u } from "@burdenoff/fe-libs/shared/providers/shell";
12
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
13
+ //#region src/organization-management/modules/organizations/pages/OrganizationCreatePage.tsx
14
+ function p() {
15
+ o("organizations.create");
16
+ let p = r(), { navigate: m, basePath: h = "/organizations", tenantId: g } = e(), { hasPermission: _, isLoading: v } = u(), { createOrganization: y, loading: b } = n(), { tenants: x } = s(100, 0, !0), S = g ? x.find((e) => e.id === g) : x.length === 1 ? x[0] : void 0, C = async (e) => {
17
+ try {
18
+ let n = await y(e);
19
+ if (n.errors?.length) throw Error(n.errors[0]?.message ?? p("organizations.create.failed", "Failed to create organization"));
20
+ n.data?.createOrganization && (t.success(p("organizations.create.success", "Organization created successfully")), m(`${h}/${n.data.createOrganization.id}`));
21
+ } catch (e) {
22
+ t.error(e instanceof Error ? e.message : p("organizations.create.failed", "Failed to create organization"));
23
+ }
24
+ }, w = () => {
25
+ m(h);
26
+ };
27
+ return v ? /* @__PURE__ */ d("div", {
28
+ className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
29
+ children: /* @__PURE__ */ d(i, { message: p("common.loadingPermissions", "Loading permissions...") })
30
+ }) : _(a.ORG_CREATE) ? /* @__PURE__ */ f("div", {
31
+ className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300",
32
+ children: [/* @__PURE__ */ f("div", {
33
+ className: "mb-6",
34
+ children: [
35
+ /* @__PURE__ */ f("button", {
36
+ onClick: w,
37
+ className: "\n inline-flex items-center gap-2 mb-4\n text-[var(--color-text-secondary)]\n hover:text-[var(--color-text-primary)]\n active:scale-[0.98]\n transition-all duration-200\n ",
38
+ children: [/* @__PURE__ */ d(l, { size: 20 }), /* @__PURE__ */ d("span", {
39
+ className: "text-sm font-medium",
40
+ children: p("organizations.create.back", "Back to Organizations")
41
+ })]
42
+ }),
43
+ /* @__PURE__ */ d("h1", {
44
+ className: "text-3xl font-bold text-[var(--color-text-primary)] mb-2",
45
+ children: p("organizations.create.title", "Create Organization")
46
+ }),
47
+ /* @__PURE__ */ d("p", {
48
+ className: "text-[var(--color-text-secondary)]",
49
+ children: p("organizations.create.subtitle", "Add a new organization to a tenant")
50
+ })
51
+ ]
52
+ }), /* @__PURE__ */ d("div", {
53
+ className: "max-w-2xl",
54
+ children: /* @__PURE__ */ d("div", {
55
+ className: "bg-[var(--color-bg-surface)] border border-[var(--color-border-default)] rounded-lg p-6 shadow-[var(--shadow-elevation-1)]",
56
+ children: /* @__PURE__ */ d(c, {
57
+ tenantId: g || S?.id,
58
+ tenantName: S?.name,
59
+ onSubmit: C,
60
+ onCancel: w,
61
+ loading: b
62
+ })
63
+ })
64
+ })]
65
+ }) : /* @__PURE__ */ d("div", {
66
+ className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
67
+ children: /* @__PURE__ */ d("div", {
68
+ className: "p-8 text-center text-[var(--color-text-secondary)]",
69
+ children: p("organizations.create.noPermission", "You don't have permission to create organizations.")
70
+ })
71
+ });
72
+ }
73
+ //#endregion
74
+ export { p as OrganizationCreatePage };
75
+
76
+ //# sourceMappingURL=OrganizationCreatePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationCreatePage.js","names":[],"sources":["../../../../../src/organization-management/modules/organizations/pages/OrganizationCreatePage.tsx"],"sourcesContent":["import { ArrowLeft } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useOrgConsole } from '../../../providers/OrgConsoleProvider';\nimport { useCreateOrganization } from '../hooks/useOrganizations';\nimport { useTenants } from '../../workspaces/hooks/useWorkspaces';\nimport { OrganizationForm } from '../components/OrganizationForm';\nimport { LoadingState } from '../../../shared/components/feedback/LoadingState';\nimport { PERMISSIONS } from '../../../constants/permissions';\nimport { useTr } from '../../../shared/hooks/useTr';\nimport { useOrganizationPageView } from '../../../hooks/useOrganizationPageView';\nimport type { CreateOrganizationInput, UpdateOrganizationInput } from '../types';\n\n/**\n * Organization Create Page\n * Form to create a new organization\n */\nexport function OrganizationCreatePage() {\n useOrganizationPageView('organizations.create');\n const tr = useTr();\n const { navigate, basePath = '/organizations', tenantId } = useOrgConsole();\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const { createOrganization, loading } = useCreateOrganization();\n const { tenants } = useTenants(100, 0, true);\n\n const selectedTenant = tenantId\n ? tenants.find((tenant) => tenant.id === tenantId)\n : tenants.length === 1\n ? tenants[0]\n : undefined;\n\n const handleSubmit = async (data: CreateOrganizationInput | UpdateOrganizationInput) => {\n try {\n const createData = data as CreateOrganizationInput;\n const result = await createOrganization(createData);\n if (result.errors?.length) {\n throw new Error(\n result.errors[0]?.message ??\n tr('organizations.create.failed', 'Failed to create organization')\n );\n }\n\n if (result.data?.createOrganization) {\n toast.success(tr('organizations.create.success', 'Organization created successfully'));\n navigate(`${basePath}/${result.data.createOrganization.id}`);\n }\n } catch (error) {\n toast.error(\n error instanceof Error\n ? error.message\n : tr('organizations.create.failed', 'Failed to create organization')\n );\n }\n };\n\n const handleCancel = () => {\n navigate(basePath);\n };\n\n if (permissionsLoading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <LoadingState message={tr('common.loadingPermissions', 'Loading permissions...')} />\n </div>\n );\n }\n\n if (!hasPermission(PERMISSIONS.ORG_CREATE)) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <div className=\"p-8 text-center text-[var(--color-text-secondary)]\">\n {tr(\n 'organizations.create.noPermission',\n \"You don't have permission to create organizations.\"\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300\">\n {/* Page Header */}\n <div className=\"mb-6\">\n <button\n onClick={handleCancel}\n className=\"\n inline-flex items-center gap-2 mb-4\n text-[var(--color-text-secondary)]\n hover:text-[var(--color-text-primary)]\n active:scale-[0.98]\n transition-all duration-200\n \"\n >\n <ArrowLeft size={20} />\n <span className=\"text-sm font-medium\">\n {tr('organizations.create.back', 'Back to Organizations')}\n </span>\n </button>\n\n <h1 className=\"text-3xl font-bold text-[var(--color-text-primary)] mb-2\">\n {tr('organizations.create.title', 'Create Organization')}\n </h1>\n <p className=\"text-[var(--color-text-secondary)]\">\n {tr('organizations.create.subtitle', 'Add a new organization to a tenant')}\n </p>\n </div>\n\n {/* Form Card */}\n <div className=\"max-w-2xl\">\n <div className=\"bg-[var(--color-bg-surface)] border border-[var(--color-border-default)] rounded-lg p-6 shadow-[var(--shadow-elevation-1)]\">\n <OrganizationForm\n tenantId={tenantId || selectedTenant?.id}\n tenantName={selectedTenant?.name}\n onSubmit={handleSubmit}\n onCancel={handleCancel}\n loading={loading}\n />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,SAAgB,IAAyB;AACvC,GAAwB,uBAAuB;CAC/C,IAAM,IAAK,GAAO,EACZ,EAAE,aAAU,cAAW,kBAAkB,gBAAa,GAAe,EACrE,EAAE,kBAAe,WAAW,MAAuB,GAAgB,EACnE,EAAE,uBAAoB,eAAY,GAAuB,EACzD,EAAE,eAAY,EAAW,KAAK,GAAG,GAAK,EAEtC,IAAiB,IACnB,EAAQ,MAAM,MAAW,EAAO,OAAO,EAAS,GAChD,EAAQ,WAAW,IACjB,EAAQ,KACR,KAAA,GAEA,IAAe,OAAO,MAA4D;AACtF,MAAI;GAEF,IAAM,IAAS,MAAM,EADF,EACgC;AACnD,OAAI,EAAO,QAAQ,OACjB,OAAU,MACR,EAAO,OAAO,IAAI,WAChB,EAAG,+BAA+B,gCAAgC,CACrE;AAGH,GAAI,EAAO,MAAM,uBACf,EAAM,QAAQ,EAAG,gCAAgC,oCAAoC,CAAC,EACtF,EAAS,GAAG,EAAS,GAAG,EAAO,KAAK,mBAAmB,KAAK;WAEvD,GAAO;AACd,KAAM,MACJ,aAAiB,QACb,EAAM,UACN,EAAG,+BAA+B,gCAAgC,CACvE;;IAIC,UAAqB;AACzB,IAAS,EAAS;;AAwBpB,QArBI,IAEA,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAc,SAAS,EAAG,6BAA6B,yBAAyB,EAAI,CAAA;EAChF,CAAA,GAIL,EAAc,EAAY,WAAW,GAcxC,kBAAC,OAAD;EAAK,WAAU;YAAf,CAEE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,UAAD;KACE,SAAS;KACT,WAAU;eAFZ,CAUE,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA,EACvB,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAG,6BAA6B,wBAAwB;MACpD,CAAA,CACA;;IAET,kBAAC,MAAD;KAAI,WAAU;eACX,EAAG,8BAA8B,sBAAsB;KACrD,CAAA;IACL,kBAAC,KAAD;KAAG,WAAU;eACV,EAAG,iCAAiC,qCAAqC;KACxE,CAAA;IACA;MAGN,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KACE,UAAU,KAAY,GAAgB;KACtC,YAAY,GAAgB;KAC5B,UAAU;KACV,UAAU;KACD;KACT,CAAA;IACE,CAAA;GACF,CAAA,CACF;MAnDJ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aACZ,EACC,qCACA,qDACD;GACG,CAAA;EACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function OrganizationDetailPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=OrganizationDetailPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationDetailPage.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/organizations/pages/OrganizationDetailPage.tsx"],"names":[],"mappings":"AA4BA,wBAAgB,sBAAsB,4CAiVrC"}