import { useEffect, useState } from 'react'; import { canUseNativeHostCapability, subscribeHostNavigationCanGoBack, subscribeHostRuntimeChange, } from '../services/host-bridge/hostBridge'; function canUseHostNavigationCanGoBack() { return ( canUseNativeHostCapability('host.events') && canUseNativeHostCapability('navigation.canGoBack') ); } export function useHostNavigationCanGoBack() { const [isSupported, setIsSupported] = useState(() => canUseHostNavigationCanGoBack(), ); const [canGoBack, setCanGoBack] = useState(false); useEffect(() => { let isDisposed = false; let unsubscribeNavigation: () => void = () => {}; const syncSubscription = () => { unsubscribeNavigation(); unsubscribeNavigation = () => {}; const nextIsSupported = canUseHostNavigationCanGoBack(); if (!isDisposed) { setIsSupported(nextIsSupported); } if (!nextIsSupported) { if (!isDisposed) { setCanGoBack(false); } return; } unsubscribeNavigation = subscribeHostNavigationCanGoBack((payload) => { if (!isDisposed) { setCanGoBack(payload.canGoBack); } }); }; syncSubscription(); const unsubscribeRuntime = subscribeHostRuntimeChange(syncSubscription); return () => { isDisposed = true; unsubscribeRuntime(); unsubscribeNavigation(); }; }, []); return { canGoBack, isSupported, }; }