import { View, Text, ScrollView, StyleSheet, ActivityIndicator, Pressable, Image } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import NormalButton from '../global/normal_button'; import { router } from 'expo-router'; import { useEffect, useState } from 'react'; import { chargeStationService } from '../../service/chargeStationService'; const RETRY_DELAY = 2000; // 2 seconds const MAX_RETRIES = 3; // Maximum number of retry attempts const NoChargingOngoingPageComponent = () => { //fetch charge station info const [chargeStationInfo, setChargeStationInfo] = useState([]); const [availableConnectors, setAvailableConnectors] = useState({}); useEffect(() => { const fetchChargeStationInfo = async () => { try { const chargeStationInfo = await chargeStationService.fetchAllChargeStations(); console.log('chargeStationInfo in noChargingOngoingPageComponent', chargeStationInfo); const onlyWaiYipStreetStation = chargeStationInfo.filter( (station) => station.id == '2405311022116801000' ); setChargeStationInfo(onlyWaiYipStreetStation); // setChargeStationInfo(chargeStationInfo); } catch (error) { console.error('Error fetching charge station info:', error); } }; fetchChargeStationInfo(); }, []); const fetchConnectorWithRetry = async (stationId, retryCount = 0) => { try { const response = await chargeStationService.fetchAvailableConnectors(stationId); if (response === 500 || !response) { throw new Error('Server error'); } return response; } catch (error) { if (retryCount < MAX_RETRIES) { console.log(`Retrying fetch for station ${stationId}, attempt ${retryCount + 1}`); await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY)); return fetchConnectorWithRetry(stationId, retryCount + 1); } console.error(`Failed to fetch connectors for station ${stationId} after ${MAX_RETRIES} attempts:`, error); return null; } }; useEffect(() => { const fetchAllConnectors = async () => { try { const connectorData = {}; for (const station of chargeStationInfo) { const stationConnectors = await fetchConnectorWithRetry(station.id); if (stationConnectors !== null) { connectorData[station.id] = stationConnectors; // Update state immediately for each successful fetch setAvailableConnectors((prev) => ({ ...prev, [station.id]: stationConnectors })); } } } catch (error) { console.error('Error fetching connectors:', error); } }; if (chargeStationInfo.length > 0) { fetchAllConnectors(); } }, [chargeStationInfo]); const StationRow = ({ item }) => ( { router.push({ pathname: '/resultDetailPage', params: { chargeStationAddress: item.snapshot.Address, chargeStationID: item.id, chargeStationName: item.snapshot.StationName, availableConnectors: availableConnectors[item.id] } }); }} > {item.snapshot.StationName} {item.snapshot.Address} {/* 已付金額:{' '} {item.actual_fee ? item.actual_fee % 1 === 0 ? `$${item.actual_fee}` : `$${item.actual_fee.toFixed(1)}` : ''} */} {!availableConnectors[item.id] && ( 正在查詢可用充電槍數目... )} {availableConnectors[item.id] && ( 現時可用充電槍數目: {availableConnectors[item.id]} )} ); return ( 暫無正在進行的充電 立刻前往Crazy Charge 充電站充電吧! {chargeStationInfo?.map((item, index) => ( ))} {/* 前往預約頁面} onPress={() => router.push('/bookingMenuPage')} /> */} ); }; const styles = StyleSheet.create({ grayColor: { color: '#888888' }, greenColor: { color: '#02677D' }, image: { width: 100, height: 100, margin: 15, borderRadius: 10 } }); export default NoChargingOngoingPageComponent; // const styles = StyleSheet.create({ // container: { // flexDirection: 'row', // width: '100%', // flex: 1 // }, // textContainer: { // flex: 1, // flexDirection: 'column', // gap: 8, // marginTop: 20, // marginRight: 8 // Add right margin to prevent text from touching the edge // } // });