Clean up dropdown logic
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user