"use client" import { bulkDeleteTransactionsAction } from "@/app/(app)/transactions/actions" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { ChevronUp, Trash2 } from "lucide-react" import { useState } from "react" const bulkActions = [ { id: "delete", label: "Bulk Delete", icon: Trash2, variant: "destructive" as const, action: bulkDeleteTransactionsAction, confirmMessage: "Are you sure you want to delete these transactions and all their files? This action cannot be undone.", }, ] interface BulkActionsMenuProps { selectedIds: string[] onActionComplete?: () => void } export function BulkActionsMenu({ selectedIds, onActionComplete }: BulkActionsMenuProps) { const [isLoading, setIsLoading] = useState(false) const handleAction = async (actionId: string) => { const action = bulkActions.find((a) => a.id === actionId) if (!action) return if (action.confirmMessage) { if (!confirm(action.confirmMessage)) return } try { setIsLoading(true) const result = await action.action(selectedIds) if (!result.success) { throw new Error(result.error) } onActionComplete?.() } catch (error) { console.error(`Failed to execute bulk action ${actionId}:`, error) alert(`Failed to execute action: ${error}`) } finally { setIsLoading(false) } } return (
{bulkActions.map((action) => ( handleAction(action.id)} className="gap-2" disabled={isLoading} > {action.label} ))}
) }