BlueWallet/screen/settings/Language.tsx

78 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-05-12 11:35:49 -04:00
import React, { useEffect, useLayoutEffect, useState } from 'react';
import { FlatList, NativeSyntheticEvent, 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-05-20 10:54:13 +01:00
import { useExtendedNavigation } from '../../hooks/useExtendedNavigation';
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-05-31 13:18:01 -04:00
import { useSettings } from '../../hooks/context/useSettings';
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();
2024-05-12 11:35:49 -04:00
const [search, setSearch] = useState('');
2020-12-13 04:52:54 -05:00
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
2024-05-12 11:35:49 -04:00
useLayoutEffect(() => {
setOptions({
headerSearchBarOptions: {
onChangeText: (event: NativeSyntheticEvent<{ text: string }>) => setSearch(event.nativeEvent.text),
},
});
}, [setOptions]);
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}`}
2024-05-12 11:35:49 -04:00
data={AvailableLanguages.filter(l => l.label.toLowerCase().includes(search.toLowerCase()))}
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 },
});