BlueWallet/screen/settings/Language.tsx

69 lines
2 KiB
TypeScript
Raw Normal View History

2024-04-17 21:05:48 -04:00
import React, { useEffect } from 'react';
2024-02-24 06:27:17 -05:00
import { FlatList, StyleSheet } from 'react-native';
import presentAlert from '../../components/Alert';
2023-12-16 17:44:35 -04:00
import ListItem from '../../components/ListItem';
2024-02-24 06:27:17 -05:00
import { useTheme } from '../../components/themes';
2024-04-17 21:05:48 -04:00
import loc from '../../loc';
2024-02-24 06:27:17 -05:00
import { AvailableLanguages, TLanguage } from '../../loc/languages';
2024-04-17 21:05:48 -04:00
import { useSettings } from '../../components/Context/SettingsContext';
import { useExtendedNavigation } from '../../hooks/useExtendedNavigation';
2020-08-28 11:05:41 +03:00
2024-02-24 06:27:17 -05:00
const Language = () => {
2024-04-17 21:05:48 -04:00
const { setLanguageStorage, language } = useSettings();
const { setOptions } = useExtendedNavigation();
2020-12-13 04:52:54 -05:00
const { colors } = useTheme();
const stylesHook = StyleSheet.create({
2023-12-22 13:56:39 +07:00
content: {
backgroundColor: colors.background,
2023-12-22 13:56:39 +07:00
},
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) => {
2024-04-17 21:05:48 -04:00
const currentLanguage = AvailableLanguages.find(l => l.value === language);
setLanguageStorage(item.value).then(() => {
2023-12-22 13:56:39 +07:00
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
2024-04-21 11:59:39 -04:00
disabled={language === item.value}
title={item.label}
checkmark={language === item.value}
onPress={() => onLanguageSelect(item)}
containerStyle={[styles.row, stylesHook.content]}
/>
);
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}
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
);
};
2020-07-15 13:32:59 -04:00
export default Language;
const styles = StyleSheet.create({
flex: {
flex: 1,
},
row: { minHeight: 60 },
});