diff --git a/frontend/api/_base.ts b/frontend/api/_base.ts index e7383434e328..55eacc71847a 100644 --- a/frontend/api/_base.ts +++ b/frontend/api/_base.ts @@ -32,7 +32,7 @@ export abstract class BaseCRUDAPI extends BaseAPI implements CrudAPIInterf abstract baseRoute: string; abstract itemRoute(itemId: string | number): string; - async getAll(start = 0, limit = 9999, params = {}) { + async getAll(start = 0, limit = 9999, params = {} as any) { return await this.requests.get(this.baseRoute, { params: { start, limit, ...params }, }); diff --git a/frontend/api/class-interfaces/recipes/recipe-share.ts b/frontend/api/class-interfaces/recipes/recipe-share.ts new file mode 100644 index 000000000000..be00e53443c1 --- /dev/null +++ b/frontend/api/class-interfaces/recipes/recipe-share.ts @@ -0,0 +1,26 @@ +import { BaseCRUDAPI } from "~/api/_base"; + +const prefix = "/api"; + +const routes = { + shareToken: `${prefix}/shared/recipes`, + shareTokenId: (id: string) => `${prefix}/shared/recipes/${id}`, +}; + +export interface RecipeShareTokenCreate { + recipeId: number; + expiresAt?: Date; +} + +export interface RecipeShareToken { + recipeId: number; + id: string; + groupId: number; + expiresAt: string; + createdAt: string; +} + +export class RecipeShareApi extends BaseCRUDAPI { + baseRoute: string = routes.shareToken; + itemRoute = routes.shareTokenId; +} diff --git a/frontend/api/class-interfaces/recipes/recipe.ts b/frontend/api/class-interfaces/recipes/recipe.ts index 170a5a62b85a..7b270daf5c1f 100644 --- a/frontend/api/class-interfaces/recipes/recipe.ts +++ b/frontend/api/class-interfaces/recipes/recipe.ts @@ -1,5 +1,6 @@ import { CreateAsset, ParsedIngredient, Parser, RecipeZipToken, BulkCreatePayload } from "./types"; import { CommentsApi } from "./recipe-comments"; +import { RecipeShareApi } from "./recipe-share"; import { BaseCRUDAPI } from "~/api/_base"; import { Recipe, CreateRecipe } from "~/types/api-types/recipe"; @@ -26,18 +27,22 @@ const routes = { recipesSlugComments: (slug: string) => `${prefix}/recipes/${slug}/comments`, recipesSlugCommentsId: (slug: string, id: number) => `${prefix}/recipes/${slug}/comments/${id}`, + + recipeShareToken: (token: string) => `${prefix}/recipes/shared/${token}`, }; export class RecipeAPI extends BaseCRUDAPI { baseRoute: string = routes.recipesBase; itemRoute = routes.recipesRecipeSlug; - public comments: CommentsApi; + comments: CommentsApi; + share: RecipeShareApi; constructor(requests: ApiRequestInstance) { super(requests); this.comments = new CommentsApi(requests); + this.share = new RecipeShareApi(requests); } async getAllByCategory(categories: string[]) { @@ -116,4 +121,8 @@ export class RecipeAPI extends BaseCRUDAPI { getZipRedirectUrl(recipeSlug: string, token: string) { return `${routes.recipesRecipeSlugExportZip(recipeSlug)}?token=${token}`; } + + async getShared(item_id: string) { + return await this.requests.get(routes.recipeShareToken(item_id)); + } } diff --git a/frontend/components/Domain/Recipe/RecipeCard.vue b/frontend/components/Domain/Recipe/RecipeCard.vue index dde34ed10a63..9f0277a66705 100644 --- a/frontend/components/Domain/Recipe/RecipeCard.vue +++ b/frontend/components/Domain/Recipe/RecipeCard.vue @@ -34,7 +34,7 @@ :name="name" :recipe-id="recipeId" :use-items="{ - delete: true, + delete: false, edit: true, download: true, mealplanner: true, diff --git a/frontend/components/Domain/Recipe/RecipeCardMobile.vue b/frontend/components/Domain/Recipe/RecipeCardMobile.vue index 4d22d548718c..a8dfffafb4f4 100644 --- a/frontend/components/Domain/Recipe/RecipeCardMobile.vue +++ b/frontend/components/Domain/Recipe/RecipeCardMobile.vue @@ -43,7 +43,7 @@ :name="name" :recipe-id="recipeId" :use-items="{ - delete: true, + delete: false, edit: true, download: true, mealplanner: true, diff --git a/frontend/components/Domain/Recipe/RecipeContextMenu.vue b/frontend/components/Domain/Recipe/RecipeContextMenu.vue index 9694956f2e0f..fb1af4c5208d 100644 --- a/frontend/components/Domain/Recipe/RecipeContextMenu.vue +++ b/frontend/components/Domain/Recipe/RecipeContextMenu.vue @@ -1,5 +1,7 @@