"use client"; import { useState, useTransition } from "react"; import { updateUserRole, type FormData } from "@/actions/update-user-role"; import { zodResolver } from "@hookform/resolvers/zod"; import { User, UserRole } from "@prisma/client"; import { useSession } from "next-auth/react"; import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import { userRoleSchema } from "@/lib/validations/user"; import { Button } from "@/components/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { SectionColumns } from "@/components/dashboard/section-columns"; import { Icons } from "@/components/shared/icons"; interface UserNameFormProps { user: Pick; } export function UserRoleForm({ user }: UserNameFormProps) { const { update } = useSession(); const [updated, setUpdated] = useState(false); const [isPending, startTransition] = useTransition(); const updateUserRoleWithId = updateUserRole.bind(null, user.id); const roles = Object.values(UserRole); const [role, setRole] = useState(user.role); const t = useTranslations("Setting"); const form = useForm({ resolver: zodResolver(userRoleSchema), values: { role: role, }, }); const onSubmit = (data: z.infer) => { startTransition(async () => { const { status } = await updateUserRoleWithId(data); if (status !== "success") { toast.error("Something went wrong.", { description: "Your role was not updated. Please try again.", }); } else { await update(); setUpdated(false); toast.success("Your role has been updated."); } }); }; return (
( {t("Role")} )} />
); }