From c37c1929a79da708cc212e4421f3c34ffeae5aa6 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Sun, 23 Nov 2025 14:58:22 +0330 Subject: [PATCH] update admin --- src/pages/admin/Update.tsx | 156 ++++++++++++++++++++++++ src/pages/admin/hooks/useAdminData.ts | 8 ++ src/pages/admin/service/AdminService.ts | 10 +- src/pages/admin/types/Types.ts | 2 + src/router/Main.tsx | 2 + 5 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 src/pages/admin/Update.tsx diff --git a/src/pages/admin/Update.tsx b/src/pages/admin/Update.tsx new file mode 100644 index 0000000..3c5cccc --- /dev/null +++ b/src/pages/admin/Update.tsx @@ -0,0 +1,156 @@ +import { type FC, useEffect } from 'react' +import { useFormik } from 'formik' +import * as Yup from 'yup' +import { TickCircle } from 'iconsax-react' +import { toast } from 'react-toastify' +import { useNavigate, useParams } from 'react-router-dom' +import Button from '@/components/Button' +import Input from '@/components/Input' +import Select from '@/components/Select' +import { useGetAdminById, useUpdateAdmin } from './hooks/useAdminData' +import { useGetRoles } from '@/pages/roles/hooks/useRolesData' +import type { CreateAdminType } from './types/Types' +import { Pages } from '@/config/Pages' +import type { ErrorType } from '@/helpers/types' +import { extractErrorMessage } from '@/config/func' + +const UpdateAdmin: FC = () => { + const navigate = useNavigate() + const { id } = useParams() + const { data: adminData, isLoading } = useGetAdminById(id!) + const { mutate: updateAdmin, isPending } = useUpdateAdmin() + const { data: rolesData } = useGetRoles() + + const roles = rolesData?.data?.map(role => ({ + label: role.name, + value: role.id + })) || [] + + const admin = adminData?.data + + const formik = useFormik({ + initialValues: { + phone: '', + firstName: '', + lastName: '', + roleId: '', + }, + validationSchema: Yup.object().shape({ + phone: Yup.string().required('شماره تلفن الزامی است'), + firstName: Yup.string().required('نام الزامی است'), + lastName: Yup.string().required('نام خانوادگی الزامی است'), + roleId: Yup.string().required('نقش الزامی است'), + }), + onSubmit: (values) => { + if (!id) { + toast.error('شناسه مدیر یافت نشد') + return + } + + updateAdmin({ id, params: values }, { + onSuccess: () => { + toast.success('مدیر با موفقیت به‌روزرسانی شد') + navigate(Pages.admins.list) + }, + onError: (error: ErrorType) => { + toast.error(extractErrorMessage(error)) + }, + }) + }, + }) + + useEffect(() => { + if (admin) { + formik.setValues({ + phone: admin.phone || '', + firstName: admin.firstName || '', + lastName: admin.lastName || '', + roleId: admin.roles?.[0]?.role?.id || '', + }) + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [admin]) + + if (isLoading) { + return ( +
+
در حال بارگذاری...
+
+ ) + } + + if (!admin) { + return ( +
+
مدیر یافت نشد
+
+ ) + } + + return ( +
+
+
+ ویرایش مدیر +
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+