From 4e1efa559cc56095c2ac0513acabb00342e13969 Mon Sep 17 00:00:00 2001 From: "ahmed.mujtaba" Date: Fri, 28 Aug 2026 18:22:13 +0500 Subject: [PATCH] frotnedn and bnackend crashing check --- frontend/src/screens/CandidateProfile.jsx | 33 ++++++++--------------- frontend/src/screens/Matching.jsx | 10 ++++--- frontend/src/screens/TalentPool.jsx | 2 +- 3 files changed, 18 insertions(+), 27 deletions(-) diff --git a/frontend/src/screens/CandidateProfile.jsx b/frontend/src/screens/CandidateProfile.jsx index a690fd9..10b947f 100644 --- a/frontend/src/screens/CandidateProfile.jsx +++ b/frontend/src/screens/CandidateProfile.jsx @@ -42,7 +42,7 @@ import { companies, fmtDate, moneyK, pick } from '../data/seed' /* Workflow order: learn (Overview, Resume, Documents) → interview (Interview, Forms, Feedback) → track (Notes, Activity) → audit (Timeline, History). */ -const TABS = ['Overview', 'Resume', 'Documents', 'Interview', 'Forms', 'Feedback', 'Notes', 'Activity', 'Timeline', 'History'] +const TABS = ['Overview', 'Resume', 'Interview', 'Forms', 'Feedback', 'Notes', 'Activity', 'Timeline', 'History'] // Forward progression for the live Advance button. Rejected has no next stage. const KANBAN_ORDER = ['Shortlist', 'Screening', 'Assessment', 'Interview', 'Offer', 'Hired'] const LABEL = { fontSize: 12, color: 'var(--text-3)', fontWeight: 600, textTransform: 'uppercase', marginBottom: 8 } @@ -673,20 +673,13 @@ export default function CandidateProfile({ function ResumeTab({ live }) { const source = live.documents?.[0]?.name const resumeKey = s3Api.resumeKeyFrom(live) - if (!live.resume_text) { + if (!s3Api.canOpen(resumeKey)) { return ( - <> - {s3Api.canOpen(resumeKey) && ( -
- -
- )} - - {source - ? `${source} is attached but has not been parsed yet — run the match to extract it.` - : 'This candidate applied without an attachment we could read.'} - - + + {source + ? `${source} is attached but is not stored in S3, so it cannot be opened here.` + : 'This candidate applied without an attachment we could open.'} + ) } return ( @@ -694,15 +687,11 @@ function ResumeTab({ live }) {

{live.name}

- {source ? `Extracted from ${source}` : 'Extracted from the application email'} + {source ? `Original CV — ${source}` : 'Original CV from the application'}

- {s3Api.canOpen(resumeKey) && ( -
- -
- )} -
-
{live.resume_text}
+
+ +
) diff --git a/frontend/src/screens/Matching.jsx b/frontend/src/screens/Matching.jsx index 1d8422d..97de9e7 100644 --- a/frontend/src/screens/Matching.jsx +++ b/frontend/src/screens/Matching.jsx @@ -672,10 +672,12 @@ function MatchingWorkspace({ )} -
Resume text
-
-            {resumeText || 'Resume text not extracted yet.'}
-          
+
CV
+ {s3Api.canOpen(resumeKey) ? ( + + ) : ( +

No CV file stored in S3 for this application.

+ )}
diff --git a/frontend/src/screens/TalentPool.jsx b/frontend/src/screens/TalentPool.jsx index b5472d1..dad8657 100644 --- a/frontend/src/screens/TalentPool.jsx +++ b/frontend/src/screens/TalentPool.jsx @@ -270,7 +270,7 @@ export default function TalentPool() { {c.aiScore != null && }
- {c.skills.slice(0, 4).map((s) => {s})} + {(c.skills ?? []).slice(0, 4).map((s) => {s})}