import { View, Text, StyleSheet, ScrollView, Dimensions, ActivityIndicator, RefreshControl, Alert } from 'react-native'; import TabViewComponent, { TabItem } from '../global/tabView'; import NormalButton from '../global/normal_button'; import { SafeAreaView } from 'react-native-safe-area-context'; import RecentlyBookedScrollView from '../global/recentlyBookedScrollView'; import { router } from 'expo-router'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { chargeStationService } from '../../service/chargeStationService'; import { calculateDistance } from '../global/distanceCalculator'; import React from 'react'; import BookingTabViewComponent from '../global/bookingTabViewComponent'; interface BookingMenuPageProps {} const BookingMenuPageComponent: React.FC = () => { //check for unpaid penalties useEffect(() => { const checkUnpaidPenalties = async () => { try { const reservationHistories = await chargeStationService.fetchReservationHistories(); const unpaidPenalties = reservationHistories.filter( (reservation) => reservation.penalty_fee > 0 && reservation.penalty_paid_status === false ); if (unpaidPenalties.length > 0) { const mostRecentUnpaidReservation = unpaidPenalties.reduce((mostRecent, current) => { return new Date(mostRecent.created_at) > new Date(current.created_at) ? mostRecent : current; }, unpaidPenalties[0]); Alert.alert( '未付罰款', '您有未支付的罰款。請先支付罰款後再開始充電。', [ { text: '查看詳情', onPress: () => { // Navigate to a page showing penalty details router.push({ pathname: '(auth)/(tabs)/(home)/penaltyPaymentPage', params: { book_time: mostRecentUnpaidReservation.book_time, end_time: mostRecentUnpaidReservation.end_time, actual_end_time: mostRecentUnpaidReservation.actual_end_time, penalty_fee: mostRecentUnpaidReservation.penalty_fee, format_order_id: mostRecentUnpaidReservation.format_order_id, id: mostRecentUnpaidReservation.id, stationName: mostRecentUnpaidReservation.connector.EquipmentID.StationID.snapshot .StationName, address: mostRecentUnpaidReservation.connector.EquipmentID.StationID.snapshot .Address } }); } }, { text: '返回', onPress: () => { if (router.canGoBack()) { router.back(); } else { router.push('/mainPage'); } } } ], { cancelable: false } ); } } catch (error) { console.error('Error checking unpaid penalties:', error); // Handle the error appropriately (e.g., show an error message to the user) } }; checkUnpaidPenalties(); }, []); // console.log('BookingMenuPageComponent rendering'); const [refreshing, setRefreshing] = useState(false); const [refetchTrigger, setRefetchTrigger] = useState(0); const calculateResponsivePadding = useCallback(() => { const screenHeight = Dimensions.get('window').height; return screenHeight * 0.03; }, []); const calculateTabViewHeight = useCallback(() => { const screenHeight = Dimensions.get('window').height; if (screenHeight > 800) return 500; else if (screenHeight > 550) return 300; else return 150; }, []); const onRefresh = useCallback(() => { setRefreshing(true); setRefetchTrigger((prev) => prev + 1); // Simulate a delay to show the refresh indicator setTimeout(() => { setRefreshing(false); }, 1000); }, []); return ( } > 預約 + 新增預約} // onPress={() => router.push('reservationLocationPage')} onPress={() => Alert.alert('即將推出', '此功能即將推出,敬請期待!')} extendedStyle={{ padding: calculateResponsivePadding() }} /> {/* */} ); }; export default React.memo(BookingMenuPageComponent);