import React, { useState, useEffect } from 'react'; import { StyleSheet, View, Text, TextInput, TouchableOpacity, ActivityIndicator, } from 'react-native'; import { useTheme } from '../services/ThemeContext'; import DatabaseService from '../services/DatabaseService'; import PhotoGrid from '../components/PhotoGrid'; import MediaViewer from '../components/MediaViewer'; const SearchScreen = ({ route }) => { const userId = route?.params?.userId; const { theme } = useTheme(); const [query, setQuery] = useState(''); const [results, setResults] = useState([]); const [searching, setSearching] = useState(false); const [selectedMedia, setSelectedMedia] = useState(null); const [viewerVisible, setViewerVisible] = useState(false); useEffect(() => { const timer = setTimeout(() => { if (query.trim().length > 0) performSearch(); else setResults([]); }, 300); return () => clearTimeout(timer); }, [query]); const performSearch = async () => { if (!userId) return; setSearching(true); try { const media = await DatabaseService.searchMedia(userId, query.trim()); setResults(media); } catch (err) { console.error('Search error:', err); } finally { setSearching(false); } }; return ( 🔍 {query.length > 0 && ( setQuery('')}> ✕ )} {searching && ( )} {!searching && query.length > 0 && results.length === 0 && ( 🔍 No results Try different keywords )} {query.length === 0 && ( 🔍 Search your photos Search by title or description )} {results.length > 0 && ( <> {results.length} result{results.length !== 1 ? 's' : ''} { setSelectedMedia(item); setViewerVisible(true); }} /> )} setViewerVisible(false)} /> ); }; const styles = StyleSheet.create({ container: { flex: 1 }, searchBar: { flexDirection: 'row', alignItems: 'center', marginHorizontal: 12, marginTop: 48, marginBottom: 8, borderRadius: 24, paddingHorizontal: 14, paddingVertical: 10, gap: 8, }, searchIcon: { fontSize: 16 }, searchInput: { flex: 1, fontSize: 15, padding: 0 }, clearButton: { fontSize: 16, padding: 4 }, loadingContainer: { padding: 20, alignItems: 'center' }, emptyContainer: { flex: 1, justifyContent: 'center', alignItems: 'center', paddingHorizontal: 24 }, emptyIcon: { fontSize: 48, marginBottom: 12 }, emptyTitle: { fontSize: 18, fontWeight: '600', marginBottom: 6 }, emptyText: { fontSize: 13, textAlign: 'center' }, resultCount: { paddingHorizontal: 16, paddingVertical: 8, fontSize: 13 }, }); export default SearchScreen;