import { type FormEvent, useState } from 'react' import { FormModal } from './FormModal' import { PokemonSelector } from './PokemonSelector' import { METHOD_ORDER, METHOD_CONFIG, getMethodLabel } from '../EncounterMethodBadge' import type { RouteEncounterDetail, CreateRouteEncounterInput, UpdateRouteEncounterInput, } from '../../types' interface RouteEncounterFormModalProps { encounter?: RouteEncounterDetail onSubmit: (data: CreateRouteEncounterInput | UpdateRouteEncounterInput) => void onClose: () => void isSubmitting?: boolean onDelete?: () => void isDeleting?: boolean } export function RouteEncounterFormModal({ encounter, onSubmit, onClose, isSubmitting, onDelete, isDeleting, }: RouteEncounterFormModalProps) { const [pokemonId, setPokemonId] = useState(encounter?.pokemonId ?? 0) const initialMethod = encounter?.encounterMethod ?? '' const isKnownMethod = METHOD_ORDER.includes(initialMethod) const [selectedMethod, setSelectedMethod] = useState( isKnownMethod ? initialMethod : initialMethod ? 'other' : '' ) const [customMethod, setCustomMethod] = useState(isKnownMethod ? '' : initialMethod) const encounterMethod = selectedMethod === 'other' ? customMethod : selectedMethod const [encounterRate, setEncounterRate] = useState(String(encounter?.encounterRate ?? '')) const [minLevel, setMinLevel] = useState(String(encounter?.minLevel ?? '')) const [maxLevel, setMaxLevel] = useState(String(encounter?.maxLevel ?? '')) const handleSubmit = (e: FormEvent) => { e.preventDefault() if (encounter) { onSubmit({ encounterMethod, encounterRate: Number(encounterRate), minLevel: Number(minLevel), maxLevel: Number(maxLevel), }) } else { onSubmit({ pokemonId, encounterMethod, encounterRate: Number(encounterRate), minLevel: Number(minLevel), maxLevel: Number(maxLevel), }) } } return ( {!encounter && ( setPokemonId(id ?? 0)} /> )}
{selectedMethod && selectedMethod !== 'other' && ( {getMethodLabel(selectedMethod)} )} {selectedMethod === 'other' && ( setCustomMethod(e.target.value)} placeholder="Custom method name" className="w-full mt-2 px-3 py-2 border rounded-md bg-surface-2 border-border-default" /> )}
setEncounterRate(e.target.value)} className="w-full px-3 py-2 border rounded-md bg-surface-2 border-border-default" />
setMinLevel(e.target.value)} className="w-full px-3 py-2 border rounded-md bg-surface-2 border-border-default" />
setMaxLevel(e.target.value)} className="w-full px-3 py-2 border rounded-md bg-surface-2 border-border-default" />
) }