import { View, Text, ScrollView, StyleSheet, Image, ActivityIndicator } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import RippleEffectBatteryIcon from '../global/rippleEffectBatteryIcon'; import LoadingDots from '../global/loadingDots'; import NormalButton from '../global/normal_button'; import { router } from 'expo-router'; import { BatteryIconSvg, LightingLogoSvg, TemperatureIconSvg } from '../global/SVG'; import { useEffect, useState } from 'react'; import { chargeStationService } from '../../service/chargeStationService'; import { set } from 'date-fns'; import { convertToHKTime } from '../../util/lib'; import ChargingPenaltyPageComponent from './chargingPenaltyComponent'; const ChargingPageComponent = ({ data }) => { const reservationData = Array.isArray(data) ? data[0] : data; const [isLoading, setIsLoading] = useState(true); const [onGoingChargingData, setOnGoingChargingData] = useState(); useEffect(() => { const fetchOngoingChargingData = async () => { setIsLoading(true); try { const response = await chargeStationService.fetchOngoingChargingData(reservationData.format_order_id); if (response) { setOnGoingChargingData(response); console.log('i am ongoingchargingdata', response); } else { console.log('error fetching data'); } } catch (error) { console.error('Error fetching reservation histories:', error); } finally { setIsLoading(false); } }; fetchOngoingChargingData(); }, [reservationData]); //用來計充電歷時 //用來計充電歷時 //用來計充電歷時 //用來計充電歷時 //用來計充電歷時 const [timeSince, setTimeSince] = useState(''); useEffect(() => { const updateTimeSince = () => { if (reservationData && reservationData.actual_start_time) { setTimeSince(timeSinceBooking(reservationData.actual_start_time) || '計算中...'); } else { setTimeSince('計算中...'); } }; updateTimeSince(); // Update every minute const intervalId = setInterval(updateTimeSince, 60000); // Cleanup interval on component unmount return () => clearInterval(intervalId); }, [reservationData]); function timeSinceBooking(timeString) { if (timeString) { const startTime = new Date(timeString); const now = new Date(); const diffInMilliseconds = now - startTime; const diffInMinutes = Math.floor(diffInMilliseconds / (1000 * 60)); if (diffInMinutes < 1) { return '< 1 minute'; } else { return `${diffInMinutes} minute${diffInMinutes !== 1 ? 's' : ''}`; } } } //用來計充電歷時 //用來計充電歷時 //用來計充電歷時 //用來計充電歷時 //用來計充電歷時 const displayKW = (currentA: number, voltageA: number) => { if (currentA && voltageA) { return (currentA * voltageA) / 1000; } else return 30.0; }; if (isLoading) { return ( Loading... ); } return ( 現正充電中: {reservationData.car.car_brand.name} {reservationData.car.car_type.name} 充電中 {/* {onGoingChargingData ? `${onGoingChargingData.Soc} %` : 'Loading'} */} {`${reservationData.Soc}%`} {/* 尚餘時間未知點計住 comments左先 尚餘時間 ~48 mins */} {/* Top */} 充電功率 {isLoading ? ( ) : ( {displayKW(onGoingChargingData.CurrentA, onGoingChargingData.VoltageA)}kW )} 實際功率 {isLoading ? ( ) : ( {displayKW(onGoingChargingData.CurrentA, onGoingChargingData.VoltageA)}kW )} 溫度 {isLoading ? ( ) : ( 36°c )} {/* bottom container */} 充電歷時 ~{timeSince} {/* 預計充電費用 按每度電結算: 50 kWh HK$ 175 */} 其他資訊 開始時間 {convertToHKTime(reservationData.actual_start_time).hkTime.slice(0, 5)} 充電座 {/* {reservationData.connector.ConnectorID} */} A104 { router.push('chargingPage'); }} title={ 完成充電 } /> { router.push('/chargingPenaltyPage'); }} title={ 觀看閒置/罰款狀態頁面 } /> ); }; export default ChargingPageComponent; const styles = StyleSheet.create({ grayColor: { color: '#888888' }, greenColor: { color: '#02677D' }, text: { fontWeight: 300, color: '#000000' } });