import React, { useState } from 'react'; import { JobData } from '../types'; import ProcessingPanel from './ProcessingPanel'; import { MODELS } from '../constants'; interface HistoryProps { jobs: JobData[]; onClearAll: () => void; onDeleteSingle: (jobId: string) => void; onSelect: (job: JobData) => void; onEnhance: (job: JobData) => void; } const History: React.FC = ({ jobs, onClearAll, onDeleteSingle, onSelect, onEnhance }) => { // Sort jobs by timestamp (newest first) const sortedJobs = [...jobs].sort((a, b) => { const timeA = a.timestamp || 0; const timeB = b.timestamp || 0; return timeB - timeA; }); const [expandedId, setExpandedId] = useState(null); const toggleExpand = (job: JobData) => { if (expandedId === job.job_id) { setExpandedId(null); } else { setExpandedId(job.job_id); onSelect(job); } }; const handleDeleteClick = (e: React.MouseEvent, jobId: string) => { e.stopPropagation(); onDeleteSingle(jobId); }; const getModelImageUrl = (job: JobData) => { // Priority 1: Check if modelImage is explicitly provided (especially for custom models) if (job.modelImage) { if (typeof job.modelImage === 'string') return job.modelImage; try { // If it's a File or Blob, create a preview URL return URL.createObjectURL(job.modelImage as any); } catch (e) { return null; } } // Priority 2: Look up by name for standard models if (job.type === 'model' && job.modelName) { const found = MODELS.find(m => m.name === job.modelName); if (found) return found.image as string; } return null; }; return (

سوابق پروژه

لیست درخواست‌های پردازش شده

{jobs.length > 0 && ( )}
{jobs.length === 0 ? (

هنوز هیچ پروژه‌ای انجام نشده است

) : ( sortedJobs.map((job) => { const isExpanded = expandedId === job.job_id; const modelImage = getModelImageUrl(job); return (
toggleExpand(job)} className={`group relative bg-white rounded-2xl px-4 py-4 border transition-all duration-300 cursor-pointer overflow-hidden ${isExpanded ? 'border-primary shadow-lg ring-1 ring-primary/10' : 'border-gray-100 shadow-sm hover:shadow-md'}`} >
{modelImage ? ( Model { // Basic URL management if it's a blob if (modelImage.startsWith('blob:')) { // URL.revokeObjectURL(modelImage); // Revoke only when component unmounts for safety } }} /> ) : (
{job.type === 'model' ? : }
)}

{job.type === 'model' ? job.modelName : 'پروژه اختصاصی'}

{job.status === 'completed' ? 'تکمیل شده' : job.status === 'failed' ? 'خطا' : 'در حال کار'} {job.date?.split(',')[0]}
); }) )}
); }; export default History;