nagasurendra commited on
Commit
dcf3813
·
verified ·
1 Parent(s): 45bc2f8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +118 -35
app.py CHANGED
@@ -79,31 +79,9 @@ def update_cart():
79
  cart_html += f"</ul><p><strong>Total Bill: ${total_bill:.2f}</strong></p>"
80
  return cart_html
81
 
82
- # Function to submit the cart and display on a new page
83
- def submit_cart():
84
- if len(cart_items) == 0:
85
- return "<h3>Your Order</h3><p>Your cart is empty.</p>"
86
-
87
- total_bill = 0
88
- order_html = "<h3>Your Order</h3><ul style='list-style-type: none; padding: 0;'>"
89
- for item in cart_items:
90
- extras = ", ".join(item.get("extras", []))
91
- extras_cost = sum(EXTRAS_PRICES.get(extra, 0) for extra in item.get("extras", []))
92
- item_price = float(item['price'].strip('$'))
93
- item_total = (item_price + extras_cost) * item['quantity']
94
- total_bill += item_total
95
-
96
- order_html += f"<li style='margin-bottom: 20px; border: 1px solid #ddd; padding: 10px; border-radius: 8px;'>"
97
- order_html += f"<strong>Item:</strong> {item['name']} - ${item_price:.2f}<br>"
98
- order_html += f"<strong>Quantity x Price:</strong> {item['quantity']} x ${item_price:.2f} = ${item_price * item['quantity']:.2f}<br>"
99
- order_html += f"<strong>Spice Level:</strong> {item['spiceLevel']}<br>"
100
- order_html += f"<strong>Extras:</strong> {extras} - ${extras_cost:.2f}<br>"
101
- order_html += f"<strong>Instructions:</strong> {item['instructions']}<br>"
102
- order_html += f"<strong>Item Total:</strong> ${item_total:.2f}"
103
- order_html += "</li>"
104
-
105
- order_html += f"</ul><p><strong>Total Bill: ${total_bill:.2f}</strong></p>"
106
- return order_html
107
 
108
  # Gradio app definition
109
  def app():
@@ -121,23 +99,128 @@ def app():
121
  menu_output = gr.HTML(value=filter_menu("All"))
122
 
123
  # Floating cart display
124
- cart_output = gr.HTML(value=update_cart(), elem_id="floating-cart")
125
-
126
- # Submit button for the cart
127
- submit_button = gr.Button("Submit Order")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
- # Output for the new page (order details)
130
- order_output = gr.HTML()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
 
132
- # Submit button action to display the order details on a new page
133
- submit_button.click(fn=submit_cart, inputs=[], outputs=order_output)
134
 
135
  # Layout
136
  gr.Row([selected_preference])
137
  gr.Row(menu_output)
138
  gr.Row(cart_output)
139
- gr.Row([submit_button])
140
- gr.Row(order_output)
141
 
142
  return demo
143
 
 
79
  cart_html += f"</ul><p><strong>Total Bill: ${total_bill:.2f}</strong></p>"
80
  return cart_html
81
 
82
+ # Redirect to cart details page
83
+ def redirect_to_cart():
84
+ return update_cart()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
 
86
  # Gradio app definition
87
  def app():
 
99
  menu_output = gr.HTML(value=filter_menu("All"))
100
 
101
  # Floating cart display
102
+ cart_output = gr.HTML(value="Your cart is empty.", elem_id="floating-cart")
103
+
104
+ # JavaScript for modal and cart behavior
105
+ modal_and_cart_js = """
106
+ <script>
107
+ let cart = [];
108
+ const extrasPrices = {
109
+ "Extra Raitha 4oz": 1,
110
+ "Extra Raitha 8oz": 2,
111
+ "Extra Salan 4oz": 1,
112
+ "Extra Salan 8oz": 2,
113
+ "Extra Onion": 1,
114
+ "Extra Onion & Lemon": 2,
115
+ "Extra Fried Onion 4oz": 2
116
+ };
117
+
118
+ function openModal(name, image, description, price) {
119
+ document.getElementById('modal').style.display = 'block';
120
+ document.getElementById('modal-image').src = image;
121
+ document.getElementById('modal-name').innerText = name;
122
+ document.getElementById('modal-description').innerText = description;
123
+ document.getElementById('modal-price').innerText = price;
124
+
125
+ // Reset spice levels and extras
126
+ const spiceLevelInputs = document.querySelectorAll('input[name="spice-level"]');
127
+ spiceLevelInputs.forEach(input => input.checked = false);
128
+
129
+ const extrasInputs = document.querySelectorAll('input[name="biryani-extra"]');
130
+ extrasInputs.forEach(input => input.checked = false);
131
+
132
+ document.getElementById('quantity').value = 1;
133
+ document.getElementById('special-instructions').value = '';
134
+ }
135
+
136
+ function closeModal() {
137
+ document.getElementById('modal').style.display = 'none';
138
+ }
139
+
140
+ function addToCart() {
141
+ const name = document.getElementById('modal-name').innerText;
142
+ const price = document.getElementById('modal-price').innerText;
143
+ const spiceLevel = document.querySelector('input[name="spice-level"]:checked')?.value || "Not Selected";
144
+ const quantity = parseInt(document.getElementById('quantity').value) || 1;
145
+ const instructions = document.getElementById('special-instructions').value;
146
+ const extras = Array.from(document.querySelectorAll('input[name="biryani-extra"]:checked')).map(extra => extra.value);
147
+
148
+ const extrasCost = extras.reduce((sum, extra) => sum + (extrasPrices[extra] || 0), 0);
149
+ const itemTotal = (parseFloat(price.replace('$', '')) + extrasCost) * quantity;
150
+
151
+ const cartItem = { name, price, spiceLevel, quantity, instructions, extras, itemTotal };
152
+ cart.push(cartItem);
153
+
154
+ alert(`${name} added to cart!`);
155
+ updateCartDisplay();
156
+ closeModal();
157
+ }
158
+
159
+ function updateCartDisplay() {
160
+ let totalBill = 0;
161
+ let cartHTML = "<h3>Your Cart:</h3><ul>";
162
+ cart.forEach(item => {
163
+ totalBill += item.itemTotal;
164
+ const extras = item.extras.join(', ');
165
+ cartHTML += `<li>${item.name} (x${item.quantity}, Spice: ${item.spiceLevel}, Extras: ${extras}, Instructions: ${item.instructions}) - $${item.itemTotal.toFixed(2)}</li>`;
166
+ });
167
+ cartHTML += `</ul><p><strong>Total Bill: $${totalBill.toFixed(2)}</strong></p>`;
168
+ document.getElementById('floating-cart').innerHTML = cartHTML;
169
+ }
170
+ </script>
171
+ """
172
 
