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"; import { getHeaders } from "@/utils/imageUtils"; export default function ThirdPanel({ aniId, data, chapterData, hasRun, currentId, currentChapter, seekPage, setSeekPage, visible, setVisible, session, scaleImg, setMobileVisible, mobileVisible, providerId, }) { const [index, setIndex] = useState(0); const [image, setImage] = useState(null); const { markProgress } = useAniList(session); useEffect(() => { setIndex(0); setSeekPage(0); // eslint-disable-next-line react-hooks/exhaustive-deps }, [data, currentId]); const seekToIndex = (newIndex) => { if (newIndex >= 0 && newIndex < data.length) { setIndex(newIndex); setSeekPage(newIndex); } }; useEffect(() => { seekToIndex(seekPage); // eslint-disable-next-line react-hooks/exhaustive-deps }, [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) { const current = chapterData.chapters?.find( (x) => x.id === currentChapter.id ); const chapterNumber = chapterData.chapters.indexOf(current) + 1; if (chapterNumber) { markProgress(aniId, chapterNumber); } hasRun.current = true; } } }; window.addEventListener("keydown", handleKeyDown); return () => { window.removeEventListener("keydown", handleKeyDown); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [index, image]); const handleNext = () => { if (index < image.length - 1) { setIndex(index + 1); setSeekPage(index + 1); } if (index + 1 >= image.length - 2 && !hasRun.current) { const current = chapterData.chapters?.find( (x) => x.id === currentChapter.id ); const chapterNumber = chapterData.chapters.indexOf(current) + 1; if (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 )}${ image[image.length - index - 1]?.headers?.Referer ? `&headers=${encodeURIComponent( JSON.stringify(image[image.length - index - 1]?.headers) )}` : `&headers=${encodeURIComponent( JSON.stringify(getHeaders(providerId)) )}` }`} alt="Manga Page" style={{ transform: `scale(${scaleImg})`, transformOrigin: "top", }} />
) : (
{data.error || "Not found"} :(
)} {visible ? ( ) : ( )} Page {index + 1}/{data.length}
); }