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 + + ID client + setCustomerId(e.target.value)} required /> + + + Livres + {lines.map((line, index) => ( + + handleLineChange(index, 'bookId', e.target.value)} required /> + handleLineChange(index, 'quantity', e.target.value)} required /> + {lines.length > 1 && ( + removeLine(index)}>Retirer + )} + + ))} + + Ajouter un livre + + Adresse de livraison + + + + + + Paiement + setPaymentMethod(e.target.value)}> + Carte bancaire + + + + {submitting ? 'Envoi…' : 'Valider la commande'} + + + {message && {message}} + + ); } \ No newline at end of file
{message}