import { useState } from 'react' import { FaClock, FaUser, FaExchangeAlt, FaComment, FaChevronDown, FaChevronUp } from 'react-icons/fa' function needsTimeEntry(ws) { return ws.serviceType === 'GIT' && (!ws.startTime || !Number(ws.totalTime)) } export default function WorksheetList({ worksheets, totalTime, loading, onEditTime }) { const [expandedWorksheets, setExpandedWorksheets] = useState({}) if (loading) { return (
Loading...
) } if (!worksheets || worksheets.length === 0) { return (
Noch keine Worksheets vorhanden. Erstelle das erste Worksheet für dieses Ticket.
) } const formatTime = (minutes) => { if (!minutes || minutes === 0) return '-' const hours = Math.floor(minutes / 60) const mins = minutes % 60 return hours > 0 ? `${hours}h ${mins}min` : `${mins}min` } const formatDateTime = (date, time) => { if (!time) return date const hours = time.substring(0, 2) const mins = time.substring(2, 4) return `${date} ${hours}:${mins}` } const toggleWorksheet = (wsid) => { setExpandedWorksheets(prev => ({ ...prev, [wsid]: !prev[wsid] })) } return (
{/* Worksheet-Einträge */}
{worksheets.map((ws, index) => { const isExpanded = expandedWorksheets[ws.wsid] || false const isGit = ws.serviceType === 'GIT' return (
{ e.currentTarget.style.transform = 'translateY(-2px)' e.currentTarget.style.boxShadow = '0 8px 16px rgba(0,0,0,0.1)' }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)' e.currentTarget.style.boxShadow = '0 2px 4px rgba(0,0,0,0.1)' }}> {/* Header - Immer sichtbar, klickbar */}
toggleWorksheet(ws.wsid)} style={{ background: isGit ? 'linear-gradient(135deg, #f97316 0%, #ea580c 100%)' : ws.isComment ? 'linear-gradient(135deg, #10b981 0%, #059669 100%)' : 'linear-gradient(135deg, #4a5568 0%, #2d3748 100%)', color: 'white', border: 'none', cursor: 'pointer', userSelect: 'none', transition: 'background 0.2s ease' }} onMouseEnter={(e) => { e.currentTarget.style.background = isGit ? 'linear-gradient(135deg, #ea580c 0%, #c2410c 100%)' : ws.isComment ? 'linear-gradient(135deg, #059669 0%, #047857 100%)' : 'linear-gradient(135deg, #2d3748 0%, #1a202c 100%)' }} onMouseLeave={(e) => { e.currentTarget.style.background = isGit ? 'linear-gradient(135deg, #f97316 0%, #ea580c 100%)' : ws.isComment ? 'linear-gradient(135deg, #10b981 0%, #059669 100%)' : 'linear-gradient(135deg, #4a5568 0%, #2d3748 100%)' }} >
{isExpanded ? ( ) : ( )}
WSID {ws.wsid} {ws.isComment && !isGit && ( Kommentar )} {needsTimeEntry(ws) && ( Zeit offen )}
{/* Collapsed: Mitarbeiter & Zeit im Header */} {!isExpanded && (
{ws.employeeName}
{!ws.isComment && (
{formatTime(ws.totalTime)}
)} {ws.serviceType}
)}
{needsTimeEntry(ws) && onEditTime && ( )} {formatDateTime(ws.startDate, ws.startTime) || formatDateTime(ws.endDate, ws.endTime)}
{/* Body - Nur wenn expanded */} {isExpanded && (
{/* Mitarbeiter & Zeit */}
{ws.employeeName} {ws.employeeShort && ( {ws.employeeShort} )}
{!ws.isComment && (
{formatTime(ws.totalTime)}
)}
{/* Service Type */}
{ws.serviceType}
{/* Status-Änderung */} {ws.oldStatus !== ws.newStatus && (
Status:{' '} {ws.oldStatus} {ws.newStatus}
)} {/* Response Level-Änderung */} {ws.oldResponseLevel && ws.newResponseLevel && ws.oldResponseLevel !== ws.newResponseLevel && (
Response Level:{' '} {ws.oldResponseLevel} {ws.newResponseLevel}
)} {/* Details */}
{ws.details}
)}
) })}
) }