import { View, Text, ScrollView, Pressable, Image, Dimensions, ImageBackground, BackHandler, Alert } from 'react-native'; import React, { useCallback, useEffect, useState } from 'react'; import { SafeAreaView } from 'react-native-safe-area-context'; import { router, useFocusEffect, useNavigation } from 'expo-router'; import { CrossLogoSvg, PreviousPageBlackSvg, RightArrowIconSvg } from '../../../../component/global/SVG'; import { useChargingStore } from '../../../../providers/scan_qr_payload_store'; import { walletService } from '../../../../service/walletService'; import { chargeStationService } from '../../../../service/chargeStationService'; const optionPage = () => { const { total_power, setTotalPower, promotion_code, setPromotionCode, sum_of_coupon, setSumOfCoupon, setCouponDetail, current_price_store, setCurrentPriceStore, setProcessedCouponStore } = useChargingStore(); const buttonText = [ { power: '20度電', minute: '25分鐘', total_power: 20 }, { power: '25度電', minute: '30分鐘', total_power: 25 }, { power: '30度電', minute: '40分鐘', total_power: 30 }, { power: '40度電', minute: '45分鐘', total_power: 40 }, { power: '充滿停機', minute: '最多80度電', total_power: 80 } ]; const screenWidth = Dimensions.get('window').width; const [useableCoupon, setUseableCoupon] = useState([]); const navigation = useNavigation(); //forbid user leftswipping useEffect(() => { navigation.setOptions({ gestureEnabled: false }); }, [navigation]); // 优惠券注释 useEffect(() => { const fetchData = async () => { try { const info = await walletService.getCustomerInfo(); const coupon = await walletService.getCouponForSpecificUser(info.id); //filter by expire date is not past today.and is_consumed is fa.se. const useableConpon = coupon.filter((couponObj: any) => { const today = new Date(); if (couponObj.expire_date === null) { return couponObj.is_consumed === false; } const expireDate = new Date(couponObj.expire_date); return expireDate > today && couponObj.is_consumed === false; }); setUseableCoupon(useableConpon); } catch (error) {} }; fetchData(); }, []); const cleanupData = () => { setTotalPower(null); setSumOfCoupon(0); setPromotionCode([]); setCouponDetail([]); setProcessedCouponStore([]); }; // Add this effect to handle Android back button useFocusEffect( useCallback(() => { const onBackPress = () => { cleanupData(); if (router.canGoBack()) { router.back(); } else { router.replace('/scanQrPage'); } return true; }; const subscription = BackHandler.addEventListener('hardwareBackPress', onBackPress); return () => subscription.remove(); }, []) ); const displayedText = promotion_code.length > 0 ? `$ ${sum_of_coupon}劵` : useableCoupon.length > 0 ? '有可用劵' : '無可用劵'; return ( { if (router.canGoBack()) { cleanupData(); router.back(); } else { cleanupData(); router.replace('/scanQrPage'); } }} > {/* top word and logo */} {/* */} 選擇充電度數 {/* middle button */} {/* not showing full power because it needs to be full width */} {buttonText .filter((item) => item.power != '充滿停機') .map((buttonTextObj: any, index) => ( { setTotalPower(buttonTextObj.total_power); }} > {buttonTextObj.power}({buttonTextObj.minute}) ))} {/* this is 充滿停機only */} {buttonText .filter((item) => item.power === '充滿停機') .map((item, index) => ( { setTotalPower(item.total_power); }} className={`${ total_power === item.total_power ? 'bg-[#02677D]' : '' } w-[94%] border border-[#02677D] p-1 md:p-2 lg:p-3 xl:p-4 py-4 lg:py-6 rounded-xl`} > {item.power}({item.minute}) ))} {/* coupon row */} { if (!total_power) { Alert.alert( '選擇充電方案', '請先選擇充電方案再選擇優惠券', [{ text: '確定', style: 'default' }], { cancelable: true } ); } else { Alert.alert('提醒您', '使用優惠券的交易每度電以正價$3.5元計算!', [ { text: '我知道了', onPress: () => router.push('/selectCoupon') } ]); } }} style={{ flex: 1, borderRadius: 10, overflow: 'hidden', marginTop: 10 }} > {displayedText} {/* confirm and cancel */} { cleanupData(); if (router.canGoBack()) { router.back(); } else { router.replace('/scanQrPage'); } }} className="w-[45%] border border-[#02677D] p-1 md:p-2 lg:p-3 xl:p-4 py-4 lg:py-6 rounded-xl " > 取消 { if (!total_power) { Alert.alert( '選擇充電方案', '請先選擇充電方案再確認', [{ text: '確定', style: 'default' }], { cancelable: true } ); } else { router.push('/totalPayment'); } }} className="w-[45%] border border-[#02677D] p-1 md:p-2 lg:p-3 xl:p-4 py-4 lg:py-6 rounded-xl " > 確認 ); }; export default optionPage;