"use client"; import { authClient } from "@repo/auth/client"; import { OrganizationLogo } from "@saas/organizations/components/OrganizationLogo"; import { organizationListQueryKey } from "@saas/organizations/lib/api"; import { useRouter } from "@shared/hooks/router"; import { useQueryClient } from "@tanstack/react-query"; import { Button } from "@ui/components/button"; import { CheckIcon, XIcon } from "lucide-react"; import { useTranslations } from "next-intl"; import { useState } from "react"; export function OrganizationInvitationModal({ invitationId, organizationName, organizationSlug, logoUrl, }: { invitationId: string; organizationName: string; organizationSlug: string; logoUrl?: string; }) { const t = useTranslations(); const router = useRouter(); const queryClient = useQueryClient(); const [submitting, setSubmitting] = useState( false, ); const onSelectAnswer = async (accept: boolean) => { setSubmitting(accept ? "accept" : "reject"); try { if (accept) { const { error } = await authClient.organization.acceptInvitation({ invitationId, }); if (error) { throw error; } await queryClient.invalidateQueries({ queryKey: organizationListQueryKey, }); router.replace(`/app/${organizationSlug}`); } else { const { error } = await authClient.organization.rejectInvitation({ invitationId, }); if (error) { throw error; } router.replace("/app"); } } catch (error) { // TODO: handle error } finally { setSubmitting(false); } }; return (

{t("organizations.invitationModal.title")}

{t("organizations.invitationModal.description", { organizationName, })}

{organizationName}
); }