Clean up dropdown logic
This commit is contained in:
@@ -3,6 +3,7 @@ import {
|
|||||||
AppBskyEmbedRecordWithMedia,
|
AppBskyEmbedRecordWithMedia,
|
||||||
AppBskyFeedDefs,
|
AppBskyFeedDefs,
|
||||||
AppBskyFeedPostgate,
|
AppBskyFeedPostgate,
|
||||||
|
AtUri,
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
import {ViewRemoved} from '@atproto/api/dist/client/types/app/bsky/embed/record'
|
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'
|
} from 'react-native'
|
||||||
import * as Clipboard from 'expo-clipboard'
|
import * as Clipboard from 'expo-clipboard'
|
||||||
import {
|
import {
|
||||||
AppBskyEmbedRecord,
|
|
||||||
AppBskyEmbedRecordWithMedia,
|
|
||||||
AppBskyFeedDefs,
|
AppBskyFeedDefs,
|
||||||
AppBskyFeedPost,
|
AppBskyFeedPost,
|
||||||
AtUri,
|
AtUri,
|
||||||
@@ -34,6 +32,7 @@ import {
|
|||||||
useThreadMuteMutationQueue,
|
useThreadMuteMutationQueue,
|
||||||
} from '#/state/queries/post'
|
} from '#/state/queries/post'
|
||||||
import {useToggleQuoteDetachmentMutation} from '#/state/queries/postgate'
|
import {useToggleQuoteDetachmentMutation} from '#/state/queries/postgate'
|
||||||
|
import {getMaybeDetachedQuoteEmbed} from '#/state/queries/postgate/util'
|
||||||
import {useToggleReplyVisibilityMutation} from '#/state/queries/threadgate'
|
import {useToggleReplyVisibilityMutation} from '#/state/queries/threadgate'
|
||||||
import {useThreadgateRecordQuery} from '#/state/queries/threadgate'
|
import {useThreadgateRecordQuery} from '#/state/queries/threadgate'
|
||||||
import {useSession} from '#/state/session'
|
import {useSession} from '#/state/session'
|
||||||
@@ -118,38 +117,11 @@ let PostDropdownBtn = ({
|
|||||||
const postCid = post.cid
|
const postCid = post.cid
|
||||||
const postAuthor = post.author
|
const postAuthor = post.author
|
||||||
const quoteEmbed = React.useMemo(() => {
|
const quoteEmbed = React.useMemo(() => {
|
||||||
if (!currentAccount) return
|
if (!currentAccount || !post.embed) return
|
||||||
if (!post.embed) return
|
return getMaybeDetachedQuoteEmbed({
|
||||||
|
viewerDid: currentAccount?.did,
|
||||||
if (AppBskyEmbedRecord.isView(post.embed)) {
|
post,
|
||||||
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,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, [post, currentAccount])
|
}, [post, currentAccount])
|
||||||
|
|
||||||
const rootUri = record.reply?.root?.uri || postUri
|
const rootUri = record.reply?.root?.uri || postUri
|
||||||
|
|||||||
Reference in New Issue
Block a user