import React, { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Plus, Edit, Save, X, ChevronUp, ChevronDown } from 'lucide-react'; import { useApontamentosProducao } from '@/hooks/useApontamentosProducao'; import { toast } from 'sonner'; type SortField = 'ordem' | 'nome' | 'descricao' | 'ativo'; type SortDirection = 'asc' | 'desc'; export const ProcessosList = () => { const [showForm, setShowForm] = useState(false); const [editingId, setEditingId] = useState(null); const [sortField, setSortField] = useState('ordem'); const [sortDirection, setSortDirection] = useState('asc'); const [formData, setFormData] = useState({ nome: '', descricao: '', ordem: 0 }); const { processos, loading, criarProcesso, atualizarProcesso } = useApontamentosProducao(); const handleSort = (field: SortField) => { if (sortField === field) { setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc'); } else { setSortField(field); setSortDirection('asc'); } }; const sortedProcessos = React.useMemo(() => { return [...processos].sort((a, b) => { let aValue: any; let bValue: any; switch (sortField) { case 'ordem': aValue = a.ordem; bValue = b.ordem; break; case 'nome': aValue = a.nome; bValue = b.nome; break; case 'descricao': aValue = a.descricao || ''; bValue = b.descricao || ''; break; case 'ativo': aValue = a.ativo; bValue = b.ativo; break; default: return 0; } if (aValue < bValue) return sortDirection === 'asc' ? -1 : 1; if (aValue > bValue) return sortDirection === 'asc' ? 1 : -1; return 0; }); }, [processos, sortField, sortDirection]); const SortButton = ({ field, children }: { field: SortField; children: React.ReactNode }) => ( ); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.nome.trim()) { toast.error('Nome do processo é obrigatório'); return; } let result; if (editingId) { result = await atualizarProcesso(editingId, formData); } else { result = await criarProcesso({ ...formData, ativo: true }); } if (result.success) { setFormData({ nome: '', descricao: '', ordem: 0 }); setShowForm(false); setEditingId(null); } }; const handleEdit = (processo: any) => { setFormData({ nome: processo.nome, descricao: processo.descricao || '', ordem: processo.ordem || 0 }); setEditingId(processo.id); setShowForm(true); }; const handleCancel = () => { setFormData({ nome: '', descricao: '', ordem: 0 }); setShowForm(false); setEditingId(null); }; if (loading) { return (
Carregando processos...
); } return (

Processos de Fabricação

{showForm && ( {editingId ? 'Editar Processo' : 'Novo Processo'}
setFormData(prev => ({ ...prev, nome: e.target.value }))} placeholder="Nome do processo" />
setFormData(prev => ({ ...prev, ordem: parseInt(e.target.value) || 0 }))} placeholder="0" />