173
+ # Modal window
174
+ modal_window = gr.HTML("""
175
+ <div id="modal" style="display: none; position: fixed; top: 40%; left: 50%; transform: translate(-50%, -40%); width: 50%; background: white; border-radius: 8px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); padding: 20px; z-index: 1000;">
176
+ <div style="text-align: right;">
177
+ <button onclick="closeModal()" style="background: none; border: none; font-size: 18px; cursor: pointer;">&times;</button>
178
+ </div>
179
+ <img id="modal-image" style="width: 100%; height: auto; border-radius: 8px; margin-bottom: 20px;" />
180
+ <h2 id="modal-name"></h2>
181
+ <p id="modal-description"></p>
182
+ <p id="modal-price"></p>
183
+ <!-- Spice Levels -->
184
+ <label for="spice-level">Choose a Spice Level (Required):</label>
185
+ <div id="spice-level-options" style="display: flex; flex-wrap: wrap; gap: 10px; margin: 10px 0;">
186
+ <label><input type="radio" name="spice-level" value="American Mild" /> American Mild</label>
187
+ <label><input type="radio" name="spice-level" value="American Medium" /> American Medium</label>
188
+ <label><input type="radio" name="spice-level" value="American Spicy" /> American Spicy</label>
189
+ <label><input type="radio" name="spice-level" value="Indian Mild" /> Indian Mild</label>
190
+ <label><input type="radio" name="spice-level" value="Indian Medium" /> Indian Medium</label>
191
+ <label><input type="radio" name="spice-level" value="Indian Very Spicy" /> Indian Very Spicy</label>
192
+ </div>
193
+ <!-- Biryani Extras -->
194
+ <label for="biryani-extras">Biryani Extras (Optional - Choose as many as you like):</label>
195
+ <div id="biryani-extras-options" style="display: flex; flex-wrap: wrap; gap: 10px; margin: 10px 0;">
196
+ <label><input type="checkbox" name="biryani-extra" value="Extra Raitha 4oz" /> Extra Raitha 4oz + $1.00</label>
197
+ <label><input type="checkbox" name="biryani-extra" value="Extra Raitha 8oz" /> Extra Raitha 8oz + $2.00</label>
198
+ <label><input type="checkbox" name="biryani-extra" value="Extra Salan 4oz" /> Extra Salan 4oz + $1.00</label>
199
+ <label><input type="checkbox" name="biryani-extra" value="Extra Salan 8oz" /> Extra Salan 8oz + $2.00</label>
200
+ <label><input type="checkbox" name="biryani-extra" value="Extra Onion" /> Extra Onion + $1.00</label>
201
+ <label><input type="checkbox" name="biryani-extra" value="Extra Onion & Lemon" /> Extra Onion & Lemon + $2.00</label>
202
+ <label><input type="checkbox" name="biryani-extra" value="Extra Fried Onion 4oz" /> Extra Fried Onion 4oz + $2.00</label>
203
+ </div>
204
+ <!-- Quantity and Special Instructions -->
205
+ <label for="quantity">Quantity:</label>
206
+ <input type="number" id="quantity" value="1" min="1" style="width: 50px;" />
207
+ <br><br>
208
+ <textarea id="special-instructions" placeholder="Add special instructions here..." style="width: 100%; height: 60px;"></textarea>
209
+ <br><br>
210
+ <!-- Add to Cart Button -->
211
+ <button style="background-color: #28a745; color: white; border: none; padding: 10px 20px; font-size: 14px; border-radius: 5px; cursor: pointer;" onclick="addToCart()">Add to Cart</button>
212
+ </div>
213
+ """)
214
 
215
+ # Interactivity
216
+ selected_preference.change(filter_menu, inputs=[selected_preference], outputs=[menu_output])
217
 
218
  # Layout
219
  gr.Row([selected_preference])
220
  gr.Row(menu_output)
221
  gr.Row(cart_output)
222
+ gr.Row(modal_window)
223
+ gr.HTML(modal_and_cart_js)
224
 
225
  return demo
226