'for client' import { Mutex } from "async-mutex" import { useState } from "react" import styled from "styled-components" import useAsyncEffect from "use-async-effect" import { useItemStore } from "../providers/ItemsProvider" type OrderItemTableProps = { orderId: number } const OrderItemTableStyle = styled.table` width: 100% ` const OrderItemTableHead = styled.thead` background-color: #34067eff ` const OrderItemTableItem = styled.td` align: center ` const OrderItemTH = styled.th` align: center ` const OrderItemTableBody = styled.tbody` > :nth-child(even) { background-color: #410041ff; } > :hover { background-color: #707070ff; } ` const OrderItemTableRow = styled.tr` ` const orderItemMutex = new Mutex() export const OrderItemTable = ({orderId}: OrderItemTableProps) => { const itemStore = useItemStore((state) => state) const [orderItems, setOrderItems] = useState(itemStore.orderItems.filter((oi) => oi.OrderId === orderId)) const [itemName, setItemName] = useState("") const [itemQuantity, setItemQuantity] = useState(0) const [shouldPostData, setShouldPostData] = useState(false) useAsyncEffect(async () => { if (orderItems.length === 0) { const release = await orderItemMutex.acquire() setOrderItems(await itemStore.getOrderItems(orderId)) await release() } if (itemStore.items.length === 0) { const release = await orderItemMutex.acquire() await itemStore.sync() await release() } }, []) useAsyncEffect(async () => { if(shouldPostData) { const items = itemStore.items.filter((i) => i.ItemName.toUpperCase().includes(itemName.toUpperCase())) if(items.length > 0) { const release = await orderItemMutex.acquire() setOrderItems( [...orderItems, await itemStore.addItemToOrder(items[0].ItemId, orderId, itemQuantity)]) await release() } setShouldPostData(false) } }, [shouldPostData]) return ( <> item needed made total unit {orderItems.map((oi) => ( {oi.ItemName} { if(!Number.isNaN(parseInt(e.currentTarget.value))) { await itemStore.setItemQuantity(oi.OrderId, oi.ItemId, parseInt(e.currentTarget.value)) } }} /> { if(!Number.isNaN(parseInt(e.currentTarget.value))) { await itemStore.setItemMade(oi.OrderId, oi.ItemId, parseInt(e.currentTarget.value)) } }} /> ${Math.trunc(oi.TotalPrice * 100) / 100} ${Math.trunc(oi.UnitPrice * 100) / 100} ))}

Add Item To Order

{ setItemName(e.currentTarget.value) }} placeholder="item name"/> { setItemQuantity(parseInt(e.currentTarget.value)) }} placeholder="needed" />

) }