import { useMutation } from '@tanstack/react-query' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { AUDIENCE_UNSET, SHOW_AUDIENCES, type ShowAudience, type ShowKind, } from '@/shared/api/types' import { useApiError } from '@/shared/lib/use-api-error' import { Button } from '@/shared/ui/button' import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/shared/ui/dialog' import { Input } from '@/shared/ui/input' import { Label } from '@/shared/ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/shared/ui/select' import { createShow } from './api' /** * Заведение шоу. Отдельным окном, а не строкой над таблицей: поля создания стояли вплотную к полям * фильтра, и в них постоянно начинали искать. */ export function CreateShowDialog({ onClose, onCreated, }: Readonly<{ onClose: () => void; onCreated: () => void }>) { const { t } = useTranslation() const onError = useApiError() const [name, setName] = useState('') const [originalName, setOriginalName] = useState('') const [kind, setKind] = useState('Series') // Новое шоу заводится без рейтинга: проставят метаданные либо админ руками. const [audience, setAudience] = useState(null) const createMutation = useMutation({ mutationFn: () => createShow({ name: name.trim(), kind, originalName: originalName.trim() || undefined, audience, }), onSuccess: () => { onCreated() onClose() }, onError, }) const submit = () => { if (name.trim() && !createMutation.isPending) createMutation.mutate() } return ( !open && onClose()}> {t('admin.shows.createTitle')}
setName(e.target.value)} // Enter в единственном обязательном поле — самый быстрый путь: форма короткая. onKeyDown={(e) => e.key === 'Enter' && submit()} />
setOriginalName(e.target.value)} />
) }