From dafeebc54f4d14e4df91ecef7f4f4457cb4c6d33 Mon Sep 17 00:00:00 2001 From: Ehsan Date: Tue, 3 Jun 2025 00:50:10 +0330 Subject: [PATCH] validation & change deisng sidebar dashboard & add menu to profile & handle menu item in profile & add api --- app/component/DetailProfile.js | 80 +++++++++++++++++++ .../sidebar => app/component}/ModalLogout.js | 0 app/dashboard/page.js | 19 +++-- components/dashboard/Content.js | 4 +- .../dashboard/userAccount/content/HeadTab.js | 8 +- .../dashboard/userAccount/detailUser/index.js | 2 + components/dashboard/userAccount/index.js | 1 + components/doctor/detailDoctor/Share.js | 1 + components/doctor/index.js | 1 + components/doctor/poster/Address.js | 2 +- components/doctor/poster/ImageProfile.js | 2 +- components/doctor/poster/Telefon.js | 4 +- components/doctor/poster/index.js | 4 +- components/layout/header/Content.js | 12 +-- components/layout/header/profile/index.js | 28 +++++++ components/layout/sidebar/List.js | 2 +- components/layoutPanel/header/MenuProfile.js | 65 +-------------- components/layoutPanel/sidebar/index.js | 2 +- 18 files changed, 142 insertions(+), 95 deletions(-) create mode 100644 app/component/DetailProfile.js rename {components/layout/sidebar => app/component}/ModalLogout.js (100%) create mode 100644 components/layout/header/profile/index.js diff --git a/app/component/DetailProfile.js b/app/component/DetailProfile.js new file mode 100644 index 0000000..48933fd --- /dev/null +++ b/app/component/DetailProfile.js @@ -0,0 +1,80 @@ +import { useState } from "react"; +import ProfilePA from "@/components/icons/ProfilePA"; +import LogoutP from "@/components/icons/LogoutP"; +import SettingPA from "@/components/icons/SettingPA"; +import CardDA from "@/components/icons/CardDA"; +import { Button, Popover } from "@mui/material"; +import Link from "next/link"; +import ModalLogout from "./ModalLogout"; + +function DetailProfile({ anchorEl, setAnchorEl }) { + const [modal, setModal] = useState(false); + const handleClose = () => setAnchorEl(null); + const closeModal = () => setModal(false); + const openModal = () => setModal(true); + + const open = Boolean(anchorEl); + const id = open ? "simple-popover" : undefined; + return ( + <> + + +
+ + + + + + +
+
+ + ); +} + +export default DetailProfile; diff --git a/components/layout/sidebar/ModalLogout.js b/app/component/ModalLogout.js similarity index 100% rename from components/layout/sidebar/ModalLogout.js rename to app/component/ModalLogout.js diff --git a/app/dashboard/page.js b/app/dashboard/page.js index f6100be..1128b56 100644 --- a/app/dashboard/page.js +++ b/app/dashboard/page.js @@ -2,7 +2,7 @@ import Content from "@/components/dashboard/Content"; import { defineAbilitiesFor } from "@/lib/ability"; import { getUser } from "@/lib/auth"; import { getStateInfo } from "@/lib/getStateInfo"; -import { cookies } from "next/headers"; +import { cookies, headers } from "next/headers"; import { redirect } from "next/navigation"; export default async function Dashboard() { @@ -12,15 +12,18 @@ export default async function Dashboard() { const cookieStore = cookies(); const token = cookieStore.get("access_token"); - // const response = await axios.get( - // "https://back-dev.clinic-pro.ir/api/v1/user-profile/e4fd81b4-31bc-4f9a-b300-da23026f9d79" - // ); - - // console.log(response); - if (!ability.can("access", "Dashboard")) { return redirect("/"); } - return ; + const userAgent = headers().get("user-agent") || ""; + const isMobile = /Mobi|Android/i.test(userAgent); + + return ( + + ); } diff --git a/components/dashboard/Content.js b/components/dashboard/Content.js index 3797326..0580d01 100644 --- a/components/dashboard/Content.js +++ b/components/dashboard/Content.js @@ -6,9 +6,9 @@ import userData from "@/data/userData.json"; import DashboardPage from "@/components/dashboard"; import UserAccountPage from "./userAccount"; -function Content({ matchedCity, logged }) { +function Content({ matchedCity, logged, initialIsOpenSide }) { const [value, setValue] = useState(0); - const [isOpenSide, setIsOpenSide] = useState(false); + const [isOpenSide, setIsOpenSide] = useState(initialIsOpenSide); const [isTurnsDetails, setIsTurnsDetails] = useState(false); return ( diff --git a/components/dashboard/userAccount/content/HeadTab.js b/components/dashboard/userAccount/content/HeadTab.js index bf745d6..b33457f 100644 --- a/components/dashboard/userAccount/content/HeadTab.js +++ b/components/dashboard/userAccount/content/HeadTab.js @@ -5,18 +5,16 @@ function HeadTab({ tab, user, listTab, + components, + includeData, handleChange, isTurnsDetails, setIsTurnsDetails, - components, }) { return (
{isTurnsDetails ? ( - + ) : ( <>
diff --git a/components/dashboard/userAccount/detailUser/index.js b/components/dashboard/userAccount/detailUser/index.js index cc5a285..e17dbf7 100644 --- a/components/dashboard/userAccount/detailUser/index.js +++ b/components/dashboard/userAccount/detailUser/index.js @@ -24,6 +24,7 @@ const listTab = [ function DetailUser({ user, isTurnsDetails, setIsTurnsDetails }) { const [tab, setTab] = useState(0); const [data, setData] = useState(profileData[0]); + const [includeData, setIncludeData] = useState(false); const handleChange = (_, newValue) => setTab(newValue); const changeData = (action, name, id, payload) => { @@ -72,6 +73,7 @@ function DetailUser({ user, isTurnsDetails, setIsTurnsDetails }) { user={user} listTab={listTab} components={components} + includeData={includeData} handleChange={handleChange} isTurnsDetails={isTurnsDetails} setIsTurnsDetails={setIsTurnsDetails} diff --git a/components/dashboard/userAccount/index.js b/components/dashboard/userAccount/index.js index 14d6503..c9ca126 100644 --- a/components/dashboard/userAccount/index.js +++ b/components/dashboard/userAccount/index.js @@ -10,6 +10,7 @@ import Transactions from "./sidebars/transactions"; import Turns from "./sidebars/turns"; import DownloadD from "@/components/icons/DownloadD"; import ArrowRightD from "@/components/icons/ArrowRightD"; +import { useState } from "react"; const listTab = [ "حساب کاربری", diff --git a/components/doctor/detailDoctor/Share.js b/components/doctor/detailDoctor/Share.js index b961fa7..ec4c231 100644 --- a/components/doctor/detailDoctor/Share.js +++ b/components/doctor/detailDoctor/Share.js @@ -18,6 +18,7 @@ const listIcons = [ { name: "تلگرام", icon: }, { name: "لینکدین", icon: }, { name: "کپی لینک", icon: }, + { name: "دانلود", icon: }, ]; function Share() { diff --git a/components/doctor/index.js b/components/doctor/index.js index 82b8ae9..9ae9737 100644 --- a/components/doctor/index.js +++ b/components/doctor/index.js @@ -2,6 +2,7 @@ import AppointmentList from "./appointmentList"; import DetailDoctor from "./detailDoctor"; import Share from "./detailDoctor/Share"; import CustomLoading from "@/app/component/loading/Custom"; +import Poster from "./poster"; function DoctorPage({ doctor }) { return ( diff --git a/components/doctor/poster/Address.js b/components/doctor/poster/Address.js index 9615085..b602f8c 100644 --- a/components/doctor/poster/Address.js +++ b/components/doctor/poster/Address.js @@ -8,7 +8,7 @@ function Address({ data }) {

آدرس:

- {data.location} + {data?.location}

); diff --git a/components/doctor/poster/ImageProfile.js b/components/doctor/poster/ImageProfile.js index 4a19750..7133beb 100644 --- a/components/doctor/poster/ImageProfile.js +++ b/components/doctor/poster/ImageProfile.js @@ -3,7 +3,7 @@ import Image from "next/image"; function ImageProfile({ data }) { return (
- profile-user + profile-user
); } diff --git a/components/doctor/poster/Telefon.js b/components/doctor/poster/Telefon.js index 78828c9..4f3c0d3 100644 --- a/components/doctor/poster/Telefon.js +++ b/components/doctor/poster/Telefon.js @@ -8,10 +8,10 @@ function Telefon({ data }) {

تلفن:

- {data.phone} + {data?.phone}

- {data.phone} - {data.phone} + {data?.phone} - {data?.phone}

); diff --git a/components/doctor/poster/index.js b/components/doctor/poster/index.js index 0381138..194a651 100644 --- a/components/doctor/poster/index.js +++ b/components/doctor/poster/index.js @@ -15,10 +15,10 @@ function Poster({ data }) {

nobat724.com

- {data.name} + {data?.name}

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

diff --git a/components/layout/header/Content.js b/components/layout/header/Content.js index f97ef78..85fae32 100644 --- a/components/layout/header/Content.js +++ b/components/layout/header/Content.js @@ -7,8 +7,8 @@ import Row from "./list/Row"; import Col from "./list/col"; import ButtonMenu from "./list/col/ButtonMenu"; import BgGray from "./list/col/BgGray"; -import UserLogin from "@/components/icons/UserLogin"; import { useState } from "react"; +import ProfileUser from "./profile"; function Content({ matchedCity, name, logged }) { const [isActive, setIsActive] = useState(false); @@ -34,15 +34,7 @@ function Content({ matchedCity, name, logged }) { {logged ? ( - - - + ) : ( + + + ); +} + +export default ProfileUser; diff --git a/components/layout/sidebar/List.js b/components/layout/sidebar/List.js index 56738b4..c2c8835 100644 --- a/components/layout/sidebar/List.js +++ b/components/layout/sidebar/List.js @@ -9,7 +9,7 @@ import NotificationD from "@/components/icons/NotificationD"; import { Button } from "@mui/material"; import ArrowLeftSideBar from "@/components/icons/ArrowLeftSideBar"; import { useState } from "react"; -import ModalLogout from "./ModalLogout"; +import ModalLogout from "../../../app/component/ModalLogout"; function List({ value, diff --git a/components/layoutPanel/header/MenuProfile.js b/components/layoutPanel/header/MenuProfile.js index 1d4a5bf..afcb924 100644 --- a/components/layoutPanel/header/MenuProfile.js +++ b/components/layoutPanel/header/MenuProfile.js @@ -1,20 +1,13 @@ import { useState } from "react"; -import { Button, Popover } from "@mui/material"; +import { Button } from "@mui/material"; import ArrowBottomHD from "@/components/icons/ArrowBottomHD"; -import ProfilePA from "@/components/icons/ProfilePA"; -import LogoutP from "@/components/icons/LogoutP"; -import SettingPA from "@/components/icons/SettingPA"; -import CardDA from "@/components/icons/CardDA"; import Image from "next/image"; +import DetailProfile from "@/app/component/DetailProfile"; function MenuProfile({ data }) { const [anchorEl, setAnchorEl] = useState(null); const handleClick = (event) => setAnchorEl(event.currentTarget); - const handleClose = () => setAnchorEl(null); - - const open = Boolean(anchorEl); - const id = open ? "simple-popover" : undefined; return ( <> @@ -49,59 +42,7 @@ function MenuProfile({ data }) { - -
- - - - -
-
+ ); } diff --git a/components/layoutPanel/sidebar/index.js b/components/layoutPanel/sidebar/index.js index 43529a4..f5982b8 100644 --- a/components/layoutPanel/sidebar/index.js +++ b/components/layoutPanel/sidebar/index.js @@ -3,7 +3,7 @@ import HeadMd from "./HeadMd"; import HeadSm from "./HeadSm"; import { Button } from "@mui/material"; import LogoutOrangeP from "@/components/icons/LogoutOrangeP"; -import ModalLogout from "@/components/layout/sidebar/ModalLogout"; +import ModalLogout from "@/app/component/ModalLogout"; import { useState } from "react"; function Sidebar({ active, setActive, open, setOpen }) {