@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.
- package/README.md +64 -0
- package/dist/generated/global-operations.d.ts +1647 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-operations.js +724 -0
- package/dist/generated/global-operations.js.map +1 -0
- package/dist/generated/global-types.d.ts +20716 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/global-types.js +8 -0
- package/dist/generated/global-types.js.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +53363 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/node_modules/sonner/dist/index.js +163 -0
- package/dist/node_modules/sonner/dist/index.js.map +1 -0
- package/dist/node_modules/zod/v3/ZodError.js +82 -0
- package/dist/node_modules/zod/v3/ZodError.js.map +1 -0
- package/dist/node_modules/zod/v3/errors.js +10 -0
- package/dist/node_modules/zod/v3/errors.js.map +1 -0
- package/dist/node_modules/zod/v3/helpers/errorUtil.js +9 -0
- package/dist/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
- package/dist/node_modules/zod/v3/helpers/parseUtil.js +93 -0
- package/dist/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
- package/dist/node_modules/zod/v3/helpers/util.js +76 -0
- package/dist/node_modules/zod/v3/helpers/util.js.map +1 -0
- package/dist/node_modules/zod/v3/locales/en.js +62 -0
- package/dist/node_modules/zod/v3/locales/en.js.map +1 -0
- package/dist/node_modules/zod/v3/types.js +2441 -0
- package/dist/node_modules/zod/v3/types.js.map +1 -0
- package/dist/organization-management/AdminOrganizationRoot.d.ts +16 -0
- package/dist/organization-management/AdminOrganizationRoot.d.ts.map +1 -0
- package/dist/organization-management/AdminOrganizationRoot.js +76 -0
- package/dist/organization-management/AdminOrganizationRoot.js.map +1 -0
- package/dist/organization-management/AdminOrganizationRoutes.d.ts +16 -0
- package/dist/organization-management/AdminOrganizationRoutes.d.ts.map +1 -0
- package/dist/organization-management/AdminOrganizationRoutes.js +73 -0
- package/dist/organization-management/AdminOrganizationRoutes.js.map +1 -0
- package/dist/organization-management/UserOrganizationRoot.d.ts +17 -0
- package/dist/organization-management/UserOrganizationRoot.d.ts.map +1 -0
- package/dist/organization-management/UserOrganizationRoot.js +45 -0
- package/dist/organization-management/UserOrganizationRoot.js.map +1 -0
- package/dist/organization-management/UserOrganizationRoutes.d.ts +12 -0
- package/dist/organization-management/UserOrganizationRoutes.d.ts.map +1 -0
- package/dist/organization-management/UserOrganizationRoutes.js +30 -0
- package/dist/organization-management/UserOrganizationRoutes.js.map +1 -0
- package/dist/organization-management/constants/permissions.d.ts +30 -0
- package/dist/organization-management/constants/permissions.d.ts.map +1 -0
- package/dist/organization-management/constants/permissions.js +22 -0
- package/dist/organization-management/constants/permissions.js.map +1 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.d.ts +19 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.d.ts.map +1 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.js +15 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.js.map +1 -0
- package/dist/organization-management/hooks/useOrganizationPageView.d.ts +11 -0
- package/dist/organization-management/hooks/useOrganizationPageView.d.ts.map +1 -0
- package/dist/organization-management/hooks/useOrganizationPageView.js +24 -0
- package/dist/organization-management/hooks/useOrganizationPageView.js.map +1 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.d.ts +18 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.js +119 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.js.map +1 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.d.ts +6 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.js +51 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.js.map +1 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.d.ts +11 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.js +56 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.js.map +1 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.d.ts +22 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.js +70 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.js.map +1 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.d.ts +6 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.js +141 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.js.map +1 -0
- package/dist/organization-management/modules/members/hooks/useInvites.d.ts +75 -0
- package/dist/organization-management/modules/members/hooks/useInvites.d.ts.map +1 -0
- package/dist/organization-management/modules/members/hooks/useInvites.js +253 -0
- package/dist/organization-management/modules/members/hooks/useInvites.js.map +1 -0
- package/dist/organization-management/modules/members/hooks/useMembers.d.ts +84 -0
- package/dist/organization-management/modules/members/hooks/useMembers.d.ts.map +1 -0
- package/dist/organization-management/modules/members/hooks/useMembers.js +95 -0
- package/dist/organization-management/modules/members/hooks/useMembers.js.map +1 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.d.ts +6 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js +91 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js.map +1 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.d.ts +6 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js +115 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.d.ts +2 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.js +424 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.d.ts +6 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js +114 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -0
- package/dist/organization-management/modules/members/types/index.d.ts +35 -0
- package/dist/organization-management/modules/members/types/index.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.d.ts +13 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.js +325 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.js.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.d.ts +13 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js +49 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js.map +1 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.d.ts +86 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.js +164 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.d.ts +6 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js +76 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.d.ts +2 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +306 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.d.ts +6 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +93 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.d.ts +2 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +448 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -0
- package/dist/organization-management/modules/organizations/schemas/index.d.ts +53 -0
- package/dist/organization-management/modules/organizations/schemas/index.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/schemas/index.js +25 -0
- package/dist/organization-management/modules/organizations/schemas/index.js.map +1 -0
- package/dist/organization-management/modules/organizations/types/index.d.ts +34 -0
- package/dist/organization-management/modules/organizations/types/index.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.d.ts +13 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js +147 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.d.ts +16 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js +107 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.d.ts +16 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js +386 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.d.ts +13 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js +49 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.d.ts +47 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js +46 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.d.ts +133 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js +111 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js +82 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +438 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +90 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +465 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/schemas/index.d.ts +44 -0
- package/dist/organization-management/modules/workspaces/schemas/index.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/schemas/index.js +22 -0
- package/dist/organization-management/modules/workspaces/schemas/index.js.map +1 -0
- package/dist/organization-management/modules/workspaces/types/index.d.ts +39 -0
- package/dist/organization-management/modules/workspaces/types/index.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/types/workspace-member.d.ts +48 -0
- package/dist/organization-management/modules/workspaces/types/workspace-member.d.ts.map +1 -0
- package/dist/organization-management/providers/OrgConsoleProvider.d.ts +19 -0
- package/dist/organization-management/providers/OrgConsoleProvider.d.ts.map +1 -0
- package/dist/organization-management/providers/OrgConsoleProvider.js +24 -0
- package/dist/organization-management/providers/OrgConsoleProvider.js.map +1 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.d.ts +28 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.d.ts.map +1 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.js +105 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.js.map +1 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.d.ts +14 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.d.ts.map +1 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.js +30 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.js.map +1 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.d.ts +11 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.d.ts.map +1 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.js +37 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.js.map +1 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.d.ts +6 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.d.ts.map +1 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.js +24 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.js.map +1 -0
- package/dist/organization-management/shared/components/input/SearchInput.d.ts +15 -0
- package/dist/organization-management/shared/components/input/SearchInput.d.ts.map +1 -0
- package/dist/organization-management/shared/components/input/SearchInput.js +40 -0
- package/dist/organization-management/shared/components/input/SearchInput.js.map +1 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.d.ts +10 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.d.ts.map +1 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.js +21 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.js.map +1 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.d.ts +2 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.d.ts.map +1 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.js +17 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.js.map +1 -0
- package/dist/organization-management/shared/hooks/useTr.d.ts +14 -0
- package/dist/organization-management/shared/hooks/useTr.d.ts.map +1 -0
- package/dist/organization-management/shared/hooks/useTr.js +14 -0
- package/dist/organization-management/shared/hooks/useTr.js.map +1 -0
- package/dist/organization-management/shared/logger.d.ts +11 -0
- package/dist/organization-management/shared/logger.d.ts.map +1 -0
- package/dist/organization-management/shared/logger.js +46 -0
- package/dist/organization-management/shared/logger.js.map +1 -0
- package/dist/organization-management/shared/recaptcha.d.ts +2 -0
- package/dist/organization-management/shared/recaptcha.d.ts.map +1 -0
- package/dist/organization-management/shared/recaptcha.js +6 -0
- package/dist/organization-management/shared/recaptcha.js.map +1 -0
- package/dist/organization-management/shared/types/graphql.d.ts +131 -0
- package/dist/organization-management/shared/types/graphql.d.ts.map +1 -0
- package/dist/organization-management/shared/types/graphql.js +10 -0
- package/dist/organization-management/shared/types/graphql.js.map +1 -0
- package/dist/organization-management/shared/utils/cn.d.ts +8 -0
- package/dist/organization-management/shared/utils/cn.d.ts.map +1 -0
- package/dist/organization-management/types/index.d.ts +46 -0
- package/dist/organization-management/types/index.d.ts.map +1 -0
- package/dist/utils/nativeBridge.d.ts +3 -0
- package/dist/utils/nativeBridge.d.ts.map +1 -0
- package/dist/utils/nativeBridge.js +2 -0
- package/package.json +116 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { GetMembersDocument as e, GetMyOrganizationInvitesDocument as t, GetOrganizationInvitesDocument as n, useCancelOrganizationInviteMutation as r, useGetMyOrganizationInvitesQuery as i, useGetOrganizationInvitesQuery as a, useInviteOrganizationMemberMutation as o, useRejectOrganizationInviteMutation as s, useResendOrganizationInviteMutation as c } from "../../../../generated/global-operations.js";
|
|
2
|
+
import { useOrganizationEventEmitter as l } from "../../../hooks/useOrganizationEventEmitter.js";
|
|
3
|
+
import { logger as u, redactId as d } from "../../../shared/logger.js";
|
|
4
|
+
import { executeRecaptcha as f } from "../../../shared/recaptcha.js";
|
|
5
|
+
import { gql as p } from "@apollo/client";
|
|
6
|
+
import { useMutation as m } from "@apollo/client/react";
|
|
7
|
+
//#region src/organization-management/modules/members/hooks/useInvites.ts
|
|
8
|
+
var h = p`
|
|
9
|
+
mutation AcceptOrganizationInviteWithCaptcha($inviteId: ID!, $recaptchaToken: String) {
|
|
10
|
+
acceptOrganizationInvite(inviteId: $inviteId, recaptchaToken: $recaptchaToken) {
|
|
11
|
+
id
|
|
12
|
+
userId
|
|
13
|
+
organizationId
|
|
14
|
+
role
|
|
15
|
+
joinedAt
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
`;
|
|
19
|
+
function g(e) {
|
|
20
|
+
return e?.graphQLErrors?.[0]?.extensions?.code;
|
|
21
|
+
}
|
|
22
|
+
function _(e) {
|
|
23
|
+
return e instanceof Error ? e.message : e?.message ?? "Unknown error";
|
|
24
|
+
}
|
|
25
|
+
function v(e, t, n = 20, r = 0) {
|
|
26
|
+
let { data: i, loading: o, error: s, refetch: c } = a({
|
|
27
|
+
variables: {
|
|
28
|
+
organizationId: e,
|
|
29
|
+
filter: t,
|
|
30
|
+
limit: n,
|
|
31
|
+
offset: r
|
|
32
|
+
},
|
|
33
|
+
skip: !e,
|
|
34
|
+
fetchPolicy: "cache-first",
|
|
35
|
+
nextFetchPolicy: "cache-first"
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
invites: i?.organizationInvites?.items ?? [],
|
|
39
|
+
total: i?.organizationInvites?.total ?? 0,
|
|
40
|
+
hasMore: i?.organizationInvites?.hasMore ?? !1,
|
|
41
|
+
loading: o,
|
|
42
|
+
error: s,
|
|
43
|
+
refetch: c
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function y(e, t = 20, n = 0) {
|
|
47
|
+
let { data: r, loading: a, error: o, refetch: s } = i({
|
|
48
|
+
variables: {
|
|
49
|
+
status: e,
|
|
50
|
+
limit: t,
|
|
51
|
+
offset: n
|
|
52
|
+
},
|
|
53
|
+
fetchPolicy: "cache-first",
|
|
54
|
+
nextFetchPolicy: "cache-first"
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
invites: r?.myOrganizationInvites?.items ?? [],
|
|
58
|
+
total: r?.myOrganizationInvites?.total ?? 0,
|
|
59
|
+
hasMore: r?.myOrganizationInvites?.hasMore ?? !1,
|
|
60
|
+
loading: a,
|
|
61
|
+
error: o,
|
|
62
|
+
refetch: s
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function b() {
|
|
66
|
+
let { emit: e } = l(), [t, { loading: r, error: i }] = o({ refetchQueries: [n] });
|
|
67
|
+
return {
|
|
68
|
+
inviteMember: async (n) => {
|
|
69
|
+
u.info("mutation.start", {
|
|
70
|
+
name: "inviteMember",
|
|
71
|
+
organizationId: d(n.organizationId)
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
let r = await t({ variables: { input: n } }), i = r.data?.inviteOrganizationMember?.id;
|
|
75
|
+
return e("organization.invite.created", {
|
|
76
|
+
organizationId: n.organizationId,
|
|
77
|
+
inviteId: i,
|
|
78
|
+
source: "microfe-organization"
|
|
79
|
+
}), u.info("mutation.success", {
|
|
80
|
+
name: "inviteMember",
|
|
81
|
+
organizationId: d(n.organizationId),
|
|
82
|
+
inviteId: d(i)
|
|
83
|
+
}), r;
|
|
84
|
+
} catch (t) {
|
|
85
|
+
let r = g(t), i = _(t);
|
|
86
|
+
throw e("organization.invite.create_failed", {
|
|
87
|
+
organizationId: n.organizationId,
|
|
88
|
+
source: "microfe-organization",
|
|
89
|
+
errorCode: r,
|
|
90
|
+
errorMessage: i
|
|
91
|
+
}), u.error("mutation.failed", {
|
|
92
|
+
name: "inviteMember",
|
|
93
|
+
organizationId: d(n.organizationId),
|
|
94
|
+
errorCode: r,
|
|
95
|
+
errorMessage: i
|
|
96
|
+
}, t), t;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
loading: r,
|
|
100
|
+
error: i
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function x() {
|
|
104
|
+
let { emit: n } = l(), [r, { loading: i, error: a }] = m(h, { refetchQueries: [t, e] });
|
|
105
|
+
return {
|
|
106
|
+
acceptInvite: async (e) => {
|
|
107
|
+
u.info("mutation.start", {
|
|
108
|
+
name: "acceptInvite",
|
|
109
|
+
inviteId: d(e)
|
|
110
|
+
});
|
|
111
|
+
try {
|
|
112
|
+
let t = await f("invite_accept"), i = await r({ variables: {
|
|
113
|
+
inviteId: e,
|
|
114
|
+
...t ? { recaptchaToken: t } : {}
|
|
115
|
+
} });
|
|
116
|
+
return n("organization.invite.accepted", {
|
|
117
|
+
inviteId: e,
|
|
118
|
+
source: "microfe-organization"
|
|
119
|
+
}), u.info("mutation.success", {
|
|
120
|
+
name: "acceptInvite",
|
|
121
|
+
inviteId: d(e)
|
|
122
|
+
}), i;
|
|
123
|
+
} catch (t) {
|
|
124
|
+
let r = g(t), i = _(t);
|
|
125
|
+
throw n("organization.invite.accept_failed", {
|
|
126
|
+
inviteId: e,
|
|
127
|
+
source: "microfe-organization",
|
|
128
|
+
errorCode: r,
|
|
129
|
+
errorMessage: i
|
|
130
|
+
}), u.error("mutation.failed", {
|
|
131
|
+
name: "acceptInvite",
|
|
132
|
+
inviteId: d(e),
|
|
133
|
+
errorCode: r,
|
|
134
|
+
errorMessage: i
|
|
135
|
+
}, t), t;
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
loading: i,
|
|
139
|
+
error: a
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function S() {
|
|
143
|
+
let { emit: e } = l(), [n, { loading: r, error: i }] = s({ refetchQueries: [t] });
|
|
144
|
+
return {
|
|
145
|
+
rejectInvite: async (t) => {
|
|
146
|
+
u.info("mutation.start", {
|
|
147
|
+
name: "rejectInvite",
|
|
148
|
+
inviteId: d(t)
|
|
149
|
+
});
|
|
150
|
+
try {
|
|
151
|
+
let r = await n({ variables: { inviteId: t } });
|
|
152
|
+
return e("organization.invite.rejected", {
|
|
153
|
+
inviteId: t,
|
|
154
|
+
source: "microfe-organization"
|
|
155
|
+
}), u.info("mutation.success", {
|
|
156
|
+
name: "rejectInvite",
|
|
157
|
+
inviteId: d(t)
|
|
158
|
+
}), r;
|
|
159
|
+
} catch (n) {
|
|
160
|
+
let r = g(n), i = _(n);
|
|
161
|
+
throw e("organization.invite.reject_failed", {
|
|
162
|
+
inviteId: t,
|
|
163
|
+
source: "microfe-organization",
|
|
164
|
+
errorCode: r,
|
|
165
|
+
errorMessage: i
|
|
166
|
+
}), u.error("mutation.failed", {
|
|
167
|
+
name: "rejectInvite",
|
|
168
|
+
inviteId: d(t),
|
|
169
|
+
errorCode: r,
|
|
170
|
+
errorMessage: i
|
|
171
|
+
}, n), n;
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
loading: r,
|
|
175
|
+
error: i
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function C() {
|
|
179
|
+
let { emit: e } = l(), [t, { loading: i, error: a }] = r({ refetchQueries: [n] });
|
|
180
|
+
return {
|
|
181
|
+
cancelInvite: async (n) => {
|
|
182
|
+
u.info("mutation.start", {
|
|
183
|
+
name: "cancelInvite",
|
|
184
|
+
inviteId: d(n)
|
|
185
|
+
});
|
|
186
|
+
try {
|
|
187
|
+
let r = await t({ variables: { inviteId: n } });
|
|
188
|
+
return e("organization.invite.cancelled", {
|
|
189
|
+
inviteId: n,
|
|
190
|
+
source: "microfe-organization"
|
|
191
|
+
}), u.info("mutation.success", {
|
|
192
|
+
name: "cancelInvite",
|
|
193
|
+
inviteId: d(n)
|
|
194
|
+
}), r;
|
|
195
|
+
} catch (t) {
|
|
196
|
+
let r = g(t), i = _(t);
|
|
197
|
+
throw e("organization.invite.cancel_failed", {
|
|
198
|
+
inviteId: n,
|
|
199
|
+
source: "microfe-organization",
|
|
200
|
+
errorCode: r,
|
|
201
|
+
errorMessage: i
|
|
202
|
+
}), u.error("mutation.failed", {
|
|
203
|
+
name: "cancelInvite",
|
|
204
|
+
inviteId: d(n),
|
|
205
|
+
errorCode: r,
|
|
206
|
+
errorMessage: i
|
|
207
|
+
}, t), t;
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
loading: i,
|
|
211
|
+
error: a
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function w() {
|
|
215
|
+
let { emit: e } = l(), [t, { loading: r, error: i }] = c({ refetchQueries: [n] });
|
|
216
|
+
return {
|
|
217
|
+
resendInvite: async (n) => {
|
|
218
|
+
u.info("mutation.start", {
|
|
219
|
+
name: "resendInvite",
|
|
220
|
+
inviteId: d(n)
|
|
221
|
+
});
|
|
222
|
+
try {
|
|
223
|
+
let r = await t({ variables: { inviteId: n } });
|
|
224
|
+
return e("organization.invite.resent", {
|
|
225
|
+
inviteId: n,
|
|
226
|
+
source: "microfe-organization"
|
|
227
|
+
}), u.info("mutation.success", {
|
|
228
|
+
name: "resendInvite",
|
|
229
|
+
inviteId: d(n)
|
|
230
|
+
}), r;
|
|
231
|
+
} catch (t) {
|
|
232
|
+
let r = g(t), i = _(t);
|
|
233
|
+
throw e("organization.invite.resend_failed", {
|
|
234
|
+
inviteId: n,
|
|
235
|
+
source: "microfe-organization",
|
|
236
|
+
errorCode: r,
|
|
237
|
+
errorMessage: i
|
|
238
|
+
}), u.error("mutation.failed", {
|
|
239
|
+
name: "resendInvite",
|
|
240
|
+
inviteId: d(n),
|
|
241
|
+
errorCode: r,
|
|
242
|
+
errorMessage: i
|
|
243
|
+
}, t), t;
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
loading: r,
|
|
247
|
+
error: i
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
//#endregion
|
|
251
|
+
export { x as useAcceptInvite, C as useCancelInvite, b as useInviteMember, y as useMyInvites, v as useOrganizationInvites, S as useRejectInvite, w as useResendInvite };
|
|
252
|
+
|
|
253
|
+
//# sourceMappingURL=useInvites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInvites.js","names":[],"sources":["../../../../../src/organization-management/modules/members/hooks/useInvites.ts"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useMutation } from '@apollo/client/react';\nimport {\n useInviteOrganizationMemberMutation,\n useRejectOrganizationInviteMutation,\n useCancelOrganizationInviteMutation,\n useResendOrganizationInviteMutation,\n useGetOrganizationInvitesQuery,\n useGetMyOrganizationInvitesQuery,\n GetOrganizationInvitesDocument,\n GetMyOrganizationInvitesDocument,\n GetMembersDocument,\n} from '../../../../generated/global-operations';\nimport type {\n InviteStatus,\n OrganizationInvite,\n OrganizationMember,\n} from '../../../../generated/global-types';\nimport { useOrganizationEventEmitter } from '../../../hooks/useOrganizationEventEmitter';\nimport { logger, redactId } from '../../../shared/logger';\nimport { executeRecaptcha } from '../../../shared/recaptcha';\n\nconst ACCEPT_ORGANIZATION_INVITE_WITH_CAPTCHA = gql`\n mutation AcceptOrganizationInviteWithCaptcha($inviteId: ID!, $recaptchaToken: String) {\n acceptOrganizationInvite(inviteId: $inviteId, recaptchaToken: $recaptchaToken) {\n id\n userId\n organizationId\n role\n joinedAt\n }\n }\n`;\n\ninterface AcceptOrganizationInviteData {\n acceptOrganizationInvite: OrganizationMember;\n}\n\ninterface AcceptOrganizationInviteVariables {\n inviteId: string;\n recaptchaToken?: string;\n}\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 organization invites (admin view)\n */\nexport function useOrganizationInvites(\n organizationId: string,\n filter?: { status?: InviteStatus },\n limit: number = 20,\n offset: number = 0\n) {\n const { data, loading, error, refetch } = useGetOrganizationInvitesQuery({\n variables: { organizationId, filter, limit, offset },\n skip: !organizationId,\n fetchPolicy: 'cache-first',\n nextFetchPolicy: 'cache-first',\n });\n\n return {\n invites: (data?.organizationInvites?.items ?? []) as OrganizationInvite[],\n total: data?.organizationInvites?.total ?? 0,\n hasMore: data?.organizationInvites?.hasMore ?? false,\n loading,\n error,\n refetch,\n };\n}\n\n/**\n * Hook to fetch invites for the current user (invitee view)\n */\nexport function useMyInvites(status?: InviteStatus, limit: number = 20, offset: number = 0) {\n const { data, loading, error, refetch } = useGetMyOrganizationInvitesQuery({\n variables: { status, limit, offset },\n fetchPolicy: 'cache-first',\n nextFetchPolicy: 'cache-first',\n });\n\n return {\n invites: (data?.myOrganizationInvites?.items ?? []) as OrganizationInvite[],\n total: data?.myOrganizationInvites?.total ?? 0,\n hasMore: data?.myOrganizationInvites?.hasMore ?? false,\n loading,\n error,\n refetch,\n };\n}\n\n/**\n * Hook to invite a member by email\n */\nexport function useInviteMember() {\n const { emit } = useOrganizationEventEmitter();\n const [inviteMember, { loading, error }] = useInviteOrganizationMemberMutation({\n refetchQueries: [GetOrganizationInvitesDocument],\n });\n\n return {\n inviteMember: async (input: { organizationId: string; email: string; message?: string }) => {\n logger.info('mutation.start', {\n name: 'inviteMember',\n organizationId: redactId(input.organizationId),\n });\n try {\n const result = await inviteMember({ variables: { input } });\n const inviteId = result.data?.inviteOrganizationMember?.id;\n emit('organization.invite.created', {\n organizationId: input.organizationId,\n inviteId,\n source: 'microfe-organization',\n });\n logger.info('mutation.success', {\n name: 'inviteMember',\n organizationId: redactId(input.organizationId),\n inviteId: redactId(inviteId),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('organization.invite.create_failed', {\n organizationId: input.organizationId,\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n {\n name: 'inviteMember',\n organizationId: redactId(input.organizationId),\n errorCode,\n errorMessage,\n },\n mutationError\n );\n throw mutationError;\n }\n },\n loading,\n error,\n };\n}\n\n/**\n * Hook to accept an organization invite\n */\nexport function useAcceptInvite() {\n const { emit } = useOrganizationEventEmitter();\n const [acceptInvite, { loading, error }] = useMutation<\n AcceptOrganizationInviteData,\n AcceptOrganizationInviteVariables\n >(ACCEPT_ORGANIZATION_INVITE_WITH_CAPTCHA, {\n refetchQueries: [GetMyOrganizationInvitesDocument, GetMembersDocument],\n });\n\n return {\n acceptInvite: async (inviteId: string) => {\n logger.info('mutation.start', {\n name: 'acceptInvite',\n inviteId: redactId(inviteId),\n });\n try {\n const recaptchaToken = await executeRecaptcha('invite_accept');\n const result = await acceptInvite({\n variables: { inviteId, ...(recaptchaToken ? { recaptchaToken } : {}) },\n });\n emit('organization.invite.accepted', { inviteId, source: 'microfe-organization' });\n logger.info('mutation.success', {\n name: 'acceptInvite',\n inviteId: redactId(inviteId),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('organization.invite.accept_failed', {\n inviteId,\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n {\n name: 'acceptInvite',\n inviteId: redactId(inviteId),\n errorCode,\n errorMessage,\n },\n mutationError\n );\n throw mutationError;\n }\n },\n loading,\n error,\n };\n}\n\n/**\n * Hook to reject an organization invite\n */\nexport function useRejectInvite() {\n const { emit } = useOrganizationEventEmitter();\n const [rejectInvite, { loading, error }] = useRejectOrganizationInviteMutation({\n refetchQueries: [GetMyOrganizationInvitesDocument],\n });\n\n return {\n rejectInvite: async (inviteId: string) => {\n logger.info('mutation.start', {\n name: 'rejectInvite',\n inviteId: redactId(inviteId),\n });\n try {\n const result = await rejectInvite({ variables: { inviteId } });\n emit('organization.invite.rejected', { inviteId, source: 'microfe-organization' });\n logger.info('mutation.success', {\n name: 'rejectInvite',\n inviteId: redactId(inviteId),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('organization.invite.reject_failed', {\n inviteId,\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n {\n name: 'rejectInvite',\n inviteId: redactId(inviteId),\n errorCode,\n errorMessage,\n },\n mutationError\n );\n throw mutationError;\n }\n },\n loading,\n error,\n };\n}\n\n/**\n * Hook to cancel an organization invite\n */\nexport function useCancelInvite() {\n const { emit } = useOrganizationEventEmitter();\n const [cancelInvite, { loading, error }] = useCancelOrganizationInviteMutation({\n refetchQueries: [GetOrganizationInvitesDocument],\n });\n\n return {\n cancelInvite: async (inviteId: string) => {\n logger.info('mutation.start', {\n name: 'cancelInvite',\n inviteId: redactId(inviteId),\n });\n try {\n const result = await cancelInvite({ variables: { inviteId } });\n emit('organization.invite.cancelled', { inviteId, source: 'microfe-organization' });\n logger.info('mutation.success', {\n name: 'cancelInvite',\n inviteId: redactId(inviteId),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('organization.invite.cancel_failed', {\n inviteId,\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n {\n name: 'cancelInvite',\n inviteId: redactId(inviteId),\n errorCode,\n errorMessage,\n },\n mutationError\n );\n throw mutationError;\n }\n },\n loading,\n error,\n };\n}\n\n/**\n * Hook to resend an organization invite\n */\nexport function useResendInvite() {\n const { emit } = useOrganizationEventEmitter();\n const [resendInvite, { loading, error }] = useResendOrganizationInviteMutation({\n refetchQueries: [GetOrganizationInvitesDocument],\n });\n\n return {\n resendInvite: async (inviteId: string) => {\n logger.info('mutation.start', {\n name: 'resendInvite',\n inviteId: redactId(inviteId),\n });\n try {\n const result = await resendInvite({ variables: { inviteId } });\n emit('organization.invite.resent', { inviteId, source: 'microfe-organization' });\n logger.info('mutation.success', {\n name: 'resendInvite',\n inviteId: redactId(inviteId),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('organization.invite.resend_failed', {\n inviteId,\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n {\n name: 'resendInvite',\n inviteId: redactId(inviteId),\n errorCode,\n errorMessage,\n },\n mutationError\n );\n throw mutationError;\n }\n },\n loading,\n error,\n };\n}\n"],"mappings":";;;;;;;AAsBA,IAAM,IAA0C,CAAG;;;;;;;;;;;AAmCnD,SAAS,EAAiB,GAAoC;AAE5D,QADoB,GACA,gBAAgB,IAAI,YAAY;;AAGtD,SAAS,EAAoB,GAAwB;AAGnD,QAFI,aAAiB,QAAc,EAAM,UACrB,GACA,WAAW;;AAMjC,SAAgB,EACd,GACA,GACA,IAAgB,IAChB,IAAiB,GACjB;CACA,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAA+B;EACvE,WAAW;GAAE;GAAgB;GAAQ;GAAO;GAAQ;EACpD,MAAM,CAAC;EACP,aAAa;EACb,iBAAiB;EAClB,CAAC;AAEF,QAAO;EACL,SAAU,GAAM,qBAAqB,SAAS,EAAE;EAChD,OAAO,GAAM,qBAAqB,SAAS;EAC3C,SAAS,GAAM,qBAAqB,WAAW;EAC/C;EACA;EACA;EACD;;AAMH,SAAgB,EAAa,GAAuB,IAAgB,IAAI,IAAiB,GAAG;CAC1F,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAAiC;EACzE,WAAW;GAAE;GAAQ;GAAO;GAAQ;EACpC,aAAa;EACb,iBAAiB;EAClB,CAAC;AAEF,QAAO;EACL,SAAU,GAAM,uBAAuB,SAAS,EAAE;EAClD,OAAO,GAAM,uBAAuB,SAAS;EAC7C,SAAS,GAAM,uBAAuB,WAAW;EACjD;EACA;EACA;EACD;;AAMH,SAAgB,IAAkB;CAChC,IAAM,EAAE,YAAS,GAA6B,EACxC,CAAC,GAAc,EAAE,YAAS,cAAW,EAAoC,EAC7E,gBAAgB,CAAC,EAA+B,EACjD,CAAC;AAEF,QAAO;EACL,cAAc,OAAO,MAAuE;AAC1F,KAAO,KAAK,kBAAkB;IAC5B,MAAM;IACN,gBAAgB,EAAS,EAAM,eAAe;IAC/C,CAAC;AACF,OAAI;IACF,IAAM,IAAS,MAAM,EAAa,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC,EACrD,IAAW,EAAO,MAAM,0BAA0B;AAWxD,WAVA,EAAK,+BAA+B;KAClC,gBAAgB,EAAM;KACtB;KACA,QAAQ;KACT,CAAC,EACF,EAAO,KAAK,oBAAoB;KAC9B,MAAM;KACN,gBAAgB,EAAS,EAAM,eAAe;KAC9C,UAAU,EAAS,EAAS;KAC7B,CAAC,EACK;YACA,GAAe;IACtB,IAAM,IAAY,EAAiB,EAAc,EAC3C,IAAe,EAAoB,EAAc;AAiBvD,UAhBA,EAAK,qCAAqC;KACxC,gBAAgB,EAAM;KACtB,QAAQ;KACR;KACA;KACD,CAAC,EACF,EAAO,MACL,mBACA;KACE,MAAM;KACN,gBAAgB,EAAS,EAAM,eAAe;KAC9C;KACA;KACD,EACD,EACD,EACK;;;EAGV;EACA;EACD;;AAMH,SAAgB,IAAkB;CAChC,IAAM,EAAE,YAAS,GAA6B,EACxC,CAAC,GAAc,EAAE,YAAS,cAAW,EAGzC,GAAyC,EACzC,gBAAgB,CAAC,GAAkC,EAAmB,EACvE,CAAC;AAEF,QAAO;EACL,cAAc,OAAO,MAAqB;AACxC,KAAO,KAAK,kBAAkB;IAC5B,MAAM;IACN,UAAU,EAAS,EAAS;IAC7B,CAAC;AACF,OAAI;IACF,IAAM,IAAiB,MAAM,EAAiB,gBAAgB,EACxD,IAAS,MAAM,EAAa,EAChC,WAAW;KAAE;KAAU,GAAI,IAAiB,EAAE,mBAAgB,GAAG,EAAE;KAAG,EACvE,CAAC;AAMF,WALA,EAAK,gCAAgC;KAAE;KAAU,QAAQ;KAAwB,CAAC,EAClF,EAAO,KAAK,oBAAoB;KAC9B,MAAM;KACN,UAAU,EAAS,EAAS;KAC7B,CAAC,EACK;YACA,GAAe;IACtB,IAAM,IAAY,EAAiB,EAAc,EAC3C,IAAe,EAAoB,EAAc;AAiBvD,UAhBA,EAAK,qCAAqC;KACxC;KACA,QAAQ;KACR;KACA;KACD,CAAC,EACF,EAAO,MACL,mBACA;KACE,MAAM;KACN,UAAU,EAAS,EAAS;KAC5B;KACA;KACD,EACD,EACD,EACK;;;EAGV;EACA;EACD;;AAMH,SAAgB,IAAkB;CAChC,IAAM,EAAE,YAAS,GAA6B,EACxC,CAAC,GAAc,EAAE,YAAS,cAAW,EAAoC,EAC7E,gBAAgB,CAAC,EAAiC,EACnD,CAAC;AAEF,QAAO;EACL,cAAc,OAAO,MAAqB;AACxC,KAAO,KAAK,kBAAkB;IAC5B,MAAM;IACN,UAAU,EAAS,EAAS;IAC7B,CAAC;AACF,OAAI;IACF,IAAM,IAAS,MAAM,EAAa,EAAE,WAAW,EAAE,aAAU,EAAE,CAAC;AAM9D,WALA,EAAK,gCAAgC;KAAE;KAAU,QAAQ;KAAwB,CAAC,EAClF,EAAO,KAAK,oBAAoB;KAC9B,MAAM;KACN,UAAU,EAAS,EAAS;KAC7B,CAAC,EACK;YACA,GAAe;IACtB,IAAM,IAAY,EAAiB,EAAc,EAC3C,IAAe,EAAoB,EAAc;AAiBvD,UAhBA,EAAK,qCAAqC;KACxC;KACA,QAAQ;KACR;KACA;KACD,CAAC,EACF,EAAO,MACL,mBACA;KACE,MAAM;KACN,UAAU,EAAS,EAAS;KAC5B;KACA;KACD,EACD,EACD,EACK;;;EAGV;EACA;EACD;;AAMH,SAAgB,IAAkB;CAChC,IAAM,EAAE,YAAS,GAA6B,EACxC,CAAC,GAAc,EAAE,YAAS,cAAW,EAAoC,EAC7E,gBAAgB,CAAC,EAA+B,EACjD,CAAC;AAEF,QAAO;EACL,cAAc,OAAO,MAAqB;AACxC,KAAO,KAAK,kBAAkB;IAC5B,MAAM;IACN,UAAU,EAAS,EAAS;IAC7B,CAAC;AACF,OAAI;IACF,IAAM,IAAS,MAAM,EAAa,EAAE,WAAW,EAAE,aAAU,EAAE,CAAC;AAM9D,WALA,EAAK,iCAAiC;KAAE;KAAU,QAAQ;KAAwB,CAAC,EACnF,EAAO,KAAK,oBAAoB;KAC9B,MAAM;KACN,UAAU,EAAS,EAAS;KAC7B,CAAC,EACK;YACA,GAAe;IACtB,IAAM,IAAY,EAAiB,EAAc,EAC3C,IAAe,EAAoB,EAAc;AAiBvD,UAhBA,EAAK,qCAAqC;KACxC;KACA,QAAQ;KACR;KACA;KACD,CAAC,EACF,EAAO,MACL,mBACA;KACE,MAAM;KACN,UAAU,EAAS,EAAS;KAC5B;KACA;KACD,EACD,EACD,EACK;;;EAGV;EACA;EACD;;AAMH,SAAgB,IAAkB;CAChC,IAAM,EAAE,YAAS,GAA6B,EACxC,CAAC,GAAc,EAAE,YAAS,cAAW,EAAoC,EAC7E,gBAAgB,CAAC,EAA+B,EACjD,CAAC;AAEF,QAAO;EACL,cAAc,OAAO,MAAqB;AACxC,KAAO,KAAK,kBAAkB;IAC5B,MAAM;IACN,UAAU,EAAS,EAAS;IAC7B,CAAC;AACF,OAAI;IACF,IAAM,IAAS,MAAM,EAAa,EAAE,WAAW,EAAE,aAAU,EAAE,CAAC;AAM9D,WALA,EAAK,8BAA8B;KAAE;KAAU,QAAQ;KAAwB,CAAC,EAChF,EAAO,KAAK,oBAAoB;KAC9B,MAAM;KACN,UAAU,EAAS,EAAS;KAC7B,CAAC,EACK;YACA,GAAe;IACtB,IAAM,IAAY,EAAiB,EAAc,EAC3C,IAAe,EAAoB,EAAc;AAiBvD,UAhBA,EAAK,qCAAqC;KACxC;KACA,QAAQ;KACR;KACA;KACD,CAAC,EACF,EAAO,MACL,mBACA;KACE,MAAM;KACN,UAAU,EAAS,EAAS;KAC5B;KACA;KACD,EACD,EACD,EACK;;;EAGV;EACA;EACD"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Member, AddMemberInput, UpdateMemberInput } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Hook to fetch organization members with pagination
|
|
5
|
+
* Updated to use offset-based pagination (limit/offset) instead of cursor-based
|
|
6
|
+
*/
|
|
7
|
+
export declare function useMembers(organizationId: string, limit?: number, offset?: number, enabled?: boolean): {
|
|
8
|
+
members: Member[];
|
|
9
|
+
total: any;
|
|
10
|
+
limit: any;
|
|
11
|
+
offset: any;
|
|
12
|
+
hasMore: any;
|
|
13
|
+
loading: boolean;
|
|
14
|
+
error: import('@apollo/client').ApolloError | undefined;
|
|
15
|
+
refetch: (variables?: any) => Promise<import('@apollo/client').ApolloQueryResult<Types.GetMembersQuery>>;
|
|
16
|
+
fetchMore: <TFetchData = Types.GetMembersQuery, TFetchVars extends import('@apollo/client').OperationVariables = Types.GetMembersQueryVariables>(fetchMoreOptions: import('@apollo/client').FetchMoreQueryOptions<TFetchVars, TFetchData> & {
|
|
17
|
+
updateQuery?: ((previousQueryResult: any, options: {
|
|
18
|
+
fetchMoreResult: import('@apollo/client').Unmasked<TFetchData>;
|
|
19
|
+
variables: TFetchVars;
|
|
20
|
+
}) => any) | undefined;
|
|
21
|
+
}) => Promise<import('@apollo/client').ApolloQueryResult<TFetchData>>;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Hook to fetch a single member by filtering the members list
|
|
25
|
+
* Note: Backend doesn't have single member query, we filter client-side
|
|
26
|
+
*/
|
|
27
|
+
export declare function useMember(organizationId: string, userId: string): {
|
|
28
|
+
member: Member | undefined;
|
|
29
|
+
loading: boolean;
|
|
30
|
+
error: import('@apollo/client').ApolloError | undefined;
|
|
31
|
+
refetch: (variables?: any) => Promise<import('@apollo/client').ApolloQueryResult<Types.GetMemberQuery>>;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Hook to fetch members by context (organization)
|
|
35
|
+
* Uses the same query as useMembers but with different name for backward compatibility
|
|
36
|
+
*/
|
|
37
|
+
export declare function useMembersByContext(organizationId: string, limit?: number, offset?: number): {
|
|
38
|
+
members: Member[];
|
|
39
|
+
total: any;
|
|
40
|
+
hasMore: any;
|
|
41
|
+
loading: boolean;
|
|
42
|
+
error: import('@apollo/client').ApolloError | undefined;
|
|
43
|
+
refetch: (variables?: any) => Promise<import('@apollo/client').ApolloQueryResult<Types.GetMembersByContextQuery>>;
|
|
44
|
+
fetchMore: <TFetchData = Types.GetMembersByContextQuery, TFetchVars extends import('@apollo/client').OperationVariables = Types.GetMembersByContextQueryVariables>(fetchMoreOptions: import('@apollo/client').FetchMoreQueryOptions<TFetchVars, TFetchData> & {
|
|
45
|
+
updateQuery?: ((previousQueryResult: any, options: {
|
|
46
|
+
fetchMoreResult: import('@apollo/client').Unmasked<TFetchData>;
|
|
47
|
+
variables: TFetchVars;
|
|
48
|
+
}) => any) | undefined;
|
|
49
|
+
}) => Promise<import('@apollo/client').ApolloQueryResult<TFetchData>>;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Hook to fetch a member by email (client-side filtering)
|
|
53
|
+
* Note: Backend doesn't have email-based query, we get all and filter
|
|
54
|
+
*/
|
|
55
|
+
export declare function useMemberByEmail(organizationId: string, email: string): {
|
|
56
|
+
member: Member | undefined;
|
|
57
|
+
loading: boolean;
|
|
58
|
+
error: import('@apollo/client').ApolloError | undefined;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Hook to add a new organization member
|
|
62
|
+
*/
|
|
63
|
+
export declare function useAddMember(): {
|
|
64
|
+
addMember: (input: AddMemberInput) => Promise<import('@apollo/client').FetchResult<Types.AddOrganizationMemberMutation>>;
|
|
65
|
+
loading: boolean;
|
|
66
|
+
error: import('@apollo/client').ApolloError | undefined;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Hook to update an organization member
|
|
70
|
+
*/
|
|
71
|
+
export declare function useUpdateMember(): {
|
|
72
|
+
updateMember: (organizationId: string, userId: string, input: UpdateMemberInput) => Promise<import('@apollo/client').FetchResult<Types.UpdateOrganizationMemberMutation>>;
|
|
73
|
+
loading: boolean;
|
|
74
|
+
error: import('@apollo/client').ApolloError | undefined;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Hook to remove an organization member
|
|
78
|
+
*/
|
|
79
|
+
export declare function useRemoveMember(): {
|
|
80
|
+
removeMember: (organizationId: string, userId: string) => Promise<import('@apollo/client').FetchResult<Types.RemoveOrganizationMemberMutation>>;
|
|
81
|
+
loading: boolean;
|
|
82
|
+
error: import('@apollo/client').ApolloError | undefined;
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=useMembers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMembers.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/members/hooks/useMembers.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AA6B1E;;;GAGG;AACH,wBAAgB,UAAU,CACxB,cAAc,EAAE,MAAM,EACtB,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,EAClB,OAAO,GAAE,OAAc;;;;;;;;;;;;;;;EAoBxB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;EAmB/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU;;;;;;;;;;;;;EAkBnB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;YAW7C,MAAM,GAAG,SAAS;;;EAI1C;AAED;;GAEG;AACH,wBAAgB,YAAY;uBAOC,cAAc;;;EA8C1C;AAED;;GAEG;AACH,wBAAgB,eAAe;mCAKU,MAAM,UAAU,MAAM,SAAS,iBAAiB;;;EA+CxF;AAED;;GAEG;AACH,wBAAgB,eAAe;mCAOU,MAAM,UAAU,MAAM;;;EA8C9D"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { GetMembersDocument as e, useGetMemberQuery as t, useGetMembersQuery as n, useRemoveOrganizationMemberMutation as r } from "../../../../generated/global-operations.js";
|
|
2
|
+
import { useOrganizationEventEmitter as i } from "../../../hooks/useOrganizationEventEmitter.js";
|
|
3
|
+
import { logger as a, redactId as o } from "../../../shared/logger.js";
|
|
4
|
+
//#region src/organization-management/modules/members/hooks/useMembers.ts
|
|
5
|
+
function s(e) {
|
|
6
|
+
return e?.graphQLErrors?.[0]?.extensions?.code;
|
|
7
|
+
}
|
|
8
|
+
function c(e) {
|
|
9
|
+
return e instanceof Error ? e.message : e?.message ?? "Unknown error";
|
|
10
|
+
}
|
|
11
|
+
function l(e, t = 20, r = 0, i = !0) {
|
|
12
|
+
let { data: a, loading: o, error: s, refetch: c, fetchMore: l } = n({
|
|
13
|
+
variables: {
|
|
14
|
+
organizationId: e,
|
|
15
|
+
limit: t,
|
|
16
|
+
offset: r
|
|
17
|
+
},
|
|
18
|
+
skip: !e || !i,
|
|
19
|
+
fetchPolicy: "cache-first",
|
|
20
|
+
nextFetchPolicy: "cache-first"
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
members: a?.organizationMembers?.items || [],
|
|
24
|
+
total: a?.organizationMembers?.total || 0,
|
|
25
|
+
limit: a?.organizationMembers?.limit || t,
|
|
26
|
+
offset: a?.organizationMembers?.offset || r,
|
|
27
|
+
hasMore: a?.organizationMembers?.hasMore || !1,
|
|
28
|
+
loading: o,
|
|
29
|
+
error: s,
|
|
30
|
+
refetch: c,
|
|
31
|
+
fetchMore: l
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function u(e, n) {
|
|
35
|
+
let { data: r, loading: i, error: a, refetch: o } = t({
|
|
36
|
+
variables: { organizationId: e },
|
|
37
|
+
skip: !e || !n,
|
|
38
|
+
fetchPolicy: "cache-first",
|
|
39
|
+
nextFetchPolicy: "cache-first"
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
member: r?.organizationMembers?.items?.find((e) => e.userId === n),
|
|
43
|
+
loading: i,
|
|
44
|
+
error: a,
|
|
45
|
+
refetch: o
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function d() {
|
|
49
|
+
let { emit: t } = i(), [n, { loading: l, error: u }] = r({ refetchQueries: [e] });
|
|
50
|
+
return {
|
|
51
|
+
removeMember: async (e, r) => {
|
|
52
|
+
a.info("mutation.start", {
|
|
53
|
+
name: "removeMember",
|
|
54
|
+
organizationId: o(e),
|
|
55
|
+
memberId: o(r)
|
|
56
|
+
});
|
|
57
|
+
try {
|
|
58
|
+
let i = await n({ variables: {
|
|
59
|
+
organizationId: e,
|
|
60
|
+
userId: r
|
|
61
|
+
} });
|
|
62
|
+
return t("member.removed", {
|
|
63
|
+
organizationId: e,
|
|
64
|
+
memberId: r,
|
|
65
|
+
source: "microfe-organization"
|
|
66
|
+
}), a.info("mutation.success", {
|
|
67
|
+
name: "removeMember",
|
|
68
|
+
organizationId: o(e),
|
|
69
|
+
memberId: o(r)
|
|
70
|
+
}), i;
|
|
71
|
+
} catch (n) {
|
|
72
|
+
let i = s(n), l = c(n);
|
|
73
|
+
throw t("member.remove_failed", {
|
|
74
|
+
organizationId: e,
|
|
75
|
+
memberId: r,
|
|
76
|
+
source: "microfe-organization",
|
|
77
|
+
errorCode: i,
|
|
78
|
+
errorMessage: l
|
|
79
|
+
}), a.error("mutation.failed", {
|
|
80
|
+
name: "removeMember",
|
|
81
|
+
organizationId: o(e),
|
|
82
|
+
memberId: o(r),
|
|
83
|
+
errorCode: i,
|
|
84
|
+
errorMessage: l
|
|
85
|
+
}, n), n;
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
loading: l,
|
|
89
|
+
error: u
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//#endregion
|
|
93
|
+
export { u as useMember, l as useMembers, d as useRemoveMember };
|
|
94
|
+
|
|
95
|
+
//# sourceMappingURL=useMembers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMembers.js","names":[],"sources":["../../../../../src/organization-management/modules/members/hooks/useMembers.ts"],"sourcesContent":["import {\n useGetMembersQuery,\n useGetMemberQuery,\n useGetMembersByContextQuery,\n useGetMemberByEmailQuery,\n useAddOrganizationMemberMutation,\n useUpdateOrganizationMemberMutation,\n useRemoveOrganizationMemberMutation,\n GetMembersDocument,\n} from '../../../../generated/global-operations';\nimport type { Member, AddMemberInput, UpdateMemberInput } from '../types';\nimport { useOrganizationEventEmitter } from '../../../hooks/useOrganizationEventEmitter';\nimport { logger, redactId } from '../../../shared/logger';\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 organization members with pagination\n * Updated to use offset-based pagination (limit/offset) instead of cursor-based\n */\nexport function useMembers(\n organizationId: string,\n limit: number = 20,\n offset: number = 0,\n enabled: boolean = true\n) {\n const { data, loading, error, refetch, fetchMore } = useGetMembersQuery({\n variables: { organizationId, limit, offset },\n skip: !organizationId || !enabled,\n fetchPolicy: 'cache-first',\n nextFetchPolicy: 'cache-first',\n });\n\n return {\n members: (data?.organizationMembers?.items as Member[]) || [],\n total: data?.organizationMembers?.total || 0,\n limit: data?.organizationMembers?.limit || limit,\n offset: data?.organizationMembers?.offset || offset,\n hasMore: data?.organizationMembers?.hasMore || false,\n loading,\n error,\n refetch,\n fetchMore,\n };\n}\n\n/**\n * Hook to fetch a single member by filtering the members list\n * Note: Backend doesn't have single member query, we filter client-side\n */\nexport function useMember(organizationId: string, userId: string) {\n const { data, loading, error, refetch } = useGetMemberQuery({\n variables: { organizationId },\n skip: !organizationId || !userId,\n fetchPolicy: 'cache-first',\n nextFetchPolicy: 'cache-first',\n });\n\n // Find the member matching the userId from the list\n const member = data?.organizationMembers?.items?.find(\n (m: { userId: string }) => m.userId === userId\n ) as Member | undefined;\n\n return {\n member,\n loading,\n error,\n refetch,\n };\n}\n\n/**\n * Hook to fetch members by context (organization)\n * Uses the same query as useMembers but with different name for backward compatibility\n */\nexport function useMembersByContext(\n organizationId: string,\n limit: number = 20,\n offset: number = 0\n) {\n const { data, loading, error, refetch, fetchMore } = useGetMembersByContextQuery({\n variables: { organizationId, limit, offset },\n skip: !organizationId,\n fetchPolicy: 'cache-first',\n nextFetchPolicy: 'cache-first',\n });\n\n return {\n members: (data?.organizationMembers?.items as Member[]) || [],\n total: data?.organizationMembers?.total || 0,\n hasMore: data?.organizationMembers?.hasMore || false,\n loading,\n error,\n refetch,\n fetchMore,\n };\n}\n\n/**\n * Hook to fetch a member by email (client-side filtering)\n * Note: Backend doesn't have email-based query, we get all and filter\n */\nexport function useMemberByEmail(organizationId: string, email: string) {\n const { loading, error } = useGetMemberByEmailQuery({\n variables: { organizationId },\n skip: !organizationId || !email,\n fetchPolicy: 'cache-first',\n nextFetchPolicy: 'cache-first',\n });\n\n // Email is not currently exposed by the backend membership payload.\n // Return undefined instead of a misleading first item until a dedicated field/query exists.\n return {\n member: undefined as Member | undefined,\n loading,\n error,\n };\n}\n\n/**\n * Hook to add a new organization member\n */\nexport function useAddMember() {\n const { emit } = useOrganizationEventEmitter();\n const [addMember, { loading, error }] = useAddOrganizationMemberMutation({\n refetchQueries: [GetMembersDocument],\n });\n\n return {\n addMember: async (input: AddMemberInput) => {\n logger.info('mutation.start', {\n name: 'addMember',\n organizationId: redactId(input.organizationId),\n });\n try {\n const result = await addMember({ variables: { input } });\n emit('member.added', {\n organizationId: input.organizationId,\n memberId: input.userId,\n role: input.role ?? undefined,\n source: 'microfe-organization',\n });\n logger.info('mutation.success', {\n name: 'addMember',\n organizationId: redactId(input.organizationId),\n memberId: redactId(input.userId),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('member.add_failed', {\n organizationId: input.organizationId,\n memberId: input.userId,\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n {\n name: 'addMember',\n organizationId: redactId(input.organizationId),\n memberId: redactId(input.userId),\n errorCode,\n errorMessage,\n },\n mutationError\n );\n throw mutationError;\n }\n },\n loading,\n error,\n };\n}\n\n/**\n * Hook to update an organization member\n */\nexport function useUpdateMember() {\n const { emit } = useOrganizationEventEmitter();\n const [updateMember, { loading, error }] = useUpdateOrganizationMemberMutation();\n\n return {\n updateMember: async (organizationId: string, userId: string, input: UpdateMemberInput) => {\n logger.info('mutation.start', {\n name: 'updateMember',\n organizationId: redactId(organizationId),\n memberId: redactId(userId),\n });\n try {\n const result = await updateMember({ variables: { organizationId, userId, input } });\n emit('member.role_changed', {\n organizationId,\n memberId: userId,\n role: input.role ?? undefined,\n source: 'microfe-organization',\n });\n logger.info('mutation.success', {\n name: 'updateMember',\n organizationId: redactId(organizationId),\n memberId: redactId(userId),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('member.role_change_failed', {\n organizationId,\n memberId: userId,\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n {\n name: 'updateMember',\n organizationId: redactId(organizationId),\n memberId: redactId(userId),\n errorCode,\n errorMessage,\n },\n mutationError\n );\n throw mutationError;\n }\n },\n loading,\n error,\n };\n}\n\n/**\n * Hook to remove an organization member\n */\nexport function useRemoveMember() {\n const { emit } = useOrganizationEventEmitter();\n const [removeMember, { loading, error }] = useRemoveOrganizationMemberMutation({\n refetchQueries: [GetMembersDocument],\n });\n\n return {\n removeMember: async (organizationId: string, userId: string) => {\n logger.info('mutation.start', {\n name: 'removeMember',\n organizationId: redactId(organizationId),\n memberId: redactId(userId),\n });\n try {\n const result = await removeMember({ variables: { organizationId, userId } });\n emit('member.removed', {\n organizationId,\n memberId: userId,\n source: 'microfe-organization',\n });\n logger.info('mutation.success', {\n name: 'removeMember',\n organizationId: redactId(organizationId),\n memberId: redactId(userId),\n });\n return result;\n } catch (mutationError) {\n const errorCode = extractErrorCode(mutationError);\n const errorMessage = extractErrorMessage(mutationError);\n emit('member.remove_failed', {\n organizationId,\n memberId: userId,\n source: 'microfe-organization',\n errorCode,\n errorMessage,\n });\n logger.error(\n 'mutation.failed',\n {\n name: 'removeMember',\n organizationId: redactId(organizationId),\n memberId: redactId(userId),\n errorCode,\n errorMessage,\n },\n mutationError\n );\n throw mutationError;\n }\n },\n loading,\n error,\n };\n}\n"],"mappings":";;;;AA4BA,SAAS,EAAiB,GAAoC;AAE5D,QADoB,GACA,gBAAgB,IAAI,YAAY;;AAGtD,SAAS,EAAoB,GAAwB;AAGnD,QAFI,aAAiB,QAAc,EAAM,UACrB,GACA,WAAW;;AAOjC,SAAgB,EACd,GACA,IAAgB,IAChB,IAAiB,GACjB,IAAmB,IACnB;CACA,IAAM,EAAE,SAAM,YAAS,UAAO,YAAS,iBAAc,EAAmB;EACtE,WAAW;GAAE;GAAgB;GAAO;GAAQ;EAC5C,MAAM,CAAC,KAAkB,CAAC;EAC1B,aAAa;EACb,iBAAiB;EAClB,CAAC;AAEF,QAAO;EACL,SAAU,GAAM,qBAAqB,SAAsB,EAAE;EAC7D,OAAO,GAAM,qBAAqB,SAAS;EAC3C,OAAO,GAAM,qBAAqB,SAAS;EAC3C,QAAQ,GAAM,qBAAqB,UAAU;EAC7C,SAAS,GAAM,qBAAqB,WAAW;EAC/C;EACA;EACA;EACA;EACD;;AAOH,SAAgB,EAAU,GAAwB,GAAgB;CAChE,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAAkB;EAC1D,WAAW,EAAE,mBAAgB;EAC7B,MAAM,CAAC,KAAkB,CAAC;EAC1B,aAAa;EACb,iBAAiB;EAClB,CAAC;AAOF,QAAO;EACL,QALa,GAAM,qBAAqB,OAAO,MAC9C,MAA0B,EAAE,WAAW,EACzC;EAIC;EACA;EACA;EACD;;AAyKH,SAAgB,IAAkB;CAChC,IAAM,EAAE,YAAS,GAA6B,EACxC,CAAC,GAAc,EAAE,YAAS,cAAW,EAAoC,EAC7E,gBAAgB,CAAC,EAAmB,EACrC,CAAC;AAEF,QAAO;EACL,cAAc,OAAO,GAAwB,MAAmB;AAC9D,KAAO,KAAK,kBAAkB;IAC5B,MAAM;IACN,gBAAgB,EAAS,EAAe;IACxC,UAAU,EAAS,EAAO;IAC3B,CAAC;AACF,OAAI;IACF,IAAM,IAAS,MAAM,EAAa,EAAE,WAAW;KAAE;KAAgB;KAAQ,EAAE,CAAC;AAW5E,WAVA,EAAK,kBAAkB;KACrB;KACA,UAAU;KACV,QAAQ;KACT,CAAC,EACF,EAAO,KAAK,oBAAoB;KAC9B,MAAM;KACN,gBAAgB,EAAS,EAAe;KACxC,UAAU,EAAS,EAAO;KAC3B,CAAC,EACK;YACA,GAAe;IACtB,IAAM,IAAY,EAAiB,EAAc,EAC3C,IAAe,EAAoB,EAAc;AAmBvD,UAlBA,EAAK,wBAAwB;KAC3B;KACA,UAAU;KACV,QAAQ;KACR;KACA;KACD,CAAC,EACF,EAAO,MACL,mBACA;KACE,MAAM;KACN,gBAAgB,EAAS,EAAe;KACxC,UAAU,EAAS,EAAO;KAC1B;KACA;KACD,EACD,EACD,EACK;;;EAGV;EACA;EACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InviteMemberPage.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/members/pages/InviteMemberPage.tsx"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAgB,gBAAgB,4CAsG/B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { useOrgConsole as e } from "../../../providers/OrgConsoleProvider.js";
|
|
2
|
+
import { useTr as t } from "../../../shared/hooks/useTr.js";
|
|
3
|
+
import { LoadingState as n } from "../../../shared/components/feedback/LoadingState.js";
|
|
4
|
+
import { PERMISSIONS as r } from "../../../constants/permissions.js";
|
|
5
|
+
import { useInviteMember as i } from "../hooks/useInvites.js";
|
|
6
|
+
import { InviteMemberForm as a } from "../components/InviteMemberForm.js";
|
|
7
|
+
import { PendingInvitesList as o } from "../components/PendingInvitesList.js";
|
|
8
|
+
import { ArrowLeft as s, UserPlus as c } from "lucide-react";
|
|
9
|
+
import { usePermissions as l } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
10
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
11
|
+
import { useParams as f } from "react-router-dom";
|
|
12
|
+
//#region src/organization-management/modules/members/pages/InviteMemberPage.tsx
|
|
13
|
+
function p() {
|
|
14
|
+
let p = t(), { organizationId: m } = f(), { navigate: h, basePath: g = "/organizations" } = e(), { hasPermission: _, isLoading: v } = l(), { inviteMember: y, loading: b, error: x } = i(), S = async (e) => {
|
|
15
|
+
await y(e);
|
|
16
|
+
}, C = () => {
|
|
17
|
+
h(`${g}/${m}/members`);
|
|
18
|
+
};
|
|
19
|
+
return v ? /* @__PURE__ */ u("div", {
|
|
20
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
21
|
+
children: /* @__PURE__ */ u(n, { message: p("common.loadingPermissions", "Loading permissions...") })
|
|
22
|
+
}) : _(r.MEMBER_INVITE) ? /* @__PURE__ */ u("div", {
|
|
23
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
24
|
+
children: /* @__PURE__ */ d("div", {
|
|
25
|
+
className: "mx-auto max-w-3xl space-y-8",
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ d("div", {
|
|
28
|
+
className: "flex items-center gap-3",
|
|
29
|
+
children: [/* @__PURE__ */ u("button", {
|
|
30
|
+
onClick: C,
|
|
31
|
+
className: "rounded-lg p-2 transition-colors hover:bg-[var(--color-bg-subtle)]",
|
|
32
|
+
"aria-label": p("members.invite.backToMembers", "Back to members"),
|
|
33
|
+
children: /* @__PURE__ */ u(s, {
|
|
34
|
+
size: 20,
|
|
35
|
+
className: "text-[var(--color-text-secondary)]"
|
|
36
|
+
})
|
|
37
|
+
}), /* @__PURE__ */ d("div", {
|
|
38
|
+
className: "flex items-center gap-2",
|
|
39
|
+
children: [/* @__PURE__ */ u(c, {
|
|
40
|
+
size: 24,
|
|
41
|
+
className: "text-[var(--color-text-primary)]"
|
|
42
|
+
}), /* @__PURE__ */ u("h1", {
|
|
43
|
+
className: "text-2xl font-bold text-[var(--color-text-primary)]",
|
|
44
|
+
children: p("members.invite.title", "Invite Member")
|
|
45
|
+
})]
|
|
46
|
+
})]
|
|
47
|
+
}),
|
|
48
|
+
/* @__PURE__ */ d("div", {
|
|
49
|
+
className: "bg-[var(--color-bg-surface)] rounded-xl border border-[var(--color-border-default)] p-6",
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ u("h2", {
|
|
52
|
+
className: "text-lg font-semibold text-[var(--color-text-primary)] mb-4",
|
|
53
|
+
children: p("members.invite.send", "Send Invite")
|
|
54
|
+
}),
|
|
55
|
+
/* @__PURE__ */ u("p", {
|
|
56
|
+
className: "text-sm text-[var(--color-text-muted)] mb-6",
|
|
57
|
+
children: p("members.invite.description", "Enter the email address of the person you want to invite. They will receive an email notification and can accept or decline from their account.")
|
|
58
|
+
}),
|
|
59
|
+
x && /* @__PURE__ */ u("div", {
|
|
60
|
+
className: "mb-4 rounded-lg border border-[var(--color-status-error-border)] bg-[var(--color-status-error-bgSubtle)] p-3",
|
|
61
|
+
children: /* @__PURE__ */ u("p", {
|
|
62
|
+
className: "text-sm text-[var(--color-status-error-text)]",
|
|
63
|
+
children: x.message.includes("CONFLICT") ? p("members.invite.error.conflict", "An invite already exists for this email address.") : x.message.includes("already a member") ? p("members.invite.error.alreadyMember", "This user is already a member of the organization.") : x.message
|
|
64
|
+
})
|
|
65
|
+
}),
|
|
66
|
+
/* @__PURE__ */ u(a, {
|
|
67
|
+
organizationId: m,
|
|
68
|
+
onSubmit: S,
|
|
69
|
+
onCancel: C,
|
|
70
|
+
loading: b
|
|
71
|
+
})
|
|
72
|
+
]
|
|
73
|
+
}),
|
|
74
|
+
/* @__PURE__ */ u("div", {
|
|
75
|
+
className: "bg-[var(--color-bg-surface)] rounded-xl border border-[var(--color-border-default)] p-6",
|
|
76
|
+
children: /* @__PURE__ */ u(o, { organizationId: m })
|
|
77
|
+
})
|
|
78
|
+
]
|
|
79
|
+
})
|
|
80
|
+
}) : /* @__PURE__ */ u("div", {
|
|
81
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
82
|
+
children: /* @__PURE__ */ u("div", {
|
|
83
|
+
className: "p-8 text-center text-[var(--color-text-secondary)]",
|
|
84
|
+
children: p("members.invite.noPermission", "You don't have permission to invite members.")
|
|
85
|
+
})
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
export { p as InviteMemberPage };
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=InviteMemberPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InviteMemberPage.js","names":[],"sources":["../../../../../src/organization-management/modules/members/pages/InviteMemberPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { ArrowLeft, UserPlus } from 'lucide-react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useOrgConsole } from '../../../providers/OrgConsoleProvider';\nimport { useInviteMember } from '../hooks/useInvites';\nimport { InviteMemberForm } from '../components/InviteMemberForm';\nimport { PendingInvitesList } from '../components/PendingInvitesList';\nimport { LoadingState } from '../../../shared/components/feedback/LoadingState';\nimport { PERMISSIONS } from '../../../constants/permissions';\nimport { useTr } from '../../../shared/hooks/useTr';\n\n/**\n * Invite Member Page\n * Email-based invite form with pending invites list below\n */\nexport function InviteMemberPage() {\n const tr = useTr();\n const { organizationId } = useParams<{ organizationId: string }>();\n const { navigate, basePath = '/organizations' } = useOrgConsole();\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const { inviteMember, loading, error } = useInviteMember();\n\n const handleSubmit = async (data: {\n organizationId: string;\n email: string;\n message?: string;\n }) => {\n await inviteMember(data);\n };\n\n const handleCancel = () => {\n navigate(`${basePath}/${organizationId}/members`);\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.MEMBER_INVITE)) {\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('members.invite.noPermission', \"You don't have permission to invite members.\")}\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\">\n <div className=\"mx-auto max-w-3xl space-y-8\">\n {/* Header */}\n <div className=\"flex items-center gap-3\">\n <button\n onClick={handleCancel}\n className=\"rounded-lg p-2 transition-colors hover:bg-[var(--color-bg-subtle)]\"\n aria-label={tr('members.invite.backToMembers', 'Back to members')}\n >\n <ArrowLeft size={20} className=\"text-[var(--color-text-secondary)]\" />\n </button>\n <div className=\"flex items-center gap-2\">\n <UserPlus size={24} className=\"text-[var(--color-text-primary)]\" />\n <h1 className=\"text-2xl font-bold text-[var(--color-text-primary)]\">\n {tr('members.invite.title', 'Invite Member')}\n </h1>\n </div>\n </div>\n\n {/* Invite Form Card */}\n <div className=\"bg-[var(--color-bg-surface)] rounded-xl border border-[var(--color-border-default)] p-6\">\n <h2 className=\"text-lg font-semibold text-[var(--color-text-primary)] mb-4\">\n {tr('members.invite.send', 'Send Invite')}\n </h2>\n <p className=\"text-sm text-[var(--color-text-muted)] mb-6\">\n {tr(\n 'members.invite.description',\n 'Enter the email address of the person you want to invite. They will receive an email notification and can accept or decline from their account.'\n )}\n </p>\n\n {error && (\n <div className=\"mb-4 rounded-lg border border-[var(--color-status-error-border)] bg-[var(--color-status-error-bgSubtle)] p-3\">\n <p className=\"text-sm text-[var(--color-status-error-text)]\">\n {error.message.includes('CONFLICT')\n ? tr(\n 'members.invite.error.conflict',\n 'An invite already exists for this email address.'\n )\n : error.message.includes('already a member')\n ? tr(\n 'members.invite.error.alreadyMember',\n 'This user is already a member of the organization.'\n )\n : error.message}\n </p>\n </div>\n )}\n\n <InviteMemberForm\n organizationId={organizationId!}\n onSubmit={handleSubmit}\n onCancel={handleCancel}\n loading={loading}\n />\n </div>\n\n {/* Pending Invites */}\n <div className=\"bg-[var(--color-bg-surface)] rounded-xl border border-[var(--color-border-default)] p-6\">\n <PendingInvitesList organizationId={organizationId!} />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAeA,SAAgB,IAAmB;CACjC,IAAM,IAAK,GAAO,EACZ,EAAE,sBAAmB,GAAuC,EAC5D,EAAE,aAAU,cAAW,qBAAqB,GAAe,EAC3D,EAAE,kBAAe,WAAW,MAAuB,GAAgB,EACnE,EAAE,iBAAc,YAAS,aAAU,GAAiB,EAEpD,IAAe,OAAO,MAItB;AACJ,QAAM,EAAa,EAAK;IAGpB,UAAqB;AACzB,IAAS,GAAG,EAAS,GAAG,EAAe,UAAU;;AAqBnD,QAlBI,IAEA,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAc,SAAS,EAAG,6BAA6B,yBAAyB,EAAI,CAAA;EAChF,CAAA,GAIL,EAAc,EAAY,cAAc,GAW3C,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aAAf;IAEE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,UAAD;MACE,SAAS;MACT,WAAU;MACV,cAAY,EAAG,gCAAgC,kBAAkB;gBAEjE,kBAAC,GAAD;OAAW,MAAM;OAAI,WAAU;OAAuC,CAAA;MAC/D,CAAA,EACT,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OAAU,MAAM;OAAI,WAAU;OAAqC,CAAA,EACnE,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAG,wBAAwB,gBAAgB;OACzC,CAAA,CACD;QACF;;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAG,uBAAuB,cAAc;OACtC,CAAA;MACL,kBAAC,KAAD;OAAG,WAAU;iBACV,EACC,8BACA,kJACD;OACC,CAAA;MAEH,KACC,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAM,QAAQ,SAAS,WAAW,GAC/B,EACE,iCACA,mDACD,GACD,EAAM,QAAQ,SAAS,mBAAmB,GACxC,EACE,sCACA,qDACD,GACD,EAAM;QACV,CAAA;OACA,CAAA;MAGR,kBAAC,GAAD;OACkB;OAChB,UAAU;OACV,UAAU;OACD;OACT,CAAA;MACE;;IAGN,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD,EAAoC,mBAAmB,CAAA;KACnD,CAAA;IACF;;EACF,CAAA,GAvEJ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAG,+BAA+B,+CAA+C;GAC9E,CAAA;EACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemberDetailPage.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/members/pages/MemberDetailPage.tsx"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAgB,gBAAgB,4CA6H/B"}
|