From cf60cd4b316ae7d019e38349b0329e5161a1155c Mon Sep 17 00:00:00 2001 From: choi Date: Sun, 22 Dec 2024 18:19:39 +0900 Subject: [PATCH] =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/album/[albumId]/page.tsx | 77 ++++++++++++++---------- src/app/user/[userId]/page.tsx | 2 +- src/hooks/modal/use-information-modal.ts | 7 ++- 3 files changed, 51 insertions(+), 35 deletions(-) diff --git a/src/app/album/[albumId]/page.tsx b/src/app/album/[albumId]/page.tsx index 3160653..918b6c4 100644 --- a/src/app/album/[albumId]/page.tsx +++ b/src/app/album/[albumId]/page.tsx @@ -1,5 +1,9 @@ "use client"; +import { useEffect, useState } from "react"; +import Image from "next/image"; +import { usePathname, useRouter } from "next/navigation"; +import { useMediaQuery } from "react-responsive"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { IconDotsVertical, @@ -18,22 +22,19 @@ import { TableRow, } from "@/components/ui/table"; -import Image from "next/image"; -import { usePathname, useRouter } from "next/navigation"; -import { useMediaQuery } from "react-responsive"; - import useStreamingBar from "@/hooks/modal/use-streaming-bar"; -import { cn } from "@/lib/utils"; -import { useEffect, useState } from "react"; -import { Album, Profile, Track, getAlbumById } from "@/services/albumService"; -import { toast } from "sonner"; import useInformationModal from "@/hooks/modal/use-information-modal"; import useAlbumEditModal from "@/hooks/modal/use-albumEdit-modal"; +import { Album, Profile, Track, getAlbumById } from "@/services/albumService"; +import { toast } from "sonner"; +import { cn } from "@/lib/utils"; export default function AlbumPage() { - const [albumData, setAlbumData] = useState(); + const [albumData, setAlbumData] = useState(undefined); const [albumTrack, setAlbumTrack] = useState([]); - const [albumProfile, setAlbumProfile] = useState(); + const [albumProfile, setAlbumProfile] = useState( + undefined + ); const router = useRouter(); const streamingBar = useStreamingBar(); @@ -57,7 +58,7 @@ export default function AlbumPage() { }; getAlbum(); - }, []); + }, [uuid]); const handleShareClick = () => { navigator.clipboard @@ -66,6 +67,10 @@ export default function AlbumPage() { .catch(() => toast.error("복사 실패!")); }; + if (!albumData) { + return
앨범 데이터를 불러오는 중입니다...
; + } + return (
album
-
router.push(`/profile/${albumProfile?.name}`)} - className="flex gap-x-2 items-center" - > - - - U - - - {albumProfile?.name} - -
+ {albumProfile && ( +
router.push(`/profile/${albumProfile.name}`)} + className="flex gap-x-2 items-center" + > + + + U + + + {albumProfile.name} + +
+ )}
- {albumData?.title} + {albumData.title}
@@ -115,12 +122,20 @@ export default function AlbumPage() { 13.1k
- + informationModal.onOpen(albumData)} + onClick={() => + albumData && informationModal.onOpen(albumData) + } + className="size-6 cursor-pointer" + /> + -
diff --git a/src/app/user/[userId]/page.tsx b/src/app/user/[userId]/page.tsx index 504d395..4a57991 100644 --- a/src/app/user/[userId]/page.tsx +++ b/src/app/user/[userId]/page.tsx @@ -56,7 +56,7 @@ export default function UserPage() { }; fetchProfile(); - }, []); + }, [user]); const tabs = [ { id: "track", label: "트랙", icon: IconMusic, onClick: () => {} }, diff --git a/src/hooks/modal/use-information-modal.ts b/src/hooks/modal/use-information-modal.ts index f7c095a..548b3db 100644 --- a/src/hooks/modal/use-information-modal.ts +++ b/src/hooks/modal/use-information-modal.ts @@ -1,16 +1,17 @@ +import { Album } from "@/services/albumService"; import { create } from "zustand"; interface InformationModalStore { isOpen: boolean; - data: any | null; - onOpen: (modalData: any) => void; + data: Album | null; + onOpen: (modalData: Album) => void; onClose: () => void; } const useInformationModal = create((set) => ({ isOpen: false, data: null, - onOpen: (modalData: any) => set({ isOpen: true, data: modalData }), + onOpen: (modalData: Album) => set({ isOpen: true, data: modalData }), onClose: () => set({ isOpen: false, data: null }), }));