Files
suwayomi-material-you-webui/src/components/SourceCard.tsx
T

140 lines
5.2 KiB
TypeScript
Raw Normal View History

/*
* Copyright (C) Contributors to the Suwayomi project
*
* This Source Code Form is subject to the terms of the Mozilla Public
2021-01-26 23:32:12 +03:30
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
2021-01-26 23:32:12 +03:30
2023-06-04 21:08:39 +02:00
import { CardActionArea, Box, styled } from '@mui/material';
import Avatar from '@mui/material/Avatar';
import Button from '@mui/material/Button';
2021-09-09 17:51:22 +04:30
import Card from '@mui/material/Card';
import CardContent from '@mui/material/CardContent';
import Typography from '@mui/material/Typography';
import React from 'react';
2023-03-23 13:59:32 +01:00
import { useTranslation } from 'react-i18next';
import { Link } from 'react-router-dom';
2023-06-05 01:42:39 +02:00
import { ISource } from '@/typings';
2023-10-28 00:32:02 +02:00
import { requestManager } from '@/lib/requests/RequestManager.ts';
2023-06-05 01:42:39 +02:00
import { translateExtensionLanguage } from '@/screens/util/Extensions';
import { SourceContentType } from '@/screens/SourceMangas';
2021-11-17 15:45:25 +03:30
const MobileWidthButtons = styled('div')(({ theme }) => ({
display: 'flex',
[theme.breakpoints.up('sm')]: {
display: 'none',
},
2021-11-17 15:45:25 +03:30
}));
const WiderWidthButtons = styled('div')(({ theme }) => ({
display: 'flex',
[theme.breakpoints.down('sm')]: {
display: 'none',
},
2021-11-17 15:45:25 +03:30
'& .MuiButton-root': {
marginLeft: '20px',
},
}));
2020-12-25 06:36:34 +03:30
interface IProps {
2023-02-06 10:06:33 +01:00
source: ISource;
2020-12-25 06:36:34 +03:30
}
2023-10-28 00:32:02 +02:00
export const SourceCard: React.FC<IProps> = (props: IProps) => {
2023-03-23 13:59:32 +01:00
const { t } = useTranslation();
2020-12-25 06:36:34 +03:30
const {
2023-02-06 10:06:33 +01:00
source: { id, name, lang, iconUrl, supportsLatest, isNsfw },
2020-12-25 06:36:34 +03:30
} = props;
2021-09-09 22:19:33 +04:30
return (
<Card
2021-11-17 15:45:25 +03:30
sx={{
margin: '10px',
}}
2021-09-09 22:19:33 +04:30
>
<CardActionArea component={Link} to={`/sources/${id}`} state={{ contentType: SourceContentType.POPULAR }}>
<CardContent
sx={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
padding: 2,
}}
>
<Box sx={{ display: 'flex' }}>
<Avatar
variant="rounded"
alt={name}
sx={{
width: 56,
height: 56,
flex: '0 0 auto',
mr: 2,
}}
2023-05-18 13:25:19 +02:00
src={requestManager.getValidImgUrlFor(iconUrl)}
/>
2023-02-06 10:06:33 +01:00
<Box
sx={{
display: 'flex',
flexDirection: 'column',
justifyContent: 'center',
}}
>
<Typography variant="h5" component="h2">
{name}
2021-09-19 17:11:29 +04:30
</Typography>
{id !== '0' && (
<Typography variant="caption" display="block" gutterBottom>
2023-04-21 00:27:42 +02:00
{translateExtensionLanguage(lang)}
{isNsfw && (
2023-02-08 18:19:26 +01:00
<Typography variant="caption" display="inline" gutterBottom color="red">
{' 18+'}
</Typography>
)}
</Typography>
)}
</Box>
2021-11-17 15:45:25 +03:30
</Box>
<>
<MobileWidthButtons>
{supportsLatest && (
<Button
variant="outlined"
component={Link}
to={`/sources/${id}`}
state={{ contentType: SourceContentType.LATEST }}
>
2023-03-23 13:59:32 +01:00
{t('global.button.latest')}
</Button>
)}
</MobileWidthButtons>
<WiderWidthButtons>
{supportsLatest && (
<Button
variant="outlined"
component={Link}
to={`/sources/${id}`}
state={{ contentType: SourceContentType.LATEST }}
>
2023-03-23 13:59:32 +01:00
{t('global.button.latest')}
</Button>
)}
<Button
variant="outlined"
component={Link}
to={`/sources/${id}`}
state={{ contentType: SourceContentType.POPULAR }}
>
{t('global.button.popular')}
</Button>
</WiderWidthButtons>
</>
</CardContent>
</CardActionArea>
2020-12-25 06:36:34 +03:30
</Card>
);
};