import React from 'react'; import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'; import { BottomTabBarProps } from '@react-navigation/bottom-tabs'; import { Ionicons } from '@expo/vector-icons'; // Custom tab bar component with typings const CustomTabBar: React.FC = ({ state, descriptors, navigation }) => { return ( {state.routes.map((route, index) => { const { options } = descriptors[route.key]; const label = options.tabBarLabel !== undefined ? options.tabBarLabel : options.title !== undefined ? options.title : route.name; const isFocused = state.index === index; // Event handler for tab press const onPress = () => { const event = navigation.emit({ type: 'tabPress', target: route.key, canPreventDefault: true }); if (!isFocused && !event.defaultPrevented) { navigation.navigate(route.name); } }; // Event handler for tab long press const onLongPress = () => { navigation.emit({ type: 'tabLongPress', target: route.key, }); }; const iconName = route.name === 'QR Scanner' ? 'camera' : route.name === 'History' ? 'time' : route.name === 'Settings' ? 'settings' : 'person'; return ( {/* Check if label is a string before rendering */} {typeof label === 'string' ? ( {label} ) : null} ); })} { navigation.navigate('QR Scanner'); }}> ); }; const styles = StyleSheet.create({ tabBar: { position: 'absolute', bottom: 20, left: 20, right: 20, height: 70, borderRadius: 35, backgroundColor: '#fff', flexDirection: 'row', justifyContent: 'space-around', alignItems: 'center', shadowColor: '#000', shadowOpacity: 0.1, shadowOffset: { width: 0, height: 2 }, shadowRadius: 10, elevation: 5, }, tabButton: { flex: 1, justifyContent: 'center', alignItems: 'center', }, floatingButtonContainer: { position: 'absolute', top: -30, left: '50%', marginLeft: -35, width: 70, height: 70, borderRadius: 35, backgroundColor: '#fff', justifyContent: 'center', alignItems: 'center', shadowColor: '#000', shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 }, shadowRadius: 5, elevation: 3, borderWidth: 3, borderColor: '#673ab7', }, floatingButton: { width: 60, height: 60, borderRadius: 30, backgroundColor: '#673ab7', justifyContent: 'center', alignItems: 'center', }, }); export default CustomTabBar;