diff --git a/frontend/api/class-interfaces/recipes.ts b/frontend/api/class-interfaces/recipes.ts index 175ca78b1b2e6..2aa3525731a04 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 8829121cefe3f..c165cdde3f6cf 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 e1c0ebd0c8a58..a25baeca5b26b 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 2019dd8717b02..cc65f68946eb9 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 0dd9e3ffa01b1..ea4cb9a1d7203 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 96d2314ce6a66..c1aea5e786a5c 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 766964a3dab96..f0f2069818cf4 100644 --- a/frontend/components/Domain/Recipe/RecipeContextMenu.vue +++ b/frontend/components/Domain/Recipe/RecipeContextMenu.vue @@ -43,6 +43,7 @@