Spaces:
Sleeping
Sleeping
File size: 4,290 Bytes
ba4dd53 807b0c3 ba4dd53 807b0c3 ba4dd53 807b0c3 37e70db ba4dd53 807b0c3 37e70db 807b0c3 37e70db 807b0c3 37e70db 807b0c3 d9fe1ff ba4dd53 7b360d9 c6f513e 807b0c3 c6f513e 807b0c3 7b360d9 37e70db 807b0c3 37e70db c6f513e 807b0c3 0d58d8b 6b86d43 4b578a2 6b86d43 807b0c3 6b86d43 4b578a2 d9fe1ff 6b86d43 4b578a2 807b0c3 4b578a2 37e70db 001b11b 6b86d43 807b0c3 d9fe1ff 807b0c3 001b11b d9fe1ff 6b86d43 37e70db 807b0c3 4b578a2 807b0c3 4b578a2 807b0c3 4b578a2 807b0c3 4b578a2 001b11b 807b0c3 d9fe1ff 6b86d43 4b578a2 37e70db f690d7c 6b86d43 d9fe1ff 6b86d43 4b578a2 6b86d43 4b578a2 7980609 37e70db 7980609 06b4e04 7980609 6b86d43 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
import gradio as gr
import pandas as pd
# Function to load menu data
def load_menu():
try:
return pd.read_excel("menu.xlsx")
except Exception as e:
raise ValueError(f"Error loading menu file: {e}")
# Generate the menu content
def filter_menu(preference):
menu_data = load_menu()
# Filter logic remains the same
# Generating menu HTML
html_content = ""
for _, item in menu_data.iterrows():
html_content += f"""
<div class="menu-item">
<div class="menu-details">
<h3>{item['Dish Name']}</h3>
<p>{item['Description']}</p>
<p><strong>${item['Price ($)']}</strong></p>
</div>
<div class="menu-actions">
<img src="{item['Image URL']}" alt="{item['Dish Name']}" class="menu-img">
<button class="add-button" onclick="showModal('{item['Dish Name']}')">Add</button>
</div>
</div>
"""
return html_content
# Get dish details for the modal
def get_dish_details(dish_name):
menu_data = load_menu()
try:
dish = menu_data[menu_data["Dish Name"] == dish_name].iloc[0]
return (
dish["Image URL"],
dish["Dish Name"],
dish["Description"],
f"${dish['Price ($)']}"
)
except IndexError:
raise ValueError(f"Dish '{dish_name}' not found!")
# Gradio App
def app():
with gr.Blocks(css="style.css") as demo:
# Menu Filtering Section
preference_selector = gr.Radio(
choices=["All", "Vegetarian", "Halal/Non-Veg", "Guilt-Free"],
value="All",
label="Filter Menu"
)
menu_output = gr.HTML(value=filter_menu("All"))
# Modal Window (initially hidden)
modal = gr.Column(visible=False, elem_classes=["modal"])
modal_image = gr.Image(label="Dish Image")
modal_name = gr.Markdown()
modal_description = gr.Markdown()
modal_price = gr.Markdown()
spice_level = gr.Radio(choices=["Mild", "Medium", "Spicy"], label="Choose Spice Level")
extras = gr.CheckboxGroup(choices=["Extra Raita", "Extra Salan", "Extra Fried Onion"], label="Choose Extras")
quantity = gr.Number(value=1, label="Quantity", interactive=True)
special_instructions = gr.Textbox(label="Special Instructions", placeholder="Add any requests...")
add_to_cart_button = gr.Button("Add to Cart")
close_modal_button = gr.Button("Close")
# Cart Section
cart_state = gr.State([])
cart_output = gr.HTML(value="Your cart is empty.")
# Handlers
def show_modal(dish_name):
img, name, desc, price = get_dish_details(dish_name)
return (
gr.update(visible=True),
img,
f"### {name}",
desc,
price
)
def close_modal():
return gr.update(visible=False)
def add_to_cart(name, spice, extras, qty, instructions, cart):
cart.append({
"name": name,
"spice_level": spice,
"extras": extras,
"quantity": qty,
"instructions": instructions
})
cart_html = "<br>".join(
[f"{item['quantity']}x {item['name']} ({item['spice_level']})" for item in cart]
)
return cart, cart_html
# Events
preference_selector.change(filter_menu, inputs=[preference_selector], outputs=[menu_output])
close_modal_button.click(close_modal, outputs=[modal])
add_to_cart_button.click(add_to_cart, inputs=[modal_name, spice_level, extras, quantity, special_instructions, cart_state], outputs=[cart_state, cart_output])
# Layout
with gr.Row():
menu_output
with modal:
modal_image
modal_name
modal_description
modal_price
spice_level
extras
quantity
special_instructions
add_to_cart_button
close_modal_button
with gr.Row():
cart_output
return demo
if __name__ == "__main__":
app().launch()
|