Spaces:
Sleeping
Sleeping
Update templates/Menu.html
Browse files- templates/Menu.html +63 -29
templates/Menu.html
CHANGED
@@ -212,43 +212,77 @@
|
|
212 |
</div>
|
213 |
|
214 |
<script>
|
|
|
|
|
|
|
215 |
async function fetchMenu() {
|
216 |
try {
|
217 |
-
const response = await fetch('/get_menu');
|
218 |
const menuItems = await response.json();
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
<h3>${item.Name}</h3>
|
230 |
-
<p class="price">$${item.Price__c}</p>
|
231 |
-
<div class="rating">
|
232 |
-
⭐ 4.2 (206)
|
233 |
-
</div>
|
234 |
-
<button class="save-btn">❤️ Save to Eatlist</button>
|
235 |
-
<p class="description">A flavorful dish with fresh ingredients... more</p>
|
236 |
-
</div>
|
237 |
-
<div class="add-container">
|
238 |
-
<img class="menu-img" src="${item.Image1__c}" alt="${item.Name}">
|
239 |
-
<button class="add-btn">ADD</button>
|
240 |
-
<p class="customizable">Customisable</p>
|
241 |
-
</div>
|
242 |
-
`;
|
243 |
-
menuContainer.appendChild(menuItem);
|
244 |
-
});
|
245 |
} catch (error) {
|
246 |
console.error("Error fetching menu:", error);
|
247 |
}
|
248 |
}
|
249 |
|
250 |
-
|
251 |
-
|
|
|
|
|
252 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
</body>
|
254 |
</html>
|
|
|
212 |
</div>
|
213 |
|
214 |
<script>
|
215 |
+
let filteredMenu = [];
|
216 |
+
|
217 |
+
// Fetch menu items from Flask backend
|
218 |
async function fetchMenu() {
|
219 |
try {
|
220 |
+
const response = await fetch('/get_menu'); // Call the Flask API
|
221 |
const menuItems = await response.json();
|
222 |
+
|
223 |
+
// Check if the response is valid
|
224 |
+
if (!Array.isArray(menuItems)) {
|
225 |
+
console.error("Invalid menu data");
|
226 |
+
return;
|
227 |
+
}
|
228 |
+
|
229 |
+
filteredMenu = menuItems; // Save fetched data to filteredMenu
|
230 |
+
displayMenu(filteredMenu); // Display menu items
|
231 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
232 |
} catch (error) {
|
233 |
console.error("Error fetching menu:", error);
|
234 |
}
|
235 |
}
|
236 |
|
237 |
+
// Display menu items on the page
|
238 |
+
function displayMenu(menuItems) {
|
239 |
+
const menuContainer = document.getElementById("menu");
|
240 |
+
menuContainer.innerHTML = '';
|
241 |
|
242 |
+
menuItems.forEach(item => {
|
243 |
+
const menuItem = document.createElement("div");
|
244 |
+
menuItem.classList.add("menu-item");
|
245 |
+
menuItem.innerHTML = `
|
246 |
+
<div class="menu-details">
|
247 |
+
<div class="bestseller">
|
248 |
+
<img src="bestseller-icon.png" alt="Best Seller"> Bestseller
|
249 |
+
</div>
|
250 |
+
<h3>${item.Name}</h3>
|
251 |
+
<p class="price">$${item.Price__c}</p>
|
252 |
+
<div class="rating">
|
253 |
+
⭐ 4.2 (206)
|
254 |
+
</div>
|
255 |
+
<button class="save-btn">❤️ Save to Eatlist</button>
|
256 |
+
<p class="description">${item.Description__c}</p>
|
257 |
+
</div>
|
258 |
+
<div class="add-container">
|
259 |
+
<img class="menu-img" src="${item.Image1__c}" alt="${item.Name}">
|
260 |
+
<button class="add-btn">ADD</button>
|
261 |
+
<p class="customizable">Customisable</p>
|
262 |
+
</div>
|
263 |
+
`;
|
264 |
+
menuContainer.appendChild(menuItem);
|
265 |
+
});
|
266 |
+
}
|
267 |
+
|
268 |
+
// Search for menu items
|
269 |
+
function searchMenu() {
|
270 |
+
const query = document.getElementById("search").value.toLowerCase();
|
271 |
+
const filtered = filteredMenu.filter(item => item.Name.toLowerCase().includes(query));
|
272 |
+
displayMenu(filtered);
|
273 |
+
}
|
274 |
+
|
275 |
+
// Filter menu items by category
|
276 |
+
function filterCategory(category) {
|
277 |
+
const filtered = filteredMenu.filter(item => item.Category__c === category);
|
278 |
+
displayMenu(filtered);
|
279 |
+
}
|
280 |
+
|
281 |
+
// Initialize the menu display when the page loads
|
282 |
+
document.addEventListener("DOMContentLoaded", () => {
|
283 |
+
fetchMenu(); // Fetch menu data from the backend
|
284 |
+
});
|
285 |
+
|
286 |
+
</script>
|
287 |
</body>
|
288 |
</html>
|