lokesh341 commited on
Commit
ca7c265
·
verified ·
1 Parent(s): 98080e7

Update static/script.js

Browse files
Files changed (1) hide show
  1. static/script.js +81 -59
static/script.js CHANGED
@@ -100,12 +100,12 @@ function updateSelectionBox() {
100
 
101
  const textInput = document.createElement('input');
102
  textInput.type = 'text';
103
- textInput.placeholder = 'Add Menu_Item__c or Sector_Detail__c item...';
104
  textInput.className = 'manual-input';
105
  textInput.addEventListener('keypress', (e) => {
106
  if (e.key === 'Enter' && textInput.value.trim()) {
107
  const itemName = textInput.value.trim();
108
- fetchMenuItemDetails(itemName); // Try Menu_Item__c first
109
  textInput.value = '';
110
  }
111
  });
@@ -143,7 +143,7 @@ function handleResponse(userInput) {
143
  } else {
144
  botResponse = `Looking up details for "${userInput}"...`;
145
  addMessage('bot', botResponse);
146
- fetchMenuItemDetails(userInput); // Try Menu_Item__c
147
  return;
148
  }
149
 
@@ -163,9 +163,9 @@ function fetchMenuItems(dietaryPreference) {
163
  } else if (data.menu_items.length > 0) {
164
  displayItemsList(data.menu_items, 'menuItemsList', true);
165
  } else {
166
- addMessage('bot', `No ${dietaryPreference} items found in Sector_Detail__c. Try searching for something like "paneer" or "chicken"!`);
167
  }
168
- console.log(`Fetched items from Sector_Detail__c for ${dietaryPreference}:`, data.menu_items);
169
  })
170
  .catch(error => {
171
  addMessage('bot', `Yikes! Couldn’t reach Salesforce: ${error.message}. I’ll retry in a sec...`);
@@ -184,10 +184,10 @@ function suggestItems(searchTerm) {
184
  if (data.error) {
185
  addMessage('bot', `Couldn’t find anything for "${searchTerm}": ${data.error}. Got another idea?`);
186
  } else if (data.suggestions.length > 0) {
187
- addMessage('bot', `Check out these suggestions for "${searchTerm}" from Salesforce:`);
188
  displayItemsList(data.suggestions, 'suggestionsList', false);
189
  } else {
190
- addMessage('bot', `No matches for "${searchTerm}" in Salesforce. Try "chicken" or "paneer"?`);
191
  }
192
  console.log(`Suggestions for ${searchTerm}:`, data.suggestions);
193
  })
@@ -197,7 +197,8 @@ function suggestItems(searchTerm) {
197
  });
198
  }
199
 
200
- function fetchMenuItemDetails(itemName) {
 
201
  fetch('/get_menu_item_details', {
202
  method: 'POST',
203
  headers: { 'Content-Type': 'application/json' },
@@ -210,20 +211,13 @@ function fetchMenuItemDetails(itemName) {
210
  fetchSectorItemDetails(itemName);
211
  } else {
212
  const details = data.item_details;
213
- if (selectedItems.some(item => item.name === details.name)) {
214
- addMessage('bot', `"${details.name}" is already in your selection!`);
215
- } else {
216
- details.source = 'Menu_Item__c';
217
- selectedItems.push(details);
218
- addMessage('bot', `Added "${details.name}" to your selection! Check the box below.`);
219
- updateSelectionBox();
220
- showDescriptionPopup(details); // Show detailed popup
221
- }
222
  }
223
  })
224
  .catch(error => {
225
- addMessage('bot', `Trouble fetching "${itemName}": ${error.message}. I’ll retry...`);
226
- setTimeout(() => fetchMenuItemDetails(itemName), 2000);
227
  });
228
  }
229
 
