```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%

Vagas Mais Procuradas

{jobs.slice().sort((a, b) => b.applications - a.applications).slice(0, 5).map((job, index) => (

{job.title}

{job.company} • {job.location}

{job.applications} inscritos
))}

Estatísticas de Candidatos

Distribuição por Nível
Júnior: 45% Pleno: 35% Sênior: 20%
Tempo Médio de Processo 14 dias
Taxa de Aprovação 32%
Vagas Remotas 68%

Atividades Recentes

Nova vaga cadastrada: Desenvolvedor Frontend na Innovatech 2 min atrás
Candidato aprovado: Mariana Costa para vaga de Desenvolvedor Frontend 15 min atrás
Nova inscrição: 3 candidatos para vaga de Analista de Dados 1 hora atrás
); const CandidateDashboard = () => (

Minhas Inscrições

{candidates.filter(c => applications.some(a => a.candidateId === c.id && a.status !== 'applied')).map(candidate => { const app = applications.find(a => a.candidateId === candidate.id); return (

{candidate.name}

{candidate.experience}

{candidate.education}

{candidate.skills.map(skill => ( {skill} ))}
{app?.status === 'approved' ? 'Aprovado' : app?.status === 'hired' ? 'Contratado' : app?.status === 'interview_scheduled' ? 'Entrevista Agendada' : app?.status === 'interview_completed' ? 'Entrevista Concluída' : app?.status === 'test_completed' ? 'Prova Concluída' : 'Em análise'} {app?.testScore && (

{app.testScore}/100

)}
); })}

Vagas Recomendadas

{jobs.map(job => (

{job.title}

{job.company} • {job.location}

{job.type} • {job.salary} • {job.experience}

{job.requirements.slice(0, 3).map(req => ( {req} ))}
{job.benefits.slice(0, 3).map(benefit => ( {benefit} ))}

Encerra em {job.deadline}

))}
); const CompanyDashboard = () => (

Minhas Vagas

Candidatos por Vaga

{jobs.map(job => { const jobApps = applications.filter(a => a.jobId === job.id); return (

{job.title}

{job.company}

{job.location} • {job.type}

{jobApps.length}

inscritos

Salário: {job.salary} Experiência: {job.experience}
); })}

Estatísticas

Total de Vagas {jobs.length}
Candidatos Total {applications.length}
Taxa de Conversão 24.5%
Tempo Médio 12 dias

Próximos Passos

Agendar 3 entrevistas
Revisar 5 provas
Enviar feedbacks

Planos de Divulgação

Premium

R$ 199/mês

  • • 5 vagas ativas
  • • Destaque no site
  • • Newsletter
  • • Prioridade no algoritmo
); const TestScreen = () => (

{currentJob?.title}

Tempo Restante

{formatTime(testTime)}

Questão 1 - Múltipla Escolha

Qual é a principal vantagem do React.js em relação a outras bibliotecas de frontend?

{['Virtual DOM', 'Two-way data binding', 'Server-side rendering', 'Native mobile apps'].map((option, index) => ( ))}

Questão 2 - Verdadeiro/Falso

O React.js utiliza JSX para escrever HTML dentro do JavaScript.

Questão 3 - Dissertação

Explique em poucas palavras como funciona o sistema de estado no React.js.

Tempo estimado: 5 minutos

Questão 4 - Lógica de Programação

Qual será o resultado da seguinte expressão JavaScript: [1, 2, 3].map(x => x * 2)?

setTestAnswers({...testAnswers, q4: e.target.value})} />
{testTime <= 0 && (

Tempo esgotado! A prova será enviada automaticamente.

)}
); const InterviewScreen = () => (

Entrevista com {selectedCandidate?.name}

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

Avaliação da Entrevista

); const LoginScreen = () => (

SelectPro

Sistema de Processo Seletivo Online

Candidato

Empresa

Planos disponíveis: Básico (gratuito), Premium (R$ 199/mês), Corporativo (personalizado)

Administrador do sistema?

); const VideoInterview = () => (

Entrevista por Vídeo

Conectando com {selectedCandidate?.name}...

Sua câmera

Candidato

); if (!currentUser) { return ; } return (
{/* Header */}

SelectPro

{currentUser.name}

{userType === 'candidate' ? 'Candidato' : userType === 'company' ? 'Empresa' : 'Administrador'}

{/* Main Content */}
{showTest ? ( ) : showInterview ? ( ) : ( <> {userType === 'admin' && } {userType === 'candidate' && } {userType === 'company' && } )}
{/* Footer */}
); }; export default App; ```