From 34188ab36651f876250246c2fa72256d4069d6c1 Mon Sep 17 00:00:00 2001 From: Arezoo Date: Wed, 22 Oct 2025 17:38:29 +0330 Subject: [PATCH] error handeling on the pagination --- components/clinic/components/doctors/List.js | 7 +++- .../clinic/components/doctors/head/index.js | 36 ++++++++++++++----- .../doctors/head/modal/DeleteAllButton.js | 22 +++++++----- .../doctors/head/modal/FilterModal.js | 15 +++++--- .../components/doctors/head/search/index.js | 5 ++- .../components/doctors/head/sortlist/index.js | 4 ++- components/clinic/components/doctors/index.js | 5 +-- helper/index.js | 9 ++--- services/clinicApi.js | 7 ++-- 9 files changed, 76 insertions(+), 34 deletions(-) diff --git a/components/clinic/components/doctors/List.js b/components/clinic/components/doctors/List.js index e279de1..2a5b473 100644 --- a/components/clinic/components/doctors/List.js +++ b/components/clinic/components/doctors/List.js @@ -1,6 +1,7 @@ import ItemDoctor from "@/app/component/ItemDoctor"; import Pagination from "@/app/component/Pagination"; import { QueryForDoctorsClinicReq } from "@/helper"; +import { getClinicDoctors } from "@/services/clinicApi"; import { request } from "@/services/response"; import { useRouter } from "next/navigation"; import { useState } from "react"; @@ -14,6 +15,7 @@ function List({ setDoctors, totalPages, slug, + setTotalPage, }) { const [loading, setLoading] = useState(false); const router = useRouter(); @@ -31,7 +33,10 @@ function List({ limit, }; const doctors = await getClinicDoctors(slug, params); - setDoctors(doctors); + setDoctors(doctors.data); + setTotalPage(doctors?.page?.total_pages || 1); + setPage(num); + }; const doctorList = Array.isArray(doctors?.data) ? doctors.data : doctors; return ( diff --git a/components/clinic/components/doctors/head/index.js b/components/clinic/components/doctors/head/index.js index a7917ba..8b91230 100644 --- a/components/clinic/components/doctors/head/index.js +++ b/components/clinic/components/doctors/head/index.js @@ -10,7 +10,7 @@ import { getClinicDoctors } from "@/services/clinicApi"; function Head({ setDoctors, slug, filter, setFilter,setPage,setTotalPage }) { const searchParams = useSearchParams(); - + const router = useRouter(); const fieldName = searchParams.get("specialty"); @@ -44,7 +44,7 @@ function Head({ setDoctors, slug, filter, setFilter,setPage,setTotalPage }) { }; - const updateData = (name, value, isReq) => { + const updateData = (name, value) => { const newFilter = { ...filter, [name]: value }; setDataInURL(newFilter); setFilter(newFilter); @@ -52,9 +52,11 @@ function Head({ setDoctors, slug, filter, setFilter,setPage,setTotalPage }) { }; const sendReq = async (newFilter) => { + try { const data = newFilter || filter; let params = QueryForDoctorsClinicReq(data); + if ( data?.name === data.specialty?.name || data?.name === data.category?.name @@ -63,13 +65,29 @@ function Head({ setDoctors, slug, filter, setFilter,setPage,setTotalPage }) { } params.page = 1; - params.limit =50; - setTotalPage(data?.pages?.total_pages) + params.limit = 50; + + // دریافت دکترها از API + const doctors = await getClinicDoctors(slug, params); + + // تنظیم داده‌ها در state + setDoctors(doctors); + + // ✅ حالا که جواب API اومده، مقدار صفحات مشخصه + if (doctors?.page) { + setPage(doctors.page.current || 1); + setTotalPage(doctors.page.total_pages || 1); + } else { + setPage(1); + setTotalPage(1); + } + + return doctors; + } catch (err) { + console.error("❌ خطا در sendReq:", err); + throw err; + } - setPage(data?.pages?.current); - const doctors = await getClinicDoctors(slug, params); - setDoctors(doctors); - }; return ( @@ -81,6 +99,8 @@ function Head({ setDoctors, slug, filter, setFilter,setPage,setTotalPage }) { setFilter={setFilter} updateData={updateData} setDataInURL={setDataInURL} + setPage={setPage} + setTotalPage={setTotalPage} /> { - setLoading(true); + + const resetFilter = async() => { + try{ + setLoading(true); clearDoctorClinicParams(router,slug, [ "category", "specialty", "active", "gender", "degree", + "page" ]); const newFilter = { @@ -28,11 +30,15 @@ function DeleteAllButton({slug, filter, sendReq, setFilter, handleClose }) { degree: "همه موارد", }, }; - sendReq(newFilter).finally(() => { - setLoading(false); - handleClose(); + const res = await sendReq({ ...newFilter}); setFilter(newFilter); - }); + setPage(1); + handleClose(false); + }catch (err) { + console.error("❌ خطا در ریست فیلترها:", err); + } finally { + setLoading(false); + } }; return ( diff --git a/components/clinic/components/doctors/head/modal/FilterModal.js b/components/clinic/components/doctors/head/modal/FilterModal.js index 4de0c7c..a8359c3 100644 --- a/components/clinic/components/doctors/head/modal/FilterModal.js +++ b/components/clinic/components/doctors/head/modal/FilterModal.js @@ -1,4 +1,4 @@ -"use client"; + import { styleDefault } from "@/mui"; import { Modal } from "@mui/material"; @@ -6,23 +6,28 @@ import { useState } from "react"; import Content from "./Content"; import ButtonApply from "./ButtonApply"; import DeleteAllButton from "./DeleteAllButton"; +import { useParams } from "next/navigation"; function FilterModal({ - slug, + slug: propSlug, filter, sendReq, children, setFilter, updateData, setDataInURL, + setPage, + setTotalPage, }) { const [open, setOpen] = useState(false); - const handleOpen = () => setOpen(true); const handleClose = () => { setOpen(false); - }; + }; + + const params = useParams() + const slug = propSlug || params?.slug; return ( <> {/* Button Modal */} @@ -42,6 +47,8 @@ function FilterModal({ sendReq={sendReq} setFilter={setFilter} handleClose={handleClose} + setPage={setPage} + setTotalPage={setTotalPage} />