mirror of
https://github.com/C9Glax/tranga-website.git
synced 2025-04-18 22:33:20 +02:00
48 lines
2.2 KiB
TypeScript
48 lines
2.2 KiB
TypeScript
import React, {ReactElement, ReactEventHandler, useEffect, useState} from "react";
|
|
import Manga from "../Manga";
|
|
import IManga from "./IManga";
|
|
import Chapter from "../Chapter";
|
|
|
|
export default interface IChapter{
|
|
chapterId: string;
|
|
volumeNumber: number;
|
|
chapterNumber: string;
|
|
url: string;
|
|
title: string | undefined;
|
|
archiveFileName: string;
|
|
downloaded: boolean;
|
|
parentMangaId: string;
|
|
}
|
|
|
|
export function ChapterItem({apiUri, chapterId} : {apiUri: string, chapterId: string}) : ReactElement {
|
|
const setCoverItem : ReactEventHandler<HTMLImageElement> = (e) => {
|
|
setMangaCoverHtmlImageItem(e.currentTarget);
|
|
}
|
|
|
|
let [chapter, setChapter] = useState<IChapter | null>(null);
|
|
let [manga, setManga] = useState<IManga | null>(null);
|
|
let [mangaCoverUrl, setMangaCoverUrl] = useState<string>("../../media/blahaj.png");
|
|
let [mangaCoverHtmlImageItem, setMangaCoverHtmlImageItem] = useState<HTMLImageElement | null>(null);
|
|
useEffect(() => {
|
|
Chapter.GetChapterFromId(apiUri, chapterId).then(setChapter);
|
|
}, []);
|
|
useEffect(() => {
|
|
if(chapter === null)
|
|
manga = null;
|
|
else
|
|
Manga.GetMangaById(apiUri, chapter.parentMangaId).then(setManga);
|
|
}, [chapter]);
|
|
useEffect(() => {
|
|
if(chapter != null && mangaCoverHtmlImageItem != null)
|
|
setMangaCoverUrl(Manga.GetMangaCoverImageUrl(apiUri, chapter.parentMangaId, mangaCoverHtmlImageItem));
|
|
}, [chapter, mangaCoverHtmlImageItem]);
|
|
|
|
return (<div className="ChapterItem" key={chapterId}>
|
|
<img className="ChapterItem-Cover" src={mangaCoverUrl} alt="Manga Cover" onLoad={setCoverItem} onResize={setCoverItem}></img>
|
|
<p className="ChapterItem-MangaName">{manga ? manga.name : "Manga-Name"}</p>
|
|
<p className="ChapterItem-ChapterName">{chapter ? chapter.title : "Chapter-Title"}</p>
|
|
<p className="ChapterItem-Volume">Vol.{chapter ? chapter.volumeNumber : "VolNum"}</p>
|
|
<p className="ChapterItem-Chapter">Ch.{chapter ? chapter.chapterNumber : "ChNum"}</p>
|
|
<a className="ChapterItem-Website" href={chapter ? chapter.url : "#"}><img src="../../media/link.svg" alt="Link"/></a>
|
|
</div>)
|
|
} |