import {msg} from '@lingui/core/macro' import {useLingui} from '@lingui/react' import {Trans} from '@lingui/react/macro' import {LANG_DROPDOWN_HITSLOP} from '#/lib/constants' import {codeToLanguageName} from '#/locale/helpers' import { toPostLanguages, useLanguagePrefs, useLanguagePrefsApi, } from '#/state/preferences/languages' import {atoms as a, useTheme} from '#/alf' import {Button, type ButtonProps} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {LanguageSelectDialog} from '#/components/dialogs/LanguageSelectDialog' import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRightIcon} from '#/components/icons/Chevron' import {Globe_Stroke2_Corner0_Rounded as GlobeIcon} from '#/components/icons/Globe' import * as Menu from '#/components/Menu' import {Text} from '#/components/Typography' export function PostLanguageSelect({ currentLanguages: currentLanguagesProp, onSelectLanguage, }: { currentLanguages?: string[] onSelectLanguage?: (language: string) => void }) { const {_} = useLingui() const langPrefs = useLanguagePrefs() const setLangPrefs = useLanguagePrefsApi() const languageDialogControl = Dialog.useDialogControl() const dedupedHistory = Array.from( new Set([...langPrefs.postLanguageHistory, langPrefs.postLanguage]), ) const currentLanguages = currentLanguagesProp ?? toPostLanguages(langPrefs.postLanguage) const onSelectLanguages = (languages: string[]) => { let langsString = languages.join(',') if (!langsString) { langsString = langPrefs.primaryLanguage } setLangPrefs.setPostLanguage(langsString) onSelectLanguage?.(langsString) } if ( dedupedHistory.length === 1 && dedupedHistory[0] === langPrefs.postLanguage ) { return ( <> Choose post languages} subtitleText={ Select up to 3 languages used in this post } control={languageDialogControl} currentLanguages={currentLanguages} onSelectLanguages={onSelectLanguages} maxLanguages={3} /> ) } return ( <> {({props}) => ( )} {dedupedHistory.map(historyItem => { const langCodes = historyItem.split(',') const langName = langCodes .map(code => codeToLanguageName(code, langPrefs.appLanguage)) .join(' + ') return ( { setLangPrefs.setPostLanguage(historyItem) onSelectLanguage?.(historyItem) }}> {langName} ) })} More languages... Choose post languages} subtitleText={Select up to 3 languages used in this post} control={languageDialogControl} currentLanguages={currentLanguages} onSelectLanguages={onSelectLanguages} maxLanguages={3} /> ) } function LanguageBtn( props: Omit & { currentLanguages?: string[] }, ) { const {_} = useLingui() const langPrefs = useLanguagePrefs() const t = useTheme() const postLanguagesPref = toPostLanguages(langPrefs.postLanguage) const currentLanguages = props.currentLanguages ?? postLanguagesPref return ( ) }