All files / app/utils useStablePush.ts

100% Statements 9/9
100% Branches 0/0
100% Functions 2/2
100% Lines 9/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  68x 68x     68x 429x 429x   429x   429x 2x     429x    
import type { NextRouter } from "next/router";
import { useRouter } from "next/router";
import { useRef, useState } from "react";
 
// from https://github.com/vercel/next.js/issues/18127#issuecomment-950907739
export default function useStablePush(): NextRouter["push"] {
  const router = useRouter();
  const routerRef = useRef(router);
 
  routerRef.current = router;
 
  const [{ push }] = useState<Pick<NextRouter, "push">>({
    push: (path) => routerRef.current.push(path),
  });
 
  return push;
}