import { useState } from 'react' import { useParams, Link } from 'react-router-dom' import { AdminTable, type Column } from '../../components/admin/AdminTable' import { RouteEncounterFormModal } from '../../components/admin/RouteEncounterFormModal' import { useGame, useRoutePokemon } from '../../hooks/useGames' import { useAddRouteEncounter, useUpdateRouteEncounter, useRemoveRouteEncounter, } from '../../hooks/useAdmin' import type { RouteEncounterDetail, CreateRouteEncounterInput, UpdateRouteEncounterInput, } from '../../types' export function AdminRouteDetail() { const { gameId, routeId } = useParams<{ gameId: string; routeId: string }>() const gId = Number(gameId) const rId = Number(routeId) const { data: game } = useGame(gId) const { data: encounters = [], isLoading } = useRoutePokemon(rId, gId) const addEncounter = useAddRouteEncounter(rId) const updateEncounter = useUpdateRouteEncounter(rId) const removeEncounter = useRemoveRouteEncounter(rId) const [showCreate, setShowCreate] = useState(false) const [editing, setEditing] = useState(null) const route = game?.routes?.find((r) => r.id === rId) const columns: Column[] = [ { header: 'Pokemon', accessor: (e) => (
{e.pokemon.spriteUrl ? ( {e.pokemon.name} ) : null} #{e.pokemon.nationalDex} {e.pokemon.name}
), }, { header: 'Method', accessor: (e) => e.encounterMethod }, { header: 'Rate', accessor: (e) => `${e.encounterRate}%` }, { header: 'Levels', accessor: (e) => e.minLevel === e.maxLevel ? `Lv ${e.minLevel}` : `Lv ${e.minLevel}-${e.maxLevel}`, }, ] return (

{route?.name ?? 'Route'} - Pokemon ({encounters.length})

e.id} onRowClick={(e) => setEditing(e)} /> {showCreate && ( addEncounter.mutate({ ...data, gameId: gId } as CreateRouteEncounterInput, { onSuccess: () => setShowCreate(false), }) } onClose={() => setShowCreate(false)} isSubmitting={addEncounter.isPending} /> )} {editing && ( updateEncounter.mutate( { encounterId: editing.id, data: data as UpdateRouteEncounterInput }, { onSuccess: () => setEditing(null) }, ) } onClose={() => setEditing(null)} isSubmitting={updateEncounter.isPending} onDelete={() => removeEncounter.mutate(editing.id, { onSuccess: () => setEditing(null), }) } isDeleting={removeEncounter.isPending} /> )}
) }