90 lines
2.9 KiB
TypeScript
90 lines
2.9 KiB
TypeScript
import React from 'react';
|
|
import { View, Text, Alert } from 'react-native';
|
|
import { useAppTheme } from '@theme';
|
|
import { PrimaryButton } from '@components';
|
|
import { useAppDispatch, useAppSelector } from '@store';
|
|
import { advanceJobStatus } from '@store/commonReducers/job';
|
|
import { RouteProp, useNavigation, useRoute } from '@react-navigation/native';
|
|
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
|
|
import { AppStackParamList } from '@navigation/navigationTypes';
|
|
import { RouteNames, JobStatus } from '@utils/constants';
|
|
import { getStyles } from './liveTrackingScreen.styles';
|
|
|
|
export const LiveTrackingScreen: React.FC = () => {
|
|
const { colors } = useAppTheme();
|
|
const styles = getStyles(colors);
|
|
const dispatch = useAppDispatch();
|
|
const navigation =
|
|
useNavigation<NativeStackNavigationProp<AppStackParamList>>();
|
|
const route =
|
|
useRoute<RouteProp<AppStackParamList, RouteNames.OrderPickedUp>>();
|
|
const { jobId } = route.params;
|
|
|
|
const { activeDeliveries } = useAppSelector(state => state.deliveries);
|
|
const activeJob = activeDeliveries?.delivery;
|
|
|
|
const handleArrived = () => {
|
|
dispatch(advanceJobStatus(JobStatus.ArrivedAtCustomer));
|
|
navigation.navigate(RouteNames.DeliverOrder, {
|
|
jobId: jobId,
|
|
});
|
|
};
|
|
|
|
const handleContact = () => {
|
|
Alert.alert(
|
|
'Contact Customer',
|
|
`Calling ${activeJob?.order?.customer?.user?.name || 'Customer'} at ${
|
|
activeJob?.order?.customer?.user?.phone
|
|
} `,
|
|
);
|
|
};
|
|
|
|
// if (!activeJob) return null;
|
|
|
|
return (
|
|
<View style={styles.container}>
|
|
{/* Top Floating ETA Card */}
|
|
<View style={styles.etaCard}>
|
|
<Text style={styles.etaTitle}>Arriving in 8 mins</Text>
|
|
<Text style={styles.etaSub}>
|
|
Distance: {activeJob?.estimatedDistanceKm} km • Speed: 24 km/h
|
|
</Text>
|
|
</View>
|
|
|
|
{/* Map Background Placeholder */}
|
|
<View style={styles.mapPlaceholder}>
|
|
<Text style={styles.placeholderText}>[ Map Placeholder ]</Text>
|
|
</View>
|
|
|
|
{/* Customer Location Bottom Card */}
|
|
<View style={styles.bottomCard}>
|
|
<Text style={styles.cardTitle}>Deliver to</Text>
|
|
<Text style={styles.customerName}>
|
|
{activeJob?.order?.customer?.user?.name}
|
|
</Text>
|
|
<Text style={styles.customerAddress}>
|
|
{activeJob?.order?.dropAddress?.houseNumber +
|
|
', ' +
|
|
activeJob?.order?.dropAddress?.addressLine1}
|
|
</Text>
|
|
|
|
<View style={styles.btnRow}>
|
|
<PrimaryButton
|
|
title="Call"
|
|
onPress={handleContact}
|
|
style={styles.contactBtn}
|
|
textStyle={{ color: colors.text }}
|
|
/>
|
|
<PrimaryButton
|
|
title="Arrived at Location"
|
|
onPress={handleArrived}
|
|
style={styles.arrivedBtn}
|
|
/>
|
|
</View>
|
|
</View>
|
|
</View>
|
|
);
|
|
};
|
|
|
|
export default LiveTrackingScreen;
|