From bc61ea6a20fc2ad69cfa357d6d10289ba115a293 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 30 Dec 2025 10:32:28 +0330 Subject: [PATCH] add adminns --- src/langs/fa.json | 1 + src/pages/dmenu/hooks/useIconData.ts | 31 ++++- .../components/AddRestaurantAdminForm.tsx | 125 +++++++++++++++++ .../components/RestaurantAdminsModal.tsx | 131 +++++++++++++----- src/pages/dmenu/service/IconService.ts | 25 ++++ src/pages/dmenu/types/Types.ts | 32 +++++ 6 files changed, 307 insertions(+), 38 deletions(-) create mode 100644 src/pages/dmenu/restaurant/components/AddRestaurantAdminForm.tsx diff --git a/src/langs/fa.json b/src/langs/fa.json index fcece95..432dbdd 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -884,6 +884,7 @@ "active": "فعال", "inactive": "غیرفعال", "admins": "مدیران", + "add_admin": "افزودن مدیر", "sms_count": "تعداد پیامک" }, "cancel": "لغو" diff --git a/src/pages/dmenu/hooks/useIconData.ts b/src/pages/dmenu/hooks/useIconData.ts index 5f91c91..d01f429 100644 --- a/src/pages/dmenu/hooks/useIconData.ts +++ b/src/pages/dmenu/hooks/useIconData.ts @@ -1,6 +1,10 @@ import { useMutation, useQuery } from "@tanstack/react-query"; import * as api from "../service/IconService"; -import { GroupIconsResponse, ReportsResponse } from "../types/Types"; +import { + GroupIconsResponse, + ReportsResponse, + SystemRolesResponse, +} from "../types/Types"; export const useGetIcons = () => { return useQuery({ @@ -68,3 +72,28 @@ export const useGetRestaurantSmsCount = () => { queryFn: api.getRestaurantSmsCount, }); }; + +export const useDeleteRestaurantAdmin = () => { + return useMutation({ + mutationFn: ({ + restaurantId, + adminId, + }: { + restaurantId: string; + adminId: string; + }) => api.deleteRestaurantAdmin(restaurantId, adminId), + }); +}; + +export const useAddAdminRestaurant = () => { + return useMutation({ + mutationFn: api.addAdminRestaurant, + }); +}; + +export const useGetSystemRoles = () => { + return useQuery({ + queryKey: ["system-roles"], + queryFn: api.getSystemRoles, + }); +}; diff --git a/src/pages/dmenu/restaurant/components/AddRestaurantAdminForm.tsx b/src/pages/dmenu/restaurant/components/AddRestaurantAdminForm.tsx new file mode 100644 index 0000000..ad3b520 --- /dev/null +++ b/src/pages/dmenu/restaurant/components/AddRestaurantAdminForm.tsx @@ -0,0 +1,125 @@ +import { FC } from 'react' +import { useFormik } from 'formik' +import * as Yup from 'yup' +import { useTranslation } from 'react-i18next' +import { AddAdminRestaurantType } from '../../types/Types' +import Input from '../../../../components/Input' +import Select from '../../../../components/Select' +import Button from '../../../../components/Button' +import { useAddAdminRestaurant, useGetSystemRoles } from '../../hooks/useIconData' +import { SystemRoleType } from '../../types/Types' +import { ErrorType } from '../../../../helpers/types' +import { toast } from 'react-toastify' +import { TickCircle } from 'iconsax-react' + +interface AddRestaurantAdminFormProps { + restaurantId: string + onSuccess: () => void + onClose: () => void +} + +const AddRestaurantAdminForm: FC = ({ + restaurantId, + onSuccess, + onClose +}) => { + const { t } = useTranslation('global') + const { mutate: addAdmin, isPending } = useAddAdminRestaurant() + const { data: rolesData } = useGetSystemRoles() + + const rolesList = rolesData?.data || [] + + const formik = useFormik({ + initialValues: { + restaurantId: restaurantId, + phone: '', + firstName: '', + lastName: '', + roleId: '' + }, + validationSchema: Yup.object({ + phone: Yup.string().required(t('errors.required')), + firstName: Yup.string().required(t('errors.required')), + lastName: Yup.string().required(t('errors.required')), + roleId: Yup.string().required(t('errors.required')) + }), + onSubmit: (values) => { + addAdmin(values, { + onSuccess: () => { + toast.success(t('success')) + formik.resetForm() + onSuccess() + onClose() + }, + onError: (error: ErrorType) => { + toast.error(error.response?.data?.error?.message[0]) + } + }) + } + }) + + return ( +
+
+
+ + +
+ +
+ +