From afe4e2b739e6af511d5c1fb80da215c82a5ccb19 Mon Sep 17 00:00:00 2001 From: hay-kot Date: Thu, 18 Feb 2021 21:24:20 -0900 Subject: [PATCH] shopping list added to the UI --- frontend/package-lock.json | 23 +++- frontend/package.json | 1 + frontend/src/api/mealplan.js | 10 +- .../MealPlan/ShoppingListDialog.vue | 112 ++++++++++++++++++ frontend/src/locales/en.json | 1 + frontend/src/pages/MealPlanPage.vue | 15 +++ mealie/routes/meal_routes.py | 6 +- 7 files changed, 159 insertions(+), 9 deletions(-) create mode 100644 frontend/src/components/MealPlan/ShoppingListDialog.vue diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1f26196a0..9a665fe1a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -5585,10 +5585,17 @@ "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=" }, "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "requires": { + "fastest-levenshtein": "^1.0.7" + } + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==" }, "faye-websocket": { "version": "0.11.3", @@ -8334,6 +8341,14 @@ "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "word-wrap": "~1.2.3" + }, + "dependencies": { + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + } } }, "ora": { diff --git a/frontend/package.json b/frontend/package.json index 35b4ca173..1b2d0f597 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,6 +13,7 @@ "@smartweb/vue-flash-message": "^0.6.10", "axios": "^0.21.1", "core-js": "^3.8.2", + "fast-levenshtein": "^3.0.0", "fuse.js": "^6.4.6", "qs": "^6.9.6", "v-jsoneditor": "^1.4.2", diff --git a/frontend/src/api/mealplan.js b/frontend/src/api/mealplan.js index 27c389b1d..0271f51de 100644 --- a/frontend/src/api/mealplan.js +++ b/frontend/src/api/mealplan.js @@ -8,9 +8,10 @@ const mealPlanURLs = { all: `${prefix}all`, create: `${prefix}create`, thisWeek: `${prefix}this-week`, - update: (planID) => `${prefix}${planID}`, - delete: (planID) => `${prefix}${planID}`, + update: planID => `${prefix}${planID}`, + delete: planID => `${prefix}${planID}`, today: `${prefix}today`, + shopping: planID => `${prefix}${planID}/shopping-list`, }; export default { @@ -43,4 +44,9 @@ export default { let response = await apiReq.put(mealPlanURLs.update(id), body); return response; }, + + async shoppingList(id) { + let response = await apiReq.get(mealPlanURLs.shopping(id)); + return response.data; + }, }; diff --git a/frontend/src/components/MealPlan/ShoppingListDialog.vue b/frontend/src/components/MealPlan/ShoppingListDialog.vue new file mode 100644 index 000000000..392d8dcf7 --- /dev/null +++ b/frontend/src/components/MealPlan/ShoppingListDialog.vue @@ -0,0 +1,112 @@ + + + + + + + + \ No newline at end of file diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index a2cbc71a1..324e26329 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -44,6 +44,7 @@ "sign-up": "Sign up" }, "meal-plan": { + "shopping-list": "Shopping List", "dinner-this-week": "Dinner This Week", "meal-planner": "Meal Planner", "dinner-today": "Dinner Today", diff --git a/frontend/src/pages/MealPlanPage.vue b/frontend/src/pages/MealPlanPage.vue index 61fa643d0..b9918c9ba 100644 --- a/frontend/src/pages/MealPlanPage.vue +++ b/frontend/src/pages/MealPlanPage.vue @@ -6,6 +6,7 @@ @updated="planUpdated" /> + @@ -49,6 +50,14 @@ + + {{ $t("meal-plan.shopping-list") }} + ({ plannedMeals: [], @@ -122,6 +133,10 @@ export default { api.mealPlans.delete(id); this.requestMeals(); }, + openShoppingList(id) { + console.log(this.$refs.shoppingList.openDialog); + this.$refs.shoppingList.openDialog(id); + }, }, }; diff --git a/mealie/routes/meal_routes.py b/mealie/routes/meal_routes.py index cb882654f..69a716d83 100644 --- a/mealie/routes/meal_routes.py +++ b/mealie/routes/meal_routes.py @@ -17,9 +17,9 @@ def get_all_meals(session: Session = Depends(generate_session)): return MealPlan.get_all(session) -@router.get("/shopping-list/{id}") +@router.get("/{id}/shopping-list") def get_shopping_list(id: str, session: Session = Depends(generate_session)): - + #! Refactor into Single Database Call mealplan = db.meals.get(session, id) slugs = [x.get("slug") for x in mealplan.get("meals")] @@ -29,7 +29,7 @@ def get_shopping_list(id: str, session: Session = Depends(generate_session)): for x in recipes ] - return {"ingredients": ingredients} + return ingredients @router.post("/create")