diff --git a/src/config/Paths.tsx b/src/config/Paths.tsx index 9cc6c6c..9a023de 100644 --- a/src/config/Paths.tsx +++ b/src/config/Paths.tsx @@ -23,6 +23,8 @@ export const Paths = { }, users: { list: '/users/list', + create: '/users/create', + update: '/users/update/', }, admin: { list: '/admin/list', diff --git a/src/pages/user/Create.tsx b/src/pages/user/Create.tsx new file mode 100644 index 0000000..a79cae1 --- /dev/null +++ b/src/pages/user/Create.tsx @@ -0,0 +1,142 @@ +import { useFormik } from "formik"; +import { type FC } from "react"; +import * as Yup from "yup"; +import Button from "@/components/Button"; +import { TickCircle } from "iconsax-react"; +import Input from "@/components/Input"; +import Textarea from "@/components/Textarea"; +import SwitchComponent from "@/components/Switch"; +import { useCreateUser } from "./hooks/useUserData"; +import { useNavigate } from "react-router-dom"; +import { toast } from "react-toastify"; +import { extractErrorMessage } from "@/config/func"; +import { Paths } from "@/config/Paths"; +import type { CreateUserType } from "./types/Types"; + +const initialValues: CreateUserType = { + phone: "", + firstName: "", + lastName: "", + address: "", + gender: true, + maxCredit: 0, +}; + +const validationSchema = Yup.object({ + phone: Yup.string() + .required("شماره موبایل اجباری است") + .matches(/^09[0-9]{9}$/, "شماره موبایل معتبر نیست"), + firstName: Yup.string().required("نام اجباری است"), + lastName: Yup.string().required("نام خانوادگی اجباری است"), + address: Yup.string(), + maxCredit: Yup.number().min(0, "اعتبار نمی‌تواند منفی باشد"), +}); + +const CreateUser: FC = () => { + const navigate = useNavigate(); + const { mutate: createUser, isPending } = useCreateUser(); + + const formik = useFormik({ + initialValues, + validationSchema, + onSubmit: (values) => { + createUser(values, { + onSuccess: () => { + toast.success("مشتری با موفقیت ایجاد شد"); + navigate(Paths.users.list); + }, + onError: (error) => toast.error(extractErrorMessage(error)), + }); + }, + }); + + return ( +
+
+

ساخت مشتری

+ +
+ +
+
+ + +
+ +
+ +
+ +
+