import React, { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Checkbox } from '@/components/ui/checkbox'; import { Edit3, Save, X } from 'lucide-react'; import { toast } from 'sonner'; interface BatchEditButtonProps { selectedPecas: Set; onBatchUpdate: (updates: BatchUpdateData) => Promise; disabled?: boolean; } interface BatchUpdateData { peso_unitario?: number; observacoes?: string; material?: string; perfil_principal?: string; tem_componentes?: boolean; } export const BatchEditButton: React.FC = ({ selectedPecas, onBatchUpdate, disabled = false }) => { const [isOpen, setIsOpen] = useState(false); const [isUpdating, setIsUpdating] = useState(false); const [updates, setUpdates] = useState({}); const [componentesState, setComponentesState] = useState<'sem' | 'com' | null>(null); const handleUpdate = async () => { if (Object.keys(updates).length === 0) { toast.error('Selecione pelo menos um campo para atualizar'); return; } setIsUpdating(true); try { await onBatchUpdate(updates); toast.success(`${selectedPecas.size} peças atualizadas com sucesso!`); setIsOpen(false); setUpdates({}); setComponentesState(null); } catch (error) { toast.error('Erro ao atualizar peças'); } finally { setIsUpdating(false); } }; const handleClose = () => { setIsOpen(false); setUpdates({}); setComponentesState(null); }; const handleSemComponentesChange = (checked: boolean) => { if (checked) { setComponentesState('sem'); setUpdates(prev => ({ ...prev, tem_componentes: false })); } else { setComponentesState(null); const newUpdates = { ...updates }; delete newUpdates.tem_componentes; setUpdates(newUpdates); } }; const handleComComponentesChange = (checked: boolean) => { if (checked) { setComponentesState('com'); setUpdates(prev => ({ ...prev, tem_componentes: true })); } else { setComponentesState(null); const newUpdates = { ...updates }; delete newUpdates.tem_componentes; setUpdates(newUpdates); } }; return ( Editar Peças em Lote
Atualizando {selectedPecas.size} peças selecionadas
setUpdates(prev => ({ ...prev, material: e.target.value || undefined }))} />
setUpdates(prev => ({ ...prev, perfil_principal: e.target.value || undefined }))} />
setUpdates(prev => ({ ...prev, peso_unitario: e.target.value ? parseFloat(e.target.value) : undefined }))} />
setUpdates(prev => ({ ...prev, observacoes: e.target.value || undefined }))} />
); };