'use client' import { FileItem } from '@/app/components/tanstak-table/TanstakTable'; import { useEffect, useState, useRef } from 'react'; import { useTranslations } from 'next-intl'; import { useQueryClient } from '@tanstack/react-query'; import { createPortal } from 'react-dom'; import { setMonitoring } from '@/app/actions/monitoringActions'; import { toast } from 'sonner'; export function MonitoringDropDown({ file }: { file: FileItem }) { const [isOpen, setIsOpen] = useState(false); const [currentMonitoringStatus, setCurrentMonitoringStatus] = useState(file.monitoring); const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0, width: 0 }); const dropdownRef = useRef(null); const buttonRef = useRef(null); const t = useTranslations('Monitoring-status'); const queryClient = useQueryClient(); useEffect(() => { if (!isOpen) return; const handleClick = (event: MouseEvent) => { if (!dropdownRef?.current) { return; } if (!buttonRef?.current) { return; } if (buttonRef?.current.contains(event.target as Node)) { return; } if (!dropdownRef.current.contains(event.target as Node)) { setIsOpen(false); } }; document.addEventListener('mousedown', handleClick); return () => { document.removeEventListener('mousedown', handleClick); }; }, [dropdownRef, setIsOpen, isOpen]); /* useEffect(() => { if (file.monitoring) { setCurrentMonitoringStatus(file.monitoring ? file.monitoring : 'NONE'); } }, [file.monitoring]); */ useEffect(() => { if (isOpen && buttonRef.current) { const rect = buttonRef.current.getBoundingClientRect(); setDropdownPosition({ top: rect.bottom + window.scrollY, left: rect.left + window.scrollX, width: rect.width }); } }, [isOpen]); async function clickHandler(monitoring: string) { const response = await setMonitoring(file.id, monitoring); if (response.success) { await queryClient.invalidateQueries({ queryKey: ['userFilesData'] }); setIsOpen(false); toast.success(t('the-file-is monitored', { fileName: file.fileName })); setCurrentMonitoringStatus(monitoring); } else { toast.warning(t('failed-to-establish-monitoring')); } } return (
{isOpen && createPortal(
  • { clickHandler('NONE') }} > {t('NONE')}
  • { clickHandler('MONITORING_DAILY') }} > {t('MONITORING_DAILY')}
  • { clickHandler('MONITORING_WEEKLY') }} > {t('MONITORING_WEEKLY')}
  • { clickHandler('MONITORING_MONTHLY') }} > {t('MONITORING_MONTHLY')}
, document.body )}
) }