diff --git a/src/MealBuilder.py b/src/MealBuilder.py index d3a0a1c..b42f89f 100644 --- a/src/MealBuilder.py +++ b/src/MealBuilder.py @@ -18,18 +18,15 @@ def is_number(s): def builder(page): class Meal(): - meal_radios = [] - new_ingredient = "" - new_quantity = "" - new_units = "" - - def __init__(self): + + def get_meal_radios(self): + self.meal_radios = [] for name in get_meal_names(): self.meal_radios.append( ft.Radio(value=name, label=name), ) - - def get_meal_radios(self): + + def get_meal_radios_group(self): return ft.RadioGroup( content=ft.Column( controls=self.meal_radios, @@ -38,7 +35,6 @@ def builder(page): 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 @@ -52,6 +48,13 @@ def builder(page): 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 create_new_ingredient_row(self): + row = [] + row.append(ft.TextField(label="Ingredient", value="")) + row.append(ft.TextField(label="Quantity", value="")) + row.append(ft.TextField(label="Units (optional)", value="")) + return row def update_ingredients(self, name): if not self.new_ingredient or not self.new_quantity or not is_number(self.new_quantity): @@ -68,13 +71,56 @@ def builder(page): update_json(meal_json) page.update() - def add_new_meal(self, e): - print("Gonna add something good!") + def show_new_meal(self): + self.new_meal = {} + selector_body.controls = [ + ft.TextField(label="Meal", value=""), + ft.ListView(controls=[ft.Row(self.create_new_ingredient_row(), + alignment=ft.MainAxisAlignment.SPACE_EVENLY, + width=300, + height=100, + )], + expand=True, + spacing=5, + padding=5, + auto_scroll=False, + ), + ft.ElevatedButton(text="Add Ingredient", on_click=lambda e: self.append_new_ingredient_row(selector_body)), + ft.ElevatedButton(text="Add Meal", on_click=lambda e: self.add_new_meal(selector_body)), + ft.ElevatedButton(text="Back", on_click=lambda e: self.show_meal_selection(selector_body, page)) + ] + + page.title = "Add New Meal" + page.update() + + def append_new_ingredient_row(self, selector_body): + selector_body.controls[1].controls.append(ft.Row(self.create_new_ingredient_row(), + alignment=ft.MainAxisAlignment.SPACE_EVENLY, + width=300, + height=100,)) + page.update() + + def add_new_meal(self, selector_body): + meal = selector_body.controls[0].value + ing = [] + qua = [] + uni = [] + for row in selector_body.controls[1].controls: + ing.append(row.controls[0].value) + qua.append(row.controls[1].value) + uni.append(row.controls[2].value if row.controls[2].value != "" else None) + + meal_json[meal] = {} + for i in range(len(ing)): + meal_json[meal][ing[i]] = { 'quantity': qua[i], 'units': uni[i] } + + + update_json(meal_json) + self.show_new_meal() 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(): @@ -105,9 +151,10 @@ def builder(page): return selector_body def show_meal_selection(self, selector_body, page): - selector_body.controls = [self.get_meal_radios(), + self.get_meal_radios() + selector_body.controls = [self.get_meal_radios_group(), 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) + ft.ElevatedButton(text="Add Meal", on_click=lambda e: self.show_new_meal()) ] if page.title != "Create and Edit Meals!": @@ -135,8 +182,7 @@ def builder(page): content = meal.show_meal_selection(selector_body, page) )) - # TODO add functionality to create new meals # TODO add functionality to add ingredients to a meal - # TODO (Possible) add functionality to delete meals and ingredients + # TODO (Possible) add functionality to delete meals and/or ingredients ft.app(builder) \ No newline at end of file