Clean up dropdown logic

This commit is contained in:
Eric Bailey
2024-08-07 10:40:16 -05:00
parent 12a0164464
commit a61bef8716
2 changed files with 61 additions and 34 deletions
+55
View File
@@ -3,6 +3,7 @@ import {
AppBskyEmbedRecordWithMedia,
AppBskyFeedDefs,
AppBskyFeedPostgate,
AtUri,
} from '@atproto/api'
import {ViewRemoved} from '@atproto/api/dist/client/types/app/bsky/embed/record'
@@ -104,3 +105,57 @@ export function createEmbedRecordWithmediaView({
},
}
}
export function getMaybeDetachedQuoteEmbed({
viewerDid,
post,
}: {
viewerDid: string
post: AppBskyFeedDefs.PostView
}) {
if (AppBskyEmbedRecord.isView(post.embed)) {
// detached
if (AppBskyEmbedRecord.isViewRemoved(post.embed.record)) {
const urip = new AtUri(post.embed.record.uri)
return {
embed: post.embed,
uri: urip.toString(),
isOwnedByViewer: urip.host === viewerDid,
isDetached: true,
}
}
// post
if (AppBskyEmbedRecord.isViewRecord(post.embed.record)) {
const urip = new AtUri(post.embed.record.uri)
return {
embed: post.embed,
uri: urip.toString(),
isOwnedByViewer: urip.host === viewerDid,
isDetached: false,
}
}
} else if (AppBskyEmbedRecordWithMedia.isView(post.embed)) {
// detached
if (AppBskyEmbedRecord.isViewRemoved(post.embed.record.record)) {
const urip = new AtUri(post.embed.record.record.uri)
return {
embed: post.embed,
uri: urip.toString(),
isOwnedByViewer: urip.host === viewerDid,
isDetached: true,
}
}
// post
if (AppBskyEmbedRecord.isViewRecord(post.embed.record.record)) {
const urip = new AtUri(post.embed.record.record.uri)
return {
embed: post.embed,
uri: urip.toString(),
isOwnedByViewer: urip.host === viewerDid,
isDetached: false,
}
}
}
}
+6 -34
View File
@@ -7,8 +7,6 @@ import {
} from 'react-native'
import * as Clipboard from 'expo-clipboard'
import {
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
AppBskyFeedDefs,
AppBskyFeedPost,
AtUri,
@@ -34,6 +32,7 @@ import {
useThreadMuteMutationQueue,
} from '#/state/queries/post'
import {useToggleQuoteDetachmentMutation} from '#/state/queries/postgate'
import {getMaybeDetachedQuoteEmbed} from '#/state/queries/postgate/util'
import {useToggleReplyVisibilityMutation} from '#/state/queries/threadgate'
import {useThreadgateRecordQuery} from '#/state/queries/threadgate'
import {useSession} from '#/state/session'
@@ -118,38 +117,11 @@ let PostDropdownBtn = ({
const postCid = post.cid
const postAuthor = post.author
const quoteEmbed = React.useMemo(() => {
if (!currentAccount) return
if (!post.embed) return
if (AppBskyEmbedRecord.isView(post.embed)) {
const isPost = AppBskyEmbedRecord.isViewRecord(post.embed.record)
const isDetachedPost = AppBskyEmbedRecord.isViewRemoved(post.embed.record)
if (isPost || isDetachedPost) {
const urip = new AtUri(post.embed.record.uri)
return {
uri: urip.toString(),
isOwnedByViewer: urip.host === currentAccount.did,
isDetached: isDetachedPost,
}
}
} else if (AppBskyEmbedRecordWithMedia.isView(post.embed)) {
const isPost = AppBskyEmbedRecord.isViewRecord(post.embed.record.record)
const isDetachedPost = AppBskyEmbedRecord.isViewRemoved(
post.embed.record.record,
)
if (isPost || isDetachedPost) {
const urip = new AtUri(post.embed.record.record.uri)
return {
uri: urip.toString(),
isOwnedByViewer: urip.host === currentAccount.did,
isDetached: isDetachedPost,
}
}
}
if (!currentAccount || !post.embed) return
return getMaybeDetachedQuoteEmbed({
viewerDid: currentAccount?.did,
post,
})
}, [post, currentAccount])
const rootUri = record.reply?.root?.uri || postUri