From 689eb426ea5b0e53d2c0e4cc643915d0187c9832 Mon Sep 17 00:00:00 2001 From: AquaticLava Date: Sun, 4 Sep 2022 16:30:36 -0600 Subject: [PATCH] method for asynchronous generation of meals. start of menu for auto planner. delete method deletes all records for testing the auto planner. --- vue/src/apps/MealPlanView/MealPlanView.vue | 60 ++++- vue/src/components/AutoMealPlanModal.vue | 246 +++++++++++++++++++++ 2 files changed, 302 insertions(+), 4 deletions(-) create mode 100644 vue/src/components/AutoMealPlanModal.vue diff --git a/vue/src/apps/MealPlanView/MealPlanView.vue b/vue/src/apps/MealPlanView/MealPlanView.vue index 0866a293f..14f278583 100644 --- a/vue/src/apps/MealPlanView/MealPlanView.vue +++ b/vue/src/apps/MealPlanView/MealPlanView.vue @@ -208,6 +208,13 @@ @delete-entry="deleteEntry" @reload-meal-types="refreshMealTypes" > +
-
@@ -272,6 +278,8 @@ import VueCookies from "vue-cookies" import {ApiMixin, StandardToasts, ResolveUrlMixin} from "@/utils/utils" import {CalendarView, CalendarMathMixin} from "vue-simple-calendar/src/components/bundle" import {ApiApiFactory} from "@/utils/openapi/api" +import axios from "axios"; +import AutoMealPlanModal from "@/components/AutoMealPlanModal"; const {makeToast} = require("@/utils/utils") @@ -284,6 +292,7 @@ let SETTINGS_COOKIE_NAME = "mealplan_settings" export default { name: "MealPlanView", components: { + AutoMealPlanModal, MealPlanEditModal, MealPlanCard, CalendarView, @@ -546,7 +555,7 @@ export default { }, deleteEntry(data) { this.plan_entries.forEach((entry, index, list) => { - if (entry.id === data.id) { + //if (entry.id === data.id) {//todo:remove block! let apiClient = new ApiApiFactory() apiClient @@ -557,7 +566,7 @@ export default { .catch((err) => { StandardToasts.makeStandardToast(this, StandardToasts.FAIL_UPDATE, err) }) - } + //} }) }, entryClick(data) { @@ -634,6 +643,49 @@ export default { entry: plan_entry, } }, + createAutoPlan(date) { + this.$bvModal.show(`autoplan-modal`) + }, + async autoPlanThread(date,dateOffset,i,servings){ + + let apiClient = new ApiApiFactory() + let currentEntry = Object.assign({}, this.options.entryEditing) + currentEntry.date = moment(date).add(dateOffset,"d").format("YYYY-MM-DD") + currentEntry.servings = servings + await Promise.all([ + currentEntry.recipe = await this.randomRecipe(i+3).then((result)=>{return result}), + currentEntry.shared = await apiClient.listUserPreferences().then((result) => {return result.data[0].plan_share}), + currentEntry.meal_type = await this.getMealType(i+2).then((result)=>{return result}) + ]) + currentEntry.title = currentEntry.recipe.name + this.createEntry(currentEntry) + }, + autoPlan(data, servings){ + // ["breakfast","lunch","dinner"] + // meal types: 4,3,2 + //meal keywords: 5,4,3 + for (let i = 0; i < 3; i++) { + for (let dateOffset = 0; dateOffset < 7; dateOffset++) { + this.autoPlanThread(data,dateOffset,i,servings) + } + } + }, + randomRecipe(keyword) { + let url = `/api/recipe/?query=&keywords_or=${keyword}` + return axios.get(url).then((response) => { + let result = response.data + let count = result.count + return result.results[Math.floor(Math.random() * count)] + }).catch((err) => { + + }) + }, + getMealType(id) { + let url = `/api/meal-type/${id}` + return axios.get(url).then((response) => { + return response.data + }) + } }, directives: { hover: { diff --git a/vue/src/components/AutoMealPlanModal.vue b/vue/src/components/AutoMealPlanModal.vue new file mode 100644 index 000000000..1138e67b7 --- /dev/null +++ b/vue/src/components/AutoMealPlanModal.vue @@ -0,0 +1,246 @@ + + + + +