This repository has been archived on 2022-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
outline/app/components/ScrollToTop.js

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;
}