Rammohan0504 commited on
Commit
1e5aca5
Β·
verified Β·
1 Parent(s): b1725cd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +85 -72
app.py CHANGED
@@ -1,6 +1,4 @@
1
  import gradio as gr
2
- from cart import Cart # Import Cart from cart.py
3
-
4
 
5
  # Menu data
6
  menu_data = [
@@ -22,10 +20,15 @@ menu_data = [
22
  {"name": "Chicken Manchurian", "category": "HALAL", "image": "https://huggingface.co/spaces/Rammohan0504/First-Project/resolve/main/pictures/Chicken_manchurian.jpg", "description": "A popular Indo-Chinese dish featuring fried chicken pieces tossed in a tangy and spicy sauce.", "price": 13.99},
23
  ]
24
 
25
-
26
-
27
- # Initialize the cart
28
- cart = Cart()
 
 
 
 
 
29
 
30
  # Filter dishes by category
31
  def filter_dishes(category):
@@ -33,90 +36,100 @@ def filter_dishes(category):
33
  return menu_data
34
  return [dish for dish in menu_data if dish["category"] == category]
35
 
36
- # Add item to the cart
37
- def add_to_cart(item_name):
38
- item = next((dish for dish in menu_data if dish["name"] == item_name), None)
39
- if item:
40
- message = cart.add_item(item)
41
- return message, cart.view_cart(), f"Total: ${cart.total_price():.2f}"
42
- return "Item not found!", cart.view_cart(), f"Total: ${cart.total_price():.2f}"
43
-
44
- # Generate pop-up content for a selected dish
45
- def generate_popup(dish_name):
46
- item = next((dish for dish in menu_data if dish["name"] == dish_name), None)
47
- if item:
48
- popup_html = f"""
49
- <div style="text-align: center;">
50
- <img src="{item['image']}" alt="{item['name']}" style="width: 300px; height: 200px; object-fit: cover; border-radius: 10px;">
51
- <h2 style="color: #444;">{item['name']}</h2>
52
- <p style="font-size: 16px; color: #666;">{item['description']}</p>
53
- <p style="font-size: 18px; color: #444;">Price: ${item['price']}</p>
 
 
 
54
  </div>
55
  """
56
- return popup_html
57
- return "Dish not found!"
58
 
59
  # Main Gradio App
60
  with gr.Blocks() as demo:
61
- gr.HTML("<h1 style='text-align: center;'>πŸ› Biryani Hub Menu πŸ›</h1>")
62
 
63
- # Category buttons
64
  with gr.Row():
65
  btn_all = gr.Button("ALL")
66
  btn_vegan = gr.Button("VEGAN")
67
  btn_halal = gr.Button("HALAL")
68
 
69
- # Dish display and cart
70
- dish_display = gr.HTML()
71
- popup_display = gr.HTML()
72
- cart_display = gr.HTML("Cart is empty.")
73
- cart_total = gr.Textbox(value="Total: $0.00", interactive=False)
74
 
75
- # Event to update dishes based on category
76
- def display_dishes(category):
77
- filtered_dishes = filter_dishes(category)
78
- html_content = "<div style='display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;'>"
79
- for dish in filtered_dishes:
80
- html_content += f"""
81
- <div style="width: 200px; border: 1px solid #ddd; border-radius: 10px; padding: 10px; text-align: center; background-color: #f9f9f9;">
82
- <img src="{dish['image']}" alt="{dish['name']}" style="width: 100%; height: 150px; object-fit: cover; border-radius: 10px;">
83
- <h4 style="margin: 10px 0; color: #444;">{dish['name']}</h4>
84
- <button onclick="showPopup('{dish['name']}')" style="padding: 10px 20px; background-color: #28a745; color: white; border: none; border-radius: 5px; cursor: pointer;">View</button>
 
 
 
 
 
85
  </div>
86
- """
87
- html_content += "</div>"
88
- return html_content
89
 
90
- # JavaScript for managing the pop-up
91
- gr.HTML("""
 
 
 
 
92
  <script>
93
- function showPopup(dishName) {
94
- fetch("/generate_popup", {
95
- method: "POST",
96
- headers: { "Content-Type": "application/json" },
97
- body: JSON.stringify({ name: dishName })
98
- })
99
- .then(response => response.json())
100
- .then(data => {
101
- document.getElementById("popup").innerHTML = data.html;
102
- document.getElementById("popup").style.display = "block";
103
- });
104
  }
105
  function closePopup() {
106
- document.getElementById("popup").style.display = "none";
 
 
 
 
107
  }
108
  </script>
109
  """)
110
 
111
- # Dish display logic
112
- btn_all.click(lambda: display_dishes("ALL"), outputs=dish_display)
113
- btn_vegan.click(lambda: display_dishes("VEGAN"), outputs=dish_display)
114
- btn_halal.click(lambda: display_dishes("HALAL"), outputs=dish_display)
115
-
116
- # Cart display
117
- gr.Button("View Cart").click(lambda: cart.view_cart(), outputs=cart_display)
118
-
119
- # Placeholder for pop-up
120
- gr.HTML(id="popup", value="", visible=False)
121
-
122
- demo.launch()
 
 
 
 
1
  import gradio as gr
 
 
2
 
3
  # Menu data
4
  menu_data = [
 
20
  {"name": "Chicken Manchurian", "category": "HALAL", "image": "https://huggingface.co/spaces/Rammohan0504/First-Project/resolve/main/pictures/Chicken_manchurian.jpg", "description": "A popular Indo-Chinese dish featuring fried chicken pieces tossed in a tangy and spicy sauce.", "price": 13.99},
21
  ]
22
 
23
+ extras = [
24
+ {"name": "Extra Raitha 4oz", "price": "$1.00"},
25
+ {"name": "Extra Raitha 8oz", "price": "$2.00"},
26
+ {"name": "Extra Salan 4oz", "price": "$1.00"},
27
+ {"name": "Extra Salan 8oz", "price": "$2.00"},
28
+ {"name": "Extra Onion", "price": "$1.00"},
29
+ {"name": "Extra Onion & Lemon", "price": "$2.00"},
30
+ {"name": "Extra Fried Onion 4oz", "price": "$2.00"},
31
+ ]
32
 
33
  # Filter dishes by category
34
  def filter_dishes(category):
 
36
  return menu_data
37
  return [dish for dish in menu_data if dish["category"] == category]
38
 
39
+ # Generate dish cards with "Add" button
40
+ def display_dishes(category):
41
+ filtered_dishes = filter_dishes(category)
42
+ html_content = "<div style='display: flex; flex-direction: column; align-items: center; width: 100%; height:100%'>"
43
+ for dish in filtered_dishes:
44
+ html_content += f"""
45
+ <div style='margin: 10px; display: flex; align-items: center; justify-content: space-between;
46
+ width: 80%; padding: 10px; border: 1px solid #ddd; border-radius: 10px;
47
+ background-color: #f9f9f9;'>
48
+ <div style='flex: 1; margin-right: 20px; text-align: left;'>
49
+ <h4 style='font-size: 18px; color: #444; margin: 0;'>{dish['name']}</h4>
50
+ <p style='font-size: 14px; color: #666; margin: 5px 0;'>{dish['description']}</p>
51
+ <p style='font-size: 16px; color: #444; margin: 0;'>Price: {dish['price']}</p>
52
+ </div>
53
+ <div style='text-align: center;'>
54
+ <img src='{dish['image']}' alt='{dish['name']}'
55
+ style='width: 150px; height: 100px; object-fit: cover; border-radius: 10px;'>
56
+ <button onclick="showPopup('{dish['image']}', '{dish['name']}', '{dish['description']}', '{dish['price']}')"
57
+ style="margin-top: 15px; padding: 10px 20px; background-color: #28a745; color: white; border: none;
58
+ border-radius: 5px; cursor: pointer;">Add</button>
59
+ </div>
60
  </div>
61
  """
62
+ html_content += "</div>"
63
+ return html_content
64
 
65
  # Main Gradio App
66
  with gr.Blocks() as demo:
67
+ gr.HTML("<h1 style='text-align: center; color: #333;'>πŸ› Biryani Hub Menu πŸ›</h1>")
68
 
69
+ # Buttons for category selection
70
  with gr.Row():
71
  btn_all = gr.Button("ALL")
72
  btn_vegan = gr.Button("VEGAN")
73
  btn_halal = gr.Button("HALAL")
74
 
75
+ # Dish display
76
+ dish_display = gr.HTML(value=display_dishes("ALL"))
 
 
 
77
 
78
+ # JavaScript for managing the pop-up
79
+ gr.HTML(f"""
80
+ <div id="popup" style="display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);
81
+ background-color: white; padding: 20px; border-radius: 10px;
82
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); z-index: 1000; text-align: center; width: 500px;">
83
+ <img id="popup-image" src="" alt="" style="width: 100%; height: auto; border-radius: 10px;">
84
+ <h2 id="popup-title" style="margin-top: 20px; color: #444;"></h2>
85
+ <p id="popup-description" style="margin-top: 10px; font-size: 16px; color: #666;"></p>
86
+ <p id="popup-price" style="margin-top: 10px; font-size: 16px; color: #444;"></p>
87
+
88
+
89
+
90
+ <h4 style="text-align: left; margin-top: 20px;">Choose Extras</h4>
91
+ <div style="display: flex; flex-wrap: wrap; justify-content: space-between; border: 1px solid #ddd; padding: 10px; border-radius: 5px;">
92
+ """ + "".join([f'<label style="margin-right: 10px; display: block;"><input type="checkbox" name="extras" value="{extra["name"]}" style="margin-right: 5px;">{extra["name"]} + {extra["price"]}</label>' for extra in extras]) + """
93
  </div>
 
 
 
94
 
95
+ <button onclick="addToCart(document.getElementById('popup-title').textContent, document.querySelector('input[name=spice]:checked').value)"
96
+ style="margin-top: 20px; padding: 10px 20px; background-color: #007bff; color: white; border: none;
97
+ border-radius: 5px; cursor: pointer;">Add to Cart</button>
98
+ <button onclick="closePopup()" style="margin-top: 20px; padding: 10px 20px; background-color: #28a745;
99
+ color: white; border: none; border-radius: 5px; cursor: pointer;">Close</button>
100
+ </div>
101
  <script>
102
+ function showPopup(image, title, description, price) {
103
+ document.getElementById('popup-image').src = image;
104
+ document.getElementById('popup-title').textContent = title;
105
+ document.getElementById('popup-description').textContent = description;
106
+ document.getElementById('popup-price').textContent = "Price: " + price;
107
+
108
+ // Display the popup
109
+ document.getElementById('popup').style.display = 'block';
 
 
 
110
  }
111
  function closePopup() {
112
+ document.getElementById('popup').style.display = 'none';
113
+ }
114
+ function addToCart(dishName, spiceLevel) {
115
+ const selectedExtras = Array.from(document.querySelectorAll('input[name=extras]:checked')).map(cb => cb.value).join(", ");
116
+ alert(dishName + " with " + spiceLevel + " spice level and extras: " + selectedExtras + " has been added to the cart!");
117
  }
118
  </script>
119
  """)
120
 
121
+ # Button click events
122
+ btn_all.click(
123
+ lambda: gr.update(value=display_dishes("ALL")),
124
+ outputs=dish_display
125
+ )
126
+ btn_vegan.click(
127
+ lambda: gr.update(value=display_dishes("VEGAN")),
128
+ outputs=dish_display
129
+ )
130
+ btn_halal.click(
131
+ lambda: gr.update(value=display_dishes("HALAL")),
132
+ outputs=dish_display
133
+ )
134
+
135
+ demo.launch()