feat: add barcode scanner for medicine lookup

This commit is contained in:
Antoni Nuñez Romeu
2026-07-06 11:33:09 +02:00
parent 205af1a795
commit d22f1b5646
3 changed files with 281 additions and 7 deletions
+28 -7
View File
@@ -1,15 +1,18 @@
import React, { useState, useEffect } from 'react';
import { View, FlatList, StyleSheet, Text } from 'react-native';
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 } from '../../constants/theme';
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<Medicine[]>([]);
const [isLoading, setIsLoading] = useState(false);
@@ -46,11 +49,19 @@ export default function HomeScreen() {
return (
<View style={styles.container}>
<SearchBar
onSearch={handleSearch}
value={query}
onChangeText={setQuery}
/>
<View style={styles.searchContainer}>
<SearchBar
onSearch={handleSearch}
value={query}
onChangeText={setQuery}
/>
<TouchableOpacity
style={styles.scannerButton}
onPress={() => router.push('/scanner')}
>
<Ionicons name="scan" size={24} color={colors.primary} />
</TouchableOpacity>
</View>
{isLoading && <LoadingSpinner message="Buscando medicamentos..." />}
@@ -82,6 +93,16 @@ const styles = StyleSheet.create({
flex: 1,
backgroundColor: colors.background,
},
searchContainer: {
flexDirection: 'row',
alignItems: 'center',
},
scannerButton: {
marginRight: spacing.md,
padding: spacing.sm,
backgroundColor: colors.card,
borderRadius: borderRadius.md,
},
list: {
paddingBottom: spacing.xl,
},