| import { useCallback, useEffect, useRef } from 'react'; |
| import { useNavigate, useLocation } from 'react-router-dom'; |
| import type { Location } from 'react-router-dom'; |
|
|
| export function useCustomLink<T = HTMLAnchorElement>( |
| route: string, |
| callback?: (event: React.MouseEvent<T>) => void, |
| ) { |
| const navigate = useNavigate(); |
| const location = useLocation(); |
| const clickHandler = useCallback( |
| (event: React.MouseEvent<T>) => { |
| if (callback) { |
| callback(event); |
| } |
| if (event.button === 0 && !(event.ctrlKey || event.metaKey)) { |
| event.preventDefault(); |
| navigate(route, { state: { prevLocation: location } }); |
| } |
| }, |
| [navigate, route, callback, location], |
| ); |
| return clickHandler; |
| } |
|
|
| export const usePreviousLocation = () => { |
| const location = useLocation(); |
| const previousLocationRef: React.MutableRefObject<Location<unknown> | undefined> = useRef(); |
|
|
| useEffect(() => { |
| previousLocationRef.current = location.state?.prevLocation; |
| }, [location]); |
|
|
| return previousLocationRef; |
| }; |
|
|