import React, { useMemo } from "react"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm, Controller } from "react-hook-form"; import { z } from "zod"; import { Grid } from "../../components/Grid/Grid"; import Button from "../../components/Button/Button"; import Textfield from "../../components/Textfeild/Textfeild"; import { useUserProfileStore } from "../../context/zustand-store/userStore"; import { useApiMutation } from "../../utils/useApiRequest"; import { useToast } from "../../hooks/useToast"; import { useDrawerStore } from "../../context/zustand-store/appStore"; import { getCitiesOfProvinceInfo } from "../../utils/getCitiesOfProvinceInfo"; import AutoComplete from "../../components/AutoComplete/AutoComplete"; import { zValidateString, zValidateMobile, zValidateAutoComplete, } from "../../data/getFormTypeErrors"; interface SubmitNewUserProps { province: string; onSuccess?: () => void; } const schema = z.object({ mobile: zValidateMobile("موبایل"), password: zValidateString("کلمه عبور"), fullname: zValidateString("نام کامل"), permissions: zValidateAutoComplete("دسترسی‌ها"), city: zValidateAutoComplete("شهر"), }); type FormValues = z.infer; export const SubmitNewUser: React.FC = ({ onSuccess }) => { const { profile } = useUserProfileStore(); const showToast = useToast(); const { closeDrawer } = useDrawerStore(); const { control, handleSubmit, setValue, formState: { errors, isSubmitting }, } = useForm({ resolver: zodResolver(schema), defaultValues: { mobile: "", password: "", fullname: "", permissions: [], city: [], }, }); const submitUserMutation = useApiMutation({ api: "user", method: "post", }); const cityOptions = useMemo(() => { return getCitiesOfProvinceInfo(profile?.province || "").map((item) => ({ key: item.en, value: item.fa, })); }, [profile?.province]); const permissionOptions = useMemo(() => { return [ { key: "add", value: "ثبت کاربر" }, { key: "submit", value: "ثبت بازرسی" }, ]; }, []); const onSubmit = async (data: FormValues) => { try { const payload = { mobile: data.mobile, password: data.password, fullname: data.fullname, pic: "", permissions: data.permissions as string[], province: profile?.province, city: Array.isArray(data.city) && data.city.length > 0 ? String(data.city[0]) : "", }; await submitUserMutation.mutateAsync(payload); showToast("کاربر با موفقیت ثبت شد", "success"); closeDrawer(); if (onSuccess) { onSuccess(); } } catch (error) { console.error(error); showToast("مشکلی پیش آمده است، ممکن است کاربر تکراری باشد!", "error"); } }; return (
( )} /> ( )} /> ( )} />
( setValue("city", keys as any)} title="شهر را انتخاب کنید" error={!!errors.city} helperText={errors.city?.message} multiselect={false} /> )} />
( setValue("permissions", keys as any)} title="دسترسی‌ها را انتخاب کنید" error={!!errors.permissions} helperText={errors.permissions?.message} multiselect={true} /> )} />
); };