diff --git a/src/modules/common/MediaDisplay.tsx b/src/modules/common/MediaDisplay.tsx index e2d2ab78c..2de1707b0 100644 --- a/src/modules/common/MediaDisplay.tsx +++ b/src/modules/common/MediaDisplay.tsx @@ -1,26 +1,18 @@ -import { - Image, - Group, - Title, - Badge, - Text, - ActionIcon, - Anchor, - ScrollArea, - createStyles, - Stack, - Button, -} from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; -import { IconLink } from '@tabler/icons'; +import { Badge, Button, Group, Image, Stack, Text, Title } from '@mantine/core'; +import { IconDownload, IconExternalLink, IconPlayerPlay } from '@tabler/icons'; +import { useState } from 'react'; import { useConfig } from '../../tools/state'; import { serviceItem } from '../../tools/types'; +import { RequestModal } from '../overseerr/RequestModal'; +import { Result } from '../overseerr/SearchResult'; export interface IMedia { overview: string; imdbId?: any; artist?: string; - title: string; + title?: string; + type: 'movie' | 'tvshow' | 'book' | 'music' | 'overseer'; + episodetitle?: string; voteAverage?: string; poster?: string; genres: string[]; @@ -30,83 +22,24 @@ export interface IMedia { [key: string]: any; } -const useStyles = createStyles((theme) => ({ - overview: { - [theme.fn.largerThan('sm')]: { - width: 400, - }, - }, -})); - -export function MediaDisplay(props: { media: IMedia }) { - const { media }: { media: IMedia } = props; - const { classes, cx } = useStyles(); - const phone = useMediaQuery('(min-width: 800px)'); +export function OverseerrMediaDisplay(props: any) { + const { media }: { media: Result } = props; return ( - - - {media.poster && ( - {media.title} - )} - - - {media.title} - {media.artist && New release from {media.artist}} - {(media.episodeNumber || media.seasonNumber) && ( - - Season {media.seasonNumber}{' '} - {media.episodeNumber && `episode ${media.episodeNumber}`} - - )} - - {media.voteAverage && ( - - )} - {media.imdbId && ( - - - - - - )} - - - {media.overview} - - {media.genres.slice(-5).map((genre: string, i: number) => ( - - {genre} - - ))} - - - - + ); } @@ -127,11 +60,14 @@ export function ReadarrMediaDisplay(props: any) { return ( ); @@ -154,6 +90,7 @@ export function LidarrMediaDisplay(props: any) { return ( image.coverType === 'poster'); - // Return a movie poster containting the title and the description return ( image.coverType === 'poster')?.url ?? undefined, + voteAverage: media.ratings.tmdb.value.toString() ?? undefined, + imdbId: media.imdbId ?? undefined, + type: 'movie', }} /> ); @@ -190,14 +128,106 @@ export function SonarrMediaDisplay(props: any) { return ( ); } + +export function MediaDisplay({ media }: { media: IMedia }) { + const [opened, setOpened] = useState(false); + return ( + + + + + + {media.title} + + + {media.type === 'tvshow' && ( + + s{media.seasonNumber}e{media.episodeNumber} - {media.episodetitle} + + )} + {media.type === 'music' && ( + + {media.artist} + + )} + {media.type === 'movie' && ( + + Radarr + + )} + {media.type === 'book' && ( + + Readarr + + )} + {media.genres.slice(0, 2).map((genre) => ( + + {genre} + + ))} + + + {media.overview} + + + + {media.plexUrl && ( + + )} + {media.imdbId && ( + + )} + {media.type === 'overseer' && ( + <> + + + + )} + + + + ); +} diff --git a/src/modules/overseerr/OverseerrMediaDisplay.tsx b/src/modules/overseerr/OverseerrMediaDisplay.tsx deleted file mode 100644 index 2e160030f..000000000 --- a/src/modules/overseerr/OverseerrMediaDisplay.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { MediaDisplay } from '../common'; -import { Result } from './SearchResult'; - -export default function OverseerrMediaDisplay(props: any) { - const { media }: { media: Result } = props; - return ( - - ); -} diff --git a/src/modules/overseerr/OverseerrModule.tsx b/src/modules/overseerr/OverseerrModule.tsx index 9ba95c6d7..4f8e44802 100644 --- a/src/modules/overseerr/OverseerrModule.tsx +++ b/src/modules/overseerr/OverseerrModule.tsx @@ -1,6 +1,6 @@ import { IconEyeglass } from '@tabler/icons'; +import { OverseerrMediaDisplay } from '../common'; import { IModule } from '../ModuleTypes'; -import OverseerrMediaDisplay from './OverseerrMediaDisplay'; export const OverseerrModule: IModule = { title: 'Overseerr',