import { useState } from 'react' import { type Table } from '@tanstack/react-table' import { Trash2, CircleArrowUp, ArrowUpDown, Download } from 'lucide-react' import { toast } from 'sonner' import { sleep } from '@/utils/sleep' import { Button } from '@/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip' import { DataTableBulkActions as BulkActionsToolbar } from '@/components/data-table' import { priorities, statuses } from '../data/data' import { type Task } from '../data/schema' import { TasksMultiDeleteDialog } from './tasks-multi-delete-dialog' type DataTableBulkActionsProps = { table: Table } export function DataTableBulkActions({ table, }: DataTableBulkActionsProps) { const [showDeleteConfirm, setShowDeleteConfirm] = useState(false) const selectedRows = table.getFilteredSelectedRowModel().rows const handleBulkStatusChange = (status: string) => { const selectedTasks = selectedRows.map((row) => row.original as Task) toast.promise(sleep(2000), { loading: 'Updating status...', success: () => { table.resetRowSelection() return `Status updated to "${status}" for ${selectedTasks.length} task${selectedTasks.length > 1 ? 's' : ''}.` }, error: 'Error', }) table.resetRowSelection() } const handleBulkPriorityChange = (priority: string) => { const selectedTasks = selectedRows.map((row) => row.original as Task) toast.promise(sleep(2000), { loading: 'Updating priority...', success: () => { table.resetRowSelection() return `Priority updated to "${priority}" for ${selectedTasks.length} task${selectedTasks.length > 1 ? 's' : ''}.` }, error: 'Error', }) table.resetRowSelection() } const handleBulkExport = () => { const selectedTasks = selectedRows.map((row) => row.original as Task) toast.promise(sleep(2000), { loading: 'Exporting tasks...', success: () => { table.resetRowSelection() return `Exported ${selectedTasks.length} task${selectedTasks.length > 1 ? 's' : ''} to CSV.` }, error: 'Error', }) table.resetRowSelection() } return ( <>

Update status

{statuses.map((status) => ( handleBulkStatusChange(status.value)} > {status.icon && ( )} {status.label} ))}

Update priority

{priorities.map((priority) => ( handleBulkPriorityChange(priority.value)} > {priority.icon && ( )} {priority.label} ))}

Export tasks

Delete selected tasks

) }