Rammohan0504 commited on
Commit
45dab8c
Β·
verified Β·
1 Parent(s): b866d3a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -40
app.py CHANGED
@@ -50,66 +50,109 @@ spice_options = ["🌢 Mild", "🌢🌢 Medium", "🌢🌢🌢 High"]
50
  portion_options = ["πŸ§† Small", "🍽 Medium", "πŸ› Large"]
51
 
52
  # Function to filter dishes based on category
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  def get_dish_details(dish_name):
54
  if dish_name in dish_data:
55
  main_image = dish_data[dish_name]["main"]
56
- return main_image, dish_name, "Select portion size and spice level below:", gr.update(visible=True)
57
- return None, "Unknown Dish", "No description available.", gr.update(visible=False)
58
 
59
- # Function to display portion size image
60
  def display_portion(dish_name, portion):
61
  if dish_name in dish_data:
62
- return dish_data[dish_name].get(portion.lower(), None)
63
  return None
64
 
65
  # Function to simulate placing an order
66
  def place_order(dish_name, spice_level, portion_size):
67
  return f"βœ… Order Confirmed: '{dish_name}' with {spice_level} spice level and {portion_size} portion size."
68
 
69
- # Gradio App
70
  with gr.Blocks() as demo:
71
- gr.Markdown("# Food Ordering System")
72
 
73
- # Dish selection buttons
 
74
  with gr.Row():
75
- for dish in dish_data.keys():
76
- gr.Button(dish).click(
77
- fn=get_dish_details,
78
- inputs=[gr.Textbox(value=dish, visible=False)],
79
- outputs=[
80
- gr.Image(label="Dish Image"),
81
- gr.Text(label="Dish Name"),
82
- gr.Text(label="Dish Description"),
83
- gr.Row(visible=False),
84
- ],
85
- )
86
-
87
- # Dish details section (simulated modal)
88
- with gr.Row(visible=False) as details_section:
89
- dish_image = gr.Image(label="Dish Image")
90
  with gr.Column():
91
- dish_name = gr.Textbox(label="Dish Name", interactive=False)
92
- dish_description = gr.Textbox(label="Dish Description", interactive=False)
93
  spice_dropdown = gr.Radio(label="Select Spice Level", choices=spice_options, value="🌢 Medium")
94
- portion_dropdown = gr.Radio(label="Select Portion Size", choices=portion_options, value="Medium")
95
  portion_image = gr.Image(label="Portion Size Image")
96
 
97
- # Event: Update portion size image
98
- portion_dropdown.change(
99
- fn=display_portion,
100
- inputs=[dish_name, portion_dropdown],
101
- outputs=portion_image,
102
- )
103
-
104
- # Place Order button
105
  place_order_btn = gr.Button("Place Order")
106
  order_status = gr.Textbox(label="Order Status", interactive=False)
107
 
