Spaces:
Sleeping
Sleeping
File size: 4,800 Bytes
ba4dd53 37e70db ba4dd53 37e70db ba4dd53 37e70db ba4dd53 37e70db 0d58d8b 37e70db 0d58d8b ba4dd53 0d58d8b ba4dd53 7b360d9 0d58d8b 7b360d9 37e70db f690d7c 0d58d8b f690d7c 0d58d8b ba4dd53 0d58d8b f690d7c 37e70db 0d58d8b 9c7ec1f f690d7c 06b4e04 37e70db f690d7c 0d58d8b f690d7c 7b360d9 f690d7c 7b360d9 0d58d8b 7b360d9 0d58d8b 7b360d9 0d58d8b 37e70db f690d7c 0d58d8b f690d7c d0024b1 37e70db f690d7c d0024b1 9c7ec1f 06b4e04 7980609 37e70db 7980609 06b4e04 7980609 920d44a 013b172 |
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 130 131 132 133 134 |
import gradio as gr
import pandas as pd
# Function to load the menu data from Excel
def load_menu():
menu_file = "menu.xlsx" # Ensure this file exists in the same directory
try:
return pd.read_excel(menu_file)
except Exception as e:
raise ValueError(f"Error loading menu file: {e}")
# Function to filter menu items based on preference
def filter_menu(preference):
menu_data = load_menu()
if preference == "Halal/Non-Veg":
filtered_data = menu_data[menu_data["Ingredients"].str.contains("Chicken|Mutton|Fish|Prawns|Goat", case=False, na=False)]
elif preference == "Vegetarian":
filtered_data = menu_data[~menu_data["Ingredients"].str.contains("Chicken|Mutton|Fish|Prawns|Goat", case=False, na=False)]
elif preference == "Guilt-Free":
filtered_data = menu_data[menu_data["Description"].str.contains(r"Fat: ([0-9]|10)g", case=False, na=False)]
else: # Default to "All"
filtered_data = menu_data
# Generate HTML for the menu
html_content = ""
for _, item in filtered_data.iterrows():
html_content += f"""
<div style="display: flex; align-items: center; border: 1px solid #ddd; border-radius: 8px; padding: 15px; margin-bottom: 10px; box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);">
<div style="flex: 1; margin-right: 15px;">
<h3 style="margin: 0; font-size: 18px;">{item['Dish Name']}</h3>
<p style="margin: 5px 0; font-size: 16px; color: #888;">${item['Price ($)']}</p>
<p style="margin: 5px 0; font-size: 14px; color: #555;">{item['Description']}</p>
</div>
<div style="flex-shrink: 0; text-align: center;">
<img src="{item['Image URL']}" alt="{item['Dish Name']}" style="width: 100px; height: 100px; border-radius: 8px; object-fit: cover; margin-bottom: 10px;">
<button value="{item['Dish Name']}" onclick="selectDish('{item['Dish Name']}')" style="background-color: #28a745; color: white; border: none; padding: 8px 15px; font-size: 14px; border-radius: 5px; cursor: pointer;">Add</button>
</div>
</div>
"""
return html_content
# Function to render dish details for the suggestion page
def render_dish_details(dish_name):
print(f"Dish name received: {dish_name}") # Debugging line
menu_data = load_menu()
try:
dish = menu_data[menu_data["Dish Name"] == dish_name].iloc[0]
return (
dish["Image URL"],
dish_name,
dish["Description"],
f"${dish['Price ($)']}"
)
except IndexError:
raise ValueError(f"Dish '{dish_name}' not found!")
# Gradio app definition
def app():
with gr.Blocks() as demo:
gr.Markdown("## Menu with Dynamic Filters")
selected_dish = gr.State("") # State for the selected dish name
# Menu components
preference_selector = gr.Radio(
choices=["All", "Vegetarian", "Halal/Non-Veg", "Guilt-Free"],
value="All",
label="Choose a Preference"
)
menu_html = gr.HTML(value=filter_menu("All"))
# Suggestion page components
suggestion_page = gr.Column(visible=False)
dish_image = gr.Image(label="Dish Image")
dish_name = gr.Markdown()
dish_description = gr.Markdown()
dish_price = gr.Markdown()
# Functions
def update_menu(preference):
return filter_menu(preference)
def show_suggestion(dish_name):
try:
img, name, desc, price = render_dish_details(dish_name)
return (
gr.update(visible=False),
gr.update(visible=True),
img,
f"## {name}",
desc,
price
)
except ValueError as e:
return (
gr.update(visible=True),
gr.update(visible=False),
"",
f"Error: {str(e)}",
"",
""
)
# Event Handlers
preference_selector.change(
update_menu,
inputs=[preference_selector],
outputs=[menu_html]
)
menu_html.change(
show_suggestion,
inputs=[selected_dish],
outputs=[menu_html, suggestion_page, dish_image, dish_name, dish_description, dish_price]
)
# Layout
with gr.Row():
menu_html
with suggestion_page:
dish_image
dish_name
dish_description
dish_price
return demo
if __name__ == "__main__":
demo = app()
demo.launch()
|