import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { Button } from "@/components/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { useToast } from "@/components/ui/use-toast"; import { getErrMsg } from "@/utils/error"; import { getPocketBase } from "@/repository/pocketbase"; const formSchema = z.object({ email: z.string().email("settings.account.email.errmsg.invalid"), }); const Account = () => { const { toast } = useToast(); const navigate = useNavigate(); const { t } = useTranslation(); const [changed, setChanged] = useState(false); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { email: getPocketBase().authStore.model?.email, }, }); const onSubmit = async (values: z.infer) => { try { await getPocketBase().admins.update(getPocketBase().authStore.model?.id, { email: values.email, }); getPocketBase().authStore.clear(); toast({ title: t("settings.account.email.changed.message"), description: t("settings.account.relogin.message"), }); setTimeout(() => { navigate("/login"); }, 500); } catch (e) { const message = getErrMsg(e); toast({ title: t("settings.account.email.failed.message"), description: message, variant: "destructive", }); } }; return ( <>
( {t("settings.account.email.label")} { setChanged(true); form.setValue("email", e.target.value); }} /> )} />
{changed ? ( ) : ( )}
); }; export default Account;