import * as React from 'react' import { useRouter } from './useRouter' import type { AnyRouter, FromPathOption, NavigateOptions, RegisteredRouter, UseNavigateResult, } from '@tanstack/router-core' export function useNavigate< TRouter extends AnyRouter = RegisteredRouter, TDefaultFrom extends string = string, >(_defaultOpts?: { from?: FromPathOption }): UseNavigateResult { const { navigate } = useRouter() return React.useCallback( (options: NavigateOptions) => { return navigate({ from: _defaultOpts?.from, ...options, }) }, [_defaultOpts?.from, navigate], ) as UseNavigateResult } export function Navigate< TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string = string, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = '', >(props: NavigateOptions): null { const router = useRouter() const previousPropsRef = React.useRef | null>(null) React.useEffect(() => { if (previousPropsRef.current !== props) { router.navigate({ ...props, }) previousPropsRef.current = props } }, [router, props]) return null }