import { useState } from 'react' import { DotsHorizontalIcon } from '@radix-ui/react-icons' import { type Row } from '@tanstack/react-table' import { evaluationsService } from '@/services/evaluations.service' import { type Evaluation } from '@/types/evaluations.types' import { CircleCheck, Download, Eye, Pencil, RefreshCcw, Trash2, } from 'lucide-react' import { toast } from 'sonner' import { downloadFromUrl } from '@/lib/downloadFromUrl' import { PERMISSIONS } from '@/constants/permissions' import { useCan } from '@/hooks/use-can' import { Button } from '@/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { useEvaluations } from './evaluations-provider' interface Props { row: Row } export function DataTableRowActions({ row }: Props) { const { setOpen, setCurrentRow } = useEvaluations() const { can } = useCan() const canUpdate = can(PERMISSIONS.evaluations.update) const canDelete = can(PERMISSIONS.evaluations.delete) const [isDownloading, setIsDownloading] = useState(false) const evaluations = row.original const handleShowConfirmRetry = () => { setCurrentRow(evaluations) setOpen('retry') } const handleView = () => { setCurrentRow(evaluations) setOpen('view') } const handleShowConfirmApprove = () => { setCurrentRow(evaluations) setOpen('approve') } const handleEdit = () => { setCurrentRow(evaluations) setOpen('edit') } const handleDelete = () => { setCurrentRow(evaluations) setOpen('delete') } const handleDownloadVideo = async () => { setIsDownloading(true) const toastId = toast.loading('در حال دانلود ویدیو...') try { let media = evaluations.media?.[0] if (!media?.url) { const detail = await evaluationsService.detail(evaluations.id) media = detail?.media?.[0] } if (!media?.url) { toast.error('ویدیویی برای دانلود یافت نشد.', { id: toastId }) return } const filename = media.name || `evaluation-${evaluations.id}.${media.extension || 'mp4'}` await downloadFromUrl(media.url, filename) toast.success('دانلود ویدیو شروع شد.', { id: toastId }) } catch { toast.error('خطا در دانلود ویدیو!', { id: toastId }) } finally { setIsDownloading(false) } } return ( مشاهده {canUpdate && ( ویرایش ارزیابی )} دانلود ویدیو {canUpdate && ( تایید ارزیابی )} {canUpdate && ( ارزیابی مجدد )} {canDelete && ( <> حذف ارزیابی )} ) }