9a72ba3064
Split DetailView into focused tab components (Overview, Cast, Seasons, Tracks, Series) and moved related UI/logic into src/components/details/tabs/*. DetailView now composes these tabs and accepts allMedia for series lookups; MediaDetailRoute forwards allMedia. Support for series was added across the stack: API types and converters now include series, Media type gained series and cleanname fields, and BrowseView now lists/filters by series (label updated to 'Series' and dropdown default changed to '--- Alle ---'). Playnite importer: introduced PlayniteImportOptions (limit, nameFilter), added UI inputs to ImporterView, increased existing media fetch limit, added name filtering, import limiting, deduplication and improved cleanname-based matching/logging. Adjusted progress/total handling to account for deduped items.
28 lines
784 B
TypeScript
28 lines
784 B
TypeScript
import { Media } from '@/types';
|
|
import { Badge } from '@/components/ui/badge';
|
|
|
|
interface OverviewTabProps {
|
|
media: Media;
|
|
}
|
|
|
|
export default function OverviewTab({ media }: OverviewTabProps) {
|
|
return (
|
|
<>
|
|
{/* Genre Tags */}
|
|
<div className="flex flex-wrap gap-2 mb-6">
|
|
{media.genres?.map(genre => (
|
|
<Badge key={genre} variant="secondary" className="bg-muted/50 text-foreground hover:bg-muted/80 border border-border/50 px-3 py-1 font-bold text-sm">
|
|
{genre}
|
|
</Badge>
|
|
))}
|
|
</div>
|
|
|
|
{/* Description */}
|
|
<div
|
|
className="text-foreground leading-relaxed mb-8 max-w-4xl prose prose-sm dark:prose-invert"
|
|
dangerouslySetInnerHTML={{ __html: media.description || '' }}
|
|
/>
|
|
</>
|
|
);
|
|
}
|