import React, { useState, useEffect } from 'react'; import { Dialog } from '@headlessui/react'; import { useForm } from 'react-hook-form'; import { useQuery } from 'react-query'; import { DatePicker } from '@mui/x-date-pickers'; import { Tarefa } from '../../types/entities'; import { XMarkIcon } from '@heroicons/react/24/outline'; import { SubtarefasList } from './SubtarefasList'; import { ComentariosList } from './ComentariosList'; import api from '../../services/api'; import { useTarefas } from '../../hooks/useTarefas'; interface TarefaModalProps { isOpen: boolean; onClose: () => void; tarefa?: Tarefa | null; } export const TarefaModal: React.FC = ({ isOpen, onClose, tarefa }) => { const [activeTab, setActiveTab] = useState('detalhes'); const { register, handleSubmit, reset, setValue, watch } = useForm(); const [loading, setLoading] = useState(false); const { createTarefa, updateTarefa } = useTarefas(); // Buscar usuários para atribuição const { data: usuarios = [] } = useQuery('usuarios', async () => { const response = await api.get('/usuarios'); return response.data; }); // Buscar processos ativos const { data: processos = [] } = useQuery('processos', async () => { const response = await api.get('/processos'); return response.data; }); useEffect(() => { if (tarefa) { reset(tarefa); } else { reset({ status: 'PENDENTE', prioridade: 'MEDIA', progresso: 0, etiquetas: [], subtarefas: [], comentarios: [] }); } }, [tarefa, reset]); useEffect(() => { if (tarefa && isOpen) { reset({ ...tarefa, dataInicio: new Date(tarefa.dataInicio), dataVencimento: new Date(tarefa.dataVencimento) }); } }, [tarefa, isOpen, reset]); const onSubmit = async (data: any) => { try { setLoading(true); // Preparar dados removendo campos que não devem ser enviados const dadosParaEnviar = { ...data, responsavelId: data.responsavelId, // Remover campos que não devem ser enviados id: undefined, criadoEm: undefined, atualizadoEm: undefined }; if (tarefa) { // Para edição, enviar id separadamente await updateTarefa.mutateAsync({ id: tarefa.id, data: dadosParaEnviar }); } else { await createTarefa.mutateAsync(dadosParaEnviar); } onClose(); } catch (error) { console.error('Erro ao salvar tarefa:', error); alert('Erro ao salvar tarefa. Por favor, tente novamente.'); } finally { setLoading(false); } }; const tabs = [ { id: 'detalhes', label: 'Detalhes' }, { id: 'subtarefas', label: 'Subtarefas' }, { id: 'comentarios', label: 'Comentários' }, ]; return (
{/* Header */}
{tarefa ? 'Editar Tarefa' : 'Nova Tarefa'}
{/* Tabs */}
{tabs.map(tab => ( ))}
{/* Content */}
{/* Conteúdo das tabs */}
{activeTab === 'detalhes' && (