Adds allowedTypes: string[] to NuzlockeRules. When set, the encounter selector hides non-matching Pokemon and the routes endpoint filters out routes with no matching encounters, so only eligible locations appear. Type picker UI in RulesConfiguration; active restriction shown in RuleBadges. Backend accepts allowed_types query param and joins through RouteEncounter.pokemon to filter by type. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
28 lines
955 B
TypeScript
28 lines
955 B
TypeScript
import { api } from './client'
|
|
import type { Game, Route, RouteEncounterDetail } from '../types/game'
|
|
|
|
export interface GameDetail extends Game {
|
|
routes: Route[]
|
|
}
|
|
|
|
export function getGames(): Promise<Game[]> {
|
|
return api.get('/games')
|
|
}
|
|
|
|
export function getGame(id: number): Promise<GameDetail> {
|
|
return api.get(`/games/${id}`)
|
|
}
|
|
|
|
export function getGameRoutes(gameId: number, allowedTypes?: string[]): Promise<Route[]> {
|
|
// Use flat=true to get all routes in a flat list
|
|
// The frontend organizes them into hierarchy based on parentRouteId
|
|
const params = new URLSearchParams({ flat: 'true' })
|
|
for (const t of allowedTypes ?? []) params.append('allowed_types', t)
|
|
return api.get(`/games/${gameId}/routes?${params}`)
|
|
}
|
|
|
|
export function getRoutePokemon(routeId: number, gameId?: number): Promise<RouteEncounterDetail[]> {
|
|
const params = gameId != null ? `?game_id=${gameId}` : ''
|
|
return api.get(`/routes/${routeId}/pokemon${params}`)
|
|
}
|