internTaskCard(taskId) { const [projectCode, branch, task] = taskId.split('_'); const { title, description, duration, durationType } = RIBC.getTaskDetails(taskId); const projectName = RIBC.getProjectDetails(projectCode).projectName; // per-intern state const { assignedTasks, completedTasks, failedTasks } = RIBC.getInternRecord(floGlobals.myFloID); const isCompleted = !!completedTasks?.[taskId]; const isFailed = !!failedTasks?.[taskId]; const showUpdateButton = !isCompleted && !isFailed; const linkifyDescription = createElement('p', { innerHTML: DOMPurify.sanitize(linkify(description)), className: `timeline-task__description ws-pre-line wrap-around` }); // existing deadline/progress logic (used only for active/overdue) const { hasDeadlinePassed, taskDeadline, elapsedPercentage } = getTaskDeadline(taskId); // status/timeline block const timelineBlock = isCompleted ? html`
Completed
` : (isFailed ? html`
Failed
` : html`
${hasDeadlinePassed ? html`

Overdue

` : html`
Assigned
Due
`}
`); return html`
  • ${projectName}

    ${title}

    ${timelineBlock} ${linkifyDescription} ${showUpdateButton ? html` ` : ''}
  • `; },