¿Cómo enviar datos de formulario a firebase?
Publicado por Clara (1 intervención) el 12/11/2022 22:36:16
Hola, tengo el siguiente código pero no sé como enviar los datos del buyer a firebase para generar la orden con los datos que ingrese la persona en el formulario. Obviamente ahora se generan con los datos que estás puestos en el código. Ayuda, por fa.
const Checkout = () => {
const [loading, setLoading] = useState(false)
const { cart, total, clearCart } = useContext(CartContext)
const createOrder = async () => {
setLoading(true)
try {
const objOrder = {
buyer: {
name: 'Pablo León',
phone: '965673973',
email: '[email protected]'
},
items: cart,
total
}
console.log(objOrder)
const ids = cart.map(prod => prod.id)
const productsRef = collection(db, 'products')
const productsAddedFromFirestore = await getDocs(query(productsRef, where(documentId(), 'in' , ids)))
const { docs } = productsAddedFromFirestore
const batch = writeBatch(db)
const outOfStock = []
docs.forEach(doc => {
const dataDoc = doc.data()
const stockDb = dataDoc.stock
const productAddedToCart = cart.find(prod => prod.id === doc.id)
const prodQuantity = productAddedToCart?.quantity
if(stockDb >= prodQuantity) {
batch.update(doc.ref, { stock: stockDb - prodQuantity })
} else {
outOfStock.push({ id: doc.id, ...dataDoc})
}
})
if(outOfStock.length === 0) {
await batch.commit()
const orderRef = collection(db, 'orders')
const orderAdded = await addDoc(orderRef, objOrder)
console.log(`El id de su orden es: ${orderAdded.id}`)
clearCart()
} else {
console.log('Hay productos sin stock')
}
} catch (error) {
console.log(error)
} finally {
setLoading(false)
}
}
if(loading) {
return <h1>Generando orden...</h1>
}
return (
<>
<h1>Checkout</h1>
<form>
<div>
<label>
Name:
<input type="text" name="name" />
</label>
</div>
<div>
<label>
Phone:
<input type="number" name="phone" />
</label>
</div>
<div>
<label>
Email:
<input type="text" name="email" />
</label>
</div>
</form>
<button onClick={createOrder}>Agregar documento</button>
</>
)
}
export default Checkout
const Checkout = () => {
const [loading, setLoading] = useState(false)
const { cart, total, clearCart } = useContext(CartContext)
const createOrder = async () => {
setLoading(true)
try {
const objOrder = {
buyer: {
name: 'Pablo León',
phone: '965673973',
email: '[email protected]'
},
items: cart,
total
}
console.log(objOrder)
const ids = cart.map(prod => prod.id)
const productsRef = collection(db, 'products')
const productsAddedFromFirestore = await getDocs(query(productsRef, where(documentId(), 'in' , ids)))
const { docs } = productsAddedFromFirestore
const batch = writeBatch(db)
const outOfStock = []
docs.forEach(doc => {
const dataDoc = doc.data()
const stockDb = dataDoc.stock
const productAddedToCart = cart.find(prod => prod.id === doc.id)
const prodQuantity = productAddedToCart?.quantity
if(stockDb >= prodQuantity) {
batch.update(doc.ref, { stock: stockDb - prodQuantity })
} else {
outOfStock.push({ id: doc.id, ...dataDoc})
}
})
if(outOfStock.length === 0) {
await batch.commit()
const orderRef = collection(db, 'orders')
const orderAdded = await addDoc(orderRef, objOrder)
console.log(`El id de su orden es: ${orderAdded.id}`)
clearCart()
} else {
console.log('Hay productos sin stock')
}
} catch (error) {
console.log(error)
} finally {
setLoading(false)
}
}
if(loading) {
return <h1>Generando orden...</h1>
}
return (
<>
<h1>Checkout</h1>
<form>
<div>
<label>
Name:
<input type="text" name="name" />
</label>
</div>
<div>
<label>
Phone:
<input type="number" name="phone" />
</label>
</div>
<div>
<label>
Email:
<input type="text" name="email" />
</label>
</div>
</form>
<button onClick={createOrder}>Agregar documento</button>
</>
)
}
export default Checkout
Valora esta pregunta


0