From 6da0cb533a6b81ef20de39e7a17975cec4a1ada6 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Sun, 23 Nov 2025 14:18:46 +0330 Subject: [PATCH] create admin --- src/config/Pages.ts | 1 + src/pages/admin/Create.tsx | 119 ++++++++++++++++++++++++ src/pages/admin/List.tsx | 14 +++ src/pages/admin/hooks/useAdminData.ts | 30 +++++- src/pages/admin/service/AdminService.ts | 16 +++- src/pages/admin/types/Types.ts | 14 ++- src/router/Main.tsx | 2 + 7 files changed, 190 insertions(+), 6 deletions(-) create mode 100644 src/pages/admin/Create.tsx diff --git a/src/config/Pages.ts b/src/config/Pages.ts index 6b80049..d83757d 100644 --- a/src/config/Pages.ts +++ b/src/config/Pages.ts @@ -58,6 +58,7 @@ export const Pages = { }, admins: { list: "/admins/list", + add: "/admins/add", update: "/admins/update/", }, }; diff --git a/src/pages/admin/Create.tsx b/src/pages/admin/Create.tsx new file mode 100644 index 0000000..3c91681 --- /dev/null +++ b/src/pages/admin/Create.tsx @@ -0,0 +1,119 @@ +import { type FC } from 'react' +import { useFormik } from 'formik' +import * as Yup from 'yup' +import { TickCircle } from 'iconsax-react' +import { toast } from 'react-toastify' +import { useNavigate } from 'react-router-dom' +import Button from '@/components/Button' +import Input from '@/components/Input' +import Select from '@/components/Select' +import { useCreateAdmin } 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 CreateAdmin: FC = () => { + const navigate = useNavigate() + const { mutate: createAdmin, isPending } = useCreateAdmin() + const { data: rolesData } = useGetRoles() + + const roles = rolesData?.data?.map(role => ({ + label: role.name, + value: role.id + })) || [] + + 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) => { + createAdmin(values, { + onSuccess: () => { + toast.success('مدیر با موفقیت ایجاد شد') + navigate(Pages.admins.list) + }, + onError: (error: ErrorType) => { + toast.error(extractErrorMessage(error)) + }, + }) + }, + }) + + return ( +
+
+
+ مدیر جدید +
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+