diff --git a/package-lock.json b/package-lock.json
index 0a83bb6..853bdda 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,6 +10,7 @@
"dependencies": {
"@hookform/resolvers": "^3.9.0",
"@radix-ui/react-avatar": "^1.1.1",
+ "@radix-ui/react-checkbox": "^1.1.3",
"@radix-ui/react-dialog": "^1.1.1",
"@radix-ui/react-dropdown-menu": "^2.1.2",
"@radix-ui/react-icons": "^1.3.0",
@@ -950,6 +951,36 @@
}
}
},
+ "node_modules/@radix-ui/react-checkbox": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.3.tgz",
+ "integrity": "sha512-HD7/ocp8f1B3e6OHygH0n7ZKjONkhciy1Nh0yuBgObqThc3oyx+vuMfFHKAknXRHHWVE9XvXStxJFyjUmB8PIw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@radix-ui/react-collection": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.1.tgz",
diff --git a/package.json b/package.json
index e64e41b..adbae75 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
"dependencies": {
"@hookform/resolvers": "^3.9.0",
"@radix-ui/react-avatar": "^1.1.1",
+ "@radix-ui/react-checkbox": "^1.1.3",
"@radix-ui/react-dialog": "^1.1.1",
"@radix-ui/react-dropdown-menu": "^2.1.2",
"@radix-ui/react-icons": "^1.3.0",
diff --git a/src/app/album/[albumId]/page.tsx b/src/app/album/[albumId]/page.tsx
index 02b6414..a58f849 100644
--- a/src/app/album/[albumId]/page.tsx
+++ b/src/app/album/[albumId]/page.tsx
@@ -95,7 +95,7 @@ export default function AlbumPage() {
{albumProfile && (
router.push(`/profile/${albumProfile.name}`)}
+ onClick={() => router.push(`/user/${albumProfile.uuid}`)}
className="flex gap-x-2 items-center"
>
@@ -172,7 +172,7 @@ export default function AlbumPage() {
{song.title}
- {song.title}
+ {song.duration}
diff --git a/src/app/user/[userId]/page.tsx b/src/app/user/[userId]/page.tsx
index 4a57991..4a71c85 100644
--- a/src/app/user/[userId]/page.tsx
+++ b/src/app/user/[userId]/page.tsx
@@ -17,6 +17,9 @@ import {
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuTrigger,
+ DropdownMenuItem,
+ DropdownMenuLabel,
+ DropdownMenuSeparator,
} from "@/components/ui/dropdown-menu";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
@@ -31,10 +34,12 @@ import { Profile, getProfile } from "@/services/profileService";
import useProfileModal from "@/hooks/modal/use-profile-modal";
import { useUser } from "@/provider/userProvider";
import useProfileEditModal from "@/hooks/modal/use-profileEdit-modal";
+import useConfirmModal from "@/hooks/modal/use-confirm-modal";
export default function UserPage() {
const streamingBar = useStreamingBar();
const profileModal = useProfileModal();
+ const confirmModal = useConfirmModal();
const profileEditModal = useProfileEditModal();
const isMobile = useMediaQuery({ maxWidth: 768 });
@@ -58,6 +63,10 @@ export default function UserPage() {
fetchProfile();
}, [user]);
+ const handleConfirm = (uuid: string) => {
+ confirmModal.onOpen(uuid);
+ };
+
const tabs = [
{ id: "track", label: "트랙", icon: IconMusic, onClick: () => {} },
{ id: "album", label: "앨범", icon: IconDisc, onClick: () => {} },
@@ -94,12 +103,24 @@ export default function UserPage() {
{profileData?.name || "U"}
-
-
-
+
+
+
+
+
+ 프로필 설정
+
+
+ 프로필 편집
+
+ handleConfirm(profileData?.uuid || "")}
+ >
+ 프로필 삭제
+
+
+