Fix issue where suggested language prompt could not be dismissed (#10581)

This commit is contained in:
DS Boyce
2026-05-22 01:54:54 -07:00
committed by GitHub
parent 2f4049e6e0
commit 7c5a9ab40d
@@ -142,12 +142,11 @@ export function SuggestedLanguage({
// clear // clear
setSuggLang(undefined) setSuggLang(undefined)
} }
const onDecline = () => { const onDecline = (language: string) => {
if (suggLang) { declinedSuggLangsRef.current.push(language)
declinedSuggLangsRef.current.push(suggLang) // clear
// clear setSuggLang(undefined)
setSuggLang(undefined) setHasInteracted(true)
}
} }
/** /**
@@ -248,18 +247,10 @@ export function SuggestedLanguage({
} }
}, [text, hasInteracted, detectLanguage, ax]) }, [text, hasInteracted, detectLanguage, ax])
/*
* This is intentionally computed based on a ref. Since we set and clear
* `suggLang` this derivation is safe, but be aware of it
* when making changes.
*/
const hasDeclined = suggLang
? // eslint-disable-next-line react-hooks/refs
declinedSuggLangsRef.current.includes(suggLang)
: false
/* /*
* We've detected a language, and the user hasn't already selected it. * We've detected a language, and the user hasn't already selected it.
* Note: suggLang is only set if it's not in declinedSuggLangsRef (checked
* in detectLanguage), so we don't need to filter it here.
*/ */
const hasLanguageSuggestion = suggLang && !currentLanguages.includes(suggLang) const hasLanguageSuggestion = suggLang && !currentLanguages.includes(suggLang)
@@ -272,30 +263,29 @@ export function SuggestedLanguage({
.filter(Boolean) .filter(Boolean)
.map(lang => parseLanguageString(lang)?.language) .map(lang => parseLanguageString(lang)?.language)
.filter(Boolean) as string[] .filter(Boolean) as string[]
const [replyToLanguage] = replyToLanguages
const hasSuggestedReplyLanguage = const hasSuggestedReplyLanguage =
!hasInteracted && !hasInteracted &&
!suggLang && !suggLang &&
replyToLanguages.length && replyToLanguage &&
!replyToLanguages.some(l => currentLanguages.includes(l)) !currentLanguages.includes(replyToLanguage)
if (hasDeclined) { if (hasLanguageSuggestion) {
return null
} else if (hasLanguageSuggestion) {
return ( return (
<GuessedLanguage <GuessedLanguage
language={suggLang} language={suggLang}
metadata={{currentTargetLanguages: currentLanguages, rawText: text}} metadata={{currentTargetLanguages: currentLanguages, rawText: text}}
onAccept={onAccept} onAccept={onAccept}
onDecline={onDecline} onDecline={() => onDecline(suggLang)}
/> />
) )
} else if (hasSuggestedReplyLanguage) { } else if (hasSuggestedReplyLanguage) {
return ( return (
<ReplyLanguageNudge <ReplyLanguageNudge
language={replyToLanguages[0]} language={replyToLanguage}
metadata={{currentTargetLanguages: currentLanguages}} metadata={{currentTargetLanguages: currentLanguages}}
onAccept={onAccept} onAccept={onAccept}
onDecline={onDecline} onDecline={() => onDecline(replyToLanguage)}
/> />
) )
} else { } else {