import { useState } from 'react';
import { View, Text, FlatList, ActivityIndicator, StyleSheet, SafeAreaView, TouchableOpacity, Image } from 'react-native';
import { useRouter } from 'expo-router';
import { Ionicons } from '@expo/vector-icons';
import { useOutlets } from '@/hooks/useApi';
import OutletCard from '@/components/OutletCard';
import BottomTabBar from '@/components/BottomTabBar';
import SearchModal from '@/components/SearchModal';
import LanguageModal from '@/components/LanguageModal';
import { useLanguage } from '@/contexts/LanguageContext';
export default function HomeScreen() {
const [activeFilter, setActiveFilter] = useState<'people' | 'topics' | 'companies'>('people');
const [showSearch, setShowSearch] = useState(false);
const [showLanguage, setShowLanguage] = useState(false);
const { language, setLanguage } = useLanguage();
const router = useRouter();
const { data: outlets, isLoading, error } = useOutlets(activeFilter, language);
if (error) {
return (
Error: {error.message}
Check if the server is running on localhost:8050
);
}
return (
{/* Header */}
setShowSearch(true)}>
setShowLanguage(true)}>
{/* Content Area */}
{showSearch ? (
setShowSearch(false)}
/>
) : (
<>
{/* Outlets List */}
{isLoading ? (
Loading outlets...
) : (
`${activeFilter}-${item.id}-${index}`}
renderItem={({ item }: any) => (
router.push(`/outlet/${id}`)}
/>
)}
contentContainerStyle={styles.list}
showsVerticalScrollIndicator={false}
ListEmptyComponent={
No outlets found
}
/>
)}
>
)}
{/* Bottom Tab Bar */}
{/* Language Modal */}
setShowLanguage(false)}
currentLanguage={language}
onSelectLanguage={setLanguage}
/>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#f5f5f5',
},
header: {
backgroundColor: '#fff',
paddingHorizontal: 16,
paddingVertical: 12,
borderBottomWidth: 1,
borderBottomColor: '#e0e0e0',
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
},
contentContainer: {
flex: 1,
overflow: 'hidden',
},
headerLeft: {
alignItems: 'flex-start',
},
logo: {
height: 16,
},
headerRight: {
flexDirection: 'row',
alignItems: 'center',
gap: 8,
},
iconButton: {
padding: 8,
},
list: {
padding: 16,
paddingBottom: 16,
},
loadingContainer: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
errorContainer: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
padding: 20,
},
text: {
fontSize: 14,
color: '#666',
marginTop: 10,
},
errorText: {
fontSize: 16,
color: 'red',
fontWeight: 'bold',
},
emptyText: {
fontSize: 14,
color: '#666',
textAlign: 'center',
marginTop: 20,
},
});