import React, { useState, useEffect } from 'react'; import { View, FlatList, StyleSheet, Text, TouchableOpacity } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import { useRouter } from 'expo-router'; import { SearchBar } from '../../components/SearchBar'; import { MedicineCard } from '../../components/MedicineCard'; import { LoadingSpinner } from '../../components/LoadingSpinner'; import { useDebounce } from '../../hooks/useDebounce'; import { searchMedicines } from '../../services/medicines'; import { colors, spacing, borderRadius } from '../../constants/theme'; import { Medicine } from '../../types'; import { config } from '../../constants/config'; export default function HomeScreen() { const router = useRouter(); const [query, setQuery] = useState(''); const [results, setResults] = useState([]); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const debouncedQuery = useDebounce(query, config.SEARCH_DEBOUNCE_MS); useEffect(() => { if (debouncedQuery.length < 2) { setResults([]); return; } const fetchResults = async () => { setIsLoading(true); setError(null); try { const data = await searchMedicines(debouncedQuery); setResults(data); } catch (err) { setError('Error al buscar medicamentos'); console.error(err); } finally { setIsLoading(false); } }; fetchResults(); }, [debouncedQuery]); const handleSearch = (searchQuery: string) => { setQuery(searchQuery); }; return ( router.push('/scanner')} > {isLoading && } {error && ( {error} )} {!isLoading && !error && results.length === 0 && query.length >= 2 && ( No se encontraron medicamentos )} item.nregistro} renderItem={({ item }) => } contentContainerStyle={styles.list} showsVerticalScrollIndicator={false} /> ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.background, }, searchContainer: { flexDirection: 'row', alignItems: 'center', paddingRight: spacing.lg, }, scannerButton: { width: 44, height: 44, borderRadius: 22, backgroundColor: colors.scanButton, alignItems: 'center', justifyContent: 'center', shadowColor: '#2b5bb5', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.3, shadowRadius: 12, elevation: 6, }, list: { paddingBottom: spacing.xl, }, errorContainer: { padding: spacing.md, marginHorizontal: spacing.lg, backgroundColor: colors.dangerContainer, borderRadius: borderRadius.lg, }, errorText: { color: colors.danger, textAlign: 'center', fontSize: 14, }, emptyContainer: { padding: spacing.xl, alignItems: 'center', }, emptyText: { color: colors.textSecondary, fontSize: 16, }, });