```jsx import React, { useState, useEffect } from 'react'; const App = () => { const [userType, setUserType] = useState('guest'); const [currentUser, setCurrentUser] = useState(null); const [activeTab, setActiveTab] = useState('dashboard'); const [jobs, setJobs] = useState([ { id: 1, title: "Desenvolvedor Frontend React", company: "TechCorp Solutions", location: "São Paulo, SP", type: "CLT", salary: "R$ 8.000 - R$ 12.000", experience: "Pleno", deadline: "2024-01-31", applications: 23, status: "active", description: "Empresa de tecnologia busca desenvolvedor frontend com experiência em React.js, Tailwind CSS e APIs RESTful.", requirements: ["3 anos de experiência com React", "Conhecimento em Tailwind CSS", "Git", "APIs RESTful"], benefits: ["Vale-refeição", "Plano de saúde", "Home office", "Bônus anual"] }, { id: 2, title: "Analista de Dados", company: "DataInsight", location: "Remoto", type: "PJ", salary: "R$ 6.000 - R$ 9.000", experience: "Júnior", deadline: "2024-01-25", applications: 18, status: "active", description: "Buscamos analista de dados para trabalhar com Power BI, SQL e Python em projetos de inteligência de negócios.", requirements: ["Conhecimento em SQL", "Power BI", "Python para análise de dados", "Estatística básica"], benefits: ["Flexibilidade de horários", "Treinamentos", "Participação em lucros"] }, { id: 3, title: "Product Manager", company: "Innovatech", location: "Híbrido - Rio de Janeiro", type: "CLT", salary: "R$ 15.000 - R$ 20.000", experience: "Sênior", deadline: "2024-02-15", applications: 31, status: "active", description: "Gerencie produtos digitais em uma empresa de inovação tecnológica com foco em soluções disruptivas.", requirements: ["5 anos de experiência em gestão de produtos", "Metodologias ágeis", "User experience", "Roadmap"], benefits: ["Bônus por performance", "Stock options", "Plano odontológico", "Gympass"] } ]); const [candidates, setCandidates] = useState([ { id: 1, name: "Ana Silva", email: "ana@email.com", experience: "5 anos", skills: ["React", "Node.js", "MongoDB"], score: 85, status: "applied", phone: "(11) 98765-4321", education: "Engenharia de Software", linkedin: "linkedin.com/in/anasilva" }, { id: 2, name: "Carlos Souza", email: "carlos@email.com", experience: "3 anos", skills: ["Vue.js", "Python", "Django"], score: 78, status: "interview", phone: "(21) 91234-5678", education: "Ciência da Computação", linkedin: "linkedin.com/in/carlossouza" }, { id: 3, name: "Mariana Costa", email: "mariana@email.com", experience: "7 anos", skills: ["React", "TypeScript", "AWS"], score: 92, status: "approved", phone: "(31) 99876-5432", education: "Sistemas de Informação", linkedin: "linkedin.com/in/marianacosta" }, { id: 4, name: "Pedro Almeida", email: "pedro@email.com", experience: "2 anos", skills: ["Angular", "Java", "Spring Boot"], score: 71, status: "rejected", phone: "(41) 98765-1234", education: "Análise e Desenvolvimento de Sistemas", linkedin: "linkedin.com/in/pedroalmeida" } ]); const [applications, setApplications] = useState([ { id: 1, candidateId: 1, jobId: 1, status: "applied", appliedDate: "2024-01-10", testScore: null }, { id: 2, candidateId: 2, jobId: 1, status: "test_completed", appliedDate: "2024-01-11", testScore: 78 }, { id: 3, candidateId: 3, jobId: 1, status: "interview_scheduled", appliedDate: "2024-01-12", testScore: 92, interviewDate: "2024-01-20T14:00" }, { id: 4, candidateId: 1, jobId: 2, status: "test_completed", appliedDate: "2024-01-09", testScore: 85 } ]); const [currentJob, setCurrentJob] = useState(null); const [showTest, setShowTest] = useState(false); const [showInterview, setShowInterview] = useState(false); const [testAnswers, setTestAnswers] = useState({}); const [testTime, setTestTime] = useState(30 * 60); const [interviewFeedback, setInterviewFeedback] = useState(''); const [selectedCandidate, setSelectedCandidate] = useState(null); useEffect(() => { const timer = setInterval(() => { if (showTest && testTime > 0) { setTestTime(prev => prev - 1); } }, 1000); return () => clearInterval(timer); }, [showTest, testTime]); const formatTime = (seconds) => { const mins = Math.floor(seconds / 60); const secs = seconds % 60; return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; }; const handleLogin = (type, credentials) => { setCurrentUser({ ...credentials, type }); setUserType(type); }; const handleLogout = () => { setCurrentUser(null); setUserType('guest'); setActiveTab('dashboard'); setShowTest(false); setShowInterview(false); }; const handleJobApply = (job) => { if (userType !== 'candidate') { alert('Você precisa estar logado como candidato para se inscrever!'); return; } setCurrentJob(job); setShowTest(true); setTestTime(30 * 60); setTestAnswers({}); }; const handleTestSubmit = () => { const score = Math.floor(Math.random() * 100); setApplications(prev => [...prev, { id: prev.length + 1, candidateId: candidates.find(c => c.email === currentUser.email)?.id || 1, jobId: currentJob.id, status: 'test_completed', appliedDate: new Date().toISOString().split('T')[0], testScore: score }]); alert(`Prova finalizada! Sua pontuação: ${score}/100. Resultados enviados para a empresa.`); setShowTest(false); setTestAnswers({}); }; const scheduleInterview = (candidate) => { setSelectedCandidate(candidate); setShowInterview(true); }; const submitInterviewFeedback = () => { setApplications(prev => prev.map(app => app.candidateId === selectedCandidate.id ? { ...app, status: 'interview_completed' } : app )); alert('Feedback da entrevista registrado com sucesso!'); setShowInterview(false); setInterviewFeedback(''); }; const AdminDashboard = () => (
Total de Candidatos
{candidates.length}
Empresas Parceiras
89
Vagas Ativas
{jobs.filter(j => j.status === 'active').length}
Conversão Média
23.5%
{job.title}
{job.company} • {job.location}
{candidate.experience}
{candidate.education}
{app.testScore}/100
)}{job.company} • {job.location}
{job.type} • {job.salary} • {job.experience}
Encerra em {job.deadline}
{job.company}
{job.location} • {job.type}
inscritos
R$ 199/mês
Tempo Restante
{formatTime(testTime)}
Qual é a principal vantagem do React.js em relação a outras bibliotecas de frontend?
O React.js utiliza JSX para escrever HTML dentro do JavaScript.
Explique em poucas palavras como funciona o sistema de estado no React.js.
Tempo estimado: 5 minutos
Qual será o resultado da seguinte expressão JavaScript: [1, 2, 3].map(x => x * 2)
?
Tempo esgotado! A prova será enviada automaticamente.
Cargo
{currentJob?.title}
Empresa
{currentJob?.company}
Experiência
{selectedCandidate?.experience}
Pontuação na Prova
{applications.find(a => a.candidateId === selectedCandidate?.id)?.testScore || 'Não realizada'}/100
Sistema de Processo Seletivo Online
Administrador do sistema?
Conectando com {selectedCandidate?.name}...
Sua câmera
Candidato
{currentUser.name}
{userType === 'candidate' ? 'Candidato' : userType === 'company' ? 'Empresa' : 'Administrador'}