import React, { useState, useEffect } from 'react'; import { Text, Grid } from 'theme-ui'; import Prizes from './prizes'; /** @jsxImportSource theme-ui */ const styled = ` @import url(https://fonts.googleapis.com/css2?family=Slackey&family=Emblema+One&family=Gaegu&display=swap); .slackey { font-family: "Slackey", sans-serif; } .gaegu { font-family: "Gaegu", sans-serif; } body { background-color: #FAEFD6; } a { color: inherit; } `; export default function ShopComponent({ availableItems, userAirtableID = null, hoursBalance = null, userEmail = null, pub }) { // State to manage quantity for each item const [quantities, setQuantities] = useState({}); // Function to update quantity for an item const handleQuantityChange = (itemID, quantity) => { setQuantities({ ...quantities, [itemID]: quantity }); }; function buyLink(itemID, itemImage) { const quantity = quantities[itemID] || 1; // Default quantity is 1 if not set return `https://forms.hackclub.com/arcade-order?user_id=${userAirtableID}&item_id=${itemID}&quantity=${quantity}&image=${encodeURIComponent(itemImage)}&email=${encodeURIComponent(userEmail)}`; } const canPurchaseItems = userAirtableID !== null; return ( <> {/* Shop for {userAirtableID} */} {availableItems .sort((a, b) => a['Cost Hours'] - b['Cost Hours']) .filter(item => (item['Stock'] > 0 || item['Stock'] === null)) .map((item) => ( handleQuantityChange(item.id, q)} // Pass handler to update quantity hoursBalance={hoursBalance} stock={item['Stock']} categories={item['Category']} pub={pub} inStock={true} /> ))} {availableItems .sort((a, b) => a['Cost Hours'] - b['Cost Hours']) .filter(item => (item['Stock'] === 0)) .map((item) => ( handleQuantityChange(item.id, q)} // Pass handler to update quantity hoursBalance={hoursBalance} stock={item['Stock']} categories={item['Category']} pub={pub} inStock={false} /> ))} ); }