import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { AlertTriangle } from 'lucide-react' import { qk } from '@/shared/api/query-keys' import { useApiError } from '@/shared/lib/use-api-error' import { Button } from '@/shared/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/shared/ui/card' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/shared/ui/select' import { toast } from '@/shared/ui/toast-store' import { listShows } from '@/features/admin/shows/api' import { clearAllMedia, deleteAllShows, deleteShowMedia } from './api' export function MaintenancePanel() { const { t } = useTranslation() const queryClient = useQueryClient() const [showId, setShowId] = useState('') const { data: shows } = useQuery({ queryKey: qk.shows.all, queryFn: () => listShows() }) const onError = useApiError() // Затрагиваются медиа/шоу/каналы — сбрасываем все связанные кэши. const invalidateAll = () => { for (const key of [qk.media.all, qk.shows.all, qk.channels.all]) void queryClient.invalidateQueries({ queryKey: key }) } const clearMedia = useMutation({ mutationFn: clearAllMedia, onSuccess: (count) => { toast.success(t('admin.maintenance.doneCount', { count })) invalidateAll() }, onError, }) const clearShows = useMutation({ mutationFn: deleteAllShows, onSuccess: (count) => { toast.success(t('admin.maintenance.doneCount', { count })) invalidateAll() }, onError, }) const clearShowMedia = useMutation({ mutationFn: () => deleteShowMedia(showId), onSuccess: (count) => { setShowId('') toast.success(t('admin.maintenance.doneCount', { count })) invalidateAll() }, onError, }) const confirmed = (message: string, run: () => void) => { if (window.confirm(message)) run() } return (
{t('admin.maintenance.warning')}