import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { ChevronDown, ChevronRight, Plus, Wand2 } from 'lucide-react' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { qk } from '@/shared/api/query-keys' import type { CollectionSuggestionDto } from '@/shared/api/types' import { useApiError } from '@/shared/lib/use-api-error' import { Badge } from '@/shared/ui/badge' import { Button } from '@/shared/ui/button' import { toast } from '@/shared/ui/toast-store' import { addShowsFromSuggestion, createCollectionFromSuggestion, suggestCollections } from './api' /** * Что стоит собрать во франшизу. Состав виден целиком до создания — по названиям иногда * промахивается, и проверить глазами должно быть проще, чем разбирать потом. * * Уже созданное по умолчанию скрыто: строка без кнопки — шум. Счётчик скрытого остаётся видимым, * чтобы предложение не выглядело пропавшим бесследно. */ export function CollectionSuggestions() { const { t } = useTranslation() const queryClient = useQueryClient() const onError = useApiError() // Свёрнуто по умолчанию: предложения — подсказка, а не главное на экране, и развёрнутый // список из десятка строк отодвигал бы сам справочник за нижний край. const [collapsed, setCollapsed] = useState(true) const [showExisting, setShowExisting] = useState(false) const { data, isLoading } = useQuery({ queryKey: qk.collections.suggestions, queryFn: suggestCollections, }) const invalidate = () => { void queryClient.invalidateQueries({ queryKey: qk.collections.all }) void queryClient.invalidateQueries({ queryKey: qk.collections.suggestions }) void queryClient.invalidateQueries({ queryKey: qk.shows.all }) } const create = useMutation({ mutationFn: (suggestion: CollectionSuggestionDto) => createCollectionFromSuggestion(suggestion.key), onSuccess: () => { toast.success(t('admin.collections.suggestions.created')) invalidate() }, onError, }) /** Дополнение уже собранной франшизы: коллекцию сервер находит по тому же ключу предложения. */ const add = useMutation({ mutationFn: (suggestion: CollectionSuggestionDto) => addShowsFromSuggestion(suggestion.key), onSuccess: (added) => { toast.success(t('admin.collections.suggestions.added', { count: added })) invalidate() }, onError, }) if (isLoading || !data || data.length === 0) return null const fresh = data.filter((s) => !s.alreadyExists) const existing = data.length - fresh.length const visible = showExisting ? data : fresh return (
{!collapsed && ( <>

{t('admin.collections.suggestions.hint')}

{visible.length === 0 && (

{t('admin.collections.suggestions.allCreated')}

)} {existing > 0 && ( )} )}
) }