From 0efa0a8e5c1cd7a9b310098e61090ebb7171470c Mon Sep 17 00:00:00 2001 From: caadiq Date: Sat, 10 Jan 2026 09:52:34 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20AdminSchedule.jsx=EC=97=90=20=EB=8F=99?= =?UTF-8?q?=EC=A0=81=20=EB=86=92=EC=9D=B4=20=EA=B0=80=EC=83=81=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - measureElement와 data-index 추가 - 고정 높이 제거하여 내용에 맞게 자동 조절 --- frontend/src/pages/pc/admin/AdminSchedule.jsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/frontend/src/pages/pc/admin/AdminSchedule.jsx b/frontend/src/pages/pc/admin/AdminSchedule.jsx index f611e26..a0514d1 100644 --- a/frontend/src/pages/pc/admin/AdminSchedule.jsx +++ b/frontend/src/pages/pc/admin/AdminSchedule.jsx @@ -153,7 +153,7 @@ function AdminSchedule() { const { toast, setToast } = useToast(); const scrollContainerRef = useRef(null); const SEARCH_LIMIT = 20; // 페이지당 20개 - const ITEM_HEIGHT = 100; // 각 아이템 높이 (px) + const ESTIMATED_ITEM_HEIGHT = 100; // 아이템 추정 높이 (동적 측정) // Intersection Observer for infinite scroll const { ref: loadMoreRef, inView } = useInView({ @@ -526,11 +526,11 @@ function AdminSchedule() { }); }, [isSearchMode, searchTerm, searchResults, schedules, selectedCategories, selectedDate]); - // 가상 스크롤 설정 (검색 모드에서만 활성화) + // 가상 스크롤 설정 (검색 모드에서만 활성화, 동적 높이 지원) const virtualizer = useVirtualizer({ count: isSearchMode && searchTerm ? filteredSchedules.length : 0, getScrollElement: () => scrollContainerRef.current, - estimateSize: () => ITEM_HEIGHT, + estimateSize: () => ESTIMATED_ITEM_HEIGHT, overscan: 5, // 버퍼 아이템 수 }); @@ -1100,16 +1100,17 @@ function AdminSchedule() { return (
-
+