// Job Card Component const JobCard = ({ job, onView, onRemove, onRetry, onCancel, onViewProject }) => { const name = job.personal_data?.first_name && job.personal_data?.last_name ? `${job.personal_data.first_name} ${job.personal_data.last_name}` : 'Sconosciuto'; const isCrifMode = job.additional_data?.crif_mode; const isCrifOnly = job.additional_data?.crif_only; const isSuccess = job.result?.status === 'success'; const linkedProjectName = job.additional_data?.project_name; const linkedProjectId = job.project_id; // Use shared status configuration const status = getJobStatusConfig(job.status); return ( {/* Linked Project Banner */} {linkedProjectId && (
🔗 Pratica: {linkedProjectName || `#${linkedProjectId.slice(-8)}`}
{onViewProject && ( )}
)}
{name}
#{job.id?.slice(-8)} {isCrifOnly ? 'CRIF' : isCrifMode ? 'Email + CRIF' : 'Email'}
{status.icon} {status.label} {job.status === 'running' && }
{job.message &&

{job.message}

} {isSuccess && job.result && (
📧{job.result.username}
🔑{job.result.password}
)}
{(job.status === 'error' || job.status === 'cancelled') && } {job.status === 'running' && }
); }; window.JobCard = JobCard;