import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { useShallow } from "zustand/react/shallow"; import file from "~/lib/api/client/file"; import { patchUser } from "~/lib/api/client/user"; import { ModalType, useModalStore } from "~/stores/modal-store"; import { useUsersStore } from "~/stores/users-store"; import { Button } from "../ui/button"; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "../ui/dialog"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "../ui/form"; import { IconUploadField } from "../ui/icon-upload-field"; import { Input } from "../ui/input"; const schema = z.object({ displayName: z.string().min(1).max(32).optional().nullable(), avatar: z.instanceof(File).optional().nullable(), }); export default function UpdateProfileModal() { const { type, isOpen, onClose } = useModalStore(); const user = useUsersStore(useShallow((state) => state.getCurrentUser())); const isModalOpen = type === ModalType.UPDATE_PROFILE && isOpen; let form = useForm>({ resolver: zodResolver(schema), }); const onOpenChange = () => { form.reset(); onClose(); }; const onSubmit = async (values: z.infer) => { console.log("values", values); if (!values) return; let avatarId: string | null | undefined = values.avatar === null ? null : undefined; if (values.avatar) { avatarId = (await file.uploadFile(values.avatar))[0]; } const response = await patchUser({ displayName: values.displayName, avatarId, }); form.reset(); onClose(); }; return ( Update profile Update your profile.
( Avatar
)} /> ( Display Name )} />
); }