diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-07-06 20:28:10 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-06 20:28:10 -0500 |
commit | e14c9783e0cea73ada1d20e8a798738c39319315 (patch) | |
tree | 41be4e050c1e7cf4ade0e0ff1c66342599618935 /src/view/com/composer/select-language | |
parent | f05c2f06d665cb3a9989154fbc82a2b0ea60669a (diff) | |
download | voidsky-e14c9783e0cea73ada1d20e8a798738c39319315.tar.zst |
[APP-735] Post language improvements (#982)
* Fix composer character-counter bouncing around UI elements * Fix composer toolbar padding when keyboard is dismissed on iOS * Use the full name of the language in the composer footer * Add headings to the DropdownButton * Update the composer language control to use a simpler dropdown * Fix lint * Add translate link to Post component used in notifications * Fix lint
Diffstat (limited to 'src/view/com/composer/select-language')
-rw-r--r-- | src/view/com/composer/select-language/SelectLangBtn.tsx | 78 |
1 files changed, 65 insertions, 13 deletions
diff --git a/src/view/com/composer/select-language/SelectLangBtn.tsx b/src/view/com/composer/select-language/SelectLangBtn.tsx index 8c55e1c91..5014b5409 100644 --- a/src/view/com/composer/select-language/SelectLangBtn.tsx +++ b/src/view/com/composer/select-language/SelectLangBtn.tsx @@ -1,22 +1,27 @@ -import React, {useCallback} from 'react' -import {TouchableOpacity, StyleSheet, Keyboard} from 'react-native' +import React, {useCallback, useMemo} from 'react' +import {StyleSheet, Keyboard} from 'react-native' import {observer} from 'mobx-react-lite' import { FontAwesomeIcon, FontAwesomeIconStyle, } from '@fortawesome/react-native-fontawesome' import {Text} from 'view/com/util/text/Text' +import { + DropdownButton, + DropdownItem, + DropdownItemButton, +} from 'view/com/util/forms/DropdownButton' import {usePalette} from 'lib/hooks/usePalette' import {useStores} from 'state/index' import {isNative} from 'platform/detection' - -const HITSLOP = {left: 10, top: 10, right: 10, bottom: 10} +import {codeToLanguageName} from '../../../../locale/helpers' +import {deviceLocales} from 'platform/detection' export const SelectLangBtn = observer(function SelectLangBtn() { const pal = usePalette('default') const store = useStores() - const onPress = useCallback(async () => { + const onPressMore = useCallback(async () => { if (isNative) { if (Keyboard.isVisible()) { Keyboard.dismiss() @@ -25,18 +30,62 @@ export const SelectLangBtn = observer(function SelectLangBtn() { store.shell.openModal({name: 'post-languages-settings'}) }, [store]) + const postLanguagesPref = store.preferences.postLanguages + const items: DropdownItem[] = useMemo(() => { + let arr: DropdownItemButton[] = [] + + const add = (langCode: string) => { + const langName = codeToLanguageName(langCode) + if (arr.find((item: DropdownItemButton) => item.label === langName)) { + return + } + arr.push({ + icon: store.preferences.hasPostLanguage(langCode) + ? ['fas', 'circle-check'] + : ['far', 'circle'], + label: langName, + onPress() { + store.preferences.setPostLanguage(langCode) + }, + }) + } + + for (const lang of postLanguagesPref) { + add(lang) + } + for (const lang of deviceLocales) { + add(lang) + } + add('en') // english + add('ja') // japanese + add('pt') // portugese + add('de') // german + + return [ + {heading: true, label: 'Post language'}, + ...arr.slice(0, 6), + {sep: true}, + { + label: 'Other...', + onPress: onPressMore, + }, + ] + }, [store.preferences, postLanguagesPref, onPressMore]) + return ( - <TouchableOpacity + <DropdownButton + type="bare" testID="selectLangBtn" - onPress={onPress} + items={items} + openUpwards style={styles.button} - hitSlop={HITSLOP} - accessibilityRole="button" accessibilityLabel="Language selection" - accessibilityHint="Opens screen or modal to select language of post"> + accessibilityHint=""> {store.preferences.postLanguages.length > 0 ? ( - <Text type="lg-bold" style={pal.link}> - {store.preferences.postLanguages.join(', ')} + <Text type="lg-bold" style={[pal.link, styles.label]} numberOfLines={1}> + {store.preferences.postLanguages + .map(lang => codeToLanguageName(lang)) + .join(', ')} </Text> ) : ( <FontAwesomeIcon @@ -45,7 +94,7 @@ export const SelectLangBtn = observer(function SelectLangBtn() { size={26} /> )} - </TouchableOpacity> + </DropdownButton> ) }) @@ -53,4 +102,7 @@ const styles = StyleSheet.create({ button: { paddingHorizontal: 15, }, + label: { + maxWidth: 100, + }, }) |