Food_Order / app.py
neerajkalyank's picture
Update app.py
0453c5c verified
raw
history blame
4.43 kB
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!")