mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2026-01-11 00:58:32 -05:00
added ability to add recipes to shopping list from shopping list view
This commit is contained in:
@@ -47,6 +47,8 @@ import {calculateFoodAmount} from "@/utils/number_utils";
|
|||||||
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
|
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
|
||||||
import {ingredientToUnitString, ingredientToFoodString} from "@/utils/model_utils.ts";
|
import {ingredientToUnitString, ingredientToFoodString} from "@/utils/model_utils.ts";
|
||||||
|
|
||||||
|
const emit = defineEmits(['created'])
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
recipe: {type: Object as PropType<Recipe | RecipeFlat | RecipeOverview>, required: true},
|
recipe: {type: Object as PropType<Recipe | RecipeFlat | RecipeOverview>, required: true},
|
||||||
})
|
})
|
||||||
@@ -157,6 +159,7 @@ function createShoppingListRecipe() {
|
|||||||
api.apiShoppingListRecipeBulkCreateEntriesCreate({id: slr.id!, shoppingListEntryBulkCreate: shoppingListEntries}).then(r => {
|
api.apiShoppingListRecipeBulkCreateEntriesCreate({id: slr.id!, shoppingListEntryBulkCreate: shoppingListEntries}).then(r => {
|
||||||
useMessageStore().addPreparedMessage(PreparedMessage.CREATE_SUCCESS)
|
useMessageStore().addPreparedMessage(PreparedMessage.CREATE_SUCCESS)
|
||||||
dialog.value = false
|
dialog.value = false
|
||||||
|
emit('created')
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
useMessageStore().addError(ErrorMessageType.CREATE_ERROR, err)
|
useMessageStore().addError(ErrorMessageType.CREATE_ERROR, err)
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
|
|||||||
@@ -81,8 +81,8 @@
|
|||||||
<v-container>
|
<v-container>
|
||||||
<v-row class="pa-0" dense>
|
<v-row class="pa-0" dense>
|
||||||
<v-col class="pa-0">
|
<v-col class="pa-0">
|
||||||
<v-chip-group v-model="useUserPreferenceStore().deviceSettings.shopping_selected_supermarket" v-if="supermarkets.length > 0" >
|
<v-chip-group v-model="useUserPreferenceStore().deviceSettings.shopping_selected_supermarket" v-if="supermarkets.length > 0">
|
||||||
<v-chip v-for="s in supermarkets" :value="s" :key="s.id" label density="compact" variant="outlined" color="primary">{{s.name}}</v-chip>
|
<v-chip v-for="s in supermarkets" :value="s" :key="s.id" label density="compact" variant="outlined" color="primary">{{ s.name }}</v-chip>
|
||||||
</v-chip-group>
|
</v-chip-group>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
@@ -176,6 +176,15 @@
|
|||||||
<v-card>
|
<v-card>
|
||||||
<v-card-title>{{ $t('Recipes') }} / {{ $t('Meal_Plan') }}</v-card-title>
|
<v-card-title>{{ $t('Recipes') }} / {{ $t('Meal_Plan') }}</v-card-title>
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
|
<ModelSelect model="Recipe" v-model="manualAddRecipe" append-to-body>
|
||||||
|
<template #append>
|
||||||
|
<v-btn icon="$create" color="create" :disabled="manualAddRecipe == undefined">
|
||||||
|
<v-icon icon="$create"></v-icon>
|
||||||
|
<add-to-shopping-dialog :recipe="manualAddRecipe" v-if="manualAddRecipe != undefined" @created="useShoppingStore().refreshFromAPI(); manualAddRecipe = undefined"></add-to-shopping-dialog>
|
||||||
|
</v-btn>
|
||||||
|
</template>
|
||||||
|
</ModelSelect>
|
||||||
|
|
||||||
<v-list>
|
<v-list>
|
||||||
<v-list-item v-for="r in useShoppingStore().getAssociatedRecipes()">
|
<v-list-item v-for="r in useShoppingStore().getAssociatedRecipes()">
|
||||||
<template #prepend>
|
<template #prepend>
|
||||||
@@ -208,6 +217,8 @@
|
|||||||
</template>
|
</template>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
|
|
||||||
|
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -234,7 +245,7 @@
|
|||||||
|
|
||||||
import {computed, onMounted, ref} from "vue";
|
import {computed, onMounted, ref} from "vue";
|
||||||
import {useShoppingStore} from "@/stores/ShoppingStore";
|
import {useShoppingStore} from "@/stores/ShoppingStore";
|
||||||
import {ApiApi, ResponseError, ShoppingListEntry, ShoppingListRecipe, Supermarket} from "@/openapi";
|
import {ApiApi, Recipe, ResponseError, ShoppingListEntry, ShoppingListRecipe, Supermarket} from "@/openapi";
|
||||||
import {ErrorMessageType, PreparedMessage, useMessageStore} from "@/stores/MessageStore";
|
import {ErrorMessageType, PreparedMessage, useMessageStore} from "@/stores/MessageStore";
|
||||||
import ShoppingLineItem from "@/components/display/ShoppingLineItem.vue";
|
import ShoppingLineItem from "@/components/display/ShoppingLineItem.vue";
|
||||||
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
|
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
|
||||||
@@ -250,11 +261,13 @@ import ModelEditDialog from "@/components/dialogs/ModelEditDialog.vue";
|
|||||||
import {onBeforeRouteLeave} from "vue-router";
|
import {onBeforeRouteLeave} from "vue-router";
|
||||||
import {isShoppingCategoryVisible} from "@/utils/logic_utils.ts";
|
import {isShoppingCategoryVisible} from "@/utils/logic_utils.ts";
|
||||||
import ShoppingExportDialog from "@/components/dialogs/ShoppingExportDialog.vue";
|
import ShoppingExportDialog from "@/components/dialogs/ShoppingExportDialog.vue";
|
||||||
|
import AddToShoppingDialog from "@/components/dialogs/AddToShoppingDialog.vue";
|
||||||
|
|
||||||
const {t} = useI18n()
|
const {t} = useI18n()
|
||||||
|
|
||||||
const currentTab = ref("shopping")
|
const currentTab = ref("shopping")
|
||||||
const supermarkets = ref([] as Supermarket[])
|
const supermarkets = ref([] as Supermarket[])
|
||||||
|
const manualAddRecipe = ref<undefined | Recipe>(undefined)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* VSelect items for shopping list grouping options with localized names
|
* VSelect items for shopping list grouping options with localized names
|
||||||
@@ -351,7 +364,7 @@ function deleteListRecipe(slr: ShoppingListRecipe) {
|
|||||||
/**
|
/**
|
||||||
* load a list of supermarkets
|
* load a list of supermarkets
|
||||||
*/
|
*/
|
||||||
function loadSupermarkets(){
|
function loadSupermarkets() {
|
||||||
let api = new ApiApi()
|
let api = new ApiApi()
|
||||||
|
|
||||||
api.apiSupermarketList().then(r => {
|
api.apiSupermarketList().then(r => {
|
||||||
|
|||||||
Reference in New Issue
Block a user