From da9cf0acd294b943fafb885dab250fe78ec63d25 Mon Sep 17 00:00:00 2001 From: Julian Tabel Date: Sun, 8 Feb 2026 12:18:12 +0100 Subject: [PATCH] Fix doubled encounters in encounter modals by filtering on gameId EncounterModal and ShinyEncounterModal were calling useRoutePokemon without a gameId, returning encounters for all games in the version group. Now both receive and pass the run's gameId to scope results to the current game only. Co-Authored-By: Claude Opus 4.6 --- ...-jrbc--fix-doubled-encounters-in-encountermodal.md | 11 +++++++++++ frontend/src/components/EncounterModal.tsx | 5 ++++- frontend/src/components/ShinyEncounterModal.tsx | 3 +++ frontend/src/pages/RunEncounters.tsx | 6 ++++-- 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 .beans/nuzlocke-tracker-jrbc--fix-doubled-encounters-in-encountermodal.md diff --git a/.beans/nuzlocke-tracker-jrbc--fix-doubled-encounters-in-encountermodal.md b/.beans/nuzlocke-tracker-jrbc--fix-doubled-encounters-in-encountermodal.md new file mode 100644 index 0000000..fc2074f --- /dev/null +++ b/.beans/nuzlocke-tracker-jrbc--fix-doubled-encounters-in-encountermodal.md @@ -0,0 +1,11 @@ +--- +# nuzlocke-tracker-jrbc +title: Fix doubled encounters in EncounterModal +status: completed +type: bug +priority: normal +created_at: 2026-02-08T11:16:35Z +updated_at: 2026-02-08T11:17:25Z +--- + +EncounterModal calls useRoutePokemon without gameId, so route encounters for all games in the version group are returned. Pass gameId through from RunEncounters. \ No newline at end of file diff --git a/frontend/src/components/EncounterModal.tsx b/frontend/src/components/EncounterModal.tsx index a51b75c..fc385d8 100644 --- a/frontend/src/components/EncounterModal.tsx +++ b/frontend/src/components/EncounterModal.tsx @@ -14,6 +14,7 @@ import type { interface EncounterModalProps { route: Route + gameId: number existing?: EncounterDetail dupedPokemonIds?: Set onSubmit: (data: { @@ -78,6 +79,7 @@ function groupByMethod(pokemon: RouteEncounterDetail[]): { method: string; pokem export function EncounterModal({ route, + gameId, existing, dupedPokemonIds, onSubmit, @@ -87,6 +89,7 @@ export function EncounterModal({ }: EncounterModalProps) { const { data: routePokemon, isLoading: loadingPokemon } = useRoutePokemon( route.id, + gameId, ) const [selectedPokemon, setSelectedPokemon] = @@ -190,7 +193,7 @@ export function EncounterModal({ {loadingPokemon ? (
-
+
) : filteredPokemon && filteredPokemon.length > 0 ? ( <> diff --git a/frontend/src/components/ShinyEncounterModal.tsx b/frontend/src/components/ShinyEncounterModal.tsx index 53da18d..3427174 100644 --- a/frontend/src/components/ShinyEncounterModal.tsx +++ b/frontend/src/components/ShinyEncounterModal.tsx @@ -9,6 +9,7 @@ import type { Route, RouteEncounterDetail } from '../types' interface ShinyEncounterModalProps { routes: Route[] + gameId: number onSubmit: (data: { routeId: number pokemonId: number @@ -41,6 +42,7 @@ function groupByMethod(pokemon: RouteEncounterDetail[]): { method: string; pokem export function ShinyEncounterModal({ routes, + gameId, onSubmit, onClose, isPending, @@ -48,6 +50,7 @@ export function ShinyEncounterModal({ const [selectedRouteId, setSelectedRouteId] = useState(null) const { data: routePokemon, isLoading: loadingPokemon } = useRoutePokemon( selectedRouteId, + gameId, ) const [selectedPokemon, setSelectedPokemon] = diff --git a/frontend/src/pages/RunEncounters.tsx b/frontend/src/pages/RunEncounters.tsx index f94b223..57208f8 100644 --- a/frontend/src/pages/RunEncounters.tsx +++ b/frontend/src/pages/RunEncounters.tsx @@ -218,7 +218,7 @@ function RouteGroup({ {groupEncounter.pokemon.name} )} @@ -972,7 +972,7 @@ export function RunEncounters() { {encounter.pokemon.name} )} @@ -1116,6 +1116,7 @@ export function RunEncounters() { {selectedRoute && ( setShowShinyModal(false)} isPending={createEncounter.isPending}