import React, { useState, useEffect } from 'react'; import { Download, Plus, ArrowUpDown, ArrowUp, ArrowDown, X, AlertCircle } from 'lucide-react'; interface University { id: string; empresa: string; nomeUniversidade: string; anoFormatura: number; semestre: number; cursos: string[]; } const UniversityManagement: React.FC = () => { const [universities, setUniversities] = useState([ { id: '1', empresa: 'PhotoPro Studio', nomeUniversidade: 'UFPR - Universidade Federal do Paraná', anoFormatura: 2025, semestre: 2, cursos: ['Medicina', 'Direito', 'Engenharia Civil'] }, { id: '2', empresa: 'Lens & Art', nomeUniversidade: 'PUC-PR - Pontifícia Universidade Católica do Paraná', anoFormatura: 2025, semestre: 1, cursos: ['Administração', 'Arquitetura', 'Psicologia'] } ]); const [showAddModal, setShowAddModal] = useState(false); const [showEditModal, setShowEditModal] = useState(false); const [selectedUniversity, setSelectedUniversity] = useState(null); const [sortConfig, setSortConfig] = useState<{ key: keyof University; direction: 'asc' | 'desc' } | null>(null); // Estados para dados da API const [cursos, setCursos] = useState([]); const [empresas, setEmpresas] = useState([]); const [apiError, setApiError] = useState(''); const [loadingApi, setLoadingApi] = useState(false); // Form state const [formData, setFormData] = useState>({ empresa: '', nomeUniversidade: '', anoFormatura: new Date().getFullYear(), semestre: 1, cursos: [] }); // Estados para seleção de cursos const [selectedCursos, setSelectedCursos] = useState([]); const [cursoInput, setCursoInput] = useState(''); // Carregar dados da API const loadApiData = async () => { setLoadingApi(true); setApiError(''); try { const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:3000'; // Carregar cursos try { const cursosRes = await fetch(`${API_BASE_URL}/api/cursos`); if (cursosRes.ok) { const cursosData = await cursosRes.json(); setCursos(cursosData); } } catch (error) { console.error('Erro ao carregar cursos:', error); } // Carregar empresas try { const empRes = await fetch(`${API_BASE_URL}/api/empresas`); if (empRes.ok) { const empData = await empRes.json(); setEmpresas(empData); } } catch (error) { console.error('Erro ao carregar empresas:', error); } if (cursos.length === 0 && empresas.length === 0) { setApiError('Backend não está rodando. Alguns campos podem não estar disponíveis.'); } } catch (error) { setApiError('Backend não está rodando. Alguns campos podem não estar disponíveis.'); } finally { setLoadingApi(false); } }; useEffect(() => { if (showAddModal || showEditModal) { loadApiData(); } }, [showAddModal, showEditModal]); // Ordenação const handleSort = (key: keyof University) => { if (sortConfig && sortConfig.key === key) { if (sortConfig.direction === 'asc') { setSortConfig({ key, direction: 'desc' }); } else { setSortConfig(null); } } else { setSortConfig({ key, direction: 'asc' }); } }; const sortedUniversities = React.useMemo(() => { let sortableUniversities = [...universities]; if (sortConfig !== null) { sortableUniversities.sort((a, b) => { const aValue = a[sortConfig.key]; const bValue = b[sortConfig.key]; if (aValue < bValue) { return sortConfig.direction === 'asc' ? -1 : 1; } if (aValue > bValue) { return sortConfig.direction === 'asc' ? 1 : -1; } return 0; }); } return sortableUniversities; }, [universities, sortConfig]); const getSortIcon = (key: keyof University) => { if (sortConfig?.key !== key) { return ; } if (sortConfig.direction === 'asc') { return ; } return ; }; // Handlers const handleAddUniversity = () => { setFormData({ empresa: '', nomeUniversidade: '', semestre: 1, anoFormatura: new Date().getFullYear(), cursos: [] }); setSelectedCursos([]); setShowAddModal(true); }; const handleEditUniversity = (university: University) => { setSelectedUniversity(university); setFormData(university); setSelectedCursos(university.cursos || []); setShowEditModal(true); }; const handleAddCurso = () => { if (cursoInput && !selectedCursos.includes(cursoInput)) { setSelectedCursos([...selectedCursos, cursoInput]); setCursoInput(''); } }; const handleRemoveCurso = (curso: string) => { setSelectedCursos(selectedCursos.filter(c => c !== curso)); }; const handleSaveUniversity = () => { const updatedData = { ...formData, cursos: selectedCursos }; if (showEditModal && selectedUniversity) { setUniversities(universities.map(u => u.id === selectedUniversity.id ? { ...updatedData, id: selectedUniversity.id } as University : u )); setShowEditModal(false); } else { const newUniversity: University = { ...updatedData, id: Date.now().toString() } as University; setUniversities([...universities, newUniversity]); setShowAddModal(false); } setSelectedUniversity(null); setSelectedCursos([]); }; const handleExport = () => { const headers = ['Empresa', 'Nome da Universidade', 'Ano Formatura', 'Cursos']; const csvContent = [ headers.join(','), ...universities.map(u => [ u.empresa, `"${u.nomeUniversidade}"`, `${u.anoFormatura}.${u.semestre}`, `"${u.cursos.join(', ')}"` ].join(',')) ].join('\n'); const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }); const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = `universidades_${new Date().toISOString().split('T')[0]}.csv`; link.click(); }; return (
{/* Header */}

Gestão de Universidades

Cadastro e gerenciamento de universidades

{/* Tabela */}
{[ { key: 'empresa', label: 'Empresa' }, { key: 'nomeUniversidade', label: 'Nome da Universidade' }, { key: 'anoFormatura', label: 'Ano Formatura' }, { key: 'cursos', label: 'Cursos' } ].map((column) => ( ))} {sortedUniversities.map((university) => ( handleEditUniversity(university)} className="hover:bg-gray-50 cursor-pointer transition-colors" > ))}
handleSort(column.key as keyof University)} className="px-4 py-3 text-left font-semibold text-gray-700 cursor-pointer hover:bg-gray-100 transition-colors whitespace-nowrap group" >
{column.label} {getSortIcon(column.key as keyof University)}
{university.empresa} {university.nomeUniversidade} {university.anoFormatura}.{university.semestre}
{university.cursos.map((curso, idx) => ( {curso} ))}
{sortedUniversities.length === 0 && (
Nenhuma universidade cadastrada
)}
{/* Modal Adicionar/Editar */} {(showAddModal || showEditModal) && (

{showEditModal ? 'Editar Universidade' : 'Cadastrar Universidade'}

{apiError && (

Aviso

{apiError}

)}
{/* Empresa */}
{/* Nome da Universidade */}
setFormData({ ...formData, nomeUniversidade: e.target.value })} className="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-brand-gold focus:border-transparent" placeholder="Ex: UFPR - Universidade Federal do Paraná" />
{/* Ano Formatura */}
setFormData({ ...formData, anoFormatura: parseInt(e.target.value) })} className="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-brand-gold focus:border-transparent" placeholder="2025" />
{/* Cursos */}
{/* Lista de cursos selecionados */}
{selectedCursos.map((curso, idx) => ( {curso} ))}
{selectedCursos.length === 0 && (

Nenhum curso selecionado

)}
{/* Botões */}
)}
); }; export default UniversityManagement;