Aryanshh commited on
Commit
6029f5c
·
1 Parent(s): 47e37f8

ux: Add click feedback (+1) and stabilize side-by-side layout

Browse files
Files changed (1) hide show
  1. dashboard/app.js +20 -8
dashboard/app.js CHANGED
@@ -51,7 +51,7 @@ async function updateState() {
51
  if (!response.ok) throw new Error('API Unreachable');
52
  const data = await response.json();
53
 
54
- currentDay = data.step; // Track current step for arrival calculation
55
 
56
  const status = document.getElementById('connection-status');
57
  status.textContent = 'ONLINE';
@@ -62,7 +62,7 @@ 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 (Active Shipments)
66
  const cartContainer = document.getElementById('cart-container');
67
  if (data.active_shipments && data.active_shipments.length > 0) {
68
  cartContainer.innerHTML = data.active_shipments.map(ship => `
@@ -110,8 +110,8 @@ const modeSelect = document.getElementById('mode-select');
110
  function updatePreview() {
111
  const mode = modeSelect.value;
112
  const s = SPECS[mode];
113
- const cost = 10 * 5 * s.cost;
114
- const carbon = 5 * s.carbon;
115
 
116
  document.getElementById('preview-cost').textContent = `$${cost.toFixed(0)}`;
117
  document.getElementById('preview-carbon').textContent = `+${carbon.toFixed(1)}kg CO2`;
@@ -119,6 +119,16 @@ function updatePreview() {
119
 
120
  modeSelect.addEventListener('change', updatePreview);
121
 
 
 
 
 
 
 
 
 
 
 
122
  function log(message, type = 'system') {
123
  const box = document.getElementById('activity-log');
124
  const entry = document.createElement('p');
@@ -128,14 +138,16 @@ function log(message, type = 'system') {
128
  }
129
 
130
  // Global Execute Function
131
- window.execute = async function(type) {
132
  document.querySelector('main').classList.add('transitioning');
133
 
134
  let actionObj = { action_type: type };
135
  if (type === 'order_parts') {
136
- actionObj.part_type = document.getElementById('part-select').value;
 
 
137
  actionObj.mode = document.getElementById('mode-select').value;
138
- actionObj.quantity = 5;
139
  } else if (type === 'produce') {
140
  actionObj.product = document.getElementById('product-select').value;
141
  } else if (type === 'offset') {
@@ -238,7 +250,7 @@ async function triggerSuezJam() {
238
  }
239
  }
240
 
241
- document.getElementById('skip-btn').addEventListener('click', () => window.execute('skip'));
242
  document.getElementById('trigger-btn').addEventListener('click', triggerSuezJam);
243
  document.getElementById('reset-btn').addEventListener('click', manualReset);
244
 
 
51
  if (!response.ok) throw new Error('API Unreachable');
52
  const data = await response.json();
53
 
54
+ currentDay = data.step;
55
 
56
  const status = document.getElementById('connection-status');
57
  status.textContent = 'ONLINE';
 
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
  cartContainer.innerHTML = data.active_shipments.map(ship => `
 
110
  function updatePreview() {
111
  const mode = modeSelect.value;
112
  const s = SPECS[mode];
113
+ const cost = 10 * 1 * s.cost; // Qty 1 now
114
+ const carbon = 1 * s.carbon;
115
 
116
  document.getElementById('preview-cost').textContent = `$${cost.toFixed(0)}`;
117
  document.getElementById('preview-carbon').textContent = `+${carbon.toFixed(1)}kg CO2`;
 
119
 
120
  modeSelect.addEventListener('change', updatePreview);
121
 
122
+ function spawnFeedback(text, x, y) {
123
+ const el = document.createElement('div');
124
+ el.className = 'floating-feedback';
125
+ el.textContent = text;
126
+ el.style.left = `${x}px`;
127
+ el.style.top = `${y}px`;
128
+ document.body.appendChild(el);
129
+ setTimeout(() => el.remove(), 1000);
130
+ }
131
+
132
  function log(message, type = 'system') {
133
  const box = document.getElementById('activity-log');
134
  const entry = document.createElement('p');
 
138
  }
139
 
140
  // Global Execute Function
141
+ window.execute = async function(type, event) {
142
  document.querySelector('main').classList.add('transitioning');
143
 
144
  let actionObj = { action_type: type };
145
  if (type === 'order_parts') {
146
+ const part = document.getElementById('part-select').value;
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; // Change to 1 as requested
151
  } else if (type === 'produce') {
152
  actionObj.product = document.getElementById('product-select').value;
153
  } else if (type === 'offset') {
 
250
  }
251
  }
252
 
253
+ document.getElementById('skip-btn').addEventListener('click', (e) => window.execute('skip', e));
254
  document.getElementById('trigger-btn').addEventListener('click', triggerSuezJam);
255
  document.getElementById('reset-btn').addEventListener('click', manualReset);
256