Spaces:
Sleeping
Sleeping
File size: 4,428 Bytes
3f07c1a 959e504 b62c794 959e504 b62c794 0453c5c b62c794 0453c5c 5882a0b 959e504 b62c794 959e504 5882a0b 959e504 b62c794 5882a0b b62c794 959e504 5882a0b 959e504 b62c794 5882a0b 959e504 5882a0b 959e504 5882a0b 959e504 b62c794 63060b7 b62c794 5882a0b 0453c5c 5882a0b 0453c5c 5882a0b 0453c5c 5882a0b |
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 |
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!")
|