176 lines
5.8 KiB
TypeScript
176 lines
5.8 KiB
TypeScript
import React, { 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 } from './thunk';
|
|
import { 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 } = useAppSelector(state => state.deliveries);
|
|
|
|
useEffect(() => {
|
|
dispatch(getAllActiveDeliveries());
|
|
}, [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 ? (
|
|
<View style={styles.cardWrapper}>
|
|
<OrderCard
|
|
pickupName={activeDeliveries?.order?.pickupAddress?.city}
|
|
pickupAddress={
|
|
activeDeliveries?.order?.pickupAddress?.addressLine1
|
|
}
|
|
dropName={activeDeliveries?.order?.dropAddress?.city}
|
|
dropAddress={activeDeliveries?.order?.dropAddress?.addressLine1}
|
|
amount={activeDeliveries?.order?.totalAmount}
|
|
distance={activeDeliveries?.estimatedDistanceKm}
|
|
itemCount={activeDeliveries?.order?.orderItems?.length}
|
|
paymentType={activeDeliveries?.order?.paymentMethod}
|
|
onPress={() =>
|
|
navigation.navigate(RouteNames.ArrivedAtStore, {
|
|
jobId: activeDeliveries?.orderId,
|
|
})
|
|
}
|
|
/>
|
|
</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>
|
|
{jobHistory.length > 0
|
|
? jobHistory.map((job, idx) => (
|
|
<View key={idx} style={styles.cardWrapper}>
|
|
<OrderCard
|
|
pickupName={job.pickupName}
|
|
pickupAddress={job.pickupAddress}
|
|
dropName={job.dropName}
|
|
dropAddress={job.dropAddress}
|
|
amount={job.amount}
|
|
distance={job.distance}
|
|
itemCount={job.itemCount}
|
|
paymentType={job.paymentType}
|
|
/>
|
|
</View>
|
|
))
|
|
: defaultHistory.map((job, idx) => (
|
|
<View key={idx} style={styles.cardWrapper}>
|
|
<OrderCard
|
|
pickupName={job.pickupName}
|
|
pickupAddress={job.pickupAddress}
|
|
dropName={job.dropName}
|
|
dropAddress={job.dropAddress}
|
|
amount={job.amount}
|
|
distance={job.distance}
|
|
itemCount={job.itemCount}
|
|
paymentType={job.paymentType}
|
|
/>
|
|
</View>
|
|
))}
|
|
</View>
|
|
)}
|
|
</ScrollView>
|
|
</View>
|
|
);
|
|
};
|
|
|
|
export default JobsScreen;
|