'use client' import { cn } from '@/lib/utils' import { debugProps } from '@/lib/debug' import { JOB_STATUS_LABELS, JOB_STATUS_COLORS } from '@/components/shared/job-status' import { jobStatusToApi } from '@/lib/job-status' import type { ClaudeJobKind, ClaudeJobStatus } from '@prisma/client' interface JobCardProps { id: string kind: ClaudeJobKind status: ClaudeJobStatus taskCode?: string | null taskTitle?: string | null ideaCode?: string | null ideaTitle?: string | null sprintGoal?: string | null sprintCode?: string | null productName: string productCode?: string | null pbiCode?: string | null storyCode?: string | null branch?: string | null error?: string | null summary?: string | null createdAt: Date | string startedAt?: Date | string | null finishedAt?: Date | string | null isSelected?: boolean onClick?: () => void } const KIND_LABELS: Record = { TASK_IMPLEMENTATION: 'TAAK', SPRINT_IMPLEMENTATION: 'SPRINT', IDEA_GRILL: 'GRILL', IDEA_MAKE_PLAN: 'PLAN', IDEA_REVIEW_PLAN: 'REVIEW', PLAN_CHAT: 'CHAT', } export default function JobCard({ kind, status, taskCode, taskTitle, ideaCode, ideaTitle, sprintGoal, sprintCode, productName, productCode, pbiCode, storyCode, branch, error, createdAt, startedAt, finishedAt, isSelected, onClick, }: JobCardProps) { let titleText: string if (kind === 'TASK_IMPLEMENTATION') { titleText = taskCode && taskTitle ? `${taskCode} ${taskTitle}` : taskTitle || 'Taak' } else if (kind === 'SPRINT_IMPLEMENTATION') { if (sprintCode && sprintGoal) titleText = `${sprintCode} ${sprintGoal}` else titleText = sprintGoal || sprintCode || 'Sprint' } else if (kind === 'IDEA_GRILL' || kind === 'IDEA_MAKE_PLAN') { titleText = ideaCode && ideaTitle ? `${ideaCode} ${ideaTitle}` : ideaTitle || 'Idee' } else if (kind === 'PLAN_CHAT') { titleText = ideaCode ? `Chat ${ideaCode}` : 'Chat' } else { titleText = 'Job' } let breadcrumb: string if (kind === 'TASK_IMPLEMENTATION') { breadcrumb = [productCode ?? productName, pbiCode, storyCode].filter(Boolean).join(' ') } else if (kind === 'IDEA_GRILL' || kind === 'IDEA_MAKE_PLAN' || kind === 'IDEA_REVIEW_PLAN' || kind === 'PLAN_CHAT') { breadcrumb = [productCode ?? productName, ideaCode].filter(Boolean).join(' ') } else if (kind === 'SPRINT_IMPLEMENTATION') { breadcrumb = [productCode ?? productName, sprintCode].filter(Boolean).join(' ') } else { breadcrumb = productCode ?? productName } const detailText = branch || (error ? error.slice(0, 80) : null) || productName const displayDate = finishedAt ?? startedAt ?? createdAt const apiStatus = jobStatusToApi(status) return (
{KIND_LABELS[kind]} {breadcrumb && ( {breadcrumb} )} {JOB_STATUS_LABELS[apiStatus]}

{titleText}

{detailText}

{new Date(displayDate).toLocaleString('nl-NL', { dateStyle: 'short', timeStyle: 'short' })}
) }