react-router-dom#useNavigationType TypeScript Examples
The following examples show how to use
react-router-dom#useNavigationType.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: MainLayout.tsx From atlas with GNU General Public License v3.0 | 6 votes |
MainLayout: React.FC = () => {
const scrollPosition = useRef<number>(0)
const location = useLocation()
const navigationType = useNavigationType()
const [cachedLocation, setCachedLocation] = useState(location)
const locationState = location.state as RoutingState
const [openDialog, closeDialog] = useConfirmationModal({
title: 'Outdated browser detected',
description:
'It seems the browser version you are using is not fully supported by Joystream. Some of the features may be broken or not accessible. For the best experience, please upgrade your browser to the latest version.',
iconType: 'warning',
primaryButton: {
text: 'Click here to see instructions',
onClick: () => window.open('https://www.whatismybrowser.com/guides/how-to-update-your-browser/auto'),
},
onExitClick: () => closeDialog(),
})
useEffect(() => {
if (isBrowserOutdated) {
openDialog()
}
}, [openDialog])
useEffect(() => {
if (location.pathname === cachedLocation.pathname) {
return
}
setCachedLocation(location)
if (locationState?.overlaidLocation?.pathname === location.pathname) {
// if exiting routing overlay, skip scroll to top
return
}
if (navigationType !== 'POP') {
scrollPosition.current = window.scrollY
}
// delay scroll to allow transition to finish first
setTimeout(() => {
window.scrollTo(0, navigationType !== 'POP' ? 0 : scrollPosition.current)
}, parseInt(transitions.timings.routing) + ROUTING_ANIMATION_OFFSET)
}, [location, cachedLocation, locationState, navigationType])
return (
<>
<CookiePopover />
<Routes>
<Route path={absoluteRoutes.embedded.video()} element={<EmbeddedView />} />
<Route path={BASE_PATHS.viewer + '/*'} element={<ViewerLayout />} />
<Route path={BASE_PATHS.legal + '/*'} element={<LegalLayout />} />
<Route path={BASE_PATHS.studio + '/*'} element={<LoadableStudioLayout />} />
<Route path={BASE_PATHS.playground + '/*'} element={<LoadablePlaygroundLayout />} />
</Routes>
<AdminOverlay />
</>
)
}