diff --git a/src/MealBuilder.py b/src/MealBuilder.py index ee6eb5e..d3a0a1c 100644 --- a/src/MealBuilder.py +++ b/src/MealBuilder.py @@ -15,99 +15,128 @@ def is_number(s): except ValueError: return False -def create_ingredient_row(ingredient, details): - row = [] - row.append(ft.TextField(label="Ingredient", value=ingredient)) - row.append(ft.TextField(label="Quantity", value=details['quantity'])) - row.append(ft.TextField(label="Units (optional)", value=details['units'])) - return row def builder(page): - - def update_ingredient(e): - global new_ingredient - new_ingredient = e.control.value - - def update_quantity(e): - global new_quantity - new_quantity = e.control.value + class Meal(): + meal_radios = [] + new_ingredient = "" + new_quantity = "" + new_units = "" - def update_units(e): - global new_units - new_units = e.control.value - - def add_ingredient(e): - global new_ingredient, new_quantity, new_units - - if not new_ingredient or not new_quantity or not is_number(new_quantity): - return - - ingredient = { - new_ingredient: - { - "quantity":float(new_quantity), - "units": new_units if new_units != "" else None - } - } - meal_json[name] = ingredient - update_json(meal_json) - page.update() - - - - page.title = "Create and Edit Meals!" - - meal_list = [] - - for name, ingredients in meal_json.items(): - ingredients_list = [] - for ingredient, details in ingredients.items(): - ingredients_list.append( - ft.Row(create_ingredient_row(ingredient, details), - alignment=ft.MainAxisAlignment.SPACE_EVENLY, - width=300, - height=100, + def __init__(self): + for name in get_meal_names(): + self.meal_radios.append( + ft.Radio(value=name, label=name), + ) + + def get_meal_radios(self): + return ft.RadioGroup( + content=ft.Column( + controls=self.meal_radios, ) ) - ingredients_list.append( - ft.Row( - controls=[ - ft.TextField(label="Ingredient", on_change=update_ingredient), - ft.TextField(label="Quantity", on_change=update_quantity), - ft.TextField(label="Units (optional)", on_change=update_units), - ft.ElevatedButton(text="Update Ingredient", on_click=add_ingredient), - ], - alignment=ft.MainAxisAlignment.SPACE_EVENLY, - width=300, - height=100, - ), - ) - meal_list.append( - ft.Column( - controls=[ - ft.TextField(label="Meal", value=name), - ft.ListView( - controls=ingredients_list, - expand=True, - spacing=10, - padding=10, - auto_scroll=False, - ), - ], - ) - ) - page.add( - ft.ListView( - controls=meal_list, - expand=True, - spacing=10, - padding=10, - ) + def update_ingredient(self, e): + self.new_ingredient = e.control.value + print(self.new_ingredient) + + def update_quantity(self, e): + self.new_quantity = e.control.value + + def update_units(self, e): + self.new_units = e.control.value + + def create_ingredient_row(self, ingredient, details): + row = [] + row.append(ft.TextField(label="Ingredient", value=ingredient, on_change=self.update_ingredient)) + row.append(ft.TextField(label="Quantity", value=details['quantity'], on_change=self.update_quantity)) + row.append(ft.TextField(label="Units (optional)", value=details['units'], on_change=self.update_units)) + return row + + def update_ingredients(self, name): + if not self.new_ingredient or not self.new_quantity or not is_number(self.new_quantity): + return + + ingredient = { + self.new_ingredient: + { + "quantity":float(self.new_quantity), + "units": self.new_units if self.new_units != "" else None + } + } + meal_json[name] = ingredient + update_json(meal_json) + page.update() + + def add_new_meal(self, e): + print("Gonna add something good!") + + def show_meal_details(self, selector_body, page): + expanded_meal = [] + + print(selector_body.controls[0].value) + meal_name = selector_body.controls[0].value + + for details in meal_json[meal_name].items(): + expanded_meal.append( + ft.Row(self.create_ingredient_row(details[0], details[1]), + alignment=ft.MainAxisAlignment.SPACE_EVENLY, + width=300, + height=100, + ) + ) + + selector_body.controls = [ + ft.TextField(label="Meal", value=meal_name), + ft.ListView( + controls=expanded_meal, + expand=True, + spacing=5, + padding=5, + auto_scroll=False, + ), + ft.ElevatedButton(text="Update Meal", on_click=lambda e: self.update_ingredients(selector_body.controls[0].value)), + ft.ElevatedButton(text="Back", on_click=lambda e: self.show_meal_selection(selector_body, page)), + ] + if page.title == "Create and Edit Meals!": + page.title = f"Editing {meal_name}" + page.update() + + return selector_body + + def show_meal_selection(self, selector_body, page): + selector_body.controls = [self.get_meal_radios(), + ft.ElevatedButton(text="Update Meal", on_click=lambda e: self.show_meal_details(selector_body, page)), + ft.ElevatedButton(text="Add Meal", on_click=self.add_new_meal) + ] + + if page.title != "Create and Edit Meals!": + page.title = f"Create and Edit Meals!" + page.update() + + return selector_body + + def get_meal_names(): + return list(meal_json.keys()) + + + + meal = Meal() + page.title = "Create and Edit Meals!" + + selector_body = ft.Column( + controls = [], + height = 500, + expand = False, ) + + + page.add(ft.Container( + content = meal.show_meal_selection(selector_body, page) + )) # TODO add functionality to create new meals - # TODO add functionality to add ingredients to a meal (Mostly done) + # TODO add functionality to add ingredients to a meal # TODO (Possible) add functionality to delete meals and ingredients ft.app(builder) \ No newline at end of file