"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { authClient } from "@repo/auth/client"; import { OrganizationRoleSelect } from "@saas/organizations/components/OrganizationRoleSelect"; import { fullOrganizationQueryKey } from "@saas/organizations/lib/api"; import { SettingsItem } from "@saas/shared/components/SettingsItem"; import { useQueryClient } from "@tanstack/react-query"; import { Button } from "@ui/components/button"; import { Form, FormControl, FormField, FormItem, FormLabel, } from "@ui/components/form"; import { Input } from "@ui/components/input"; import {} from "@ui/components/select"; import { useTranslations } from "next-intl"; import type { SubmitHandler } from "react-hook-form"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; const formSchema = z.object({ email: z.string().email(), role: z.enum(["member", "owner", "admin"]), }); type FormValues = z.infer; export function InviteMemberForm({ organizationId, }: { organizationId: string; }) { const t = useTranslations(); const queryClient = useQueryClient(); const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { email: "", role: "member", }, }); const onSubmit: SubmitHandler = async (values) => { try { const { error } = await authClient.organization.inviteMember({ ...values, organizationId, }); if (error) { throw error; } form.reset(); queryClient.invalidateQueries({ queryKey: fullOrganizationQueryKey(organizationId), }); toast.success( t( "organizations.settings.members.inviteMember.notifications.success.title", ), ); } catch { toast.error( t( "organizations.settings.members.inviteMember.notifications.error.title", ), ); } }; return (
( {t( "organizations.settings.members.inviteMember.email", )} )} />
( {t( "organizations.settings.members.inviteMember.role", )} )} />
); }