about summary refs log tree commit diff
path: root/src/view/com
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2024-10-24 20:41:50 +0100
committerGitHub <noreply@github.com>2024-10-24 20:41:50 +0100
commite8a53dcea84afc3b313037dbaf059c68121eb9ab (patch)
tree43593f5bb5ab852b6c61244167d5ead31c8ec125 /src/view/com
parentfa4cca11fedb78b31b7b606eafa74ebc17435f24 (diff)
downloadvoidsky-e8a53dcea84afc3b313037dbaf059c68121eb9ab.tar.zst
Refactor post meta to return PostView (#5645)
Diffstat (limited to 'src/view/com')
-rw-r--r--src/view/com/composer/Composer.tsx6
-rw-r--r--src/view/com/composer/ComposerReplyTo.tsx24
-rw-r--r--src/view/com/util/post-ctrls/PostCtrls.tsx16
-rw-r--r--src/view/com/util/post-embeds/QuoteEmbed.tsx58
4 files changed, 30 insertions, 74 deletions
diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx
index 126addd1c..88052addc 100644
--- a/src/view/com/composer/Composer.tsx
+++ b/src/view/com/composer/Composer.tsx
@@ -129,7 +129,6 @@ export const ComposePost = ({
   replyTo,
   onPost,
   quote: initQuote,
-  quoteCount: initQuoteCount,
   mention: initMention,
   openEmojiPicker,
   text: initText,
@@ -425,13 +424,13 @@ export const ComposePost = ({
         emitPostCreated()
       }
       setLangPrefs.savePostLanguageToHistory()
-      if (initQuote && initQuoteCount !== undefined) {
+      if (initQuote) {
         // We want to wait for the quote count to update before we call `onPost`, which will refetch data
         whenAppViewReady(agent, initQuote.uri, res => {
           const thread = res.data.thread
           if (
             AppBskyFeedDefs.isThreadViewPost(thread) &&
-            thread.post.quoteCount !== initQuoteCount
+            thread.post.quoteCount !== initQuote.quoteCount
           ) {
             onPost?.(postUri)
             return true
@@ -463,7 +462,6 @@ export const ComposePost = ({
       onPost,
       quote,
       initQuote,
-      initQuoteCount,
       replyTo,
       richtext.text,
       setLangPrefs,
diff --git a/src/view/com/composer/ComposerReplyTo.tsx b/src/view/com/composer/ComposerReplyTo.tsx
index 7f4bb85f2..5bd5abbc8 100644
--- a/src/view/com/composer/ComposerReplyTo.tsx
+++ b/src/view/com/composer/ComposerReplyTo.tsx
@@ -13,7 +13,7 @@ import {useLingui} from '@lingui/react'
 import {sanitizeDisplayName} from '#/lib/strings/display-names'
 import {sanitizeHandle} from '#/lib/strings/handles'
 import {ComposerOptsPostRef} from '#/state/shell/composer'
-import {QuoteEmbed} from '#/view/com/util/post-embeds/QuoteEmbed'
+import {MaybeQuoteEmbed} from '#/view/com/util/post-embeds/QuoteEmbed'
 import {Text} from '#/view/com/util/text/Text'
 import {PreviewableUserAvatar} from '#/view/com/util/UserAvatar'
 import {atoms as a, useTheme} from '#/alf'
@@ -33,33 +33,21 @@ export function ComposerReplyTo({replyTo}: {replyTo: ComposerOptsPostRef}) {
     })
   }, [])
 
-  const quote = React.useMemo(() => {
+  const quoteEmbed = React.useMemo(() => {
     if (
       AppBskyEmbedRecord.isView(embed) &&
       AppBskyEmbedRecord.isViewRecord(embed.record) &&
       AppBskyFeedPost.isRecord(embed.record.value)
     ) {
-      // Not going to include the images right now
-      return {
-        author: embed.record.author,
-        cid: embed.record.cid,
-        uri: embed.record.uri,
-        indexedAt: embed.record.indexedAt,
-        text: embed.record.value.text,
-      }
+      return embed
     } else if (
       AppBskyEmbedRecordWithMedia.isView(embed) &&
       AppBskyEmbedRecord.isViewRecord(embed.record.record) &&
       AppBskyFeedPost.isRecord(embed.record.record.value)
     ) {
-      return {
-        author: embed.record.record.author,
-        cid: embed.record.record.cid,
-        uri: embed.record.record.uri,
-        indexedAt: embed.record.record.indexedAt,
-        text: embed.record.record.value.text,
-      }
+      return embed.record
     }
+    return null
   }, [embed])
 
   const images = React.useMemo(() => {
@@ -110,7 +98,7 @@ export function ComposerReplyTo({replyTo}: {replyTo: ComposerOptsPostRef}) {
             <ComposerReplyToImages images={images} showFull={showFull} />
           )}
         </View>
-        {showFull && quote && <QuoteEmbed quote={quote} />}
+        {showFull && quoteEmbed && <MaybeQuoteEmbed embed={quoteEmbed} />}
       </View>
     </Pressable>
   )
diff --git a/src/view/com/util/post-ctrls/PostCtrls.tsx b/src/view/com/util/post-ctrls/PostCtrls.tsx
index 48d081f79..160053a8c 100644
--- a/src/view/com/util/post-ctrls/PostCtrls.tsx
+++ b/src/view/com/util/post-ctrls/PostCtrls.tsx
@@ -199,27 +199,15 @@ let PostCtrls = ({
       feedContext,
     })
     openComposer({
-      quote: {
-        uri: post.uri,
-        cid: post.cid,
-        text: record.text,
-        author: post.author,
-        indexedAt: post.indexedAt,
-      },
-      quoteCount: post.quoteCount,
+      quote: post,
       onPost: onPostReply,
     })
   }, [
     _,
     sendInteraction,
-    post.uri,
-    post.cid,
-    post.author,
-    post.indexedAt,
-    post.quoteCount,
+    post,
     feedContext,
     openComposer,
-    record.text,
     onPostReply,
     isBlocked,
   ])
diff --git a/src/view/com/util/post-embeds/QuoteEmbed.tsx b/src/view/com/util/post-embeds/QuoteEmbed.tsx
index c44ec3b84..49cfb2150 100644
--- a/src/view/com/util/post-embeds/QuoteEmbed.tsx
+++ b/src/view/com/util/post-embeds/QuoteEmbed.tsx
@@ -33,7 +33,6 @@ import {useModerationOpts} from '#/state/preferences/moderation-opts'
 import {precacheProfile} from '#/state/queries/profile'
 import {useResolveLinkQuery} from '#/state/queries/resolve-link'
 import {useSession} from '#/state/session'
-import {ComposerOptsQuote} from '#/state/shell/composer'
 import {atoms as a, useTheme} from '#/alf'
 import {RichText} from '#/components/RichText'
 import {ContentHider} from '../../../../components/moderation/ContentHider'
@@ -68,7 +67,6 @@ export function MaybeQuoteEmbed({
     return (
       <QuoteEmbedModerated
         viewRecord={embed.record}
-        postRecord={embed.record.value}
         onOpen={onOpen}
         style={style}
         allowNestedQuotes={allowNestedQuotes}
@@ -118,39 +116,31 @@ export function MaybeQuoteEmbed({
 
 function QuoteEmbedModerated({
   viewRecord,
-  postRecord,
   onOpen,
   style,
   allowNestedQuotes,
   viewContext,
 }: {
   viewRecord: AppBskyEmbedRecord.ViewRecord
-  postRecord: AppBskyFeedPost.Record
   onOpen?: () => void
   style?: StyleProp<ViewStyle>
   allowNestedQuotes?: boolean
   viewContext?: QuoteEmbedViewContext
 }) {
   const moderationOpts = useModerationOpts()
+  const postView = React.useMemo(
+    () => viewRecordToPostView(viewRecord),
+    [viewRecord],
+  )
   const moderation = React.useMemo(() => {
     return moderationOpts
-      ? moderatePost_wrapped(viewRecordToPostView(viewRecord), moderationOpts)
+      ? moderatePost_wrapped(postView, moderationOpts)
       : undefined
-  }, [viewRecord, moderationOpts])
-
-  const quote = {
-    author: viewRecord.author,
-    cid: viewRecord.cid,
-    uri: viewRecord.uri,
-    indexedAt: viewRecord.indexedAt,
-    text: postRecord.text,
-    facets: postRecord.facets,
-    embeds: viewRecord.embeds,
-  }
+  }, [postView, moderationOpts])
 
   return (
     <QuoteEmbed
-      quote={quote}
+      quote={postView}
       moderation={moderation}
       onOpen={onOpen}
       style={style}
@@ -167,7 +157,7 @@ export function QuoteEmbed({
   style,
   allowNestedQuotes,
 }: {
-  quote: ComposerOptsQuote
+  quote: AppBskyFeedDefs.PostView
   moderation?: ModerationDecision
   onOpen?: () => void
   style?: StyleProp<ViewStyle>
@@ -181,16 +171,18 @@ export function QuoteEmbed({
   const itemHref = makeProfileLink(quote.author, 'post', itemUrip.rkey)
   const itemTitle = `Post by ${quote.author.handle}`
 
-  const richText = React.useMemo(
-    () =>
-      quote.text.trim()
-        ? new RichTextAPI({text: quote.text, facets: quote.facets})
-        : undefined,
-    [quote.text, quote.facets],
-  )
+  const richText = React.useMemo(() => {
+    const text = AppBskyFeedPost.isRecord(quote.record) ? quote.record.text : ''
+    const facets = AppBskyFeedPost.isRecord(quote.record)
+      ? quote.record.facets
+      : undefined
+    return text.trim()
+      ? new RichTextAPI({text: text, facets: facets})
+      : undefined
+  }, [quote.record])
 
   const embed = React.useMemo(() => {
-    const e = quote.embeds?.[0]
+    const e = quote.embed
 
     if (allowNestedQuotes) {
       return e
@@ -210,7 +202,7 @@ export function QuoteEmbed({
         return e.media
       }
     }
-  }, [quote.embeds, allowNestedQuotes])
+  }, [quote.embed, allowNestedQuotes])
 
   const onBeforePress = React.useCallback(() => {
     precacheProfile(queryClient, quote.author)
@@ -292,17 +284,7 @@ export function LazyQuoteEmbed({uri}: {uri: string}) {
   if (!data || data.type !== 'record' || data.kind !== 'post') {
     return null
   }
-  return (
-    <QuoteEmbed
-      quote={{
-        cid: data.record.cid,
-        uri: data.record.uri,
-        author: data.meta.author,
-        indexedAt: data.meta.indexedAt,
-        text: data.meta.text,
-      }}
-    />
-  )
+  return <QuoteEmbed quote={data.meta} />
 }
 
 function viewRecordToPostView(