30 lines
839 B
JavaScript
30 lines
839 B
JavaScript
// @flow
|
|
// 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: React.Node,
|
|
|};
|
|
|
|
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;
|
|
}
|