-
HR comment
-
{i.hrComments}
+ {assigned && (
+
+
+
+
+
+
Assigned to {assigned.title}
+
+ {[assigned.employment_type, assigned.location].filter(Boolean).join(' · ') || '—'}
+
+
+
+
+
+
+
)}
- {i.sheet && (
-
- Imported from {i.sheet}
+
+
+
Contact & application
+
+
+
+
Applied
{i.received ? fmtDate(i.received) : '—'}
+
+
Screened by
{orDash(i.screenedBy)}
+
Notice period
{orDash(i.noticePeriod)}
+
+
+
Profile
+
+
+
Date of birth
{i.dateOfBirth ? fmtDate(i.dateOfBirth) : '—'}
+
+
Marital status
{orDash(i.maritalStatus)}
+
Location
{orDash(location)}
+
Education
{orDash(education)}
+
Graduation
{orDash(i.graduationYear)}
+
Other university
{orDash(i.universityOther)}
+
Current salary
{orDash(i.currentSalary)}
+
Expected salary
{orDash(i.expectedSalary)}
+
+
+ {i.hrComments && (
+
+
+
HR comment
+
{i.hrComments}
+
+
+ )}
+
+ {i.sheet && (
+
+ Imported from {i.sheet}
+
+ )}
+
+
+
Matching roles
+
+ Matched by position applied for: {orDash(i.position)}
+
+ {matchCards.length === 0 && !manualPost ? (
+
+ No job post title matches this position. Choose a role manually.
+
+
+
+
+ ) : (
+ matchCards.map(({ rank, post }) => (
+
setSelection(String(id))}
+ />
+ ))
+ )}
+ {manualPost && (
+ setSelection(String(id))}
+ />
+ )}
+
+
+
+
+
+ {showPicker && (
+
setShowPicker(false)}
+ onPick={(post) => {
+ setManualPost(post)
+ setSelection(String(post.id))
+ }}
+ />
)}
)
diff --git a/frontend/src/ui/SuggestedRoles.jsx b/frontend/src/ui/SuggestedRoles.jsx
index e78da6a..4285bea 100644
--- a/frontend/src/ui/SuggestedRoles.jsx
+++ b/frontend/src/ui/SuggestedRoles.jsx
@@ -23,7 +23,7 @@ export function reqInResume(req, resumeText) {
return resumeText.toLowerCase().includes(needle)
}
-export function JobCard({ post, rank, selected, onSelect, resumeText, manual }) {
+export function JobCard({ post, rank, selected, onSelect, resumeText, manual, badge }) {
const unavailable = Boolean(post?.unavailable) || !post?.title
const title = post?.title || 'Unavailable'
const meta = [
@@ -33,6 +33,7 @@ export function JobCard({ post, rank, selected, onSelect, resumeText, manual })
? `${post?.experience_min ?? '?'}–${post?.experience_max ?? '?'} yrs`
: null,
].filter(Boolean).join(' · ')
+ const tag = badge ?? (manual ? 'Manual' : `AI #${rank}`)
return (
-
{manual ? 'Manual' : `AI #${rank}`}
+
{tag}
{title}
{unavailable ? (
Unavailable