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

12
src/providers/DeepBrowsingProvider.tsx

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

Loading…
Cancel
Save