import Manga from "../Manga"; import React, {ReactElement, ReactEventHandler, useEffect} from "react"; import Icon from '@mdi/react'; import { mdiTagTextOutline, mdiAccountEdit, mdiLinkVariant } from '@mdi/js'; import MarkdownPreview from '@uiw/react-markdown-preview'; import {AuthorElement} from "./IAuthor"; import {LinkElement} from "./ILink"; import DownloadSingleChapterJob from "./Jobs/DownloadSingleChapterJob"; import IChapter from "./IChapter"; import Chapter from "../Chapter"; export default interface IManga{ mangaId: string; connectorId: string; name: string; description: string; websiteUrl: string; year: number; originalLanguage: string; releaseStatus: MangaReleaseStatus; folderName: string; ignoreChapterBefore: number; mangaConnectorId: string; authorIds: string[]; tags: string[]; linkIds: string[]; altTitleIds: string[]; } export enum MangaReleaseStatus { Continuing = "Continuing", Completed = "Completed", OnHiatus = "OnHiatus", Cancelled = "Cancelled", Unreleased = "Unreleased", } export const defaultManga: IManga = { altTitleIds: [], authorIds: [], connectorId: "", description: "", folderName: "", ignoreChapterBefore: 0, linkIds: [], mangaConnectorId: "", name: "", originalLanguage: "", releaseStatus: MangaReleaseStatus.Unreleased, tags: [], websiteUrl: "", year: 0, mangaId: "" } export function CoverCard({apiUri, mangaId} : {apiUri: string, mangaId: string}) : ReactElement { let [manga, setContent] = React.useState(defaultManga); let [extendedInfo, setExtendedInfo] = React.useState(false); useEffect(() => { Manga.GetMangaById(apiUri, mangaId).then(setContent); }, []); const MangaCover : ReactEventHandler = (e) => { if(e.currentTarget.src != Manga.GetMangaCoverImageUrl(apiUri, manga.mangaId, e.currentTarget)) e.currentTarget.src = Manga.GetMangaCoverImageUrl(apiUri, manga.mangaId, e.currentTarget); } return (
{ setExtendedInfo(!extendedInfo); }}> Manga Cover

{manga.mangaConnectorId}

{manga.name}

{extendedInfo ?
{ Manga.DeleteManga(apiUri, manga.mangaId); }}>Delete ]} />
: null}
); } export function ExtendedInfo({apiUri, manga, actions} : {apiUri: string, manga: IManga, actions: ReactElement[]}) : ReactElement { const MangaCover : ReactEventHandler = (e) => { if(e.currentTarget.src != Manga.GetMangaCoverImageUrl(apiUri, manga.mangaId, e.currentTarget)) e.currentTarget.src = Manga.GetMangaCoverImageUrl(apiUri, manga.mangaId, e.currentTarget); } return(
Manga Cover

{manga.mangaConnectorId}

{manga.name}

{manga.authorIds.map(authorId =>

)} {manga.tags.map(tag =>

{tag}

)} {manga.linkIds.map(linkId =>

)}
{actions.map((p, i) =>
{p}
)}
); } export function ItemDownloadSingleChapterJob({apiUri, job} : {apiUri: string, job: DownloadSingleChapterJob}){ const MangaCover : ReactEventHandler = (e) => { if(manga === null) return; if(e.currentTarget.src != Manga.GetMangaCoverImageUrl(apiUri, manga.mangaId, e.currentTarget)) e.currentTarget.src = Manga.GetMangaCoverImageUrl(apiUri, manga.mangaId, e.currentTarget); } let [chapter, setChapter] = React.useState(null); let [manga, setManga] = React.useState(null); useEffect(() => { Chapter.GetChapterFromId(apiUri, job.chapterId).then(setChapter); }, []); useEffect(() => { if(chapter === null){ setManga(null); return; } Manga.GetMangaById(apiUri, chapter.parentMangaId).then(setManga); }, [chapter]); return (
Manga Cover

{manga ? manga.name : job.chapterId}

{chapter ? "Vol." + chapter.volumeNumber + " Ch." + chapter.chapterNumber + ": " + chapter.title : "loading"}

); }