File size: 1,629 Bytes
24f95f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import Link from 'next/link';
import type { CaseRecord } from '@/lib/types';
import Badge from '@/components/common/Badge';

interface CaseCardProps {
  case_: CaseRecord;
}

export default function CaseCard({ case_ }: CaseCardProps) {
  return (
    <Link
      href={`/cases/${case_.case_id}`}
      className="block bg-gray-900/50 border border-gray-800 rounded-lg p-6 hover:border-gray-700 transition-colors"
    >
      <div className="flex items-start justify-between mb-3">
        <h3 className="text-lg font-medium text-gray-200 line-clamp-2 flex-1">
          {case_.user_input}
        </h3>
        {case_.route?.execution_mode && (
          <Badge variant="info" className="ml-4 flex-shrink-0">
            {case_.route.execution_mode}
          </Badge>
        )}
      </div>

      <div className="flex items-center gap-3 flex-wrap mb-3">
        {case_.route?.domain_pack && case_.route.domain_pack !== 'general' && (
          <Badge variant="default">{case_.route.domain_pack}</Badge>
        )}
        {case_.route?.complexity && (
          <Badge variant="default">{case_.route.complexity}</Badge>
        )}
        {case_.route?.task_family && (
          <Badge variant="default">{case_.route.task_family}</Badge>
        )}
        {case_.simulation_id && <Badge variant="warning">Has Simulation</Badge>}
      </div>

      <div className="flex items-center justify-between text-sm text-gray-500">
        <span>{case_.saved_at ? new Date(case_.saved_at).toLocaleString() : 'N/A'}</span>
        <span className="text-xs font-mono">{case_.case_id.slice(0, 8)}</span>
      </div>
    </Link>
  );
}