import { View, Text, ScrollView, Image, Switch, Pressable, Dimensions, Linking, Alert, AppState } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { router, useFocusEffect } from 'expo-router'; import { useAuth } from '../../context/AuthProvider'; import * as Notifications from 'expo-notifications'; import { useColorScheme } from 'nativewind'; import Constants from 'expo-constants'; import { useState, useEffect, useCallback } from 'react'; import { AccountSettingIconSvg, ActivitySvg, MyCarSvg, DarkModeSvg, QuestionMarkIconSvg, SettingIconSvg, VipCodeIcoonSvg, WalletSvg, NotificationSvg, BookingIconSvg, UserTermsSvg, LanguageSvg } from '../global/SVG'; import { usePushNotifications } from '../../app/hooks/usePushNotifications'; import useUserInfoStore from '../../providers/userinfo_store'; import { authenticationService } from '../../service/authService'; import { handleGoWhatsApp } from '../../util/index'; import { useTranslation } from '../../util/hooks/useTranslation'; import LanguageSwitcher from '../registrationMultiStepForm/formComponent/formPages/languageSwitcher'; const AccountMainPageComponent = () => { const { user, logout } = useAuth(); const { colorScheme, toggleColorScheme } = useColorScheme(); const screenWidth = Dimensions.get('window').width; const imageWidth = screenWidth * 0.9; // 90% of screen width const aspectRatio = 210 / 375; const [notificationsEnabled, setNotificationsEnabled] = useState(false); const { expoPushToken, notification } = usePushNotifications(); const { notifySessionID } = useUserInfoStore(); const { t } = useTranslation(); //everytime i am on this screen, i check if permission is granted. useFocusEffect( useCallback(() => { const checkPermissionsAndToken = async () => { const { status } = await Notifications.getPermissionsAsync(); setNotificationsEnabled(status === 'granted'); if (status === 'granted') { //if status is granted, then i will fetch latest expo token to see if it is the same as notify_session_id const latestToken = await Notifications.getExpoPushTokenAsync({ projectId: Constants.expoConfig?.extra?.eas?.projectId }); //TODO: if latestToken = notify_session_id, do nothing if (latestToken.data === notifySessionID) { return; } else { const res = await authenticationService.changeNotifySessionID(latestToken.data); if (res) { console.log('Change notifySessionID Successfully!'); } else { Alert.alert(t('account.notification_update_failed'), t('common.try_again_later')); } } //TODO: if latestToken != notify_session_id, update notify_session_id to latestToken } }; checkPermissionsAndToken(); const subscription = AppState.addEventListener('change', (nextAppState: string) => { if (nextAppState === 'active') { checkPermissionsAndToken(); } }); return () => { subscription.remove(); }; }, [expoPushToken]) // Add expoPushToken as a dependency ); const toggleNotifications = async () => { Alert.alert(t('account.notification_settings'), t('account.notification_settings_message'), [ { text: t('common.cancel'), style: 'cancel' }, { text: t('account.go_to_settings'), onPress: () => Linking.openSettings() } ]); }; return ( {user?.nickname} router.push('/(account)/(wallet)/walletPage')} > {t('account.wallet')} router.replace('vipQrPage')} > VIP Code router.push('/activityRecordPage')} > {t('account.charging_history')} {/* router.push('uberVerificationPage')}> */} router.push('/accountSettingPage')} className="flex-row items-center" hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }} > {t('account.account_management')} handleGoWhatsApp()} className="flex-row items-center" hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }} > WhatsApp {t('account.allow_notifications')} {t('account.select_language')} router.push('/accountUserTermsPage')} className="flex-row items-center" hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }} > {t('account.user_terms')} {t('account.logout')} ); }; export default AccountMainPageComponent;