import {Title} from '@app/titles/models/title'; import {Episode, EPISODE_MODEL} from '@app/titles/models/episode'; import {Dialog} from '@common/ui/overlays/dialog/dialog'; import {DialogBody} from '@common/ui/overlays/dialog/dialog-body'; import {Trans} from '@common/i18n/trans'; import {TitlePoster} from '@app/titles/title-poster/title-poster'; import {useState} from 'react'; import {Button} from '@common/ui/buttons/button'; import {useCreateReview} from '@app/reviews/requests/use-create-review'; import {useDialogContext} from '@common/ui/overlays/dialog/dialog-context'; import {useDeleteReviews} from '@app/reviews/requests/use-delete-reviews'; import {DialogHeader} from '@common/ui/overlays/dialog/dialog-header'; import {EpisodePoster} from '@app/episodes/episode-poster/episode-poster'; import {TitleLink} from '@app/titles/title-link'; import {CompactSeasonEpisode} from '@app/episodes/compact-season-episode'; import {StarSelector} from '@app/reviews/review-list/star-selector'; interface Props { title: Title; episode?: Episode; initialRating?: {id: number; score: number}; } export function RatingDialog({title, episode, initialRating}: Props) { const item = episode || title; const createReview = useCreateReview(); const deleteReview = useDeleteReviews(); const {close} = useDialogContext(); const [currentRating, setCurrentRating] = useState(initialRating?.score || 0); const handleCreateReview = () => { if (currentRating) { createReview.mutate( {reviewable: item, score: currentRating}, { onSuccess: () => close(), }, ); } }; const handleDeleteReview = () => { if (initialRating) { deleteReview.mutate( {reviewIds: [initialRating.id]}, { onSuccess: () => close(), }, ); } }; return ( {item.model_type === EPISODE_MODEL ? ( ) : ( )}
{initialRating && ( )}
); } interface TitleDetailsProps { title: Title; } function TitleDetails({title}: TitleDetailsProps) { return (
{title.name}
{title.year}
); } interface EpisodeDetailsProps { title: Title; episode: Episode; } function EpisodeDetails({title, episode}: EpisodeDetailsProps) { return (
{episode.name} ()
); } interface DialogTitleProps { item: Title | Episode; } function DialogTitle({item}: DialogTitleProps) { if (item.model_type === EPISODE_MODEL) { return ; } else if (item.is_series) { return ; } else { return ; } }