diff --git a/src/pages/admin/List.tsx b/src/pages/admin/List.tsx index d6ebca4..e7cd2ee 100644 --- a/src/pages/admin/List.tsx +++ b/src/pages/admin/List.tsx @@ -5,7 +5,7 @@ import moment from "moment-jalaali"; import { Link } from "react-router-dom"; import { Paths } from "@/config/Paths"; import Button from "@/components/Button"; -import { AddSquare } from "iconsax-react"; +import { AddSquare, Edit } from "iconsax-react"; const AdminList: FC = () => { const [page, setPage] = useState(1); @@ -54,6 +54,21 @@ const AdminList: FC = () => { ); }, }, + { + key: "actions", + title: "عملیات", + render: (item) => { + return ( +
+ + + +
+ ); + }, + }, ]} data={data?.data} pagination={{ diff --git a/src/pages/admin/Update.tsx b/src/pages/admin/Update.tsx new file mode 100644 index 0000000..c101c88 --- /dev/null +++ b/src/pages/admin/Update.tsx @@ -0,0 +1,169 @@ +import { useFormik } from 'formik'; +import { type FC, useEffect } from 'react'; +import type { CreateAdminType } from './types/Types'; +import * as Yup from 'yup'; +import Button from '@/components/Button'; +import { Edit } from 'iconsax-react'; +import Input from '@/components/Input'; +import Select from '@/components/Select'; +import { useGetAdminById, useGetRoles, useUpdateAdmin } from './hooks/useAdminData'; +import { useNavigate, useParams } from 'react-router-dom'; +import { toast } from 'react-toastify'; +import { extractErrorMessage } from '@/config/func'; +import { Paths } from '@/config/Paths'; + +const UpdateAdmin: FC = () => { + const navigate = useNavigate(); + const { id: adminId } = useParams<{ id: string }>(); + const { mutate: update, isPending: isUpdating } = useUpdateAdmin(); + const { data: rolesData } = useGetRoles(); + const { data: adminData, isLoading: isLoadingAdmin } = useGetAdminById(adminId!); + + const formik = useFormik({ + initialValues: { + firstName: '', + lastName: '', + phone: '', + roleId: '', + notificationPrefrences: ['test'] + }, + validationSchema: Yup.object({ + firstName: Yup.string() + .required('نام اجباری می باشد') + .min(2, 'نام باید حداقل 2 کاراکتر باشد'), + lastName: Yup.string() + .required('نام خانوادگی اجباری می باشد') + .min(2, 'نام خانوادگی باید حداقل 2 کاراکتر باشد'), + phone: Yup.string() + .required('شماره موبایل اجباری می باشد') + .matches(/^09[0-9]{9}$/, 'شماره موبایل معتبر نمی باشد'), + roleId: Yup.string().required('نقش اجباری می باشد'), + }), + onSubmit: (values) => { + if (!adminId) return; + + update({ adminId: adminId, params: values }, { + onSuccess: () => { + toast.success('ادمین با موفقیت ویرایش شد'); + navigate(Paths.admin.list); + }, + onError: (error) => { + toast.error(extractErrorMessage(error)); + }, + }); + }, + }); + + // Update form values when admin data is loaded + useEffect(() => { + if (adminData) { + formik.setValues({ + firstName: adminData?.data.firstName || '', + lastName: adminData?.data.lastName || '', + phone: '0' + adminData?.data.phone || '', + roleId: adminData?.data.role?.id || '', + notificationPrefrences: ['test'] + }); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [adminData]); + + const roleOptions = + rolesData?.data?.map((role) => ({ + label: role.title || role.name, + value: role.id, + })) || []; + + if (isLoadingAdmin) { + return ( +
+
+
در حال بارگذاری...
+
+
+ ); + } + + if (!adminData) { + return ( +
+
+
ادمین یافت نشد
+
+
+ ); + } + + return ( +
+
+

ویرایش ادمین

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