import React, { useState, useEffect } from 'react'; import { View, Text, Alert } from 'react-native'; import { useAppTheme } from '@theme'; import { PrimaryButton, LocationRow } from '@components'; import { useAppDispatch, useAppSelector } from '@store'; import { acceptJobThunk, rejectJobThunk } from '@store/commonReducers/job'; import { useNavigation } from '@react-navigation/native'; import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { AppStackParamList } from '@navigation/navigationTypes'; import { RouteNames } from '@utils/constants'; import { formatCurrency } from '@utils/formatters'; import { getStyles } from './newJobRequestScreen.styles'; export const NewJobRequestScreen: React.FC = () => { const { colors } = useAppTheme(); const styles = getStyles(colors); const dispatch = useAppDispatch(); const navigation = useNavigation>(); const newJobOffer = useAppSelector((state) => state.job.newJobOffer); const [secondsLeft, setSecondsLeft] = useState(15); useEffect(() => { if (secondsLeft <= 0) { handleReject(); return; } const timer = setInterval(() => { setSecondsLeft((prev) => prev - 1); }, 1000); return () => clearInterval(timer); }, [secondsLeft]); const handleAccept = () => { if (newJobOffer?.jobId) { dispatch(acceptJobThunk(newJobOffer.jobId)); } Alert.alert('Job Accepted', 'Heading to Cafe Coffee Day pickup location.', [ { text: 'OK', onPress: () => navigation.navigate(RouteNames.OrderAccepted), }, ]); }; const handleReject = () => { if (newJobOffer?.jobId) { dispatch(rejectJobThunk(newJobOffer.jobId)); } navigation.navigate(RouteNames.BottomTabs, { screen: RouteNames.Dashboard }); }; if (!newJobOffer) return null; return ( {/* Header Row with Title and Countdown */} New Delivery Request {secondsLeft}s {/* Route Details Card */} {/* Earnings & Distance Details */} Estimated Earnings {formatCurrency(newJobOffer.amount)} Distance {newJobOffer.distance} km {/* Button Actions */} ); }; export default NewJobRequestScreen;