// app/admin/upload/_components/step-2-pdf-viewer.tsx "use client"; import { useRef } from "react"; import { usePdfViewer } from "../_hooks/use-pdf-viewer"; import { Button } from "@/shared/components/ui/button"; import { Checkbox } from "@/shared/components/ui/checkbox"; import { Loader2, CheckSquare, Square } from "lucide-react"; import { motion } from "framer-motion"; export default function StepPdfViewer() { const { pages, loading, localSelectedPages, toggleSelectPage, handleProcessPdf, // Fitur Baru dari Hook handleSelectAll, isAllSelected, MAX_SELECT } = usePdfViewer(); // 🔥 REF UNTUK SCROLLING const pageRefs = useRef<{ [key: number]: HTMLDivElement | null }>({}); // Fungsi Helper Scroll const scrollToPage = (pageNum: number) => { const element = pageRefs.current[pageNum]; if (element) { element.scrollIntoView({ behavior: "smooth", block: "start" }); } }; const handleSidebarClick = (pageNum: number) => { toggleSelectPage(pageNum); // Auto scroll hanya jika kita mencentang (opsional: bisa juga scroll saat uncheck jika mau) // Disini saya buat scroll terjadi setiap kali klik baris scrollToPage(pageNum); }; return (
{/* Sidebar Kiri */}

Pilih Halaman

Maksimal {MAX_SELECT} halaman.

{pages.map((p) => (
handleSidebarClick(p.pageNum)} > Halaman {p.pageNum}
))}
{/* Main Content (Preview Images) */}
{loading && pages.length === 0 && (
Merender PDF...
)}
{pages.map((p) => ( { pageRefs.current[p.pageNum] = el; }} initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ delay: 0.05 * (p.pageNum > 10 ? 10 : p.pageNum) }} // Optimasi delay list panjang // Styling highlight jika terpilih className={`bg-white p-2 shadow-sm rounded-lg border-2 transition-all duration-300 ${ localSelectedPages.includes(p.pageNum) ? "border-blue-500 ring-4 ring-blue-500/10" : "border-transparent hover:border-slate-300" }`} onClick={() => toggleSelectPage(p.pageNum)} // Klik gambar juga bisa toggle select >
{/* Badge Nomor Halaman di atas gambar */}
Halaman. {p.pageNum}
{`Page
))}
); }