108
- # Event: Place order
109
- place_order_btn.click(
110
- fn=place_order,
111
- inputs=[dish_name, spice_dropdown, portion_dropdown],
112
- outputs=order_status,
113
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
 
115
- demo.launch()
 
50
  portion_options = ["πŸ§† Small", "🍽 Medium", "πŸ› Large"]
51
 
52
  # Function to filter dishes based on category
53
+ def filter_dishes(category):
54
+ if category == "ALL":
55
+ return menu_data
56
+ return [dish for dish in menu_data if dish["category"] == category]
57
+
58
+ # Function to display dishes with images
59
+ def display_dishes(category):
60
+ filtered_dishes = filter_dishes(category)
61
+ html_content = "<div style='display: flex; flex-wrap: wrap; justify-content: center;'>"
62
+ for dish in filtered_dishes:
63
+ html_content += f"""
64
+ <div style='margin: 10px; text-align: center; cursor: pointer; border: 1px solid #ddd;
65
+ padding: 10px; border-radius: 10px; width: 200px; background-color: #f9f9f9;'
66
+ onclick='selectDish(\"{dish['name']}\")'>
67
+ <img src='{dish['image']}' alt='{dish['name']}'
68
+ style='width: 180px; height: 120px; object-fit: cover; border-radius: 10px;'>
69
+ <h4 style='margin-top: 10px; font-size: 16px; color: #444;'>{dish['name']}</h4>
70
+ </div>
71
+ """
72
+ html_content += "</div>"
73
+ return html_content
74
+
75
+ # Function to fetch details of the selected dish
76
  def get_dish_details(dish_name):
77
  if dish_name in dish_data:
78
  main_image = dish_data[dish_name]["main"]
79
+ return main_image, dish_name, "Select a portion size and spice level below:"
80
+ return "https://via.placeholder.com/300x200", "Unknown Dish", "No description available."
81
 
82
+ # Function to display the portion size image
83
  def display_portion(dish_name, portion):
84
  if dish_name in dish_data:
85
+ return dish_data[dish_name].get(portion, None)
86
  return None
87
 
88
  # Function to simulate placing an order
89
  def place_order(dish_name, spice_level, portion_size):
90
  return f"βœ… Order Confirmed: '{dish_name}' with {spice_level} spice level and {portion_size} portion size."
91
 
92
+ # Main Gradio App
93
  with gr.Blocks() as demo:
94
+ gr.HTML("<h1 style='text-align: center; color: #333;'>πŸ› Biryani Hub Menu πŸ›</h1>")
95
 
96
+ # Buttons for category selection
97
+ gr.Markdown("### Select a Category")
98
  with gr.Row():
99
+ btn_all = gr.Button("ALL")
100
+ btn_vegan = gr.Button("VEGAN")
101
+ btn_halal = gr.Button("HALAL")
102
+
103
+ # Dish display section
104
+ gr.Markdown("### Available Dishes")
105
+ dish_display = gr.HTML(value=display_dishes("ALL"))
106
+
107
+ # Popup for Dish Details
108
+ with gr.Modal("Dish Details") as dish_modal:
109
+ dish_image = gr.Image(label="Dish Image", height=200, width=200)
110
+ dish_name = gr.Textbox(label="Dish Name", interactive=False)
 
 
 
111
  with gr.Column():
 
 
112
  spice_dropdown = gr.Radio(label="Select Spice Level", choices=spice_options, value="🌢 Medium")
113
+ portion_dropdown = gr.Radio(label="Select Portion Size", choices=["small", "medium", "large"], value="medium")
114
  portion_image = gr.Image(label="Portion Size Image")
115
 
116
+ # Place Order Button inside Modal
 
 
 
 
 
 
 
117
  place_order_btn = gr.Button("Place Order")
118
  order_status = gr.Textbox(label="Order Status", interactive=False)
119
 
120
+ # Event: Update dish display for selected category
121
+ def update_dishes(category):
122
+ return gr.update(value=display_dishes(category))
123
+
124
+ btn_all.click(fn=lambda: update_dishes("ALL"), outputs=dish_display)
125
+ btn_vegan.click(fn=lambda: update_dishes("VEGAN"), outputs=dish_display)
126
+ btn_halal.click(fn=lambda: update_dishes("HALAL"), outputs=dish_display)
127
+
128
+ # Event: Show dish details in the modal when a dish is selected
129
+ def show_dish_details(dish_name):
130
+ image, name, description = get_dish_details(dish_name)
131
+ dish_modal.show()
132
+ return image, name, description
133
+
134
+ # Hidden input to receive dish name from JavaScript
135
+ selected_dish_name = gr.Textbox(visible=False)
136
+ selected_dish_name.change(fn=show_dish_details, inputs=selected_dish_name,
137
+ outputs=[dish_image, dish_name, dish_modal])
138
+
139
+ # Event: Display portion size image
140
+ portion_dropdown.change(fn=display_portion, inputs=[selected_dish_name, portion_dropdown], outputs=portion_image)
141
+
142
+ # Event: Place order button
143
+ place_order_btn.click(fn=place_order,
144
+ inputs=[dish_name, spice_dropdown, portion_dropdown],
145
+ outputs=order_status)
146
+
147
+ # Inject JavaScript to handle clicks and pass dish names
148
+ gr.HTML("""
149
+ <script>
150
+ function selectDish(dishName) {
151
+ let input = document.querySelector('input[aria-label="selected_dish_name"]');
152
+ input.value = dishName;
153
+ input.dispatchEvent(new Event('input', { bubbles: true }));
154
+ }
155
+ </script>
156
+ """)
157
 
158
+ demo.launch()