Spaces:
Sleeping
Sleeping
import gradio as gr | |
import json | |
# Load menu data | |
def load_menu_data(): | |
try: | |
with open("menu.json", "r") as file: | |
data = json.load(file) | |
return data.get("menu", []) | |
except Exception as e: | |
print(f"Error loading menu: {e}") | |
return [] | |
menu_data = load_menu_data() | |
# Globals | |
current_order = [] | |
preferences = {} | |
# Functions | |
def login_user(name, phone): | |
if len(phone) != 10 or not phone.isdigit(): | |
return gr.update(value="Invalid phone number. Please enter a 10-digit number."), gr.Tabs.update(selected=0) | |
return gr.update(value=f"Welcome, {name}! Please proceed to set your preferences."), gr.Tabs.update(selected=1) | |
def save_preferences(pref_type, allergies): | |
preferences["type"] = pref_type | |
preferences["allergies"] = allergies | |
return gr.update(value="Preferences saved successfully! Proceed to the menu."), gr.Tabs.update(selected=2) | |
def get_filtered_menu(): | |
if not preferences.get("type"): | |
return "Please set preferences first." | |
filtered_menu = [ | |
item for item in menu_data | |
if item["type"] == preferences["type"] or preferences["type"] == "Complete Menu" | |
] | |
return filtered_menu | |
def add_to_order(item_name): | |
current_order.append(item_name) | |
return "\n".join(current_order) | |
def place_order(): | |
if not current_order: | |
return "No items in the order. Please add items to your order before placing it.", gr.Tabs.update(selected=2) | |
return f"Order placed successfully! Items: {', '.join(current_order)}.", gr.Tabs.update(selected=4) | |
# App Interface | |
with gr.Blocks() as app: | |
# Login Screen | |
with gr.Tabs() as tabs: | |
with gr.Tab("Login"): | |
name = gr.Textbox(label="Name", placeholder="Enter your name") | |
phone = gr.Textbox(label="Phone", placeholder="Enter your 10-digit phone number") | |
login_button = gr.Button("Login") | |
login_output = gr.Label() | |
login_button.click( | |
login_user, | |
inputs=[name, phone], | |
outputs=[login_output, tabs] | |
) | |
# Preferences Screen | |
with gr.Tab("Preferences"): | |
pref_type = gr.Radio( | |
["Vegetarian", "Non-Vegetarian", "Complete Menu"], | |
label="Select Preference" | |
) | |
allergies = gr.CheckboxGroup( | |
["Peanuts", "Cheese", "Pork", "Custom"], | |
label="Allergies (if any)" | |
) | |
save_pref_button = gr.Button("Save Preferences") | |
pref_output = gr.Label() | |
save_pref_button.click( | |
save_preferences, | |
inputs=[pref_type, allergies], | |
outputs=[pref_output, tabs] | |
) | |
# Menu Screen | |
with gr.Tab("Menu"): | |
menu_display = gr.Column() | |
current_order_display = gr.Textbox(label="Current Order", interactive=False) | |
proceed_to_summary = gr.Button("Proceed to Order Summary") | |
proceed_to_summary.click( | |
lambda: gr.Tabs.update(selected=3), | |
inputs=None, | |
outputs=[tabs] | |
) | |
def load_menu(): | |
filtered_menu = get_filtered_menu() | |
if not filtered_menu: | |
return [gr.Text("No items available for the selected preferences.")] | |
menu_buttons = [] | |
for item in filtered_menu: | |
button = gr.Button(f"{item['name']} - ₹{item['price']}") | |
button.click( | |
lambda name=item["name"]: add_to_order(name), | |
inputs=None, | |
outputs=current_order_display | |
) | |
menu_buttons.append(button) | |
return menu_buttons | |
menu_display.children = load_menu() | |
# Order Summary Screen | |
with gr.Tab("Order Summary"): | |
order_summary = gr.Textbox(label="Your Order", interactive=False) | |
place_order_button = gr.Button("Place Order") | |
order_output = gr.Label() | |
place_order_button.click( | |
place_order, | |
inputs=None, | |
outputs=[order_output, tabs] | |
) | |
# Thank You Screen | |
with gr.Tab("Thank You"): | |
thank_you_message = gr.Label("Thank you for placing your order!") | |