Spaces:
Sleeping
Sleeping
lakshmisravya123
Upgrade: week-by-week roadmap, salary impact, portfolio projects, quick wins
539a59c | import React, { useState } from "react"; | |
| function scoreClass(score) { | |
| if (score >= 70) return 'good'; | |
| if (score >= 40) return 'ok'; | |
| return 'bad'; | |
| } | |
| export default function Results({ data, onReset }) { | |
| const a = data.analysis; | |
| return ( | |
| <div className="results"> | |
| <div className="match-header"> | |
| <div style={{ color: 'var(--text-dim)', fontSize: '0.9rem' }}>{a.jobTitle} {a.company !== 'Not specified' ? `@ ${a.company}` : ''}</div> | |
| <div className={`match-score ${scoreClass(a.matchScore)}`}>{a.matchScore}%</div> | |
| <div>Match Score</div> | |
| <div className={`match-verdict ${scoreClass(a.matchScore)}`}>{a.verdict}</div> | |
| </div> | |
| {/* Matched Skills */} | |
| <div className="card"> | |
| <h3>Skills You Have</h3> | |
| {(a.matchedSkills||[]).map((s, i) => ( | |
| <span key={i} className={`skill-tag ${s.level}`}> | |
| {s.skill}{s.currentProficiency?" ("+s.currentProficiency+")":""} | |
| </span> | |
| ))} | |
| </div> | |
| {/* Missing Skills */} | |
| <div className="card"> | |
| <h3>Skills to Develop</h3> | |
| {(a.missingSkills||[]).map((s, i) => ( | |
| <div key={i} className="missing-skill"> | |
| <div> | |
| <div className="name">{s.skill} {s.priorityScore && <span className="priority-score">P{s.priorityScore}/10</span>}</div> | |
| <div className="meta">{s.difficulty} to learn · ~{s.timeToLearn}{s.industryDemand && <span className="demand-tag"> · {s.industryDemand} demand{s.demandTrend==="rising"?" β":s.demandTrend==="declining"?" β":""}</span>}</div> | |
| {s.salaryImpact && <div className="salary-inline">Salary impact: {s.salaryImpact}</div>} | |
| {s.portfolioProject && <div className="portfolio-inline">Project: {s.portfolioProject}</div>} | |
| </div> | |
| <span className={`importance-badge ${s.importance}`}>{s.importance}</span> | |
| </div> | |
| ))} | |
| </div> | |
| {/* Learning Path */} | |
| <div className="card"> | |
| <h3>Learning Path</h3> | |
| {(a.learningRoadmap||a.learningPath||[]).map((phase, i) => ( | |
| <div key={i} className="phase-card"> | |
| <h4>Phase {phase.phase}: {phase.title}</h4> | |
| <div className="duration">{phase.week||phase.duration}</div> | |
| <div className="skills-list">Skills: {(phase.focusSkills||phase.skills||[]).join(', ')}</div> | |
| {(phase.resources||[]).map((r, j) => ( | |
| <div key={j} className="resource"> | |
| <span className="type">[{r.type}]</span> {r.url ? <a href={r.url} target="_blank" rel="noreferrer" style={{color:"var(--accent)"}}>{r.name}</a> : r.name}{r.platform ? " ("+r.platform+")" : ""} {r.free && <span className="free-badge">FREE</span>} | |
| </div> | |
| ))} | |
| </div> | |
| ))} | |
| </div> | |
| {/* Quick Wins */} | |
| <div className="card list-card wins"> | |
| <h3>Quick Wins (Do This Week)</h3> | |
| <ul>{(a.quickWins||[]).map((w, i) => { const item = typeof w==="string"?{action:w}:w; return <li key={i}>{item.action}{item.timeRequired?" ("+item.timeRequired+")":""}{item.impact?" - "+item.impact+" impact":""}</li>; })}</ul> | |
| </div> | |
| {/* Resume Tips */} | |
| <div className="card list-card tips"> | |
| <h3>Resume Tailoring Tips</h3> | |
| <ul>{(a.resumeTips||[]).map((t, i) => <li key={i}>{t}</li>)}</ul> | |
| </div> | |
| {/* Candidate Comparison */} | |
| {a.candidateComparison && ( | |
| <div className="card comparison-card"> | |
| <h3>How You Compare</h3> | |
| <p className="comp-edge">{a.candidateComparison.competitiveEdge}</p> | |
| <div className="comp-grid"> | |
| <div className="comp-col good"> | |
| <h4>Your Strengths</h4> | |
| <ul>{(a.candidateComparison.strengthsVsTypical||[]).map((s,i)=><li key={i}>{s}</li>)}</ul> | |
| </div> | |
| <div className="comp-col warn"> | |
| <h4>Areas to Improve</h4> | |
| <ul>{(a.candidateComparison.weaknessesVsTypical||[]).map((w,i)=><li key={i}>{w}</li>)}</ul> | |
| </div> | |
| </div> | |
| </div> | |
| )} | |
| {/* Salary Analysis */} | |
| {a.salaryAnalysis && ( | |
| <div className="card salary-card"> | |
| <h3>Salary Impact Analysis</h3> | |
| <div className="salary-grid"> | |
| <div className="salary-box"><div className="sal-label">Current Skills</div><div className="sal-value">{a.salaryAnalysis.estimatedRangeWithCurrentSkills}</div></div> | |
| <div className="salary-arrow">{"β"}</div> | |
| <div className="salary-box target"><div className="sal-label">With All Skills</div><div className="sal-value">{a.salaryAnalysis.estimatedRangeWithAllSkills}</div></div> | |
| </div> | |
| <div className="sal-increase">Potential increase: <strong>{a.salaryAnalysis.potentialIncrease}</strong></div> | |
| {a.salaryAnalysis.topPayingSkills && <div className="top-skills"><strong>Highest-value skills:</strong> {a.salaryAnalysis.topPayingSkills.join(", ")}</div>} | |
| </div> | |
| )} | |
| {a.portfolioProjects&&a.portfolioProjects.length>0&&( | |
| <div className={"card"}> | |
| <h3>Portfolio Projects</h3> | |
| {a.portfolioProjects.map((p,i)=><div key={i} className={"project-item"}><strong>{p.title}</strong><p>{p.description}</p><div>{p.estimatedTime} | {p.difficulty}</div></div>)} | |
| </div> | |
| )} | |
| {a.interviewPrep&&a.interviewPrep.length>0&&( | |
| <div className={"card list-card tips"}> | |
| <h3>Interview Preparation</h3> | |
| <ul>{a.interviewPrep.map((q,i)=><li key={i}>{q}</li>)}</ul> | |
| </div> | |
| )} | |
| <button className="btn-secondary" onClick={onReset}>Analyze Another Job</button> | |
| </div> | |
| ); | |
| } | |