BrixCafe/app/screens/user/GrainsScreen.tsx
2025-04-18 03:41:15 +01:00

81 lines
2.2 KiB
TypeScript

import { View, Text, StyleSheet, ScrollView, TouchableOpacity } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import { ArrowLeft } from 'lucide-react-native';
import { router } from "expo-router";
import ProductCard from '../../components/ProductCard';
import COLORS from '@/app/constants/colors';
import { collection, getDocs } from 'firebase/firestore';
import { useEffect, useState } from 'react';
import { db } from '@/firebase/config';
import { Product } from '@/app/constants/types';
export default function GrainsScreen() {
const [products, setProducts] = useState<Product[]>([]);
useEffect(() => {
const fetchProducts = async () => {
try {
const querySnapshot = await getDocs(collection(db, 'products'));
const items: Product[] = querySnapshot.docs.map(doc => ({
id: doc.id,
...(doc.data() as Omit<Product, 'id'>),
}));
setProducts(items);
} catch (error) {
console.error("Erreur lors de la récupération des produits :", error);
}
};
fetchProducts();
}, []);
return (
<SafeAreaView style={styles.container}>
<View style={styles.header}>
<TouchableOpacity style={styles.backButton} onPress={() => router.back()}>
<ArrowLeft size={24} color="#666" />
</TouchableOpacity>
<Text style={styles.headerTitle}>Grains de café</Text>
</View>
<ScrollView style={styles.content}>
{products.map((product) => (
<ProductCard key={product.id} {...product} />
))}
</ScrollView>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
},
header: {
height: 60,
justifyContent: 'center',
alignItems: 'center',
position: 'relative',
backgroundColor: '#fff',
borderBottomWidth: 1,
borderBottomColor: '#eee',
marginTop: 5,
},
backButton: {
position: 'absolute',
left: 20,
top: '50%',
transform: [{ translateY: -12 }],
},
headerTitle: {
fontSize: 20,
fontWeight: '600',
color: '#333',
},
content: {
flex: 1,
padding: 28,
backgroundColor: COLORS.background_user,
},
});