import React, { useState, useEffect, useRef } from 'react'; function RoomCodeModal({ isOpen, onConfirm, onCancel, gameName }) { const [roomCode, setRoomCode] = useState(''); const [error, setError] = useState(''); const inputRef = useRef(null); useEffect(() => { if (isOpen) { setRoomCode(''); setError(''); // Focus input when modal opens setTimeout(() => { inputRef.current?.focus(); }, 100); } }, [isOpen]); useEffect(() => { const handleEscape = (e) => { if (e.key === 'Escape' && isOpen) { onCancel(); } }; document.addEventListener('keydown', handleEscape); return () => document.removeEventListener('keydown', handleEscape); }, [isOpen, onCancel]); const handleInputChange = (e) => { const value = e.target.value.toUpperCase(); // Only allow A-Z and 0-9, max 4 characters const filtered = value.replace(/[^A-Z0-9]/g, '').slice(0, 4); setRoomCode(filtered); setError(''); }; const handleSubmit = (e) => { e.preventDefault(); if (roomCode.length !== 4) { setError('Room code must be exactly 4 characters'); return; } onConfirm(roomCode); }; const handleOverlayClick = (e) => { if (e.target === e.currentTarget) { onCancel(); } }; if (!isOpen) return null; return (

Enter Room Code

{gameName && (

For: {gameName}

)}
{roomCode.length}/4
{error && (

{error}

)}
); } export default RoomCodeModal;