web-production-saas-starter/next_b2b_starter/lib/hooks/mutations/use-invite-member.ts
2025-12-16 18:54:41 +04:00

49 lines
1.4 KiB
TypeScript

/**
* Invite Member Mutation
*
* Handles member invitation with automatic members list invalidation.
*/
import { useMutation, useQueryClient } from "@tanstack/react-query";
import { memberRepository } from "@/lib/api/api/repositories/member-repository";
import { queryKeys } from "../queries/query-keys";
import type {
InviteMemberRequest,
InviteMemberResponse,
} from "@/lib/models/member.model";
interface InviteMemberVariables {
request: InviteMemberRequest;
organizationId: string;
}
export function useInviteMember() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ request, organizationId }: InviteMemberVariables) =>
memberRepository.inviteMember(request, organizationId),
// On success, invalidate members list to refetch with new member
onSuccess: (data: InviteMemberResponse, variables) => {
console.info("[Mutation] Member invited successfully:", {
memberId: data.memberId,
organizationId: variables.organizationId,
});
// Invalidate all member lists for this organization
queryClient.invalidateQueries({
queryKey: queryKeys.members.all,
});
},
// On error, log the failure
onError: (error, variables) => {
console.error("[Mutation] Member invitation failed:", {
error,
email: variables.request.email,
organizationId: variables.organizationId,
});
},
});
}