mirror of
https://github.com/C9Glax/tranga-website.git
synced 2025-09-10 03:48:21 +02:00
74 lines
2.4 KiB
TypeScript
74 lines
2.4 KiB
TypeScript
import {
|
|
Badge,
|
|
Card,
|
|
CardContent,
|
|
CardCover,
|
|
ColorPaletteProp,
|
|
Skeleton,
|
|
Typography,
|
|
} from '@mui/joy';
|
|
import { EventHandler, ReactNode, useContext } from 'react';
|
|
import './MangaCard.css';
|
|
import MangaConnectorIcon from './MangaConnectorIcon.tsx';
|
|
import { Manga, MangaReleaseStatus, MinimalManga } from '../../api/data-contracts.ts';
|
|
import { ApiContext } from '../../contexts/ApiContext.tsx';
|
|
|
|
export default function MangaCard(props: MangaCardProps): ReactNode {
|
|
const Api = useContext(ApiContext);
|
|
|
|
return (
|
|
<Badge
|
|
badgeContent={props.manga?.mangaConnectorIds.map((id) => (
|
|
<MangaConnectorIcon mangaConnectorName={id.mangaConnectorName} />
|
|
))}
|
|
className={'manga-card-badge'}
|
|
color={releaseColor(props.manga?.releaseStatus ?? MangaReleaseStatus.Unreleased)}>
|
|
<Card
|
|
className={'manga-card'}
|
|
onClick={props.onClick}>
|
|
<CardCover className={'manga-card-cover'}>
|
|
<img
|
|
src={
|
|
props.manga && props.manga.key != 'Search'
|
|
? `${Api.baseUrl}/v2/Manga/${props.manga?.key}/Cover/Medium`
|
|
: '/blahaj.png'
|
|
}
|
|
/>
|
|
</CardCover>
|
|
<CardCover className={'manga-card-cover-blur'} />
|
|
<CardContent className={'manga-card-content'}>
|
|
<Typography level={'h4'}>
|
|
{props.manga?.name ?? <Skeleton>{stringWithRandomLength()}</Skeleton>}
|
|
</Typography>
|
|
</CardContent>
|
|
</Card>
|
|
</Badge>
|
|
);
|
|
}
|
|
|
|
export interface MangaCardProps {
|
|
manga?: Manga | MinimalManga;
|
|
onClick?: EventHandler<any>;
|
|
}
|
|
|
|
const stringWithRandomLength = (): string => {
|
|
return 'wow';
|
|
};
|
|
|
|
const releaseColor = (status: MangaReleaseStatus): ColorPaletteProp => {
|
|
switch (status) {
|
|
case MangaReleaseStatus.Cancelled:
|
|
return 'danger';
|
|
case MangaReleaseStatus.Completed:
|
|
return 'success';
|
|
case MangaReleaseStatus.Unreleased:
|
|
return 'neutral';
|
|
case MangaReleaseStatus.Continuing:
|
|
return 'primary';
|
|
case MangaReleaseStatus.OnHiatus:
|
|
return 'neutral';
|
|
default:
|
|
return 'neutral';
|
|
}
|
|
};
|