diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index f797e90..dfd9f53 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -14,7 +14,8 @@
"react-device-detect": "^2.2.3",
"react-dom": "^18.2.0",
"react-photo-album": "^3.4.0",
- "react-router-dom": "^6.22.3"
+ "react-router-dom": "^6.22.3",
+ "react-window": "^2.2.3"
},
"devDependencies": {
"@types/react": "^18.3.3",
@@ -2310,6 +2311,16 @@
"react-dom": ">=16.8"
}
},
+ "node_modules/react-window": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/react-window/-/react-window-2.2.3.tgz",
+ "integrity": "sha512-gTRqQYC8ojbiXyd9duYFiSn2TJw0ROXCgYjenOvNKITWzK0m0eCvkUsEUM08xvydkMh7ncp+LE0uS3DeNGZxnQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 4ea98f9..d430244 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -15,7 +15,8 @@
"react-device-detect": "^2.2.3",
"react-dom": "^18.2.0",
"react-photo-album": "^3.4.0",
- "react-router-dom": "^6.22.3"
+ "react-router-dom": "^6.22.3",
+ "react-window": "^2.2.3"
},
"devDependencies": {
"@types/react": "^18.3.3",
diff --git a/frontend/src/pages/pc/AlbumDetail.jsx b/frontend/src/pages/pc/AlbumDetail.jsx
index 878f0bb..babfc43 100644
--- a/frontend/src/pages/pc/AlbumDetail.jsx
+++ b/frontend/src/pages/pc/AlbumDetail.jsx
@@ -1,7 +1,7 @@
import { useState, useEffect, useCallback } from 'react';
import { useParams, useNavigate } from 'react-router-dom';
import { motion, AnimatePresence } from 'framer-motion';
-import { Calendar, Music2, Clock, X, ChevronLeft, ChevronRight, Download } from 'lucide-react';
+import { Calendar, Music2, Clock, X, ChevronLeft, ChevronRight, Download, MoreVertical, FileText } from 'lucide-react';
function AlbumDetail() {
const { name } = useParams();
@@ -11,6 +11,8 @@ function AlbumDetail() {
const [lightbox, setLightbox] = useState({ open: false, images: [], index: 0 });
const [slideDirection, setSlideDirection] = useState(0);
const [imageLoaded, setImageLoaded] = useState(false);
+ const [showDescriptionModal, setShowDescriptionModal] = useState(false);
+ const [showMenu, setShowMenu] = useState(false);
// 라이트박스 네비게이션 함수
const goToPrev = useCallback(() => {
@@ -202,7 +204,7 @@ function AlbumDetail() {
initial={{ opacity: 0, scale: 0.9 }}
animate={{ opacity: 1, scale: 1 }}
transition={{ duration: 0.4 }}
- className="w-80 h-80 flex-shrink-0 rounded-2xl overflow-hidden shadow-2xl"
+ className="w-80 h-80 flex-shrink-0 rounded-2xl overflow-hidden shadow-lg"
>
- {album.description} -
+ {/* 수록곡 리스트 */} ++ {album.description} +
+{file.filename}
@@ -1039,9 +1040,7 @@ function AdminAlbumPhotos() { ))} > )} - {file.groupType === 'solo' && ( - (한 명만 선택) - )} +