From 089c34f336fd6db41229811b351450fdda08f29b Mon Sep 17 00:00:00 2001 From: hyeonjiroh Date: Tue, 1 Apr 2025 02:18:31 +0900 Subject: [PATCH 1/2] Feat: Complete my dashboard list layout and open create modal on button click --- .../_components/AddDashboardButton.tsx | 25 +++++++++ .../mydashboard/_components/DashboardCard.tsx | 45 +++++++++++++++ .../_components/DashboardListSection.tsx | 56 +++++++++---------- .../pagination-button/PaginationButton.tsx | 1 + 4 files changed, 97 insertions(+), 30 deletions(-) create mode 100644 src/app/(after-login)/mydashboard/_components/AddDashboardButton.tsx create mode 100644 src/app/(after-login)/mydashboard/_components/DashboardCard.tsx diff --git a/src/app/(after-login)/mydashboard/_components/AddDashboardButton.tsx b/src/app/(after-login)/mydashboard/_components/AddDashboardButton.tsx new file mode 100644 index 0000000..7c19299 --- /dev/null +++ b/src/app/(after-login)/mydashboard/_components/AddDashboardButton.tsx @@ -0,0 +1,25 @@ +import { useModalStore } from "@/lib/store/useModalStore"; +import Button from "@/components/common/button/Button"; +import Image from "next/image"; +import AddIcon from "../../../../../public/icon/add_icon.svg"; + +export default function AddDashboardButton() { + const { openModal } = useModalStore(); + + return ( + + ); +} diff --git a/src/app/(after-login)/mydashboard/_components/DashboardCard.tsx b/src/app/(after-login)/mydashboard/_components/DashboardCard.tsx new file mode 100644 index 0000000..4c8e405 --- /dev/null +++ b/src/app/(after-login)/mydashboard/_components/DashboardCard.tsx @@ -0,0 +1,45 @@ +import Button from "@/components/common/button/Button"; +import Image from "next/image"; +import CrownIcon from "../../../../../public/icon/crown_icon.svg"; +import ArrowIcon from "../../../../../public/icon/arrow_right_icon.svg"; + +export default function DashboardCard({ + id, + title, + color, + createdByMe, +}: { + id: number; + title: string; + color: string; + createdByMe: boolean; +}) { + return ( + + ); +} diff --git a/src/app/(after-login)/mydashboard/_components/DashboardListSection.tsx b/src/app/(after-login)/mydashboard/_components/DashboardListSection.tsx index 5026e2d..f3d55d1 100644 --- a/src/app/(after-login)/mydashboard/_components/DashboardListSection.tsx +++ b/src/app/(after-login)/mydashboard/_components/DashboardListSection.tsx @@ -4,13 +4,15 @@ import { useEffect, useState } from "react"; import { fetchDashboardList } from "@/lib/apis/dashboardsApi"; import { DashboardList } from "@/lib/types"; import Pagination from "@/components/common/pagination-button/PaginationButton"; +import AddDashboardButton from "./AddDashboardButton"; +import DashboardCard from "./DashboardCard"; -const PAGE_SIZE = 6; +const PAGE_SIZE = 5; export default function DashboardListSection({ token }: { token: string }) { const [myDashboards, setMyDashboards] = useState([]); const [page, setPage] = useState(1); - const [totalPages, setTotalPages] = useState(1); + const [totalPages, setTotalPages] = useState(0); const [loading, setLoading] = useState(false); useEffect(() => { @@ -19,8 +21,8 @@ export default function DashboardListSection({ token }: { token: string }) { try { const { dashboards, - total, - }: { dashboards: DashboardList[]; total: number } = + totalCount, + }: { dashboards: DashboardList[]; totalCount: number } = await fetchDashboardList({ token, page, @@ -28,7 +30,7 @@ export default function DashboardListSection({ token }: { token: string }) { }); setMyDashboards(dashboards.filter((d) => d.createdByMe)); - setTotalPages(Math.ceil(total / PAGE_SIZE)); + setTotalPages(Math.floor(totalCount / 6)); } catch (error) { console.error("대시보드를 불러오는 중 오류 발생:", error); } finally { @@ -39,36 +41,30 @@ export default function DashboardListSection({ token }: { token: string }) { }, [page, token]); return ( -
- - -
-

내 대시보드

- {myDashboards.length > 0 ? ( -
    - {myDashboards.map((dashboard) => ( -
  • - {dashboard.title} -
  • - ))} -
- ) : ( - !loading && ( -
-

아직 생성한 대시보드가 없어요.

-
- ) - )} +
+
+ + {myDashboards.map((dashboard) => ( + + ))} {loading && (
-
+
)} - -
+
+
+
+

+ {totalPages} 페이지 중 {page} +

Date: Tue, 1 Apr 2025 02:24:41 +0900 Subject: [PATCH 2/2] Feat: Navigate to selected dashboard on card click --- .../(after-login)/mydashboard/_components/DashboardCard.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/app/(after-login)/mydashboard/_components/DashboardCard.tsx b/src/app/(after-login)/mydashboard/_components/DashboardCard.tsx index 4c8e405..7fa9025 100644 --- a/src/app/(after-login)/mydashboard/_components/DashboardCard.tsx +++ b/src/app/(after-login)/mydashboard/_components/DashboardCard.tsx @@ -1,3 +1,4 @@ +import { useRouter } from "next/navigation"; import Button from "@/components/common/button/Button"; import Image from "next/image"; import CrownIcon from "../../../../../public/icon/crown_icon.svg"; @@ -14,9 +15,14 @@ export default function DashboardCard({ color: string; createdByMe: boolean; }) { + const router = useRouter(); + return (