From fbfcbb4eb836cfc7e6016f1154f8a87e7a2c2159 Mon Sep 17 00:00:00 2001 From: Talha Ahmed Date: Wed, 2 Sep 2026 19:40:03 +0500 Subject: [PATCH] Inbox: redesign the form applicant detail pane Standard card language instead of the email-head strips: Contact & application, Profile and Matching roles are now proper cards with card-heads. The roles panel collapses three overlapping controls into one flow - a single Browse roles action, with Assign appearing only once a selection exists (a permanently disabled primary button read as broken UI). Sheet provenance moves off the floating header corner into the Imported from ... row N caption, and the action bar gains a divider (email pane too, for consistency). Co-Authored-By: Claude Fable 5 --- frontend/src/screens/Inbox.jsx | 213 ++++++++++++++++----------------- 1 file changed, 101 insertions(+), 112 deletions(-) diff --git a/frontend/src/screens/Inbox.jsx b/frontend/src/screens/Inbox.jsx index 877caf0..059503c 100644 --- a/frontend/src/screens/Inbox.jsx +++ b/frontend/src/screens/Inbox.jsx @@ -1492,12 +1492,6 @@ function FormApplicantDetail({ {loading && Loading details…} - {i.rowNumber != null && ( -
-
Sheet row
-
{i.rowNumber}
-
- )} {(resumeHref || profileHref) && ( @@ -1570,132 +1564,127 @@ function FormApplicantDetail({ marginBottom: 20, }} > -
-
Contact & application
-
-
Email
{orDash(i.email)}
-
Phone
{orDash(i.phone)}
-
Applied
{i.received ? fmtDate(i.received) : '—'}
-
Source
{orDash(i.source)}
-
Screened by
{orDash(i.screenedBy)}
-
Notice period
{orDash(i.noticePeriod)}
+
+
+

Contact & application

+
+
+
Email
{orDash(i.email)}
+
Phone
{orDash(i.phone)}
+
Applied
{i.received ? fmtDate(i.received) : '—'}
+
Source
{orDash(i.source)}
+
Screened by
{orDash(i.screenedBy)}
+
Notice period
{orDash(i.noticePeriod)}
+
+
-
Profile
-
-
Gender
{orDash(i.gender)}
-
Date of birth
{i.dateOfBirth ? fmtDate(i.dateOfBirth) : '—'}
-
CNIC
{orDash(i.cnic)}
-
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)}
+
+

Profile

+
+
+
Gender
{orDash(i.gender)}
+
Date of birth
{i.dateOfBirth ? fmtDate(i.dateOfBirth) : '—'}
+
CNIC
{orDash(i.cnic)}
+
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)} +
+
+
+

Matching roles

+ Matched by position: {orDash(i.position)} +
- {matchCards.length === 0 && !manualPost ? ( - -

No job post title matches this position. Choose a role manually.

-
+
+ {matchCards.length === 0 && !manualPost ? ( + +

No job post title matches this position — pick one manually.

+
+ ) : ( + <> + {matchCards.map(({ rank, post }) => ( + setSelection(String(id))} + /> + ))} + {manualPost && ( + setSelection(String(id))} + /> + )} + + )} +
+ + {/* Assign only renders once there is a selection to act on — + a permanently disabled primary button read as broken UI. */} + {selection && selection !== i.assignedId && ( -
- - ) : ( - matchCards.map(({ rank, post }) => ( - setSelection(String(id))} - /> - )) - )} - {manualPost && ( - setSelection(String(id))} - /> - )} - - + )} +
+
-
+ {i.sheet && ( +
+ Imported from {i.sheet}{i.rowNumber != null ? ` · row ${i.rowNumber}` : ''} +
+ )} + +
@@ -2081,7 +2070,7 @@ function ApplicationDetail({
-
+