Fix soft reset scroll on profile (#1998)

zio/stable
Eric Bailey 2023-11-27 09:43:05 -06:00 committed by GitHub
parent 0079030244
commit 828e53d533
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 23 additions and 18 deletions

View File

@ -5,7 +5,6 @@ import {AppBskyActorDefs, moderateProfile, ModerationOpts} from '@atproto/api'
import {msg} from '@lingui/macro' import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react' import {useLingui} from '@lingui/react'
import {NativeStackScreenProps, CommonNavigatorParams} from 'lib/routes/types' import {NativeStackScreenProps, CommonNavigatorParams} from 'lib/routes/types'
import {ViewSelectorHandle} from '../com/util/ViewSelector'
import {CenteredView, FlatList} from '../com/util/Views' import {CenteredView, FlatList} from '../com/util/Views'
import {ScreenHider} from 'view/com/util/moderation/ScreenHider' import {ScreenHider} from 'view/com/util/moderation/ScreenHider'
import {Feed} from 'view/com/posts/Feed' import {Feed} from 'view/com/posts/Feed'
@ -131,7 +130,6 @@ function ProfileScreenLoaded({
const {screen, track} = useAnalytics() const {screen, track} = useAnalytics()
const [currentPage, setCurrentPage] = React.useState(0) const [currentPage, setCurrentPage] = React.useState(0)
const {_} = useLingui() const {_} = useLingui()
const viewSelectorRef = React.useRef<ViewSelectorHandle>(null)
const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled() const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled()
const extraInfoQuery = useProfileExtraInfoQuery(profile.did) const extraInfoQuery = useProfileExtraInfoQuery(profile.did)
const postsSectionRef = React.useRef<SectionRef>(null) const postsSectionRef = React.useRef<SectionRef>(null)
@ -184,14 +182,33 @@ function ProfileScreenLoaded({
listsIndex = nextIndex++ listsIndex = nextIndex++
} }
const scrollSectionToTop = React.useCallback(
(index: number) => {
if (index === postsIndex) {
postsSectionRef.current?.scrollToTop()
} else if (index === repliesIndex) {
repliesSectionRef.current?.scrollToTop()
} else if (index === mediaIndex) {
mediaSectionRef.current?.scrollToTop()
} else if (index === likesIndex) {
likesSectionRef.current?.scrollToTop()
} else if (index === feedsIndex) {
feedsSectionRef.current?.scrollToTop()
} else if (index === listsIndex) {
listsSectionRef.current?.scrollToTop()
}
},
[postsIndex, repliesIndex, mediaIndex, likesIndex, feedsIndex, listsIndex],
)
useFocusEffect( useFocusEffect(
React.useCallback(() => { React.useCallback(() => {
setMinimalShellMode(false) setMinimalShellMode(false)
screen('Profile') screen('Profile')
return listenSoftReset(() => { return listenSoftReset(() => {
viewSelectorRef.current?.scrollToTop() scrollSectionToTop(currentPage)
}) })
}, [viewSelectorRef, setMinimalShellMode, screen]), }, [setMinimalShellMode, screen, currentPage, scrollSectionToTop]),
) )
useFocusEffect( useFocusEffect(
@ -225,21 +242,9 @@ function ProfileScreenLoaded({
const onCurrentPageSelected = React.useCallback( const onCurrentPageSelected = React.useCallback(
(index: number) => { (index: number) => {
if (index === postsIndex) { scrollSectionToTop(index)
postsSectionRef.current?.scrollToTop()
} else if (index === repliesIndex) {
repliesSectionRef.current?.scrollToTop()
} else if (index === mediaIndex) {
mediaSectionRef.current?.scrollToTop()
} else if (index === likesIndex) {
likesSectionRef.current?.scrollToTop()
} else if (index === feedsIndex) {
feedsSectionRef.current?.scrollToTop()
} else if (index === listsIndex) {
listsSectionRef.current?.scrollToTop()
}
}, },
[postsIndex, repliesIndex, mediaIndex, likesIndex, feedsIndex, listsIndex], [scrollSectionToTop],
) )
// rendering // rendering