import React, { useState, useEffect } from "react"; import "./assets/css/app.css"; import CheckoutPage from "./checkout"; import Products from "./products"; import Header from "./header"; import RegisterPage from "./register-product"; import { BrowserRouter, Routes, Route } from "react-router-dom"; import { collection, getDocs, addDoc } from "firebase/firestore"; import { db } from "./firebase"; const App = (props) => { let [cartItems, setCartItems] = useState([]); let [products, setProducts] = useState([]); let [user, setUser] = useState(null); const fetchData = async () => { /* firestore security rule change : allow read : if request.auth != null; allow write : if request != null; */ const querySnapshot = await getDocs(collection(db, "products")); let products = []; querySnapshot.forEach((doc) => { products.push(doc.data()); }); setProducts([...products]); console.log(products); }; useEffect(() => { fetchData(); }, []); const handleDeleteItem = (index) => { const updatedCartItems = cartItems.filter((item, i) => i !== index); setCartItems(updatedCartItems); }; const DeleteAllItem = () => { setCartItems([]); }; const updateInventory = () => { cartItems.forEach((item) => { console.log("item" + item); products.forEach((product) => { console.log("product" + product); if (item.id === product.id) product.availableInventory -= 1; }); }); setCartItems([]); }; const addProduct = async (product) => { const docRef = await addDoc(collection(db, "products"), product); console.log(`document id : ${docRef.id}`); setProducts([...products, product]); }; return ( <BrowserRouter> <header> <Header name={props.sitename} nItems={cartItems.length} user={user} onSignIn={setUser} onSignOut={() => setUser(null)} /> </header> <main> <Routes> <Route path="/" element={ <Products products={products} cart={cartItems} onSetCart={setCartItems} user={user} /> } ></Route> <Route path="/checkout" element={ <CheckoutPage cart={cartItems} onDeleteItem={handleDeleteItem} deleteAll={DeleteAllItem} updateInventory={updateInventory} /> } ></Route> <Route path="/register-product" element={ <RegisterPage addProduct={addProduct} /> } ></Route> </Routes> </main> </BrowserRouter> ); }; export default App;