145 lines
4.3 KiB
TypeScript
145 lines
4.3 KiB
TypeScript
import React from 'react';
|
|
import { View, Text, ScrollView, TouchableOpacity, Alert } from 'react-native';
|
|
import { useAppTheme } from '@theme';
|
|
import { PersonIcon, ChevronRightIcon, ClipboardIcon, StarIcon } from '@icons';
|
|
import { useAppDispatch, useAppSelector } from '@store';
|
|
import { logout } from '@store/commonReducers/auth';
|
|
import { useNavigation, CommonActions } from '@react-navigation/native';
|
|
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
|
|
import { AppStackParamList } from '@navigation/navigationTypes';
|
|
import { RouteNames } from '@utils/constants';
|
|
import { getStyles } from './profileScreen.styles';
|
|
|
|
export const ProfileScreen: React.FC = () => {
|
|
const { colors } = useAppTheme();
|
|
const styles = getStyles(colors);
|
|
const dispatch = useAppDispatch();
|
|
const navigation =
|
|
useNavigation<NativeStackNavigationProp<AppStackParamList>>();
|
|
const { profile } = useAppSelector(state => state.accountInfo);
|
|
|
|
const menuItems = [
|
|
{
|
|
id: 'personal',
|
|
title: 'Personal Info',
|
|
icon: <PersonIcon size={20} color={colors.primary} />,
|
|
},
|
|
{
|
|
id: 'vehicle',
|
|
title: 'Vehicle Info',
|
|
icon: <ClipboardIcon size={20} color={colors.primary} />,
|
|
},
|
|
{
|
|
id: 'documents',
|
|
title: 'Documents',
|
|
icon: <ClipboardIcon size={20} color={colors.primary} />,
|
|
route: RouteNames.Documents,
|
|
},
|
|
{
|
|
id: 'bank',
|
|
title: 'Bank Details',
|
|
icon: <ClipboardIcon size={20} color={colors.primary} />,
|
|
},
|
|
{
|
|
id: 'emergency',
|
|
title: 'Emergency Contact',
|
|
icon: <PersonIcon size={20} color={colors.primary} />,
|
|
},
|
|
{
|
|
id: 'settings',
|
|
title: 'App Settings',
|
|
icon: <PersonIcon size={20} color={colors.primary} />,
|
|
},
|
|
];
|
|
|
|
const handleMenuPress = (item: any) => {
|
|
if (item.route) {
|
|
navigation.navigate(RouteNames.Documents);
|
|
} else {
|
|
Alert.alert('Menu Option', `Viewing ${item.title} section...`);
|
|
}
|
|
};
|
|
|
|
const handleLogout = () => {
|
|
Alert.alert(
|
|
'Logout',
|
|
'Are you sure you want to log out of SG Delivery Partner?',
|
|
[
|
|
{ text: 'Cancel', style: 'cancel' },
|
|
{
|
|
text: 'Logout',
|
|
style: 'destructive',
|
|
onPress: () => {
|
|
dispatch(logout());
|
|
// Reset navigation stack to the Auth Stack
|
|
navigation.dispatch(
|
|
CommonActions.reset({
|
|
index: 0,
|
|
routes: [{ name: 'Auth' }],
|
|
}),
|
|
);
|
|
},
|
|
},
|
|
],
|
|
);
|
|
};
|
|
|
|
return (
|
|
<View style={styles.container}>
|
|
<ScrollView
|
|
contentContainerStyle={styles.scrollContainer}
|
|
showsVerticalScrollIndicator={false}
|
|
>
|
|
{/* Header User Card */}
|
|
<View style={styles.headerCard}>
|
|
<View style={styles.avatar}>
|
|
<PersonIcon size={44} color={colors.primary} />
|
|
</View>
|
|
|
|
<Text style={styles.name}>{profile?.user?.name}</Text>
|
|
|
|
<View style={styles.ratingRow}>
|
|
<StarIcon size={16} color={colors.warning} />
|
|
<Text style={styles.ratingText}>{profile?.rating}</Text>
|
|
<Text style={styles.tripsText}>{profile?.user?.email}</Text>
|
|
</View>
|
|
|
|
<Text style={styles.idText}>ID: {profile?.user?.id}</Text>
|
|
</View>
|
|
|
|
{/* Profile Menu options */}
|
|
<View style={styles.menuSection}>
|
|
{menuItems.map((item, idx) => (
|
|
<TouchableOpacity
|
|
key={item.id}
|
|
style={[
|
|
styles.menuItem,
|
|
idx === menuItems.length - 1 && { borderBottomWidth: 0 },
|
|
]}
|
|
activeOpacity={0.7}
|
|
onPress={() => handleMenuPress(item)}
|
|
>
|
|
<View style={styles.menuItemLeft}>
|
|
<View style={styles.menuIconContainer}>{item.icon}</View>
|
|
<Text style={styles.menuText}>{item.title}</Text>
|
|
</View>
|
|
<ChevronRightIcon size={20} color={colors.textSecondary} />
|
|
</TouchableOpacity>
|
|
))}
|
|
</View>
|
|
|
|
{/* Logout Button */}
|
|
<TouchableOpacity
|
|
style={styles.logoutBtn}
|
|
activeOpacity={0.8}
|
|
onPress={handleLogout}
|
|
>
|
|
<Text style={styles.logoutText}>Log Out</Text>
|
|
</TouchableOpacity>
|
|
</ScrollView>
|
|
</View>
|
|
);
|
|
};
|
|
|
|
export default ProfileScreen;
|