import {useMemo} from 'react' import {useNavigation} from '@react-navigation/core' import {useDedupe} from '#/lib/hooks/useDedupe' import {type NavigationProp} from '#/lib/routes/types' export type DebouncedNavigationProp = Pick< NavigationProp, | 'popToTop' | 'push' | 'navigate' | 'canGoBack' | 'replace' | 'dispatch' | 'goBack' | 'getState' > export function useNavigationDeduped() { const navigation = useNavigation() const dedupe = useDedupe() return useMemo( () => ({ push: (...args: Parameters) => { dedupe(() => navigation.push(...args)) }, navigate: (...args: Parameters) => { dedupe(() => navigation.navigate(...args)) }, replace: (...args: Parameters) => { dedupe(() => navigation.replace(...args)) }, dispatch: (...args: Parameters) => { dedupe(() => navigation.dispatch(...args)) }, popToTop: () => { dedupe(() => navigation.popToTop()) }, goBack: () => { dedupe(() => navigation.goBack()) }, canGoBack: () => { return navigation.canGoBack() }, getState: () => { return navigation.getState() }, }), [dedupe, navigation], ) }