66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
import { Link } from 'react-router-dom';
|
|
import { Card, CardContent, CardHeader } from '@/components/ui/card';
|
|
import { IndJob } from '@/lib/types';
|
|
import JobCardHeader from './JobCardHeader';
|
|
import JobCardDetails from './JobCardDetails';
|
|
import JobCardMetrics from './JobCardMetrics';
|
|
|
|
interface JobCardProps {
|
|
job: IndJob;
|
|
onEdit: (job: any) => void;
|
|
onDelete: (jobId: string) => void;
|
|
onUpdateProduced?: (jobId: string, produced: number) => void;
|
|
onImportBOM?: (jobId: string, items: { name: string; quantity: number }[]) => void;
|
|
isTracked?: boolean;
|
|
}
|
|
|
|
const JobCard: React.FC<JobCardProps> = ({
|
|
job,
|
|
onEdit,
|
|
onDelete,
|
|
onUpdateProduced,
|
|
onImportBOM,
|
|
isTracked = false
|
|
}) => {
|
|
const getStatusBackgroundColor = (status: string) => {
|
|
switch (status) {
|
|
case 'Planned': return 'bg-gray-600/20';
|
|
case 'Acquisition': return 'bg-yellow-600/20';
|
|
case 'Running': return 'bg-blue-600/20';
|
|
case 'Done': return 'bg-purple-600/20';
|
|
case 'Selling': return 'bg-orange-600/20';
|
|
case 'Closed': return 'bg-green-600/20';
|
|
case 'Tracked': return 'bg-cyan-600/20';
|
|
default: return 'bg-gray-600/20';
|
|
}
|
|
};
|
|
|
|
return (
|
|
<Link
|
|
to={`/${job.id}`}
|
|
className="block h-full no-underline"
|
|
>
|
|
<Card
|
|
className={`bg-gray-900 border-gray-700 text-white h-full flex flex-col cursor-pointer hover:bg-gray-800/50 transition-colors ${job.status === 'Tracked' ? 'border-l-4 border-l-cyan-600' : ''} ${getStatusBackgroundColor(job.status)}`}
|
|
>
|
|
<CardHeader className="flex-shrink-0">
|
|
<JobCardHeader
|
|
job={job}
|
|
onEdit={onEdit}
|
|
onDelete={onDelete}
|
|
onUpdateProduced={onUpdateProduced}
|
|
onImportBOM={onImportBOM}
|
|
/>
|
|
</CardHeader>
|
|
<CardContent className="flex-1 flex flex-col space-y-4">
|
|
<JobCardDetails job={job} />
|
|
<div className="flex-1" />
|
|
<JobCardMetrics job={job} />
|
|
</CardContent>
|
|
</Card>
|
|
</Link>
|
|
);
|
|
};
|
|
|
|
export default JobCard;
|