import { useEffect, useRef, useState } from "react"; import Image from "next/image"; import { ArrowsPointingOutIcon, ArrowsPointingInIcon, } from "@heroicons/react/24/outline"; import { useAniList } from "../../../lib/anilist/useAnilist"; export default function ThirdPanel({ aniId, data, hasRun, currentId, currentChapter, seekPage, setSeekPage, visible, setVisible, session, scaleImg, setMobileVisible, mobileVisible, }) { const [index, setIndex] = useState(0); const [image, setImage] = useState(null); const { markProgress } = useAniList(session); useEffect(() => { setIndex(0); setSeekPage(0); }, [data, currentId]); const seekToIndex = (newIndex) => { if (newIndex >= 0 && newIndex < data.length) { setIndex(newIndex); setSeekPage(newIndex); } }; useEffect(() => { seekToIndex(seekPage); }, [seekPage]); useEffect(() => { if (data && Array.isArray(data) && data?.length > 0) { setImage([...data].reverse()); // Create a copy of data before reversing } }, [data]); useEffect(() => { const handleKeyDown = (event) => { if (event.key === "ArrowRight") { if (index > 0) { setIndex(index - 1); setSeekPage(index - 1); } } else if (event.key === "ArrowLeft") { if (index < image.length - 1) { setIndex(index + 1); setSeekPage(index + 1); } if (index + 1 >= image.length - 2 && !hasRun.current) { let chapterNumber = currentChapter?.number; if (chapterNumber % 1 !== 0) { // If it's a decimal, round it chapterNumber = Math.round(chapterNumber); } markProgress(aniId, chapterNumber); hasRun.current = true; } } }; window.addEventListener("keydown", handleKeyDown); return () => { window.removeEventListener("keydown", handleKeyDown); }; }, [index, image]); const handleNext = () => { if (index < image.length - 1) { setIndex(index + 1); setSeekPage(index + 1); } if (index + 1 >= image.length - 2 && !hasRun.current) { let chapterNumber = currentChapter?.number; if (chapterNumber % 1 !== 0) { // If it's a decimal, round it chapterNumber = Math.round(chapterNumber); } markProgress(aniId, chapterNumber); hasRun.current = true; } }; const handlePrev = () => { if (index > 0) { setIndex(index - 1); setSeekPage(index - 1); } }; return (
{image && Array.isArray(image) && image?.length > 0 ? ( <>
setMobileVisible(!mobileVisible)} src={`https://api.consumet.org/utils/image-proxy?url=${encodeURIComponent( image[image.length - index - 1]?.url )}&headers=${encodeURIComponent( JSON.stringify({ Referer: image[image.length - index - 1]?.headers.Referer, }) )}`} alt="Manga Page" style={{ transform: `scale(${scaleImg})`, transformOrigin: "top", }} />
) : (
{data.error || "Not found"} :(
)} {visible ? ( ) : ( )} Page {index + 1}/{data.length}
); }