diff --git a/web/client/src/components/InventoryGrid.css b/web/client/src/components/InventoryGrid.css index fadf7ba..c002605 100644 --- a/web/client/src/components/InventoryGrid.css +++ b/web/client/src/components/InventoryGrid.css @@ -412,6 +412,51 @@ flex-wrap: wrap; } +/* Dropper location selector */ +.dropper-select-wrapper { + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +.dropper-label { + font-size: 0.65rem; + color: var(--mc-text-gold); + text-shadow: 1px 1px 0 #000; +} + +.dropper-select { + background: #2a2a2a; + border: 2px solid #444; + color: var(--mc-text-white); + font-family: 'Silkscreen', 'Courier New', monospace; + font-size: 0.7rem; + padding: 0.375rem 0.5rem; + outline: none; + border-radius: 0; + cursor: pointer; + appearance: none; + -webkit-appearance: none; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23aaa'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 0.5rem center; + padding-right: 1.5rem; +} + +.dropper-select:hover { + border-color: var(--mc-text-green); +} + +.dropper-select:focus { + border-color: var(--mc-text-green); + box-shadow: inset 0 0 4px rgba(85, 255, 85, 0.15); +} + +.dropper-select option { + background: #1a1a1a; + color: var(--mc-text-white); +} + .order-btn { width: 100%; padding: 0.625rem !important; diff --git a/web/client/src/components/InventoryGrid.jsx b/web/client/src/components/InventoryGrid.jsx index 24e56c7..4151ee0 100644 --- a/web/client/src/components/InventoryGrid.jsx +++ b/web/client/src/components/InventoryGrid.jsx @@ -15,6 +15,9 @@ function InventoryGrid() { const [orderAmount, setOrderAmount] = useState(1); const [sortBy, setSortBy] = useState('count'); const [activeCategory, setActiveCategory] = useState('all'); + const [selectedDropper, setSelectedDropper] = useState(''); + + const droppers = inventory.droppers || []; const items = getFilteredItems(); @@ -33,8 +36,8 @@ function InventoryGrid() { const handleOrder = useCallback(async () => { if (!selectedItem || orderAmount <= 0) return; - await orderItem(selectedItem.name, orderAmount); - }, [selectedItem, orderAmount, orderItem]); + await orderItem(selectedItem.name, orderAmount, selectedDropper || undefined); + }, [selectedItem, orderAmount, orderItem, selectedDropper]); const handleItemClick = (item) => { setSelectedItem(item); @@ -162,6 +165,22 @@ function InventoryGrid() {