Files
med-notes/.pnpm-store/v10/files/96/17c503820a614cfb457b621e11b707d281a2abe5dffdc095ba034fc0a8ec9363f32b65c33dc4718dd242ed3c67da86657cd372ce037e1e85e5c43bd0840d0e
2025-05-09 05:30:08 +02:00

56 lines
1.4 KiB
Plaintext

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<TRouter, TDefaultFrom>
}): UseNavigateResult<TDefaultFrom> {
const { navigate } = useRouter()
return React.useCallback(
(options: NavigateOptions) => {
return navigate({
from: _defaultOpts?.from,
...options,
})
},
[_defaultOpts?.from, navigate],
) as UseNavigateResult<TDefaultFrom>
}
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<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {
const router = useRouter()
const previousPropsRef = React.useRef<NavigateOptions<
TRouter,
TFrom,
TTo,
TMaskFrom,
TMaskTo
> | null>(null)
React.useEffect(() => {
if (previousPropsRef.current !== props) {
router.navigate({
...props,
})
previousPropsRef.current = props
}
}, [router, props])
return null
}