shoc-frontend-new/src/domain/team-members/use-cases/use-create-team-member.ts

34 lines
1.2 KiB
TypeScript

import { useMutation, useQueryClient, type UseMutationResult } from "@tanstack/react-query";
import { toast } from "react-toastify";
import { teamMembersApi } from "@/domain/team-members/api/team-members-api";
import type {
CreateTeamMemberInput,
TeamMemberCreated,
} from "@/domain/team-members/types/team-member";
import { queryKeys } from "@/infra/query-key/query-key";
export const INVITE_EMAIL_FAILED_MESSAGE =
"Team member created, but the invite email couldn't be sent. Open their details and use Resend invite.";
export function useCreateTeamMember(): UseMutationResult<
TeamMemberCreated,
Error,
CreateTeamMemberInput
> {
const queryClient = useQueryClient();
return useMutation({
mutationFn: teamMembersApi.create,
onSuccess: (created) => {
void queryClient.invalidateQueries({ queryKey: queryKeys.teamMembers.all });
if (created.inviteEmailSent === false) {
toast.warning(INVITE_EMAIL_FAILED_MESSAGE);
return;
}
toast.success("Team member created with pending registration.");
},
onError: (error: Error) => {
toast.error(error.message || "Failed to create team member");
},
});
}