about summary refs log tree commit diff
path: root/src/view
diff options
context:
space:
mode:
authorElijah Seed-Arita <elijaharita@gmail.com>2025-08-15 06:16:13 -0700
committerGitHub <noreply@github.com>2025-08-15 06:16:13 -0700
commit5ca665467e9cbedd78f21df76db8cfde8eaa66b4 (patch)
treeed5ac7602b6d2904b49a22ac0d182bd7154cc756 /src/view
parent4e0be91cffa15711eaa3116e01d761dd9a0a749b (diff)
downloadvoidsky-5ca665467e9cbedd78f21df76db8cfde8eaa66b4.tar.zst
feat: use OP's language as recommendation when replying (#8832)
* feat: use OP's language as recommendation when replying

* fix: address nits
Diffstat (limited to 'src/view')
-rw-r--r--src/view/com/composer/Composer.tsx6
-rw-r--r--src/view/com/composer/select-language/SuggestedLanguage.tsx19
-rw-r--r--src/view/com/post-thread/PostThread.tsx1
-rw-r--r--src/view/com/post-thread/PostThreadItem.tsx1
-rw-r--r--src/view/com/post/Post.tsx1
-rw-r--r--src/view/com/posts/PostFeedItem.tsx1
6 files changed, 25 insertions, 4 deletions
diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx
index 71714fdde..296545353 100644
--- a/src/view/com/composer/Composer.tsx
+++ b/src/view/com/composer/Composer.tsx
@@ -621,7 +621,11 @@ export const ComposePost = ({
 
   const footer = (
     <>
-      <SuggestedLanguage text={activePost.richtext.text} />
+      <SuggestedLanguage
+        text={activePost.richtext.text}
+        // NOTE(@elijaharita): currently just choosing the first language if any exists
+        replyToLanguage={replyTo?.langs?.[0]}
+      />
       <ComposerPills
         isReply={!!replyTo}
         post={activePost}
diff --git a/src/view/com/composer/select-language/SuggestedLanguage.tsx b/src/view/com/composer/select-language/SuggestedLanguage.tsx
index 1e0948899..48e2187b8 100644
--- a/src/view/com/composer/select-language/SuggestedLanguage.tsx
+++ b/src/view/com/composer/select-language/SuggestedLanguage.tsx
@@ -19,16 +19,29 @@ import {Text} from '#/components/Typography'
 const onIdle = globalThis.requestIdleCallback || (cb => setTimeout(cb, 1))
 const cancelIdle = globalThis.cancelIdleCallback || clearTimeout
 
-export function SuggestedLanguage({text}: {text: string}) {
+export function SuggestedLanguage({
+  text,
+  replyToLanguage,
+}: {
+  text: string
+  replyToLanguage?: string
+}) {
   const [suggestedLanguage, setSuggestedLanguage] = useState<
     string | undefined
-  >()
+  >(text.length === 0 ? replyToLanguage : undefined)
   const langPrefs = useLanguagePrefs()
   const setLangPrefs = useLanguagePrefsApi()
   const t = useTheme()
   const {_} = useLingui()
 
   useEffect(() => {
+    // For replies, suggest the language of the post being replied to if no text
+    // has been typed yet
+    if (replyToLanguage && text.length === 0) {
+      setSuggestedLanguage(replyToLanguage)
+      return
+    }
+
     const textTrimmed = text.trim()
 
     // Don't run the language model on small posts, the results are likely
@@ -43,7 +56,7 @@ export function SuggestedLanguage({text}: {text: string}) {
     })
 
     return () => cancelIdle(idle)
-  }, [text])
+  }, [text, replyToLanguage])
 
   if (
     suggestedLanguage &&
diff --git a/src/view/com/post-thread/PostThread.tsx b/src/view/com/post-thread/PostThread.tsx
index 94cc04f54..bbf9f4a20 100644
--- a/src/view/com/post-thread/PostThread.tsx
+++ b/src/view/com/post-thread/PostThread.tsx
@@ -420,6 +420,7 @@ export function PostThread({uri}: {uri: string}) {
         author: thread.post.author,
         embed: thread.post.embed,
         moderation: threadModerationCache.get(thread),
+        langs: thread.record.langs,
       },
       onPost: onPostReply,
     })
diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx
index 97a1aa8ed..679a506b9 100644
--- a/src/view/com/post-thread/PostThreadItem.tsx
+++ b/src/view/com/post-thread/PostThreadItem.tsx
@@ -299,6 +299,7 @@ let PostThreadItemLoaded = ({
         author: post.author,
         embed: post.embed,
         moderation,
+        langs: record.langs,
       },
       onPost: onPostReply,
       onPostSuccess: onPostSuccess,
diff --git a/src/view/com/post/Post.tsx b/src/view/com/post/Post.tsx
index a8e32268e..f41f48e40 100644
--- a/src/view/com/post/Post.tsx
+++ b/src/view/com/post/Post.tsx
@@ -131,6 +131,7 @@ function PostInner({
         author: post.author,
         embed: post.embed,
         moderation,
+        langs: record.langs,
       },
     })
   }, [openComposer, post, record, moderation])
diff --git a/src/view/com/posts/PostFeedItem.tsx b/src/view/com/posts/PostFeedItem.tsx
index 14bbc4746..c2780a2a5 100644
--- a/src/view/com/posts/PostFeedItem.tsx
+++ b/src/view/com/posts/PostFeedItem.tsx
@@ -193,6 +193,7 @@ let FeedItemInner = ({
         author: post.author,
         embed: post.embed,
         moderation,
+        langs: record.langs,
       },
     })
   }