185 lines
6.2 KiB
TypeScript
185 lines
6.2 KiB
TypeScript
import React, { useCallback, useEffect, useState } from 'react';
|
|
import { View, Text, ScrollView, TouchableOpacity } from 'react-native';
|
|
import { useAppTheme } from '@theme';
|
|
import { OrderCard, EmptyState } from '@components';
|
|
import { useAppDispatch, useAppSelector } from '@store';
|
|
import { ClipboardIcon } from '@icons';
|
|
import { getStyles } from './jobsScreen.styles';
|
|
import { getAllActiveDeliveries, getCompletedDeliveries } from './thunk';
|
|
import { useFocusEffect, useNavigation } from '@react-navigation/native';
|
|
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
|
|
import { AppStackParamList } from '@navigation/navigationTypes';
|
|
import { RouteNames } from '@utils/constants';
|
|
|
|
export const JobsScreen: React.FC = () => {
|
|
const navigation =
|
|
useNavigation<NativeStackNavigationProp<AppStackParamList>>();
|
|
const { colors } = useAppTheme();
|
|
const styles = getStyles(colors);
|
|
const dispatch = useAppDispatch();
|
|
|
|
const [activeTab, setActiveTab] = useState<'active' | 'history'>('active');
|
|
const { activeJob, jobHistory } = useAppSelector(state => state.job);
|
|
const { activeDeliveries, completedDeliveries } = useAppSelector(
|
|
state => state.deliveries,
|
|
);
|
|
|
|
// console.log(activeDeliveries, 'activeDeliveries');
|
|
|
|
useFocusEffect(
|
|
useCallback(() => {
|
|
dispatch(getAllActiveDeliveries());
|
|
dispatch(getCompletedDeliveries());
|
|
}, [dispatch]),
|
|
);
|
|
|
|
// Default history mock jobs
|
|
// const defaultHistory = [
|
|
// {
|
|
// pickupName: 'Cafe Coffee Day',
|
|
// pickupAddress: 'MG Road, Bengaluru',
|
|
// dropName: 'Rohit Sharma',
|
|
// dropAddress: 'Koramangala 4th Block, Bengaluru',
|
|
// amount: '78.0',
|
|
// distance: '1.2',
|
|
// itemCount: 2,
|
|
// paymentType: 'online',
|
|
// },
|
|
// {
|
|
// pickupName: 'Pizza Hut',
|
|
// pickupAddress: 'Indiranagar, Bengaluru',
|
|
// dropName: 'Aishwarya Sen',
|
|
// dropAddress: 'Domlur Stage 2, Bengaluru',
|
|
// amount: '95.0',
|
|
// distance: '3.8',
|
|
// itemCount: 3,
|
|
// paymentType: 'cod',
|
|
// },
|
|
// {
|
|
// pickupName: 'Burgers & Co',
|
|
// pickupAddress: 'Koramangala 5th Block',
|
|
// dropName: 'Sameer Khan',
|
|
// dropAddress: 'HSR Layout Sector 3, Bengaluru',
|
|
// amount: '110.0',
|
|
// distance: '4.5',
|
|
// itemCount: 1,
|
|
// paymentType: 'online',
|
|
// },
|
|
// ];
|
|
|
|
return (
|
|
<View style={styles.container}>
|
|
<View style={styles.headerContainer}>
|
|
<Text style={styles.title}>Jobs</Text>
|
|
</View>
|
|
|
|
{/* Tabs Selector */}
|
|
<View style={styles.tabBar}>
|
|
<TouchableOpacity
|
|
style={[styles.tab, activeTab === 'active' && styles.tabActive]}
|
|
activeOpacity={0.8}
|
|
onPress={() => setActiveTab('active')}
|
|
>
|
|
<Text
|
|
style={[
|
|
styles.tabText,
|
|
activeTab === 'active' && styles.tabTextActive,
|
|
]}
|
|
>
|
|
Active / Upcoming
|
|
</Text>
|
|
</TouchableOpacity>
|
|
|
|
<TouchableOpacity
|
|
style={[styles.tab, activeTab === 'history' && styles.tabActive]}
|
|
activeOpacity={0.8}
|
|
onPress={() => setActiveTab('history')}
|
|
>
|
|
<Text
|
|
style={[
|
|
styles.tabText,
|
|
activeTab === 'history' && styles.tabTextActive,
|
|
]}
|
|
>
|
|
History
|
|
</Text>
|
|
</TouchableOpacity>
|
|
</View>
|
|
|
|
<ScrollView
|
|
contentContainerStyle={styles.listContainer}
|
|
showsVerticalScrollIndicator={false}
|
|
>
|
|
{activeTab === 'active' ? (
|
|
// Active job tab
|
|
activeDeliveries?.delivery ? (
|
|
<View style={styles.cardWrapper}>
|
|
<OrderCard
|
|
pickupName={
|
|
activeDeliveries?.delivery?.order?.pickupAddress?.city
|
|
}
|
|
pickupAddress={
|
|
activeDeliveries?.delivery?.order?.pickupAddress?.addressLine1
|
|
}
|
|
dropName={activeDeliveries?.delivery?.order?.dropAddress?.city}
|
|
dropAddress={
|
|
activeDeliveries?.delivery?.order?.dropAddress?.addressLine1
|
|
}
|
|
amount={activeDeliveries?.delivery?.order?.totalAmount}
|
|
distance={
|
|
activeDeliveries?.delivery?.estimatedDistanceKm || '0'
|
|
}
|
|
itemCount={
|
|
activeDeliveries?.delivery?.order?.orderItems?.length
|
|
}
|
|
paymentType={activeDeliveries?.delivery?.order?.paymentMethod}
|
|
onPress={() =>
|
|
navigation.navigate(RouteNames.OrderPickedUp, {
|
|
jobId: activeDeliveries?.delivery?.id,
|
|
})
|
|
}
|
|
/>
|
|
</View>
|
|
) : (
|
|
<View style={styles.emptyStateContainer}>
|
|
<ClipboardIcon size={48} color={colors.placeholder} />
|
|
<Text style={styles.emptyStateText}>
|
|
No active deliveries right now
|
|
</Text>
|
|
</View>
|
|
)
|
|
) : (
|
|
// History tab
|
|
<View>
|
|
{completedDeliveries && completedDeliveries?.length > 0 ? (
|
|
completedDeliveries?.map((job, idx) => (
|
|
<View key={idx} style={styles.cardWrapper}>
|
|
<OrderCard
|
|
pickupName={
|
|
job.order.merchant.name || job.order.pickupAddress.city
|
|
}
|
|
pickupAddress={job.order.pickupAddress.addressLine1}
|
|
dropName={job.order.dropAddress.city}
|
|
dropAddress={job.order.dropAddress.addressLine1}
|
|
amount={job.order.totalAmount}
|
|
distance={job.estimatedDistanceKm?.toString() || '0'}
|
|
// itemCount={job.order?.}
|
|
// paymentType={job.order.paymentMethod}
|
|
/>
|
|
</View>
|
|
))
|
|
) : (
|
|
<View style={styles.emptyStateContainer}>
|
|
<ClipboardIcon size={48} color={colors.placeholder} />
|
|
<Text style={styles.emptyStateText}>No history found</Text>
|
|
</View>
|
|
)}
|
|
</View>
|
|
)}
|
|
</ScrollView>
|
|
</View>
|
|
);
|
|
};
|
|
|
|
export default JobsScreen;
|