Files
outline/app/components/ScrollToTop.ts
2022-02-05 10:15:40 -08:00

30 lines
851 B
TypeScript

// based on: https://reacttraining.com/react-router/web/guides/scroll-restoration
import * as React from "react";
import { useLocation } from "react-router-dom";
import usePrevious from "~/hooks/usePrevious";
type Props = {
children: JSX.Element;
};
export default function ScrollToTop({ children }: Props) {
const location = useLocation();
const previousLocationPathname = usePrevious(location.pathname);
React.useEffect(() => {
if (location.pathname === previousLocationPathname) {
return;
}
// exception for when entering or exiting document edit, scroll position should not reset
if (
location.pathname.match(/\/edit\/?$/) ||
previousLocationPathname?.match(/\/edit\/?$/)
) {
return;
}
window.scrollTo(0, 0);
}, [location.pathname, previousLocationPathname]);
return children;
}