import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { GameGrid, RulesConfiguration, StepIndicator } from '../components' import { useGames } from '../hooks/useGames' import { useCreateRun } from '../hooks/useRuns' import type { Game, NuzlockeRules } from '../types' import { DEFAULT_RULES } from '../types' export function NewRun() { const navigate = useNavigate() const { data: games, isLoading, error } = useGames() const createRun = useCreateRun() const [step, setStep] = useState(1) const [selectedGame, setSelectedGame] = useState(null) const [rules, setRules] = useState(DEFAULT_RULES) const [runName, setRunName] = useState('') const handleGameSelect = (game: Game) => { if (selectedGame?.id === game.id) { setSelectedGame(null) return } setSelectedGame(game) if (!runName || runName === `${selectedGame?.name} Nuzlocke`) { setRunName(`${game.name} Nuzlocke`) } } const handleCreate = () => { if (!selectedGame) return createRun.mutate( { gameId: selectedGame.id, name: runName, rules }, { onSuccess: (data) => navigate(`/runs/${data.id}`) }, ) } const enabledRuleCount = Object.values(rules).filter(Boolean).length const totalRuleCount = Object.keys(rules).length return (

New Nuzlocke Run

Set up your run in a few steps.

{step === 1 && (

Choose a Game

{isLoading && (
)} {error && (
Failed to load games. Please try again.
)} {games && ( )}
)} {step === 2 && (
)} {step === 3 && (

Name Your Run

setRunName(e.target.value)} className="w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="My Nuzlocke Run" />

Summary

Game
{selectedGame?.name}
Region
{selectedGame?.region}
Rules
{enabledRuleCount} of {totalRuleCount} enabled
{createRun.error && (
Failed to create run. Please try again.
)}
)}
) }