BlueWallet/screen/settings/language.tsx

72 lines
2.4 KiB
TypeScript
Raw Normal View History

2020-12-13 04:52:54 -05:00
import React, { useState, useEffect, useContext } from 'react';
import { FlatList, StyleSheet } from 'react-native';
2023-10-23 21:28:44 -04:00
import { useNavigation } from '@react-navigation/native';
2023-12-22 13:56:39 +07:00
import { useSafeAreaInsets } from 'react-native-safe-area-context';
2020-12-25 19:09:53 +03:00
import navigationStyle from '../../components/navigationStyle';
2022-06-19 14:05:30 +01:00
import loc, { saveLanguage } from '../../loc';
2023-12-22 13:56:39 +07:00
import { AvailableLanguages, TLanguage } from '../../loc/languages';
2020-12-13 04:52:54 -05:00
import { BlueStorageContext } from '../../blue_modules/storage-context';
import presentAlert from '../../components/Alert';
2023-10-23 21:28:44 -04:00
import { useTheme } from '../../components/themes';
2023-12-16 17:44:35 -04:00
import ListItem from '../../components/ListItem';
2020-12-13 04:52:54 -05:00
2020-08-28 11:05:41 +03:00
const styles = StyleSheet.create({
flex: {
flex: 1,
},
});
2023-10-20 20:29:12 -04:00
const Language: React.FC = () => {
2020-12-13 04:52:54 -05:00
const { setLanguage, language } = useContext(BlueStorageContext);
2023-10-20 20:29:12 -04:00
const [selectedLanguage, setSelectedLanguage] = useState<string>(loc.getLanguage());
2020-12-13 04:52:54 -05:00
const { setOptions } = useNavigation();
const { colors } = useTheme();
2023-12-22 13:56:39 +07:00
const insets = useSafeAreaInsets();
2020-12-13 04:52:54 -05:00
const stylesHook = StyleSheet.create({
flex: {
backgroundColor: colors.background,
},
2023-12-22 13:56:39 +07:00
content: {
paddingBottom: insets.bottom,
},
2020-12-13 04:52:54 -05:00
});
2020-07-15 13:32:59 -04:00
2020-12-13 04:52:54 -05:00
useEffect(() => {
2021-02-15 11:03:54 +03:00
setOptions({ title: loc.settings.language });
2020-12-13 04:52:54 -05:00
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [language]);
2023-12-22 13:56:39 +07:00
const onLanguageSelect = (item: TLanguage) => {
const currentLanguage = AvailableLanguages.find(l => l.value === selectedLanguage);
saveLanguage(item.value).then(() => {
setSelectedLanguage(item.value);
setLanguage();
if (currentLanguage?.isRTL !== item.isRTL) {
presentAlert({ message: loc.settings.language_isRTL });
2023-12-22 13:56:39 +07:00
}
});
};
const renderItem = ({ item }: { item: TLanguage }) => {
return <ListItem title={item.label} checkmark={selectedLanguage === item.value} onPress={() => onLanguageSelect(item)} />;
2020-12-13 04:52:54 -05:00
};
2020-07-15 13:32:59 -04:00
return (
2023-10-21 13:54:11 -04:00
<FlatList
style={[styles.flex, stylesHook.flex]}
2023-12-22 13:56:39 +07:00
contentContainerStyle={stylesHook.content}
2023-10-21 13:54:11 -04:00
keyExtractor={(_item, index) => `${index}`}
2023-12-22 13:56:39 +07:00
data={AvailableLanguages}
2023-10-21 13:54:11 -04:00
renderItem={renderItem}
initialNumToRender={25}
contentInsetAdjustmentBehavior="automatic"
2024-01-13 10:56:29 -04:00
automaticallyAdjustContentInsets
2023-10-21 13:54:11 -04:00
/>
2020-07-15 13:32:59 -04:00
);
};
2023-10-20 20:29:12 -04:00
// @ts-ignore: Fix later
2021-02-15 11:03:54 +03:00
Language.navigationOptions = navigationStyle({}, opts => ({ ...opts, title: loc.settings.language }));
2020-07-15 13:32:59 -04:00
export default Language;