import { View, Text, ScrollView, FlatList, Pressable, ActivityIndicator, Image, Modal, Alert } from 'react-native'; import NormalButton from '../global/normal_button'; import { SafeAreaView } from 'react-native-safe-area-context'; import { router } from 'expo-router'; import { useColorScheme } from 'nativewind'; import RecentlyBookedScrollView from '../global/recentlyBookedScrollView'; import { BellIconSvg, HomeIconSvg, MyBookingIconSvg, MyVehicleIconSvg, QrCodeIconSvg, VipCodeIconSvg } from '../global/SVG'; import { AuthContext } from '../../context/AuthProvider'; import { useContext, useEffect, useState } from 'react'; import { authenticationService } from '../../service/authService'; import { chargeStationService } from '../../service/chargeStationService'; import { walletService } from '../../service/walletService'; import useUserInfoStore from '../../providers/userinfo_store'; interface HomePageProps {} const HomePage: React.FC = () => { const now = new Date(); const { user } = useContext(AuthContext); const { userID, currentPrice, setUserID, setCurrentPrice } = useUserInfoStore(); const { colorScheme, toggleColorScheme } = useColorScheme(); useEffect(() => { // Set to light mode on component mount if (colorScheme === 'dark') { toggleColorScheme(); } }, []); // Effect for fetching user ID useEffect(() => { const fetchID = async () => { try { const response = await authenticationService.getUserInfo(); if (response) { setUserID(response.data.id); } else { console.log('fail to set user ID'); } } catch (error) { console.log(error); } }; fetchID(); }, []); useEffect(() => { const fetchCurrentPrice = async () => { try { const response = await chargeStationService.getCurrentPrice(); if (response) { // console.log('main page fetch current price', response); setCurrentPrice(response); } } catch (error) { console.log('main page fetch current price error', error); } }; fetchCurrentPrice(); }, []); // Add new state for modal visibility const [showOnboarding, setShowOnboarding] = useState(true); const [mainPromotion, setMainPromotion] = useState([]); const [mainPromotionImage, setMainPromotionImage] = useState(''); useEffect(() => { const fetchMainPromotion = async () => { try { const response = await chargeStationService.getAdvertise(); if (response) { const mainPromo = response.filter((item: any) => item.is_main)[0]; setMainPromotion(mainPromo); if (mainPromo) { const mainPromoImage = await chargeStationService.getProcessedImageUrl(mainPromo.image_url); if (mainPromoImage) { setMainPromotionImage(mainPromoImage); } } } } catch (error) { console.log('Error fetching promotion:', error); } }; fetchMainPromotion(); }, []); return ( {/* Add Modal component */} {mainPromotionImage && ( setShowOnboarding(false)} > setShowOnboarding(false)} > 點擊任意位置關閉 )} 你好! {/* router.push('notificationPage')}> 3 */} {user?.nickname} router.push('searchPage')}> 搜尋充電站或地區.. {/* */} console.log('掃瞄及充電')} onPress={() => router.push('scanQrPage')} title={ 掃描及充電 } extendedStyle={{ alignItems: 'flex-start', padding: 24 }} /> router.push('bookingMenuPage')} onPress={() => Alert.alert('即將推出', '此功能即將推出,敬請期待!')} title={ 我的預約 } extendedStyle={{ alignItems: 'flex-start', padding: 24 }} /> {/* router.push('myVehiclePage')} title={ 我的車輛 } extendedStyle={{ alignItems: 'flex-start', padding: 24 }} /> */} router.push('accountMainPage')} title={ 我的帳戶 } extendedStyle={{ alignItems: 'flex-start', padding: 24 }} /> console.log('掃瞄及充電')} onPress={() => router.push('vipQrPage')} title={ 專屬會員二維碼 } extendedStyle={{ alignItems: 'flex-start', padding: 24 }} /> ); }; export default HomePage;