2020-12-13 04:52:54 -05:00
|
|
|
import React, { useState, useEffect, useContext } from 'react';
|
2020-05-24 12:17:26 +03:00
|
|
|
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';
|
2024-02-07 15:24:24 -04:00
|
|
|
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) {
|
2024-02-07 15:24:24 -04:00
|
|
|
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
|
|
|
|
2021-04-25 20:22:51 -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
|
|
|
);
|
2018-09-30 04:31:09 -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;
|