import React, { useState } from 'react'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { toast } from 'sonner'; import { usePecas, Peca } from '@/hooks/usePecas'; import { usePecasP4Listener } from '@/hooks/usePecasP4Listener'; import { PecaForm } from '@/components/pecas/PecaForm'; import { PecasTable } from '@/components/pecas/PecasTable'; import { ComponentesPopup } from '@/components/pecas/ComponentesPopup'; import { Package, Plus, RefreshCw } from 'lucide-react'; import { usePermissionControl } from '@/hooks/usePermissionControl'; export default function CadastroPecas() { // Inicializar listener para peças P4 usePecasP4Listener(); const { pecas, loading, ofNumbers, savePeca, updatePeca, deletePeca, deletePecasBatch, importCSV, importPecas, undoLastImport, deleteLastImport, hasRecentImport, loadPecas, sincronizarPrioridades } = usePecas(); const { canCreate, canEdit, canDelete } = usePermissionControl(); const [saving, setSaving] = useState(false); const [syncing, setSyncing] = useState(false); const [editingPeca, setEditingPeca] = useState(null); const [showForm, setShowForm] = useState(false); const [selectedPecaForPopup, setSelectedPecaForPopup] = useState(null); const handleSave = async (formData: any) => { if (!canCreate()) return false; setSaving(true); try { const success = await savePeca(formData); if (success) { setShowForm(false); } return success; } finally { setSaving(false); } }; const handleUpdate = async (id: string, formData: any) => { if (!canEdit()) return false; setSaving(true); try { const success = await updatePeca(id, formData); if (success) { setEditingPeca(null); setShowForm(false); } return success; } finally { setSaving(false); } }; const handleDelete = async (pecaId: string) => { if (!canDelete()) return; if (confirm('Tem certeza que deseja apagar esta peça e seus vínculos?')) { await deletePeca(pecaId); } }; const handleDeleteBatch = async (pecaIds: string[]) => { if (!canDelete()) return; await deletePecasBatch(pecaIds); }; const handleEdit = (peca: Peca) => { if (!canEdit()) return; setEditingPeca(peca); setShowForm(true); }; const handleCancelEdit = () => { setEditingPeca(null); setShowForm(false); }; const handleDeleteLastImport = async () => { if (!canDelete()) return; if (confirm('Tem certeza que deseja apagar todas as peças da última importação?')) { await deleteLastImport(); } }; const handleOpenComponentPopup = (pecaId: string) => { const found = pecas.find(p => p.id === pecaId); if (found) { setSelectedPecaForPopup(found); } else { toast.error('Peça não encontrada'); } }; const handleImportPecas = async (pecasData: any[]) => { if (!canCreate()) { toast.error('Você não tem permissão para importar peças'); throw new Error('Sem permissão'); } try { await importPecas(pecasData); } catch (error) { throw error; } }; const handleImportCSV = async (file: File): Promise => { if (!canCreate()) { toast.error('Você não tem permissão para importar peças'); return false; } try { await importCSV(file); return true; } catch (error) { console.error('Erro ao importar CSV:', error); return false; } }; const handleSyncPriorities = async () => { setSyncing(true); try { await sincronizarPrioridades(); toast.success('Prioridades sincronizadas com sucesso!'); } catch (error) { console.error('Erro ao sincronizar prioridades:', error); toast.error('Erro ao sincronizar prioridades'); } finally { setSyncing(false); } }; if (loading) { return (
Carregando cadastro de peças...
); } return (
{/* Header */}

Cadastro de Peças

Gerencie o cadastro de peças do sistema. ℹ️ As prioridades são controladas automaticamente pelo sistema de Prioridades de Fabricação e são sincronizadas em tempo real.

{pecas.length} {pecas.length === 1 ? 'peça' : 'peças'} {canCreate() && ( )}
{/* Form Card */} {showForm && canCreate() && ( {editingPeca ? 'Editar Peça' : 'Nova Peça'} )} {/* Table Card */} Peças Cadastradas {/* Modal de Gerenciamento de Componentes */} {selectedPecaForPopup && ( { setSelectedPecaForPopup(null); loadPecas(); }} peca={selectedPecaForPopup} /> )}
); }