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
// }
// });