iris_backend / src /components /CVForm.jsx
Muhammed Sameer
Initial commit - Iris Full (under development)
ea9ca44
import React from 'react';
import { motion } from 'framer-motion';
import { UploadIcon } from './Icons';
const CVForm = ({
profileData,
photoUrl,
resumeFile,
isEditing,
handlePhotoChange,
handleFileChange
}) => {
const getBaseName = (path) => {
if (!path) return 'Existing Resume';
return path.substring(path.lastIndexOf('/') + 1).substring(path.indexOf('_') + 1);
};
return (
<div style={{ display: 'flex', flexDirection: 'column', gap: '2rem' }}>
{/* ========= AVATAR SECTION UPDATED ========= */}
<div style={{ backgroundColor: 'rgba(251, 191, 36, 0.05)', border: '1px solid rgba(251, 191, 36, 0.2)', borderRadius: '1rem', padding: '1.5rem' }}>
<h3 style={{ fontSize: '1.25rem', fontWeight: 'bold', marginBottom: '1.5rem' }}>Your Avatar</h3>
<div style={{ textAlign: 'center' }}>
<div style={{ position: 'relative', display: 'inline-block', marginBottom: '1rem' }}>
{/* Conditionally render DIV for real photo, or IMG for fallback */}
{photoUrl ? (
<div
key={photoUrl} // Key to force re-render on change
style={{
width: '150px',
height: '150px',
borderRadius: '50%',
backgroundImage: `url(${photoUrl})`,
backgroundSize: 'cover',
backgroundPosition: 'center',
border: '3px solid rgba(251, 191, 36, 0.3)',
boxShadow: '0 4px 12px rgba(0, 0, 0, 0.3)'
}}
/>
) : (
<img
src={`https://ui-avatars.com/api/?name=${encodeURIComponent(profileData?.full_name || 'U')}&background=FBBF24&color=1a202c&size=150&bold=true`}
alt="Profile"
style={{
width: '150px',
height: '150px',
borderRadius: '50%',
objectFit: 'cover',
border: '3px solid rgba(251, 191, 36, 0.3)'
}}
/>
)}
</div>
{/* Upload Section - ONLY VISIBLE IN EDIT MODE */}
{isEditing && (
<div style={{ border: '2px dashed rgba(251, 191, 36, 0.3)', borderRadius: '1rem', padding: '1rem' }}>
<input type="file" id="photo-upload" accept="image/jpeg, image/png" onChange={handlePhotoChange} style={{ display: 'none' }} disabled={!isEditing} />
<label htmlFor="photo-upload" style={{ cursor: 'pointer', display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
<UploadIcon />
<span>{photoUrl ? 'Change Photo' : 'Upload Photo'}</span>
<p style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.5)', marginTop: '0.5rem', marginBlockEnd: 0 }}>
PNG, JPG (MAX. 1MB)
</p>
</label>
</div>
)}
</div>
</div>
{/* Resume Section (No changes needed here) */}
<div style={{ backgroundColor: 'rgba(251, 191, 36, 0.05)', border: '1px solid rgba(251, 191, 36, 0.2)', borderRadius: '1rem', padding: '1.5rem' }}>
<h3 style={{ fontSize: '1.25rem', fontWeight: 'bold', marginBottom: '1.5rem', display: 'flex', alignItems: 'center', gap: '0.75rem' }}>
Your Resume
{/* This is the new status badge */}
{(profileData?.resume_url) && (
<span style={{
backgroundColor: 'rgba(34, 197, 94, 0.2)',
color: '#22C55E',
padding: '0.25rem 0.75rem',
borderRadius: '9999px',
fontSize: '0.75rem',
fontWeight: '600'
}}>
On File
</span>
)}</h3>
{(resumeFile || profileData?.resume_url) ? (
<div style={{ backgroundColor: 'rgba(34, 197, 94, 0.1)', border: '1px solid rgba(34, 197, 94, 0.3)', borderRadius: '0.5rem', padding: '1rem', marginBottom: '1rem', display: 'flex', alignItems: 'center', gap: '1rem' }}>
<div style={{ width: '40px', height: '40px', backgroundColor: 'rgba(34, 197, 94, 0.2)', borderRadius: '0.5rem', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>
<svg style={{ width: '20px', height: '20px', color: '#22C55E' }} viewBox="0 0 24 24" fill="currentColor"><path d="M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z" /></svg>
</div>
<div style={{ flex: '1', minWidth: 0 }}>
<p style={{ fontWeight: 'bold', color: '#22C55E', margin: 0, fontSize: '0.875rem', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
{resumeFile ? resumeFile.name : getBaseName(profileData?.resume_url)}
</p>
<p style={{ color: 'rgba(255,255,255,0.6)', margin: 0, fontSize: '0.75rem' }}>
{resumeFile ? 'New file selected' : ''}
</p>
</div>
</div>
) : (
<p style={{color: '#d1d5db', padding: '1rem', textAlign: 'center', backgroundColor: 'rgba(255,255,255,0.05)', borderRadius: '0.5rem'}}>No resume has been uploaded.</p>
)}
{isEditing && (
<div style={{ border: '2px dashed rgba(251, 191, 36, 0.3)', borderRadius: '1rem', padding: '2rem', textAlign: 'center' }}>
<input type="file" id="resume-upload" accept=".pdf,.docx" onChange={handleFileChange} style={{ display: 'none' }} disabled={!isEditing} />
<label htmlFor="resume-upload" style={{ cursor: 'pointer', display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
<UploadIcon />
<span>{profileData?.resume_url ? 'Upload New Resume' : 'Upload Resume'}</span>
<p style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.5)', marginTop: '0.5rem', marginBlockEnd: 0 }}>
PDF, DOCX (MAX. 5MB)
</p>
</label>
</div>
)}
</div>
</div>
);
};
export default CVForm;