From 0ba4e5599e72eace76a0cdc797736ca9b8518eed Mon Sep 17 00:00:00 2001 From: dick Date: Sat, 13 Jun 2026 05:32:59 -0400 Subject: [PATCH] :sparkles: Faire une commande --- my-library/src/api/orders.js | 5 ++ my-library/src/pages/Orders.jsx | 90 ++++++++++++++++++++++++++++++++- 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 my-library/src/api/orders.js diff --git a/my-library/src/api/orders.js b/my-library/src/api/orders.js new file mode 100644 index 0000000..8f3e31d --- /dev/null +++ b/my-library/src/api/orders.js @@ -0,0 +1,5 @@ +import client from './client'; + +export function createOrder(order) { + return client.post('/api/orders', order); +} \ No newline at end of file diff --git a/my-library/src/pages/Orders.jsx b/my-library/src/pages/Orders.jsx index a909337..7b8026d 100644 --- a/my-library/src/pages/Orders.jsx +++ b/my-library/src/pages/Orders.jsx @@ -1,3 +1,91 @@ +import { useState } from 'react'; +import { createOrder } from '../api/orders'; + export default function Orders() { - return

Mes commandes

; + const [customerId, setCustomerId] = useState(''); + const [paymentMethod, setPaymentMethod] = useState('CREDIT_CARD'); + const [address, setAddress] = useState({ street: '', city: '', postalCode: '', country: '' }); + const [lines, setLines] = useState([{ bookId: '', quantity: 1 }]); + const [message, setMessage] = useState(null); + const [submitting, setSubmitting] = useState(false); + + function handleAddressChange(e) { + const { name, value } = e.target; + setAddress((prev) => ({ ...prev, [name]: value })); + } + + function handleLineChange(index, field, value) { + setLines((prev) => prev.map((line, i) => (i === index ? { ...line, [field]: value } : line))); + } + function addLine() { + setLines((prev) => [...prev, { bookId: '', quantity: 1 }]); + } + function removeLine(index) { + setLines((prev) => prev.filter((_, i) => i !== index)); + } + + function handleSubmit(e) { + e.preventDefault(); + setSubmitting(true); + setMessage(null); + + const payload = { + customerId, + paymentMethod, + address, + orderLineDtos: lines.map((line) => ({ + bookId: Number(line.bookId), + quantity: Number(line.quantity), + })), + }; + + createOrder(payload) + .then((response) => setMessage('Commande créée')) + .catch((error) => { + console.error(error); + setMessage(error.response?.data?.message || 'Erreur lors de la commande.'); + }) + .finally(() => setSubmitting(false)); + } + + return ( +
+

Passer une commande

+
+ + +

Livres

+ {lines.map((line, index) => ( +
+ handleLineChange(index, 'bookId', e.target.value)} required /> + handleLineChange(index, 'quantity', e.target.value)} required /> + {lines.length > 1 && ( + + )} +
+ ))} + + +

Adresse de livraison

+ + + + + +

Paiement

+ + + +
+ {message &&

{message}

} +
+ ); } \ No newline at end of file -- 2.54.0