// frontend/src/components/Tournament/ScoreModal.jsx import React, { useState } from 'react'; import { Eraser, Clock, MapPin, Trophy } from 'lucide-react'; import { stringToColor } from '../../utils/helpers'; import Modal from '../UI/Modal'; const ScoreForm = ({ match, isAdmin, onSubmit, onClear }) => { // Safe init of sets const [sets, setSets] = useState(match.sets && match.sets.length ? match.sets : [{ p1: '', p2: '' }]); const [code, setCode] = useState(''); const [error, setError] = useState(null); const handleSubmit = async () => { try { await onSubmit(match.id, sets, code); } catch (err) { setError(typeof err.detail === 'string' ? err.detail : "Check code or scores"); } }; const removeSet = (idx) => { if (sets.length > 1) setSets(sets.filter((_, i) => i !== idx)); }; const updateSet = (idx, field, val) => { const n = [...sets]; n[idx][field] = parseInt(val) || 0; setSets(n); }; return (
{/* Top Info Bar */}
{match.time || "10:00"}
{match.court || "TBD"}
{error && (
{error}
)} {!isAdmin && (
setCode(e.target.value)} placeholder="•••••" autoComplete="off" className="w-full bg-white dark:bg-zinc-900 border border-gray-300 dark:border-zinc-700 rounded p-3 text-center text-lg tracking-[0.5em] focus:ring-1 focus:ring-orange-500 outline-none transition text-zinc-900 dark:text-white shadow-sm" />
)}
{match.p1 || match.p1_label}
VS
{match.p2 || match.p2_label}
{sets.map((s, i) => (
updateSet(i, "p1", e.target.value)} className="w-full bg-gray-50 dark:bg-zinc-950 border border-gray-300 dark:border-zinc-800 p-2 rounded text-center focus:border-orange-500 outline-none text-zinc-900 dark:text-white" /> {sets.length > 1 ? ( ) : ( - )} updateSet(i, "p2", e.target.value)} className="w-full bg-gray-50 dark:bg-zinc-950 border border-gray-300 dark:border-zinc-800 p-2 rounded text-center focus:border-orange-500 outline-none text-zinc-900 dark:text-white" />
))}
{match.isFinished && ( )}
); }; export default function ScoreModal({ isOpen, onClose, match, isAdmin, onSubmit, onClear }) { if (!isOpen || !match) return null; return ( { await onSubmit(id, sets, code); onClose(); }} onClear={async (id, code) => { await onClear(id, code); onClose(); }} /> ); }