@@ -236,17 +230,11 @@ function fetchSectorItemDetails(itemName) {
236
  .then(response => response.json())
237
  .then(data => {
238
  if (data.error) {
239
- addMessage('bot', `Sorry, I couldn’t find "${itemName}" in Salesforce. Try another item!`);
240
  } else {
241
  const details = data.item_details;
242
- if (selectedItems.some(item => item.name === details.name)) {
243
- addMessage('bot', `"${details.name}" is already in your selection!`);
244
- } else {
245
- details.source = 'Sector_Detail__c';
246
- selectedItems.push(details);
247
- addMessage('bot', `Added "${details.name}" to your selection with image! Check the box below.`);
248
- updateSelectionBox();
249
- }
250
  }
251
  })
252
  .catch(error => {
@@ -279,30 +267,26 @@ function showDescriptionPopup(item) {
279
  desc.textContent = item.description;
280
  content.appendChild(desc);
281
 
282
- // Display additional Menu_Item__c fields if available
283
  if (item.source === 'Menu_Item__c') {
284
- const detailsList = document.createElement('ul');
285
- detailsList.style.listStyleType = 'none';
286
- detailsList.style.padding = '0';
287
-
288
  const fields = [
 
 
289
  { label: 'Ingredients', value: item.ingredients },
290
  { label: 'Nutritional Info', value: item.nutritional_info },
291
- { label: 'Price', value: `$${item.price.toFixed(2)}` },
292
  { label: 'Sector', value: item.sector },
293
- { label: 'Spice Level', value: item.spice_levels },
294
- { label: 'Veg/Non-Veg', value: item.veg_nonveg },
295
- { label: 'Category', value: item.category },
296
  { label: 'Dynamic Dish', value: item.dynamic_dish ? 'Yes' : 'No' }
297
  ];
298
 
299
  fields.forEach(field => {
300
- const li = document.createElement('li');
301
- li.innerHTML = `<strong>${field.label}:</strong> ${field.value}`;
302
- detailsList.appendChild(li);
 
 
 
303
  });
304
-
305
- content.appendChild(detailsList);
306
  }
307
 
308
  const buttonContainer = document.createElement('div');
@@ -312,11 +296,27 @@ function showDescriptionPopup(item) {
312
  addButton.textContent = 'Add';
313
  addButton.className = 'popup-add-button';
314
  addButton.onclick = () => {
315
- if (selectedItems.some(existing => existing.name === item.name)) {
316
- addMessage('bot', `"${item.name}" is already in your selection!`);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
317
  } else {
318
- selectedItems.push(item);
319
- addMessage('bot', `Added "${item.name}" to your selection! Check the box below.`);
320
  updateSelectionBox();
321
  }
322
  popup.remove();
@@ -334,7 +334,7 @@ function showDescriptionPopup(item) {
334
  document.body.appendChild(popup);
335
  }
336
 
337
- function displayItemsList(items, containerId, isSectorDetail = false) {
338
  const container = document.getElementById(containerId);
339
  if (!container) {
340
  console.error(`${containerId} container not found!`);
@@ -359,17 +359,33 @@ function displayItemsList(items, containerId, isSectorDetail = false) {
359
  nameDiv.className = 'ingredient-name';
360
  itemDiv.appendChild(nameDiv);
361
 
362
- const actionButton = document.createElement('button');
363
- actionButton.textContent = isSectorDetail ? 'Show Description' : 'Add';
364
- actionButton.className = isSectorDetail ? 'show-desc-button' : 'add-button';
365
- actionButton.onclick = () => {
366
- if (isSectorDetail) {
367
- showDescriptionPopup(item);
368
- } else {
369
- fetchMenuItemDetails(item.name);
370
- }
371
- };
372
- itemDiv.appendChild(actionButton);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
 
374
  container.appendChild(itemDiv);
375
  });
@@ -415,10 +431,16 @@ function submitToSalesforce() {
415
  return;
416
  }
417
 
 
 
 
 
 
 
418
  fetch('/submit_items', {
419
  method: 'POST',
420
  headers: { 'Content-Type': 'application/json' },
421
- body: JSON.stringify({ items: selectedItems })
422
  })
423
  .then(response => response.json())
424
  .then(data => {
 
100
 
101
  const textInput = document.createElement('input');
102
  textInput.type = 'text';
103
+ textInput.placeholder = 'Add item (Sector_Detail__c or Menu_Item__c)...';
104
  textInput.className = 'manual-input';
105
  textInput.addEventListener('keypress', (e) => {
106
  if (e.key === 'Enter' && textInput.value.trim()) {
107
  const itemName = textInput.value.trim();
108
+ fetchSectorOrMenuItemDetails(itemName);
109
  textInput.value = '';
110
  }
111
  });
 
143
  } else {
144
  botResponse = `Looking up details for "${userInput}"...`;
145
  addMessage('bot', botResponse);
146
+ fetchSectorOrMenuItemDetails(userInput);
147
  return;
148
  }
149
 
 
163
  } else if (data.menu_items.length > 0) {
164
  displayItemsList(data.menu_items, 'menuItemsList', true);
165
  } else {
166
+ addMessage('bot', `No ${dietaryPreference} items found. Try searching for something like "paneer" or "chicken"!`);
167
  }
168
+ console.log(`Fetched items for ${dietaryPreference}:`, data.menu_items);
169
  })
170
  .catch(error => {
171
  addMessage('bot', `Yikes! Couldn’t reach Salesforce: ${error.message}. I’ll retry in a sec...`);
 
184
  if (data.error) {
185
  addMessage('bot', `Couldn’t find anything for "${searchTerm}": ${data.error}. Got another idea?`);
186
  } else if (data.suggestions.length > 0) {
187
+ addMessage('bot', `Check out these suggestions for "${searchTerm}" from Ingredient_Object__c:`);
188
  displayItemsList(data.suggestions, 'suggestionsList', false);
189
  } else {
190
+ addMessage('bot', `No matches for "${searchTerm}" in Ingredient_Object__c. Try "chicken" or "paneer"?`);
191
  }
192
  console.log(`Suggestions for ${searchTerm}:`, data.suggestions);
193
  })
 
197
  });
198
  }
199
 
200
+ function fetchSectorOrMenuItemDetails(itemName) {
201
+ // Try Menu_Item__c first
202
  fetch('/get_menu_item_details', {
203
  method: 'POST',
204
  headers: { 'Content-Type': 'application/json' },
 
211
  fetchSectorItemDetails(itemName);
212
  } else {
213
  const details = data.item_details;
214
+ addMessage('bot', `Found "${details.name}" in Menu_Item__c!`);
215
+ showDescriptionPopup(details);
 
 
 
 
 
 
 
216
  }
217
  })
218
  .catch(error => {
219
+ addMessage('bot', `Trouble fetching "${itemName}": ${error.message}. Trying Sector_Detail__c...`);
220
+ fetchSectorItemDetails(itemName);
221
  });
222
  }
223
 
 
230
  .then(response => response.json())
231
  .then(data => {
232
  if (data.error) {
233
+ addMessage('bot', `Sorry, I couldn’t find "${itemName}" in Menu_Item__c or Sector_Detail__c. Try another item!`);
234
  } else {
235
  const details = data.item_details;
236
+ addMessage('bot', `Found "${details.name}" in Sector_Detail__c!`);
237
+ showDescriptionPopup(details);
 
 
 
 
 
 
238
  }
239
  })
240
  .catch(error => {
 
267
  desc.textContent = item.description;
268
  content.appendChild(desc);
269
 
 
270
  if (item.source === 'Menu_Item__c') {
 
 
 
 
271
  const fields = [
272
+ { label: 'Category', value: item.category },
273
+ { label: 'Veg/Non-Veg', value: item.veg_nonveg },
274
  { label: 'Ingredients', value: item.ingredients },
275
  { label: 'Nutritional Info', value: item.nutritional_info },
276
+ { label: 'Price', value: item.price ? `$${item.price.toFixed(2)}` : 'N/A' },
277
  { label: 'Sector', value: item.sector },
278
+ { label: 'Spice Levels', value: item.spice_levels },
 
 
279
  { label: 'Dynamic Dish', value: item.dynamic_dish ? 'Yes' : 'No' }
280
  ];
281
 
282
  fields.forEach(field => {
283
+ if (field.value) {
284
+ const p = document.createElement('p');
285
+ p.className = 'menu-item-field';
286
+ p.innerHTML = `<strong>${field.label}:</strong> ${field.value}`;
287
+ content.appendChild(p);
288
+ }
289
  });
 
 
290
  }
291
 
292
  const buttonContainer = document.createElement('div');
 
296
  addButton.textContent = 'Add';
297
  addButton.className = 'popup-add-button';
298
  addButton.onclick = () => {
299
+ const selectedItem = {
300
+ name: item.name,
301
+ image_url: item.image_url || '',
302
+ category: item.category || 'Unknown',
303
+ description: item.description || 'No description available',
304
+ source: item.source
305
+ };
306
+ if (item.source === 'Menu_Item__c') {
307
+ selectedItem.ingredients = item.ingredients;
308
+ selectedItem.nutritional_info = item.nutritional_info;
309
+ selectedItem.price = item.price;
310
+ selectedItem.sector = item.sector;
311
+ selectedItem.spice_levels = item.spice_levels;
312
+ selectedItem.veg_nonveg = item.veg_nonveg;
313
+ selectedItem.dynamic_dish = item.dynamic_dish;
314
+ }
315
+ if (selectedItems.some(existing => existing.name === selectedItem.name)) {
316
+ addMessage('bot', `"${selectedItem.name}" is already in your selection!`);
317
  } else {
318
+ selectedItems.push(selectedItem);
319
+ addMessage('bot', `Added "${selectedItem.name}" to your selection! Check the box below.`);
320
  updateSelectionBox();
321
  }
322
  popup.remove();
 
334
  document.body.appendChild(popup);
335
  }
336
 
337
+ function displayItemsList(items, containerId, isDetailed = false) {
338
  const container = document.getElementById(containerId);
339
  if (!container) {
340
  console.error(`${containerId} container not found!`);
 
359
  nameDiv.className = 'ingredient-name';
360
  itemDiv.appendChild(nameDiv);
361
 
362
+ if (isDetailed) {
363
+ const showDescButton = document.createElement('button');
364
+ showDescButton.textContent = 'Show Details';
365
+ showDescButton.className = 'show-desc-button';
366
+ showDescButton.onclick = () => showDescriptionPopup(item);
367
+ itemDiv.appendChild(showDescButton);
368
+ } else {
369
+ const addButton = document.createElement('button');
370
+ addButton.textContent = 'Add';
371
+ addButton.onclick = () => {
372
+ const selectedItem = {
373
+ name: item.name,
374
+ image_url: item.image_url || '',
375
+ category: item.category || 'Unknown',
376
+ description: item.description || 'No description available',
377
+ source: item.source || 'Unknown'
378
+ };
379
+ if (selectedItems.some(existing => existing.name === selectedItem.name)) {
380
+ addMessage('bot', `"${selectedItem.name}" is already in your selection!`);
381
+ } else {
382
+ selectedItems.push(selectedItem);
383
+ addMessage('bot', `Added "${selectedItem.name}" to your selection!`);
384
+ updateSelectionBox();
385
+ }
386
+ };
387
+ itemDiv.appendChild(addButton);
388
+ }
389
 
390
  container.appendChild(itemDiv);
391
  });
 
431
  return;
432
  }
433
 
434
+ const itemsToSubmit = selectedItems.map(item => ({
435
+ name: item.name,
436
+ category: item.category || 'Unknown',
437
+ description: item.description || 'No description available'
438
+ }));
439
+
440
  fetch('/submit_items', {
441
  method: 'POST',
442
  headers: { 'Content-Type': 'application/json' },
443
+ body: JSON.stringify({ items: itemsToSubmit })
444
  })
445
  .then(response => response.json())
446
  .then(data => {