import React, { Component } from "react"; import { Platform, StyleSheet, View, TouchableOpacity, SafeAreaView, ScrollView, Image, Linking, Alert, Share } from "react-native"; import Text from "react-native-text"; import { observable } from "mobx"; import { observer, inject } from "mobx-react/native"; import { scale, verticalScale, moderateScale } from "react-native-size-matters"; import Size from "../../config/size"; import Icon from "react-native-vector-icons/dist/Ionicons"; import Icon2 from "react-native-vector-icons/dist/MaterialCommunityIcons"; import { width, height } from "../../config/screen"; import theme from "../../config/colors"; import { Fonts } from "../../config/fonts"; import DrawerNavigationHeader from "../../components/Public/drawerNavigationHeader"; import PopupDialog, { SlideAnimation } from "react-native-popup-dialog"; import language from "../../config/language"; const size = new Size(); const slideAnimation = new SlideAnimation({ slideFrom: "bottom" }); @inject(["menuStore"], ["userStore"]) @observer export default class SettingInside extends Component { @observable items = [ { icon: require("../../images/settinglang.png"), popup: true, screen: "language", id: 0 }, { icon: require("../../images/settingnotification.png"), screen: "NotificationSetting", popup: true, id: 1 }, { icon: require("../../images/settinghowtouse.png"), popup: true, id: 2 }, { icon: require("../../images/settinglogout.png"), popup: true, id: 3 } ]; @observable lang = false; constructor(props) { super(props); this.store = this.props.menuStore; this.userStore = this.props.userStore; } static navigationOptions = { drawerLabel: "Settings", swipeEnabled: false, tabBarLabel: language.en.setting }; getTitle(id) { switch (id) { case 0: return this.props.userStore.text.language; break; case 1: return this.props.userStore.text.notification; break; case 2: return this.props.userStore.text.howtouse; break; case 3: return this.props.userStore.text.logout; break; } } componentWillMount() { if (this.userStore.languageSelection == "english") { this.lang = false; } else { this.lang = true; } } languageText() { if (this.userStore.languageSelection == "english") { return "English"; } else { return "繁體中文"; } } languageView(id) { if (id == 0) { return ( <View style={{ justifyContent: "center" }}> <Text style={{ fontSize: 15, marginRight: scale(30), color: theme.coolGrey, fontWeight: "bold", fontFamily: Fonts.century }} > {this.languageText()} </Text> </View> ); } else { return <View />; } } onPressAction(index) { if (this.items[index].popup) { switch (index) { case 0: this.languagePagePopUp(); break; case 1: Linking.openURL("app-settings:"); break; case 2: this.props.navigation.navigate("Tutorial", { data: "setting" }); break; case 3: this.logoutAlert(); break; } } else { console.log(this.items[index].screen); this.props.navigation.navigate(this.items[index].screen); } } logoutAlert() { Alert.alert( "Logout", "Are you sure to Logout?", [ { text: "Cancel", onPress: () => console.log("Cancel Pressed"), style: "cancel" }, { text: "Sure", onPress: () => this.logoutAction() } ], { cancelable: false } ); } referYourFriender() { Share.share({ message: "Hello,Come to join Hangry, this is my refer code: ", title: "Hangry no more" }); } logoutAction() { this.userStore.logoutPost(this, false); } navigatieAction(page) { this.props.navigation.navigate(page); } renderItems() { return this.items.map((item, index, array) => { if (item.id == 3 && !this.userStore.logined) { return null; } else { if (item.id == 1 && Platform.OS !== 'ios') { return null; }else{ return ( <TouchableOpacity style={{ marginBottom: 20, marginLeft: 25, paddingRight: 25 }} onPress={() => this.onPressAction(index)} > <View style={{ flexDirection: "row", alignItems: "center", justifyContent: "space-between" }} > <View style={{ flexDirection: "row", justifyContent: "center", alignItems: "center" }} > <Image source={item.icon} /> <Text style={{ fontSize: 15, marginLeft: 10, color: theme.coolGrey, fontWeight: "bold", fontFamily: Fonts.century }} > {this.getTitle(item.id)} </Text> </View> <View style={{ flexDirection: "row" }}> {this.languageView(item.id)} <Icon name={"ios-arrow-forward"} size={size.getSize(35)} color={theme.coolGrey} /> </View> </View> <View style={{ backgroundColor: theme.inputBgc, flex: 1, marginTop: 5, marginLeft: 40, height: 1 }} /> </TouchableOpacity> ); } } }); } languagePagePopUp() { this.popupDialog.show(); } languagePageDismiss() { this.popupDialog.dismiss(); } updateUser() { if (this.lang) { this.userStore.saveLanguage("chinese"); this.popupDialog.dismiss(); } else { this.userStore.saveLanguage("english"); this.popupDialog.dismiss(); } } languagePageDismissedCallBack() { console.log("dismiss dialog"); if (this.userStore.languageSelection == "english") { this.lang = false; } else { this.lang = true; } } selectIcon(lang) { if (!lang) { if (!this.lang) { return ( <Icon2 name={"checkbox-blank-circle"} size={size.getSize(35)} color={theme.mainColor} /> ); } else { return ( <Icon2 name={"checkbox-blank-circle-outline"} size={size.getSize(35)} color={theme.mainColor} /> ); } } else { if (!this.lang) { return ( <Icon2 name={"checkbox-blank-circle-outline"} size={size.getSize(35)} color={theme.mainColor} /> ); } else { return ( <Icon2 name={"checkbox-blank-circle"} size={size.getSize(35)} color={theme.mainColor} /> ); } } } render() { return ( <SafeAreaView style={styles.container}> <View style={{ height: verticalScale(40) }}> <Icon2 name="chevron-left" size={size.getSize(40)} color={"white"} style={{ marginLeft: 10 }} onPress={() => this.props.navigation.goBack()} /> </View> <ScrollView style={{ backgroundColor: "white" }}> <View style={{ backgroundColor: "white", width: width, marginTop: 25 }} > {this.renderItems()} <View style={{ flex: 1, alignItems: "flex-end", paddingRight: 25 }}> <Text style={{ fontFamily: Fonts.century, color: theme.coolGrey, fontSize: 10 }} > {"Ver 4.4 28 - 3 - 2019"} </Text> </View> </View> </ScrollView> <PopupDialog ref={popupDialog => { this.popupDialog = popupDialog; }} dialogAnimation={slideAnimation} height={height / 4} width={width - scale(60)} onDismissed={() => this.languagePageDismissedCallBack()} > <View style={{ flex: 1, justifyContent: "space-between" }}> <View style={{ flex: 4, paddingTop: 5 }}> <Text style={{ paddingLeft: 5, fontSize: 15, color: theme.coolGrey, fontWeight: "bold", fontFamily: Fonts.century }} > {this.userStore.text.slectLang} </Text> <TouchableOpacity style={{ flexDirection: "row", justifyContent: "space-between", alignItems: "center" }} onPress={() => (this.lang = false)} > <Text style={{ paddingLeft: 5, fontSize: 15, color: theme.coolGrey, fontWeight: "bold", fontFamily: Fonts.century }} > English </Text> {this.selectIcon(false)} </TouchableOpacity> <TouchableOpacity style={{ flexDirection: "row", justifyContent: "space-between", alignItems: "center" }} onPress={() => (this.lang = true)} > <Text style={{ paddingLeft: 5, fontSize: 15, color: theme.coolGrey, fontWeight: "bold", fontFamily: Fonts.century }} > 繁體中文 </Text> {this.selectIcon(true)} </TouchableOpacity> </View> <TouchableOpacity onPress={() => this.updateUser()} style={{ backgroundColor: theme.mainColor, flex: 1, justifyContent: "center", alignItems: "center" }} > <Text style={{ fontSize: 15, color: "white", fontWeight: "bold", fontFamily: Fonts.century }} > OK </Text> </TouchableOpacity> </View> </PopupDialog> </SafeAreaView> ); } } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: theme.mainColor } });