From 3f45514fd850c3be2fab29e40bf42c19f28489e2 Mon Sep 17 00:00:00 2001 From: Ava Gaiety W Date: Sat, 14 Jun 2025 16:50:17 -0600 Subject: [PATCH] normalize and output data for server --- src/BandForm.js | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/BandForm.js b/src/BandForm.js index 6f916b8..656f159 100644 --- a/src/BandForm.js +++ b/src/BandForm.js @@ -4,18 +4,51 @@ import { IMaskInput } from 'react-imask'; const CentsInADollar = 100; const DefaultTotal = 0; +function deepClone(data) { + // TODO: replace with structuredClone? + return JSON.parse( + JSON.stringify( + data + ) + ); +} + function costToReadable(cost) { return cost / CentsInADollar; } +function submitPurchase(data) { + // TODO: Send to backend + console.log(data); +} + function BandForm({ band }) { const formRef = useRef(null); const [total, setTotal] = useState(DefaultTotal); const [formIsPending, setFormIsPending] = useState(false); + function normalizePurchaseData(formData) { + const data = deepClone(Object.fromEntries(formData)); + delete data.ticketQuantity; + data.tickets = formData.getAll('ticketQuantity').map((quantity, index) => { + const {cost, name} = band.ticketTypes[index]; + return { + name, + quantity, + totalCost: cost * quantity, + } + }); + return data; + } + function purchase(formData) { - console.log(formData); + if (formRef.current.checkValidity() === false) { + console.warn('Form is invalid'); + return; + } + setFormIsPending(true); + submitPurchase(normalizePurchaseData(formData)); } function ticketQuantityChanged() {