import { type FormEvent, useState, useEffect } from 'react' import { Link } from 'react-router-dom' import { FormModal } from './FormModal' import type { Game, CreateGameInput, UpdateGameInput } from '../../types' interface GameFormModalProps { game?: Game onSubmit: (data: CreateGameInput | UpdateGameInput) => void onClose: () => void isSubmitting?: boolean onDelete?: () => void isDeleting?: boolean detailUrl?: string } function slugify(name: string) { return name .toLowerCase() .replace(/[^a-z0-9]+/g, '-') .replace(/^-|-$/g, '') } export function GameFormModal({ game, onSubmit, onClose, isSubmitting, onDelete, isDeleting, detailUrl }: GameFormModalProps) { const [name, setName] = useState(game?.name ?? '') const [slug, setSlug] = useState(game?.slug ?? '') const [generation, setGeneration] = useState(String(game?.generation ?? '')) const [region, setRegion] = useState(game?.region ?? '') const [boxArtUrl, setBoxArtUrl] = useState(game?.boxArtUrl ?? '') const [releaseYear, setReleaseYear] = useState(game?.releaseYear ? String(game.releaseYear) : '') const [autoSlug, setAutoSlug] = useState(!game) useEffect(() => { if (autoSlug) setSlug(slugify(name)) }, [name, autoSlug]) const handleSubmit = (e: FormEvent) => { e.preventDefault() onSubmit({ name, slug, generation: Number(generation), region, boxArtUrl: boxArtUrl || null, releaseYear: releaseYear ? Number(releaseYear) : null, }) } return ( View Routes & Bosses ) : undefined} >
setName(e.target.value)} className="w-full px-3 py-2 border rounded-md dark:bg-gray-700 dark:border-gray-600" />
{ setSlug(e.target.value) setAutoSlug(false) }} className="w-full px-3 py-2 border rounded-md dark:bg-gray-700 dark:border-gray-600" />
setGeneration(e.target.value)} className="w-full px-3 py-2 border rounded-md dark:bg-gray-700 dark:border-gray-600" />
setRegion(e.target.value)} className="w-full px-3 py-2 border rounded-md dark:bg-gray-700 dark:border-gray-600" />
setBoxArtUrl(e.target.value)} placeholder="Optional" className="w-full px-3 py-2 border rounded-md dark:bg-gray-700 dark:border-gray-600" />
setReleaseYear(e.target.value)} placeholder="Optional" className="w-full px-3 py-2 border rounded-md dark:bg-gray-700 dark:border-gray-600" />
) }