From 4fc7d197663bdfe50d9c0659774b216216f9996f Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Mon, 29 Jun 2026 15:05:30 +0330 Subject: [PATCH] fix role not found --- src/components/Select.tsx | 48 ++++-- src/pages/admin/Update.tsx | 276 ++++++++++++++++----------------- src/pages/admin/types/Types.ts | 1 + 3 files changed, 171 insertions(+), 154 deletions(-) diff --git a/src/components/Select.tsx b/src/components/Select.tsx index 39d9000..3ef9cd9 100644 --- a/src/components/Select.tsx +++ b/src/components/Select.tsx @@ -17,30 +17,54 @@ type Props = { } & SelectHTMLAttributes const Select: FC = (props: Props) => { + const { + className, + items, + error_text, + placeholder, + label, + isNotRequired, + value, + ...selectProps + } = props + + const hasMatchingItem = + value !== undefined && + value !== '' && + items?.some((item) => String(item.value) === String(value)) + + const selectValue = + !value || hasMatchingItem || !items?.length + ? (value ?? '') + : '' + return (
{ - props.label && + label &&
- {props.isNotRequired && ( + {isNotRequired && ( (اختیاری) )}
} - { - props.error_text && props.error_text !== '' ? + error_text && error_text !== '' ? : null } diff --git a/src/pages/admin/Update.tsx b/src/pages/admin/Update.tsx index 3c5cccc..c063437 100644 --- a/src/pages/admin/Update.tsx +++ b/src/pages/admin/Update.tsx @@ -1,156 +1,148 @@ -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' +import Button from "@/components/Button"; +import Input from "@/components/Input"; +import Select from "@/components/Select"; +import { extractErrorMessage } from "@/config/func"; +import { Pages } from "@/config/Pages"; +import type { ErrorType } from "@/helpers/types"; +import { useGetRoles } from "@/pages/roles/hooks/useRolesData"; +import { useFormik } from "formik"; +import { TickCircle } from "iconsax-react"; +import { type FC, useEffect } from "react"; +import { useNavigate, useParams } from "react-router-dom"; +import { toast } from "react-toastify"; +import * as Yup from "yup"; +import { useGetAdminById, useUpdateAdmin } from "./hooks/useAdminData"; +import type { CreateAdminType } from "./types/Types"; 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 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 roles = + rolesData?.data?.map((role) => ({ + label: role.name, + value: role.id, + })) || []; - const admin = adminData?.data + const admin = adminData?.data; - const formik = useFormik({ - initialValues: { - phone: '', - firstName: '', - lastName: '', - roleId: '', + 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)); + }, }, - 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 ( -
-
مدیر یافت نشد
-
- ) + useEffect(() => { + if (admin) { + formik.setValues({ + phone: admin.phone || "", + firstName: admin.firstName || "", + lastName: admin.lastName || "", + roleId: admin.role?.id || "", + }); } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [admin]); + if (isLoading) { return ( -
-
-
- ویرایش مدیر -
-
- -
-
+
+
در حال بارگذاری...
+
+ ); + } -
-
-
- -
-
- -
-
- -
-
- +
+
+ +
+
+ +
+
+