diff --git a/frontend/api/class-interfaces/recipes.ts b/frontend/api/class-interfaces/recipes.ts index 175ca78b1..2aa352573 100644 --- a/frontend/api/class-interfaces/recipes.ts +++ b/frontend/api/class-interfaces/recipes.ts @@ -17,7 +17,8 @@ const routes = { recipesParseIngredients: `${prefix}/parser/ingredients`, recipesRecipeSlug: (recipe_slug: string) => `${prefix}/recipes/${recipe_slug}`, - recipesRecipeSlugZip: (recipe_slug: string) => `${prefix}/recipes/${recipe_slug}/zip`, + recipesRecipeSlugExport: (recipe_slug: string) => `${prefix}/recipes/${recipe_slug}/exports`, + recipesRecipeSlugExportZip: (recipe_slug: string) => `${prefix}/recipes/${recipe_slug}/exports/zip`, recipesRecipeSlugImage: (recipe_slug: string) => `${prefix}/recipes/${recipe_slug}/image`, recipesRecipeSlugAssets: (recipe_slug: string) => `${prefix}/recipes/${recipe_slug}/assets`, @@ -72,6 +73,10 @@ export interface BulkCreatePayload { imports: BulkCreateRecipe[]; } +export interface RecipeZipToken { + token: string; +} + export class RecipeAPI extends BaseCRUDAPI { baseRoute: string = routes.recipesBase; itemRoute = routes.recipesRecipeSlug; @@ -151,4 +156,12 @@ export class RecipeAPI extends BaseCRUDAPI { parser = parser || "nlp"; return await this.requests.post(routes.recipesParseIngredient, { parser, ingredient }); } + + async getZipToken(recipeSlug: string) { + return await this.requests.post(routes.recipesRecipeSlugExport(recipeSlug), {}); + } + + getZipRedirectUrl(recipeSlug: string, token: string) { + return `${routes.recipesRecipeSlugExportZip(recipeSlug)}?token=${token}`; + } } diff --git a/frontend/components/Domain/Recipe/RecipeActionMenu.vue b/frontend/components/Domain/Recipe/RecipeActionMenu.vue index 8829121ce..c165cdde3 100644 --- a/frontend/components/Domain/Recipe/RecipeActionMenu.vue +++ b/frontend/components/Domain/Recipe/RecipeActionMenu.vue @@ -49,6 +49,7 @@ fab color="info" :card-menu="false" + @print="$emit('print')" />
diff --git a/frontend/components/Domain/Recipe/RecipeCard.vue b/frontend/components/Domain/Recipe/RecipeCard.vue index e1c0ebd0c..a25baeca5 100644 --- a/frontend/components/Domain/Recipe/RecipeCard.vue +++ b/frontend/components/Domain/Recipe/RecipeCard.vue @@ -28,7 +28,7 @@ - + diff --git a/frontend/components/Domain/Recipe/RecipeCardSection.vue b/frontend/components/Domain/Recipe/RecipeCardSection.vue index 2019dd871..cc65f6894 100644 --- a/frontend/components/Domain/Recipe/RecipeCardSection.vue +++ b/frontend/components/Domain/Recipe/RecipeCardSection.vue @@ -6,7 +6,7 @@ {{ title }} - + {{ $globals.icons.diceMultiple }} @@ -66,6 +66,7 @@ :rating="recipe.rating" :image="recipe.image" :tags="recipe.tags" + @deleted="$emit('deleted', $event)" /> diff --git a/frontend/components/Domain/Recipe/RecipeCategoryTagDialog.vue b/frontend/components/Domain/Recipe/RecipeCategoryTagDialog.vue index 0dd9e3ffa..ea4cb9a1d 100644 --- a/frontend/components/Domain/Recipe/RecipeCategoryTagDialog.vue +++ b/frontend/components/Domain/Recipe/RecipeCategoryTagDialog.vue @@ -93,14 +93,16 @@ export default defineComponent({ async select() { const newItem = await (async () => { if (this.tagDialog) { - const newItem = await this.api.tags.createOne({ name: this.itemName }); - return newItem; + const { data } = await this.api.tags.createOne({ name: this.itemName }); + return data; } else { - const newItem = await this.api.categories.createOne({ name: this.itemName }); - return newItem; + const { data } = await this.api.categories.createOne({ name: this.itemName }); + return data; } })(); + console.log(newItem); + this.$emit(CREATED_ITEM_EVENT, newItem); this.dialog = false; }, diff --git a/frontend/components/Domain/Recipe/RecipeCategoryTagSelector.vue b/frontend/components/Domain/Recipe/RecipeCategoryTagSelector.vue index 96d2314ce..c1aea5e78 100644 --- a/frontend/components/Domain/Recipe/RecipeCategoryTagSelector.vue +++ b/frontend/components/Domain/Recipe/RecipeCategoryTagSelector.vue @@ -98,7 +98,7 @@ export default { getAllCategories(); getAllTags(); - return { api, allTags, allCategories }; + return { api, allTags, allCategories, getAllCategories, getAllTags }; }, data() { @@ -152,6 +152,9 @@ export default { }, pushToItem(createdItem) { createdItem = this.returnObject ? createdItem : createdItem.name; + // TODO: Remove excessive get calls + this.getAllCategories(); + this.getAllTags(); this.selected.push(createdItem); }, }, diff --git a/frontend/components/Domain/Recipe/RecipeContextMenu.vue b/frontend/components/Domain/Recipe/RecipeContextMenu.vue index 766964a3d..f0f206981 100644 --- a/frontend/components/Domain/Recipe/RecipeContextMenu.vue +++ b/frontend/components/Domain/Recipe/RecipeContextMenu.vue @@ -43,6 +43,7 @@