Show just-posted replies above OP replies (#4901)

* Unify onPostReply handler

* Show just-posted replies above OP replies

* Only do this for the highlighted post or thread mode

It's confusing to have your post displace OP thread or other people's leaf posts.
This commit is contained in:
dan 2024-08-08 19:19:58 +01:00 committed by GitHub
parent c1af767fa6
commit e782db33dc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 53 additions and 10 deletions

View file

@ -160,12 +160,22 @@ export function PostThread({uri}: {uri: string | undefined}) {
return cache
}, [thread, moderationOpts])
const [justPostedUris, setJustPostedUris] = React.useState(
() => new Set<string>(),
)
const skeleton = React.useMemo(() => {
const threadViewPrefs = preferences?.threadViewPrefs
if (!threadViewPrefs || !thread) return null
return createThreadSkeleton(
sortThread(thread, threadViewPrefs, threadModerationCache, currentDid),
sortThread(
thread,
threadViewPrefs,
threadModerationCache,
currentDid,
justPostedUris,
),
!!currentDid,
treeView,
threadModerationCache,
@ -178,6 +188,7 @@ export function PostThread({uri}: {uri: string | undefined}) {
treeView,
threadModerationCache,
hiddenRepliesState,
justPostedUris,
])
const error = React.useMemo(() => {
@ -302,6 +313,20 @@ export function PostThread({uri}: {uri: string | undefined}) {
setMaxReplies(prev => prev + 50)
}, [isFetching, maxReplies, posts.length])
const onPostReply = React.useCallback(
(postUri: string | undefined) => {
refetch()
if (postUri) {
setJustPostedUris(set => {
const nextSet = new Set(set)
nextSet.add(postUri)
return nextSet
})
}
},
[refetch],
)
const {openComposer} = useComposerControls()
const onPressReply = React.useCallback(() => {
if (thread?.type !== 'post') {
@ -315,9 +340,9 @@ export function PostThread({uri}: {uri: string | undefined}) {
author: thread.post.author,
embed: thread.post.embed,
},
onPost: () => refetch(),
onPost: onPostReply,
})
}, [openComposer, thread, refetch])
}, [openComposer, thread, onPostReply])
const canReply = !error && rootPost && !rootPost.viewer?.replyDisabled
const hasParents =
@ -415,7 +440,7 @@ export function PostThread({uri}: {uri: string | undefined}) {
HiddenRepliesState.ShowAndOverridePostHider &&
item.ctx.depth > 0
}
onPostReply={refetch}
onPostReply={onPostReply}
hideTopBorder={index === 0 && !item.ctx.isParentLoading}
/>
</View>