Spaces:
Sleeping
Sleeping
Aryanshh commited on
Commit ·
ceb478a
1
Parent(s): 6db75c6
feat: Intelligent cart grouping and relative arrival times
Browse files- dashboard/app.js +16 -5
dashboard/app.js
CHANGED
|
@@ -62,14 +62,25 @@ async function updateState() {
|
|
| 62 |
document.getElementById('chips-count').textContent = data.inventory.chips;
|
| 63 |
document.getElementById('sensors-count').textContent = data.inventory.sensors;
|
| 64 |
|
| 65 |
-
// Update Cart
|
| 66 |
const cartContainer = document.getElementById('cart-container');
|
| 67 |
if (data.active_shipments && data.active_shipments.length > 0) {
|
| 68 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 69 |
<div class="cart-item">
|
| 70 |
<div class="cart-type">${ship.part} (x${ship.quantity})</div>
|
| 71 |
<div class="cart-meta">Mode: ${ship.mode.toUpperCase()}</div>
|
| 72 |
-
<div class="arrival-day">Arrives
|
| 73 |
</div>
|
| 74 |
`).join('');
|
| 75 |
} else {
|
|
@@ -110,7 +121,7 @@ const modeSelect = document.getElementById('mode-select');
|
|
| 110 |
function updatePreview() {
|
| 111 |
const mode = modeSelect.value;
|
| 112 |
const s = SPECS[mode];
|
| 113 |
-
const cost = 10 * 1 * s.cost;
|
| 114 |
const carbon = 1 * s.carbon;
|
| 115 |
|
| 116 |
document.getElementById('preview-cost').textContent = `$${cost.toFixed(0)}`;
|
|
@@ -147,7 +158,7 @@ window.execute = async function(type, event) {
|
|
| 147 |
spawnFeedback(`+1 ${part} added to order`, event.clientX, event.clientY);
|
| 148 |
actionObj.part_type = part;
|
| 149 |
actionObj.mode = document.getElementById('mode-select').value;
|
| 150 |
-
actionObj.quantity = 1;
|
| 151 |
} else if (type === 'produce') {
|
| 152 |
actionObj.product = document.getElementById('product-select').value;
|
| 153 |
} else if (type === 'offset') {
|
|
|
|
| 62 |
document.getElementById('chips-count').textContent = data.inventory.chips;
|
| 63 |
document.getElementById('sensors-count').textContent = data.inventory.sensors;
|
| 64 |
|
| 65 |
+
// Update Cart with Grouping & Relative Time
|
| 66 |
const cartContainer = document.getElementById('cart-container');
|
| 67 |
if (data.active_shipments && data.active_shipments.length > 0) {
|
| 68 |
+
// Group by part and eta
|
| 69 |
+
const grouped = data.active_shipments.reduce((acc, ship) => {
|
| 70 |
+
const key = `${ship.part}-${ship.eta}`;
|
| 71 |
+
if (!acc[key]) {
|
| 72 |
+
acc[key] = { ...ship };
|
| 73 |
+
} else {
|
| 74 |
+
acc[key].quantity += ship.quantity;
|
| 75 |
+
}
|
| 76 |
+
return acc;
|
| 77 |
+
}, {});
|
| 78 |
+
|
| 79 |
+
cartContainer.innerHTML = Object.values(grouped).map(ship => `
|
| 80 |
<div class="cart-item">
|
| 81 |
<div class="cart-type">${ship.part} (x${ship.quantity})</div>
|
| 82 |
<div class="cart-meta">Mode: ${ship.mode.toUpperCase()}</div>
|
| 83 |
+
<div class="arrival-day">Arrives in: ${ship.eta} days</div>
|
| 84 |
</div>
|
| 85 |
`).join('');
|
| 86 |
} else {
|
|
|
|
| 121 |
function updatePreview() {
|
| 122 |
const mode = modeSelect.value;
|
| 123 |
const s = SPECS[mode];
|
| 124 |
+
const cost = 10 * 1 * s.cost;
|
| 125 |
const carbon = 1 * s.carbon;
|
| 126 |
|
| 127 |
document.getElementById('preview-cost').textContent = `$${cost.toFixed(0)}`;
|
|
|
|
| 158 |
spawnFeedback(`+1 ${part} added to order`, event.clientX, event.clientY);
|
| 159 |
actionObj.part_type = part;
|
| 160 |
actionObj.mode = document.getElementById('mode-select').value;
|
| 161 |
+
actionObj.quantity = 1;
|
| 162 |
} else if (type === 'produce') {
|
| 163 |
actionObj.product = document.getElementById('product-select').value;
|
| 164 |
} else if (type === 'offset') {
|