import React, { useEffect, useState } from 'react' import { Platform, StyleSheet, NativeModules } from 'react-native' import { useTheme } from 'styled-components/native'; import RNRestart from 'react-native-restart' import { LanguageSelector as LanguageSelectorController, useOrder, useLanguage } from 'ordering-components/native' import RNPickerSelect from 'react-native-picker-select' import { Container, DummyContainer } from './styles' import { LanguageSelectorParams } from '../../types' const LanguageSelectorUI = (props: LanguageSelectorParams) => { const { languagesState, currentLanguage, handleChangeLanguage, pickerStyle } = props const [orderState] = useOrder() const [langugageState] = useLanguage() const theme = useTheme(); const [language, setLanguage] = useState(currentLanguage) const _pickerStyle = StyleSheet.create({ inputAndroid: { color: '#000', borderWidth: 1, borderColor: theme.colors.clear, padding: 10, height: 40, backgroundColor: theme.colors.disabled, borderRadius: 8 }, inputIOS: { color: '#000', padding: 10, height: 40, borderWidth: 1, marginStart: 20, borderColor: theme.colors.clear, backgroundColor: theme.colors.clear, }, icon: { width: 10, marginTop: 9, marginEnd: 10 }, placeholder: { color: theme.colors.secundaryContrast }, chevronDown: { display: 'none' }, chevronUp: { display: 'none' } }) const _languages = languagesState?.languages?.map((language: any) => { return { value: language?.code, label: language?.name, inputLabel: language?.name } }) _languages && _languages.sort((a: any, b: any) => (a.content > b.content) ? 1 : ((b.content > a.content) ? -1 : 0) ) const changeDirection = async (language: any) => { if (language === langugageState?.language?.code) return const isArabicLang = language === 'ar' const isRTLOn = NativeModules.I18nManager.isRTL if (isArabicLang && !isRTLOn) { NativeModules.I18nManager.forceRTL(!isRTLOn) RNRestart.Restart(); } if (!isArabicLang && isRTLOn) { NativeModules.I18nManager.forceRTL(!isRTLOn) RNRestart.Restart(); } } const handlerChangeLanguage = (langCode?: any) => { changeDirection(Platform.OS === 'ios' ? language : langCode) handleChangeLanguage(Platform.OS === 'ios' ? language : langCode) } useEffect(() => { changeDirection(currentLanguage) }, []) return ( {languagesState?.languages ? ( Platform.OS === 'ios' ? setLanguage(val) : handlerChangeLanguage(val)} items={_languages || []} value={Platform.OS === 'ios' ? language : currentLanguage} style={pickerStyle ? pickerStyle : _pickerStyle} useNativeAndroidPickerStyle={false} placeholder={{}} disabled={orderState.loading} onClose={() => Platform.OS === 'ios' ? handlerChangeLanguage() : {}} onDonePress={() => handlerChangeLanguage()} fixAndroidTouchableBug={true} /> ) : } ) } export const LanguageSelector = (props: LanguageSelectorParams) => { const [langugageState] = useLanguage() const LanguageProps = { ...props, currentLanguage: langugageState?.language?.code ?? NativeModules.I18nManager.localeIdentifier?.split('_')?.[0] ?? 'en', UIComponent: LanguageSelectorUI } return }