'use client' import { useQuery, useQueryClient } from '@tanstack/react-query'; import { useTranslations } from 'next-intl'; import { getViolationSearchStatus, startGlobalMonitoring } from '@/app/actions/violationActions'; import { useEffect, useRef, useState } from 'react'; import ModalWindow from '@/app/components/ModalWindow'; import { toast } from 'sonner'; interface violationSearchStatus { taskId?: string, userId?: number, searchType?: 'all_files' | 'monitoring', status: string, totalFiles?: number, processedFiles?: number, createdAt?: string, updatedAt?: null } export default function ViolationsCheckAllSection() { const { data: violationSearchStatus, isLoading, isError, error } = useQuery({ queryKey: ['violationSearchStatus'], queryFn: () => { return getViolationSearchStatus(); }, select: (data: violationSearchStatus) => { if (data) { return data; } else { return null } }, refetchInterval: (query) => { const status = query.state.data?.status; if (status === 'PROCESSING') { return 10000; } return false; } }); const queryClient = useQueryClient(); const [isProcessing, setIsProcessing] = useState(false); const [openWindow, setOpenWindow] = useState(false); const t = useTranslations('Global'); const previousStatusRef = useRef(''); useEffect(() => { const currentStatus = violationSearchStatus?.status; const previousStatus = previousStatusRef.current; if (currentStatus === 'task-not-found' && previousStatus === 'PROCESSING') { queryClient.invalidateQueries({ queryKey: ['violationData'] }); toast.success(t('violation-data-updated')); } previousStatusRef.current = currentStatus; }, [violationSearchStatus?.status, queryClient]); async function openModalWindow() { await queryClient.invalidateQueries({ queryKey: ['violationSearchStatus'] }); setOpenWindow(true); } async function handlerStartMonitoring(type: 'monitoring' | 'all_files') { setIsProcessing(true); try { const response = await startGlobalMonitoring(type); if (response?.taskId) { toast.success(t('file-verification-started-successfully')); queryClient.invalidateQueries({ queryKey: ['violationSearchStatus'] }); } else { throw 'error' } } catch (error) { toast.error(t('an-error-occurred-while-starting-file-verification')); } finally { setIsProcessing(false); setOpenWindow(false); } } function ConfirmationModal() { return (

Поиск нарушений во всех ваших изображениях

Варианты проверки.
); } return ( <>
{/*
🔍
*/}
Глобальная проверка контента
Поиск нарушений во всех ваших изображениях. Проверка только точных совпадений (95%+).
{(violationSearchStatus && violationSearchStatus?.status !== 'task-not-found') && (
{t('content-verification-status')}: {violationSearchStatus?.status}
)}
) }