diff --git a/src/components/NewGame.jsx b/src/components/NewGame.jsx index ca8102f..a3554e4 100644 --- a/src/components/NewGame.jsx +++ b/src/components/NewGame.jsx @@ -1,117 +1,147 @@ import { h } from 'preact'; -import { useState, useEffect } from 'preact/hooks'; +import { useState, useEffect, useRef } from 'preact/hooks'; import styles from './NewGame.module.css'; /** - * New game creation form. + * Player 1 input step for multi-step game creation wizard. * @param {object} props - * @param {Function} props.onCreateGame * @param {string[]} props.playerNameHistory + * @param {Function} props.onNext * @param {Function} props.onCancel - * @param {Function} props.onGameCreated - * @param {object} props.initialValues + * @param {string} [props.initialValue] * @returns {import('preact').VNode} */ -const NewGame = ({ onCreateGame, playerNameHistory, onCancel, onGameCreated, initialValues }) => { - const [player1, setPlayer1] = useState(initialValues?.player1 || ''); - const [player2, setPlayer2] = useState(initialValues?.player2 || ''); - const [player3, setPlayer3] = useState(initialValues?.player3 || ''); - const [gameType, setGameType] = useState(initialValues?.gameType || '8-Ball'); - const [raceTo, setRaceTo] = useState(initialValues?.raceTo ? String(initialValues.raceTo) : ''); +const Player1Step = ({ playerNameHistory, onNext, onCancel, initialValue = '' }) => { + const [player1, setPlayer1] = useState(initialValue); const [error, setError] = useState(null); + const [filteredNames, setFilteredNames] = useState(playerNameHistory); + const inputRef = useRef(null); useEffect(() => { - setPlayer1(initialValues?.player1 || ''); - setPlayer2(initialValues?.player2 || ''); - setPlayer3(initialValues?.player3 || ''); - setGameType(initialValues?.gameType || '8-Ball'); - setRaceTo(initialValues?.raceTo ? String(initialValues.raceTo) : ''); - setError(null); - }, [initialValues]); + if (!player1) { + setFilteredNames(playerNameHistory); + } else { + setFilteredNames( + playerNameHistory.filter(name => + name.toLowerCase().includes(player1.toLowerCase()) + ) + ); + } + }, [player1, playerNameHistory]); const handleSubmit = (e) => { e.preventDefault(); - if (!player1.trim() || !player2.trim()) { - setError('Bitte Namen für beide Spieler eingeben'); + if (!player1.trim()) { + setError('Bitte Namen für Spieler 1 eingeben'); return; } - const id = onCreateGame({ - player1: player1.trim(), - player2: player2.trim(), - player3: player3.trim() || null, - gameType, - raceTo: raceTo ? parseInt(raceTo) : null - }); - if (onGameCreated && id) { - onGameCreated(id); - } + setError(null); + onNext(player1.trim()); + }; + + const handleQuickPick = (name) => { + setError(null); + onNext(name); }; const handleClear = () => { setPlayer1(''); - setPlayer2(''); - setPlayer3(''); - setGameType('8-Ball'); - setRaceTo(''); setError(null); + if (inputRef.current) inputRef.current.focus(); }; return ( -