next-restore-scroll-position
Advanced tools
Comparing version
{ | ||
"name": "next-restore-scroll-position", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "", | ||
@@ -52,5 +52,4 @@ "main": "index.js", | ||
"peerDependencies": { | ||
"react": "^16 || ^17 || ^18", | ||
"next": "^13" | ||
"react": "^16 || ^17 || ^18" | ||
} | ||
} |
@@ -1,6 +0,14 @@ | ||
import Router, { NextRouter } from 'next/router' | ||
import { useEffect, useRef } from 'react' | ||
import { deleteScrollPos, restoreScrollPos, saveScrollPos } from './storage' | ||
export function useScrollRestoration(router: NextRouter, { enabled = true }: { enabled?: boolean } = {}) { | ||
interface Router { | ||
asPath: string | ||
events: { | ||
on: (event: string, callback: (data: any) => void) => void | ||
off: (event: string, callback: (data: any) => void) => void | ||
} | ||
beforePopState: (callback: () => boolean) => void | ||
} | ||
export function useScrollRestoration(router: Router, { enabled = true }: { enabled?: boolean } = {}) { | ||
const shouldRestoreRef = useRef(false) | ||
@@ -36,5 +44,5 @@ | ||
window.addEventListener('beforeunload', onBeforeUnload) | ||
Router.events.on('routeChangeStart', onRouteChangeStart) | ||
Router.events.on('routeChangeComplete', onRouteChangeComplete) | ||
Router.beforePopState(() => { | ||
router.events.on('routeChangeStart', onRouteChangeStart) | ||
router.events.on('routeChangeComplete', onRouteChangeComplete) | ||
router.beforePopState(() => { | ||
shouldRestoreRef.current = true | ||
@@ -46,7 +54,7 @@ return true | ||
window.removeEventListener('beforeunload', onBeforeUnload) | ||
Router.events.off('routeChangeStart', onRouteChangeStart) | ||
Router.events.off('routeChangeComplete', onRouteChangeComplete) | ||
Router.beforePopState(() => true) | ||
router.events.off('routeChangeStart', onRouteChangeStart) | ||
router.events.off('routeChangeComplete', onRouteChangeComplete) | ||
router.beforePopState(() => true) | ||
} | ||
}, [router, enabled]) | ||
} |
9898
1.66%1
-50%231
3.13%