From 95cbd7214d2c5110f85fe27034cdecf38a00ea89 Mon Sep 17 00:00:00 2001 From: Nicholas <16458785+NickKalar@users.noreply.github.com> Date: Fri, 21 Nov 2025 16:38:10 -0500 Subject: [PATCH] Added initial builder page --- src/MealBuilder.py | 113 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/MealBuilder.py diff --git a/src/MealBuilder.py b/src/MealBuilder.py new file mode 100644 index 0000000..ee6eb5e --- /dev/null +++ b/src/MealBuilder.py @@ -0,0 +1,113 @@ +from FileHandler import read_json, update_json + +import flet as ft + +meal_json = read_json() +global new_ingredient, new_quantity, new_units +new_ingredient = "" +new_quantity = "" +new_units = "" + +def is_number(s): + try: + float(s) + return True + 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 + + 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, + ) + ) + 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, + ) + ) + + # TODO add functionality to create new meals + # TODO add functionality to add ingredients to a meal (Mostly done) + # TODO (Possible) add functionality to delete meals and ingredients + +ft.app(builder) \ No newline at end of file