From 62f70853cbe72e69a6bda18ef734909b8e33c0a1 Mon Sep 17 00:00:00 2001 From: Sergei Date: Fri, 9 Jan 2026 19:52:39 -0800 Subject: [PATCH] Fix navigation: add isNavigatingAway flag to prevent redirect conflicts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added isNavigatingAway state to block auto-redirects when user clicks back - Both header back button and main button now set this flag before navigating - Prevents loadBeneficiary from triggering competing redirects 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../beneficiaries/[id]/equipment-status.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/(tabs)/beneficiaries/[id]/equipment-status.tsx b/app/(tabs)/beneficiaries/[id]/equipment-status.tsx index 70f4754..c69bb60 100644 --- a/app/(tabs)/beneficiaries/[id]/equipment-status.tsx +++ b/app/(tabs)/beneficiaries/[id]/equipment-status.tsx @@ -91,9 +91,10 @@ export default function EquipmentStatusScreen() { const [isRefreshing, setIsRefreshing] = useState(false); const [error, setError] = useState(null); const [isConfirming, setIsConfirming] = useState(false); + const [isNavigatingAway, setIsNavigatingAway] = useState(false); const loadBeneficiary = useCallback(async () => { - if (!id) return; + if (!id || isNavigatingAway) return; if (!isRefreshing) { setIsLoading(true); @@ -105,6 +106,9 @@ export default function EquipmentStatusScreen() { if (response.ok && response.data) { setBeneficiary(response.data); + // Skip auto-redirects if user is navigating away + if (isNavigatingAway) return; + // Self-guard: Redirect if user has devices - shouldn't be on this page if (hasBeneficiaryDevices(response.data)) { router.replace(`/(tabs)/beneficiaries/${id}`); @@ -126,7 +130,7 @@ export default function EquipmentStatusScreen() { setIsLoading(false); setIsRefreshing(false); } - }, [id, isRefreshing]); + }, [id, isRefreshing, isNavigatingAway]); useEffect(() => { loadBeneficiary(); @@ -193,7 +197,10 @@ export default function EquipmentStatusScreen() { {/* Header */} - router.push('/(tabs)/beneficiaries')}> + { + setIsNavigatingAway(true); + router.replace('/(tabs)/beneficiaries'); + }}> {beneficiary.name} @@ -285,7 +292,10 @@ export default function EquipmentStatusScreen() { styles.backToLovedOnesButton, pressed && { opacity: 0.7 } ]} - onPress={() => router.dismissAll()} + onPress={() => { + setIsNavigatingAway(true); + router.replace('/(tabs)/beneficiaries'); + }} > Back to My Loved Ones