mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2026-01-02 04:39:54 -05:00
shopping from meal plan edit
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
</template>
|
||||
<p>
|
||||
{{ props.text}}
|
||||
<v-btn color="success" class="float-right" v-if="props.actionText != ''" @click="emit('click')">{{ actionText}}</v-btn>
|
||||
<v-btn color="success" class="float-right" v-if="props.actionText" @click="emit('click')">{{ actionText}}</v-btn>
|
||||
</p>
|
||||
</v-alert>
|
||||
</template>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
</v-card>
|
||||
|
||||
|
||||
<model-edit-dialog model="MealPlan" v-model="newPlanDialog" :itemDefaults="newPlanDialogDefaultItem"
|
||||
<model-edit-dialog model="MealPlan" v-model="newPlanDialog" :itemDefaults="newPlanDialogDefaultItem" :close-after-create="false"
|
||||
@create="(arg: any) => useMealPlanStore().plans.set(arg.id, arg)"></model-edit-dialog>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -154,7 +154,7 @@ const amounts = computed((): Map<number, ShoppingLineAmount> => {
|
||||
* compute the second (info) row of the line item based on the entries and the device settings
|
||||
*/
|
||||
const infoRow = computed(() => {
|
||||
if(props.hideInfoRow){
|
||||
if (props.hideInfoRow) {
|
||||
return ''
|
||||
}
|
||||
|
||||
@@ -171,14 +171,16 @@ const infoRow = computed(() => {
|
||||
authors.push(e.createdBy.displayName)
|
||||
}
|
||||
|
||||
if (e.recipeMealplan !== null) {
|
||||
let recipe_name = e.recipeMealplan.recipeName
|
||||
if (recipes.indexOf(recipe_name) === -1) {
|
||||
recipes.push(recipe_name.substring(0, 14) + (recipe_name.length > 14 ? '..' : ''))
|
||||
if (e.listRecipe != null) {
|
||||
if (e.listRecipeData.recipe != null) {
|
||||
let recipe_name = e.listRecipeData.recipeData.name
|
||||
if (recipes.indexOf(recipe_name) === -1) {
|
||||
recipes.push(recipe_name.substring(0, 14) + (recipe_name.length > 14 ? '..' : ''))
|
||||
}
|
||||
}
|
||||
|
||||
if ('mealplan_from_date' in e.recipeMealplan) {
|
||||
let meal_plan_entry = (e?.recipeMealplan?.mealplanType || '') + ' (' + DateTime.fromJSDate(e.recipeMealplan.mealplanFromDate).toLocaleString(DateTime.DATETIME_SHORT) + ')'
|
||||
if (e.listRecipeData.mealplan != null) {
|
||||
let meal_plan_entry = (e.listRecipeData.mealPlanData.mealType.name.substring(0, 8) || '') + ' (' + DateTime.fromJSDate(e.listRecipeData.mealPlanData.fromDate).toLocaleString(DateTime.DATE_SHORT) + ')'
|
||||
if (meal_pans.indexOf(meal_plan_entry) === -1) {
|
||||
meal_pans.push(meal_plan_entry)
|
||||
}
|
||||
|
||||
@@ -83,16 +83,7 @@
|
||||
</template>
|
||||
</v-alert>
|
||||
|
||||
<v-text-field :label="$t('Shopping_input_placeholder')" density="compact" @keyup.enter="addIngredient()" v-model="ingredientInput" hide-details>
|
||||
<template #append>
|
||||
<v-btn
|
||||
density="comfortable"
|
||||
@click="addIngredient()"
|
||||
:icon="ingredientInputIcon"
|
||||
color="create"
|
||||
></v-btn>
|
||||
</template>
|
||||
</v-text-field>
|
||||
<shopping-list-entry-input></shopping-list-entry-input>
|
||||
|
||||
<v-list class="mt-3" density="compact" v-if="!useShoppingStore().initialized">
|
||||
<v-skeleton-loader type="list-item"></v-skeleton-loader>
|
||||
@@ -168,7 +159,7 @@
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-card>
|
||||
<v-card-title>{{ $t('Recipes') }}</v-card-title>
|
||||
<v-card-title>{{ $t('Recipes') }} / {{ $t('Meal_Plan') }}</v-card-title>
|
||||
<v-card-text>
|
||||
<v-list>
|
||||
<v-list-item v-for="r in useShoppingStore().getAssociatedRecipes()">
|
||||
@@ -179,9 +170,14 @@
|
||||
@confirm="(servings: number) => {updateRecipeServings(r, servings)}"></number-scaler-dialog>
|
||||
</v-btn>
|
||||
</template>
|
||||
<span class="ms-2">
|
||||
{{ r.recipeName }}
|
||||
</span>
|
||||
|
||||
<div class="ms-2">
|
||||
<p v-if="r.recipe">{{ r.recipeData.name }} <br/></p>
|
||||
<p v-if="r.mealplan">
|
||||
{{ r.mealPlanData.mealType.name }} - {{ DateTime.fromJSDate(r.mealPlanData.fromDate).toLocaleString(DateTime.DATE_FULL) }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<template #append>
|
||||
<v-btn icon color="delete">
|
||||
<v-icon icon="$delete"></v-icon>
|
||||
@@ -230,14 +226,13 @@ import {useI18n} from "vue-i18n";
|
||||
import NumberScalerDialog from "@/components/inputs/NumberScalerDialog.vue";
|
||||
import SupermarketEditor from "@/components/model_editors/SupermarketEditor.vue";
|
||||
import DeleteConfirmDialog from "@/components/dialogs/DeleteConfirmDialog.vue";
|
||||
import ShoppingListEntryInput from "@/components/inputs/ShoppingListEntryInput.vue";
|
||||
import {DateTime} from "luxon";
|
||||
|
||||
const {t} = useI18n()
|
||||
|
||||
const currentTab = ref("shopping")
|
||||
|
||||
const ingredientInput = ref('')
|
||||
const ingredientInputIcon = ref('fa-solid fa-plus')
|
||||
|
||||
const shoppingLineItemDialog = ref(false)
|
||||
const shoppingLineItemDialogFood = ref({} as IShoppingListFood)
|
||||
|
||||
@@ -273,29 +268,6 @@ onMounted(() => {
|
||||
}
|
||||
})
|
||||
|
||||
/**
|
||||
* add new ingredient from ingredient text input
|
||||
*/
|
||||
function addIngredient() {
|
||||
const api = new ApiApi()
|
||||
|
||||
api.apiIngredientFromStringCreate({ingredientString: {text: ingredientInput.value} as IngredientString}).then(r => {
|
||||
useShoppingStore().createObject({
|
||||
amount: Math.max(r.amount, 1),
|
||||
unit: r.unit,
|
||||
food: r.food,
|
||||
} as ShoppingListEntry, true)
|
||||
ingredientInput.value = ''
|
||||
|
||||
ingredientInputIcon.value = 'fa-solid fa-check'
|
||||
setTimeout(() => {
|
||||
ingredientInputIcon.value = 'fa-solid fa-plus'
|
||||
}, 1000)
|
||||
}).catch(err => {
|
||||
useMessageStore().addError(ErrorMessageType.CREATE_ERROR, err)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* determines if a category as entries that should be visible
|
||||
* @param category
|
||||
|
||||
Reference in New Issue
Block a user