Browse Source

fix: prevent flicker of top tabs on back navigation

imwald
codytseng 7 months ago
parent
commit
3b3a3f41c3
  1. 4
      src/layouts/PrimaryPageLayout/index.tsx
  2. 12
      src/providers/DeepBrowsingProvider.tsx

4
src/layouts/PrimaryPageLayout/index.tsx

@ -60,7 +60,7 @@ const PrimaryPageLayout = forwardRef(
if (isSmallScreen) { if (isSmallScreen) {
return ( return (
<DeepBrowsingProvider active={current === pageName}> <DeepBrowsingProvider active={current === pageName && display}>
<div <div
ref={smallScreenScrollAreaRef} ref={smallScreenScrollAreaRef}
style={{ style={{
@ -77,7 +77,7 @@ const PrimaryPageLayout = forwardRef(
} }
return ( return (
<DeepBrowsingProvider active={current === pageName} scrollAreaRef={scrollAreaRef}> <DeepBrowsingProvider active={current === pageName && display} scrollAreaRef={scrollAreaRef}>
<ScrollArea <ScrollArea
className="h-screen overflow-auto" className="h-screen overflow-auto"
scrollBarClassName="z-50 pt-12" scrollBarClassName="z-50 pt-12"

12
src/providers/DeepBrowsingProvider.tsx

@ -31,7 +31,6 @@ export function DeepBrowsingProvider({
const [lastScrollTop, setLastScrollTop] = useState(lastScrollTopRef.current) const [lastScrollTop, setLastScrollTop] = useState(lastScrollTopRef.current)
useEffect(() => { useEffect(() => {
setDeepBrowsing(false)
if (!active) return if (!active) return
const handleScroll = () => { const handleScroll = () => {
@ -51,16 +50,11 @@ export function DeepBrowsingProvider({
} }
} }
if (!scrollAreaRef) { const target = scrollAreaRef ? scrollAreaRef.current : window
window.addEventListener('scroll', handleScroll)
return () => {
window.removeEventListener('scroll', handleScroll)
}
}
scrollAreaRef.current?.addEventListener('scroll', handleScroll) target?.addEventListener('scroll', handleScroll)
return () => { return () => {
scrollAreaRef.current?.removeEventListener('scroll', handleScroll) target?.removeEventListener('scroll', handleScroll)
} }
}, [active]) }, [active])

Loading…
Cancel
Save