Bluesky app fork with some witchin' additions 💫 witchsky.app
bluesky fork client

Prevent over-eager translate button (#10007)

authored by samuel.fm and committed by

GitHub 20bf2cd1 fe8e8ce7

+13 -11
+13 -11
src/components/Post/Translated/index.tsx
··· 5 6 import {HITSLOP_30} from '#/lib/constants' 7 import {useGoogleTranslate} from '#/lib/hooks/useGoogleTranslate' 8 - import {guessLanguage, useTranslate} from '#/lib/translation' 9 import {type TranslationFunction} from '#/lib/translation' 10 - import {codeToLanguageName, languageName} from '#/locale/helpers' 11 import {LANGUAGES} from '#/locale/languages' 12 import {useLanguagePrefs} from '#/state/preferences' 13 import {atoms as a, native, useTheme, web} from '#/alf' ··· 36 key: post.uri, 37 }) 38 39 - const postLanguage = useMemo(() => guessLanguage(postText), [postText]) 40 - const needsTranslation = postLanguage !== langPrefs.primaryLanguage 41 42 switch (translationState.status) { 43 case 'loading': ··· 49 translate={translate} 50 postText={postText} 51 sourceLanguage={ 52 - translationState.sourceLanguage ?? postLanguage ?? null // Fallback primarily for iOS 53 } 54 translatedText={translationState.translatedText} 55 /> ··· 65 ) 66 default: 67 return ( 68 - !hideTranslateLink && 69 needsTranslation && ( 70 <TranslationLink 71 postText={postText} 72 primaryLanguage={langPrefs.primaryLanguage} 73 - sourceLanguage={postLanguage} 74 translate={translate} 75 /> 76 ) ··· 96 function TranslationLink({ 97 postText, 98 primaryLanguage, 99 - sourceLanguage, 100 translate, 101 }: { 102 postText: string 103 primaryLanguage: string 104 - sourceLanguage: string | null 105 translate: TranslationFunction 106 }) { 107 const t = useTheme() ··· 115 }) 116 117 ax.metric('translate', { 118 - sourceLanguages: sourceLanguage ? [sourceLanguage] : [], 119 targetLanguage: primaryLanguage, 120 textLength: postText.length, 121 }) 122 - }, [ax, postText, primaryLanguage, translate, sourceLanguage]) 123 124 return ( 125 <View
··· 5 6 import {HITSLOP_30} from '#/lib/constants' 7 import {useGoogleTranslate} from '#/lib/hooks/useGoogleTranslate' 8 + import {useTranslate} from '#/lib/translation' 9 import {type TranslationFunction} from '#/lib/translation' 10 + import { 11 + codeToLanguageName, 12 + isPostInLanguage, 13 + languageName, 14 + } from '#/locale/helpers' 15 import {LANGUAGES} from '#/locale/languages' 16 import {useLanguagePrefs} from '#/state/preferences' 17 import {atoms as a, native, useTheme, web} from '#/alf' ··· 40 key: post.uri, 41 }) 42 43 + const needsTranslation = useMemo(() => { 44 + if (hideTranslateLink) return false 45 + return !isPostInLanguage(post, [langPrefs.primaryLanguage]) 46 + }, [hideTranslateLink, post, langPrefs.primaryLanguage]) 47 48 switch (translationState.status) { 49 case 'loading': ··· 55 translate={translate} 56 postText={postText} 57 sourceLanguage={ 58 + translationState.sourceLanguage ?? null // Fallback primarily for iOS 59 } 60 translatedText={translationState.translatedText} 61 /> ··· 71 ) 72 default: 73 return ( 74 needsTranslation && ( 75 <TranslationLink 76 postText={postText} 77 primaryLanguage={langPrefs.primaryLanguage} 78 translate={translate} 79 /> 80 ) ··· 100 function TranslationLink({ 101 postText, 102 primaryLanguage, 103 translate, 104 }: { 105 postText: string 106 primaryLanguage: string 107 translate: TranslationFunction 108 }) { 109 const t = useTheme() ··· 117 }) 118 119 ax.metric('translate', { 120 + sourceLanguages: [], // todo: get from post maybe? 121 targetLanguage: primaryLanguage, 122 textLength: postText.length, 123 }) 124 + }, [ax, postText, primaryLanguage, translate]) 125 126 return ( 127 <View