Commit 2ab476ef authored by Steven's avatar Steven

fix(web): memoize useNavigateTo to prevent infinite view transition loop

Wrapping the returned function in useCallback prevents a new reference
on every render, which was causing an infinite startViewTransition loop
on the initial signup page (fresh install with no admin).

Fixes #5626
parent 6eaab52e
import { useCallback } from "react";
import { NavigateOptions, useNavigate } from "react-router-dom"; import { NavigateOptions, useNavigate } from "react-router-dom";
const useNavigateTo = () => { const useNavigateTo = () => {
const navigateTo = useNavigate(); const navigateTo = useNavigate();
const navigateToWithViewTransition = (to: string, options?: NavigateOptions) => { const navigateToWithViewTransition = useCallback(
(to: string, options?: NavigateOptions) => {
const doc = window.document as unknown as Document & { startViewTransition?: (callback: () => void) => void }; const doc = window.document as unknown as Document & { startViewTransition?: (callback: () => void) => void };
if (!doc.startViewTransition) { if (!doc.startViewTransition) {
navigateTo(to, options); navigateTo(to, options);
...@@ -12,7 +14,9 @@ const useNavigateTo = () => { ...@@ -12,7 +14,9 @@ const useNavigateTo = () => {
navigateTo(to, options); navigateTo(to, options);
}); });
} }
}; },
[navigateTo],
);
return navigateToWithViewTransition; return navigateToWithViewTransition;
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment