From e292176a61b5b5d0e0331a9eed975c1cc62307ac Mon Sep 17 00:00:00 2001 From: Ehsan Date: Sun, 1 Jun 2025 01:08:25 +0330 Subject: [PATCH] handle limit page dashboard & change header profile user & get data from api in page clinics & clinic item and doctor item --- app/clinic/[slug]/page.js | 18 ++- app/component/ItemDoctor.js | 12 +- app/component/comment/index.js | 6 +- app/dashboard/page.js | 14 +- app/doctor/[slug]/page.js | 9 +- app/doctors/page.js | 10 +- .../clinic/components/about/ListBime.js | 2 +- .../clinic/components/about/Services.js | 2 +- .../clinic/components/about/Specialties.js | 2 +- .../clinic/components/about/images/Images.js | 2 +- .../clinic/components/about/images/List.js | 28 +++- .../clinic/components/about/images/Slider.js | 30 ++-- components/clinic/components/about/index.js | 2 +- components/clinics/list/ItemClinic.js | 2 +- components/dashboard/Content.js | 5 +- components/dashboard/index.js | 2 + .../dashboard/userAccount/components/Head.js | 4 +- .../userAccount/components/UpdateBtn.js | 3 +- .../dashboard/userAccount/content/HeadTab.js | 2 +- .../dashboard/userAccount/content/index.js | 134 ------------------ .../detailUser/allergies/modal/index.js | 4 + .../detailUser/familyHistory/modal/index.js | 4 + .../detailUser/medications/modal/index.js | 4 + .../detailUser/relatives/modal/index.js | 4 + .../detailUser/surgeries/modal/index.js | 4 + components/dashboard/userAccount/index.js | 35 +++++ .../doctor/appointmentList/ItemAppointment.js | 6 +- components/doctor/detailDoctor/Title.js | 14 +- .../doctor/detailDoctor/cards/AboutDcotor.js | 4 +- .../cards/comments/chart/ProgressAll.js | 4 +- .../cards/comments/chart/index.js | 11 +- .../cards/comments/modal/ModalAnswer.js | 4 +- .../detailDoctor/cards/locations/index.js | 4 +- components/doctor/index.js | 21 +-- components/doctor/poster/Services.js | 2 +- components/doctors/index.js | 4 +- components/doctors/listDoctors/index.js | 4 +- components/layout/StLayout.js | 5 +- components/layout/header/Content.js | 31 ++-- components/layout/header/index.js | 4 +- components/layout/index.js | 3 +- components/layout/sidebar/ModalLogout.js | 4 +- .../register/verificationPage/SendReq.js | 5 +- helper/index.js | 2 +- utils/index.js | 5 +- 45 files changed, 223 insertions(+), 258 deletions(-) delete mode 100644 components/dashboard/userAccount/content/index.js diff --git a/app/clinic/[slug]/page.js b/app/clinic/[slug]/page.js index 87db5d2..6a0915e 100644 --- a/app/clinic/[slug]/page.js +++ b/app/clinic/[slug]/page.js @@ -1,10 +1,18 @@ import ClinicPage from "@/components/clinic"; import Layout from "@/components/layout/StLayout"; -import clinics from "@/data/clinics.json"; -import doctors from "@/data/doctors.json"; +import axios from "axios"; -function Blog({ params: { slug } }) { - const clinic = clinics.find((item) => item.id === +slug); +async function Clinic({ params: { slug } }) { + const reqClinics = await axios.get( + `https://back-dev.clinic-pro.ir/api/v1/clinic/${slug}` + ); + + const reqDoctors = await axios.get( + "https://back-dev.clinic-pro.ir/api/v1/doctors" + ); + + const clinic = reqClinics.data; + const doctors = reqDoctors.data.$data; return ( @@ -13,4 +21,4 @@ function Blog({ params: { slug } }) { ); } -export default Blog; +export default Clinic; diff --git a/app/component/ItemDoctor.js b/app/component/ItemDoctor.js index dabbba0..4a694a4 100644 --- a/app/component/ItemDoctor.js +++ b/app/component/ItemDoctor.js @@ -68,24 +68,24 @@ function ItemDoctor({ doctor, loading }) {

- {doctor.free_turn - ? `اولین نوبت آزاد: ${doctor.free_turn}` + {Number(doctor.active) + ? `اولین نوبت آزاد: ${Number(doctor.active)}` : "نوبت ندارد"}

{/* Arrow */} - + diff --git a/app/component/comment/index.js b/app/component/comment/index.js index cf42acd..241b215 100644 --- a/app/component/comment/index.js +++ b/app/component/comment/index.js @@ -3,7 +3,7 @@ import { useState } from "react"; import ItemUser from "./ItemUser"; function Comment({ data, loading }) { - const [list, setList] = useState(data.comments); + const [list, setList] = useState(data?.comments); const [update, setUpdate] = useState(false); return ( @@ -13,8 +13,8 @@ function Comment({ data, loading }) { }`} > {data && - !!data.comments.length && - data.comments.map((item, idx) => ( + !!data?.comments?.length && + data?.comments.map((item, idx) => ( ; + return ; } diff --git a/app/doctor/[slug]/page.js b/app/doctor/[slug]/page.js index b83351d..7fa9ffb 100644 --- a/app/doctor/[slug]/page.js +++ b/app/doctor/[slug]/page.js @@ -1,9 +1,12 @@ import DoctorPage from "@/components/doctor"; import Layout from "@/components/layout/StLayout"; -import doctors from "@/data/doctors.json"; +import axios from "axios"; -function Doctor({ params: { slug } }) { - const doctor = doctors.find((item) => item.id === +slug); +async function Doctor({ params: { slug } }) { + const response = await axios.get( + `https://back-dev.clinic-pro.ir/api/v1/doctor/${slug}` + ); + const doctor = response.data; return ( diff --git a/app/doctors/page.js b/app/doctors/page.js index 32b5e88..3afdf8f 100644 --- a/app/doctors/page.js +++ b/app/doctors/page.js @@ -1,13 +1,21 @@ import DoctorsPage from "@/components/doctors"; import Layout from "@/components/layout/StLayout"; import { getStateInfo } from "@/lib/getStateInfo"; +import axios from "axios"; -function Doctors({ searchParams }) { +async function Doctors({ searchParams }) { const { matchedCity, matchedState } = getStateInfo(); + const response = await axios.get( + "https://back-dev.clinic-pro.ir/api/v1/doctors" + ); + + const doctors = response.data.$data; + return ( - {data.list_bime.map((item, idx) => ( + {data?.list_bime?.map((item, idx) => (
  • - {data.specialties.map((item, idx) => ( + {data?.specialties?.map((item, idx) => (
  • diff --git a/components/clinic/components/about/Specialties.js b/components/clinic/components/about/Specialties.js index a478843..104deab 100644 --- a/components/clinic/components/about/Specialties.js +++ b/components/clinic/components/about/Specialties.js @@ -9,7 +9,7 @@ function Specialties({ data, loading }) { gap-x-[40px] sm:gap-x-[48px] md:gap-x-[56px] lg:gap-x-[64px] gap-y-[24px] sm:gap-y-[30px] md:gap-y-[35px] lg:gap-y-[40px]" > - {data.specialties.map((item, idx) => ( + {data?.specialties?.map((item, idx) => (
  • diff --git a/components/clinic/components/about/images/Images.js b/components/clinic/components/about/images/Images.js index f48c730..4154cab 100644 --- a/components/clinic/components/about/images/Images.js +++ b/components/clinic/components/about/images/Images.js @@ -15,7 +15,7 @@ function Images({ data, loading }) { img clinic img clinic img clinic img clinic img clinic - {[...data.images_clinic, ...data.images_clinic].map((item, idx) => - idx !== 0 ? ( - - image clinic - - ) : undefined, - )} + {data && + data.images_clinic && + [...data?.images_clinic, ...data?.images_clinic]?.map((item, idx) => + idx !== 0 ? ( + + image clinic + + ) : undefined + )} ); } diff --git a/components/clinic/components/about/index.js b/components/clinic/components/about/index.js index 751a2e2..3783f1c 100644 --- a/components/clinic/components/about/index.js +++ b/components/clinic/components/about/index.js @@ -33,7 +33,7 @@ function About({ data, loading }) { : "after:bg-[linear-gradient(transparent,#FAFAFA)] max-h-[200px]" } `} - dangerouslySetInnerHTML={{ __html: data.caption }} + dangerouslySetInnerHTML={{ __html: data?.caption }} >

    diff --git a/components/dashboard/Content.js b/components/dashboard/Content.js index 86808cf..3797326 100644 --- a/components/dashboard/Content.js +++ b/components/dashboard/Content.js @@ -6,7 +6,7 @@ import userData from "@/data/userData.json"; import DashboardPage from "@/components/dashboard"; import UserAccountPage from "./userAccount"; -function Content({ matchedCity }) { +function Content({ matchedCity, logged }) { const [value, setValue] = useState(0); const [isOpenSide, setIsOpenSide] = useState(false); const [isTurnsDetails, setIsTurnsDetails] = useState(false); @@ -14,8 +14,9 @@ function Content({ matchedCity }) { return ( -

    +

    +

    {text}

    {children}
    diff --git a/components/dashboard/userAccount/components/UpdateBtn.js b/components/dashboard/userAccount/components/UpdateBtn.js index bef5874..1830d5a 100644 --- a/components/dashboard/userAccount/components/UpdateBtn.js +++ b/components/dashboard/userAccount/components/UpdateBtn.js @@ -5,7 +5,8 @@ function UpdateBtn() { return (
    -
    {components[tab]}
    +
    {components[tab]}
    )}
    diff --git a/components/dashboard/userAccount/content/index.js b/components/dashboard/userAccount/content/index.js deleted file mode 100644 index 43183f2..0000000 --- a/components/dashboard/userAccount/content/index.js +++ /dev/null @@ -1,134 +0,0 @@ -"use client"; - -import { useEffect, useState } from "react"; -import profileData from "@/data/profile_other.json"; - -import ArrowRightD from "@/components/icons/ArrowRightD"; -import { Button } from "@mui/material"; -import DownloadD from "@/components/icons/DownloadD"; -import Disease from "../detailUser/disease"; -import Allergies from "../detailUser/allergies"; -import Medications from "../detailUser/medications"; -import Surgeries from "../detailUser/surgeries"; -import FamilyHistory from "../detailUser/familyHistory"; -import Relatives from "../detailUser/relatives"; -import HeadTab from "./HeadTab"; - -import DetailUser from "../detailUser/information"; -import Turns from "../sidebars/turns"; -import Transactions from "../sidebars/transactions"; -import Comments from "../sidebars/comments"; -import Messages from "../sidebars/messages"; -import NotfoundDashboard from "../NotfoundDashboard"; - -const listTab = [ - "بیماری‌ها", - "آلرژی‌ها", - "داروهای مصرفی", - "جراحی‌ها", - "سابقه خانوادگی بیماری", - "بستگان", -]; - -function ContentTabs({ - user, - value, - isTurnsDetails, - setIsTurnsDetails, - setValue, - setIsOpenSide, -}) { - const [tab, setTab] = useState(0); - const [data, setData] = useState(profileData[0]); - - const handleChange = (_, newValue) => setTab(newValue); - const changeData = (action, name, id, payload) => { - const newData = { - ...data, - [name]: [...data[name]], - }; - - switch (action) { - case "update": - newData[name][id] = payload; - break; - - case "add": - newData[name].push(payload); - break; - - case "delete": - newData[name].splice(id, 1); - break; - - default: - console.warn(`Unknown action: ${action}`); - return; - } - setData(newData); - }; - - const components = [ - // , - // , - // , - // , - // , - // , - - , - , - , - , - , - , - ]; - - return ( -
    -
    - - {value === 1 && isTurnsDetails ? ( - - ) : undefined} -
    -
    {components[value]}
    - {/* */} -
    - ); -} - -export default ContentTabs; diff --git a/components/dashboard/userAccount/detailUser/allergies/modal/index.js b/components/dashboard/userAccount/detailUser/allergies/modal/index.js index bfd36f9..3f9ef0e 100644 --- a/components/dashboard/userAccount/detailUser/allergies/modal/index.js +++ b/components/dashboard/userAccount/detailUser/allergies/modal/index.js @@ -4,6 +4,7 @@ import UpdateBtn from "@/components/dashboard/userAccount/components/UpdateBtn"; import { Button, Modal } from "@mui/material"; import Content from "./Content"; import { useState } from "react"; +import CloseModalD from "@/components/icons/CloseModalD"; function ModalAddAlergie({ open, setOpen, changeData }) { const contentItem = { @@ -45,6 +46,9 @@ function ModalAddAlergie({ open, setOpen, changeData }) {

    اضافه کردن آلرژی

    + diff --git a/components/dashboard/userAccount/detailUser/familyHistory/modal/index.js b/components/dashboard/userAccount/detailUser/familyHistory/modal/index.js index 0bc985d..3e8c584 100644 --- a/components/dashboard/userAccount/detailUser/familyHistory/modal/index.js +++ b/components/dashboard/userAccount/detailUser/familyHistory/modal/index.js @@ -4,6 +4,7 @@ import UpdateBtn from "@/components/dashboard/userAccount/components/UpdateBtn"; import { Button, Modal } from "@mui/material"; import Content from "./Content"; import { useState } from "react"; +import CloseModalD from "@/components/icons/CloseModalD"; function ModalAddHistory({ open, setOpen, changeData }) { const contentItem = { @@ -39,6 +40,9 @@ function ModalAddHistory({ open, setOpen, changeData }) {

    اضافه کردن سابقه خانوادگی بیماری

    + diff --git a/components/dashboard/userAccount/detailUser/medications/modal/index.js b/components/dashboard/userAccount/detailUser/medications/modal/index.js index 7a548df..dc356f6 100644 --- a/components/dashboard/userAccount/detailUser/medications/modal/index.js +++ b/components/dashboard/userAccount/detailUser/medications/modal/index.js @@ -4,6 +4,7 @@ import UpdateBtn from "@/components/dashboard/userAccount/components/UpdateBtn"; import { Button, Modal } from "@mui/material"; import { useState } from "react"; import Content from "./Content"; +import CloseModalD from "@/components/icons/CloseModalD"; function ModalAddMedications({ open, setOpen, changeData }) { const contentItem = { @@ -41,6 +42,9 @@ function ModalAddMedications({ open, setOpen, changeData }) {

    اضافه کردن دارو های مصرفی

    + diff --git a/components/dashboard/userAccount/detailUser/relatives/modal/index.js b/components/dashboard/userAccount/detailUser/relatives/modal/index.js index 9cbe776..49467cf 100644 --- a/components/dashboard/userAccount/detailUser/relatives/modal/index.js +++ b/components/dashboard/userAccount/detailUser/relatives/modal/index.js @@ -4,6 +4,7 @@ import UpdateBtn from "@/components/dashboard/userAccount/components/UpdateBtn"; import { Button, Modal } from "@mui/material"; import Content from "./Content"; import { useState } from "react"; +import CloseModalD from "@/components/icons/CloseModalD"; function ModalAddRelatives({ open, setOpen, changeData }) { const contentItem = { @@ -51,6 +52,9 @@ function ModalAddRelatives({ open, setOpen, changeData }) {

    اضافه کردن بستگان

    + diff --git a/components/dashboard/userAccount/detailUser/surgeries/modal/index.js b/components/dashboard/userAccount/detailUser/surgeries/modal/index.js index 1280c16..e665237 100644 --- a/components/dashboard/userAccount/detailUser/surgeries/modal/index.js +++ b/components/dashboard/userAccount/detailUser/surgeries/modal/index.js @@ -4,6 +4,7 @@ import UpdateBtn from "@/components/dashboard/userAccount/components/UpdateBtn"; import { Button, Modal } from "@mui/material"; import Content from "./Content"; import { useState } from "react"; +import CloseModalD from "@/components/icons/CloseModalD"; function ModalAddSurgeries({ open, setOpen, changeData }) { const contentItem = { @@ -41,6 +42,9 @@ function ModalAddSurgeries({ open, setOpen, changeData }) {

    اضافه کردن جراحی

    + diff --git a/components/dashboard/userAccount/index.js b/components/dashboard/userAccount/index.js index 5ea90a9..14d6503 100644 --- a/components/dashboard/userAccount/index.js +++ b/components/dashboard/userAccount/index.js @@ -1,3 +1,4 @@ +import { Button } from "@mui/material"; import DetailUser from "./detailUser"; import Head from "./Head"; import NotfoundDashboard from "./NotfoundDashboard"; @@ -7,6 +8,17 @@ import Comments from "./sidebars/comments"; import Messages from "./sidebars/messages"; import Transactions from "./sidebars/transactions"; import Turns from "./sidebars/turns"; +import DownloadD from "@/components/icons/DownloadD"; +import ArrowRightD from "@/components/icons/ArrowRightD"; + +const listTab = [ + "حساب کاربری", + "نوبت های من", + "تراکنش های من", + "نظرات من", + "پیام ها", + "خروج", +]; function UserAccountPage({ user, @@ -37,6 +49,29 @@ function UserAccountPage({ ) : ( <> +
    + + {value === 1 && isTurnsDetails ? ( + + ) : undefined} +
    {sidebars[value]}
    diff --git a/components/doctor/appointmentList/ItemAppointment.js b/components/doctor/appointmentList/ItemAppointment.js index 87c651b..72b336e 100644 --- a/components/doctor/appointmentList/ItemAppointment.js +++ b/components/doctor/appointmentList/ItemAppointment.js @@ -17,17 +17,17 @@ function ItemAppointment({ turn, doctor, loading }) {
    - doctor + doctor

    - {doctor.name} + {doctor?.name}

    - تخصص: {doctor.expertise} + تخصص: {doctor?.expertise}

    diff --git a/components/doctor/detailDoctor/Title.js b/components/doctor/detailDoctor/Title.js index 7d888a3..8516862 100644 --- a/components/doctor/detailDoctor/Title.js +++ b/components/doctor/detailDoctor/Title.js @@ -15,7 +15,7 @@ function Title({ doctor, loading }) { w-[40px] sm:w-[81px] md:w-[123px] lg:w-[164px] h-[40px] sm:h-[81px] md:h-[123px] lg:h-[164px] " - src={doctor.img} + src={doctor?.img} alt="img-doctor" height={164} width={164} @@ -24,18 +24,18 @@ function Title({ doctor, loading }) {

    - {doctor.name} + {doctor?.title}

    - تخصص: {doctor.expertise} + تخصص: {doctor?.expertise}

    - {doctor.experience} سال تجربه + {doctor?.experience} سال تجربه

    @@ -44,7 +44,7 @@ function Title({ doctor, loading }) {

    - کد نظام پزشکی: {doctor.medical_system_code} + کد نظام پزشکی: {doctor?.medical_system_code}

    @@ -54,13 +54,13 @@ function Title({ doctor, loading }) {

    - امتیاز: {doctor.point} + امتیاز: {doctor?.point}

    - {doctor.satisfaction}% رضایت کاربران + {doctor?.satisfaction}% رضایت کاربران

    diff --git a/components/doctor/detailDoctor/cards/AboutDcotor.js b/components/doctor/detailDoctor/cards/AboutDcotor.js index 942177f..05e557c 100644 --- a/components/doctor/detailDoctor/cards/AboutDcotor.js +++ b/components/doctor/detailDoctor/cards/AboutDcotor.js @@ -28,7 +28,7 @@ function AboutDcotor({ doctor, loading }) { } `} > - {doctor.detail} + {doctor?.detail}

    diff --git a/components/doctor/detailDoctor/cards/comments/chart/index.js b/components/doctor/detailDoctor/cards/comments/chart/index.js index 601bd7a..b6e5ee3 100644 --- a/components/doctor/detailDoctor/cards/comments/chart/index.js +++ b/components/doctor/detailDoctor/cards/comments/chart/index.js @@ -5,7 +5,6 @@ import LikeDI from "@/components/icons/LikeDI"; import ProgressDetail from "@/app/component/ProfressDetail"; import TextLoading from "@/app/component/loading/Text"; import CustomLoading from "@/app/component/loading/Custom"; -import CircularLoading from "@/app/component/loading/Circular"; function Chart({ doctor, loading }) { return ( @@ -18,10 +17,10 @@ function Chart({ doctor, loading }) {

    - امتیاز کلی کاربران: {doctor.overall_score} از 5 + امتیاز کلی کاربران: {doctor?.overall_score} از 5

    - (از مجموع {doctor.comments.length} نظر) + (از مجموع {doctor?.comments?.length} نظر)

    @@ -41,13 +40,13 @@ function Chart({ doctor, loading }) {

    - امتیاز: {doctor.point} + امتیاز: {doctor?.point}

    - {doctor.satisfaction}% رضایت کاربران + {doctor?.satisfaction}% رضایت کاربران

    @@ -58,7 +57,7 @@ function Chart({ doctor, loading }) { loading ? "lg:w-full" : "lg:w-fit" }`} > - {doctor.progress_detail.map((item, idx) => ( + {doctor?.progress_detail?.map((item, idx) => ( diff --git a/components/doctor/detailDoctor/cards/comments/modal/ModalAnswer.js b/components/doctor/detailDoctor/cards/comments/modal/ModalAnswer.js index 6771012..9a617bc 100644 --- a/components/doctor/detailDoctor/cards/comments/modal/ModalAnswer.js +++ b/components/doctor/detailDoctor/cards/comments/modal/ModalAnswer.js @@ -48,7 +48,7 @@ function ModalAnswer({ doctor }) { }} />
      - {doctor.progress_detail.map((item, idx) => ( + {doctor?.progress_detail?.map((item, idx) => ( ))}
    @@ -59,7 +59,7 @@ function ModalAnswer({ doctor }) { multiline={true} title="نظر خود را بنویسید..." /> - + - - + + + ) : ( + + + + )} ); } diff --git a/components/layout/header/index.js b/components/layout/header/index.js index 64b7907..60c11be 100644 --- a/components/layout/header/index.js +++ b/components/layout/header/index.js @@ -1,9 +1,9 @@ import Content from "./Content"; -function Header({ matchedCity, name }) { +function Header({ matchedCity, name, logged }) { return (
    - +
    ); } diff --git a/components/layout/index.js b/components/layout/index.js index dedbcb9..218e668 100644 --- a/components/layout/index.js +++ b/components/layout/index.js @@ -14,6 +14,7 @@ function Layout({ user, value, setValue, + logged, matchedCity, }) { return ( @@ -24,7 +25,7 @@ function Layout({ >
    -
    +
    { removeToken(); - window.location.pathname = "/login"; + router.replace("/login"); handleClose(); }; diff --git a/components/register/verificationPage/SendReq.js b/components/register/verificationPage/SendReq.js index a9dd7fe..0312ae7 100644 --- a/components/register/verificationPage/SendReq.js +++ b/components/register/verificationPage/SendReq.js @@ -1,5 +1,4 @@ import { Button } from "@mui/material"; -import { useRouter } from "next/navigation"; import { request } from "@/services/response"; import Cookies from "js-cookie"; @@ -12,8 +11,6 @@ function SendReq({ setIsError, uuid, }) { - const router = useRouter(); - const handleSetCookie = (response) => { const accessTokenExpires = new Date(); accessTokenExpires.setSeconds( @@ -50,7 +47,7 @@ function SendReq({ .then((response) => { setLoading(false); if (response.access_token) { - router.replace("/"); + window.location.pathname = "/"; handleSetCookie(response); } }) diff --git a/helper/index.js b/helper/index.js index e341cce..b1ceb41 100644 --- a/helper/index.js +++ b/helper/index.js @@ -2,7 +2,7 @@ import moment from "jalali-moment"; import { toast } from "react-toastify"; import specialties from "@/data/specialties.json"; -export const numberToArStyle = (num) => num.toLocaleString("ar-AE"); +export const numberToArStyle = (num) => num?.toLocaleString("ar-AE") || ""; export const isActiveURL = (link, name) => link === name; diff --git a/utils/index.js b/utils/index.js index b8a53d5..d03e027 100644 --- a/utils/index.js +++ b/utils/index.js @@ -1,5 +1,8 @@ import Cookies from "js-cookie"; -const removeToken = () => Cookies.remove("token", { path: "/" }); +const removeToken = () => { + Cookies.remove("access_token", { path: "/" }); + Cookies.remove("refresh_token", { path: "/" }); +}; export { removeToken };