diff --git a/frontend/components/Domain/Recipe/RecipeCard.vue b/frontend/components/Domain/Recipe/RecipeCard.vue index 1633527ec..dcb8f3dfe 100644 --- a/frontend/components/Domain/Recipe/RecipeCard.vue +++ b/frontend/components/Domain/Recipe/RecipeCard.vue @@ -55,12 +55,9 @@ />
-
- @@ -130,7 +128,7 @@ import RecipeFavoriteBadge from "./RecipeFavoriteBadge.vue"; import RecipeContextMenu from "./RecipeContextMenu.vue"; import RecipeCardImage from "./RecipeCardImage.vue"; -import RecipeRating from "./RecipeRating.vue"; +import RecipeCardRating from "./RecipeCardRating.vue"; import RecipeChips from "./RecipeChips.vue"; import { useLoggedInState } from "~/composables/use-logged-in-state"; diff --git a/frontend/components/Domain/Recipe/RecipeCardRating.vue b/frontend/components/Domain/Recipe/RecipeCardRating.vue new file mode 100644 index 000000000..f41c4eced --- /dev/null +++ b/frontend/components/Domain/Recipe/RecipeCardRating.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/frontend/components/Domain/Recipe/RecipeFavoriteBadge.vue b/frontend/components/Domain/Recipe/RecipeFavoriteBadge.vue index 54c2a0580..040f1d29c 100644 --- a/frontend/components/Domain/Recipe/RecipeFavoriteBadge.vue +++ b/frontend/components/Domain/Recipe/RecipeFavoriteBadge.vue @@ -43,8 +43,6 @@ const props = withDefaults(defineProps(), { buttonStyle: false, }); -const api = useUserApi(); -const $auth = useMealieAuth(); const { userRatings, refreshUserRatings } = useUserSelfRatings(); const isFavorite = computed(() => { @@ -53,6 +51,9 @@ const isFavorite = computed(() => { }); async function toggleFavorite() { + const api = useUserApi(); + const $auth = useMealieAuth(); + if (!$auth.user.value) return; if (!isFavorite.value) { await api.users.addFavorite($auth.user.value?.id, props.recipeId); diff --git a/frontend/composables/api/api-client.ts b/frontend/composables/api/api-client.ts index c130509fe..f0f61a9b5 100644 --- a/frontend/composables/api/api-client.ts +++ b/frontend/composables/api/api-client.ts @@ -3,6 +3,7 @@ import type { Composer } from "vue-i18n"; import type { ApiRequestInstance, RequestResponse } from "~/lib/api/types/non-generated"; import { AdminAPI, PublicApi, UserApi } from "~/lib/api"; import { PublicExploreApi } from "~/lib/api/client-public"; +import { useGlobalI18n } from "~/composables/use-global-i18n"; const request = { async safe( @@ -56,8 +57,7 @@ function getRequests(axiosInstance: AxiosInstance): ApiRequestInstance { export const useRequests = function (i18n?: Composer): ApiRequestInstance { const { $axios } = useNuxtApp(); if (!i18n) { - // Only works in a setup block - i18n = useI18n(); + i18n = useGlobalI18n(); } $axios.defaults.headers.common["Accept-Language"] = i18n.locale.value; diff --git a/frontend/composables/use-global-i18n.ts b/frontend/composables/use-global-i18n.ts new file mode 100644 index 000000000..678eecadd --- /dev/null +++ b/frontend/composables/use-global-i18n.ts @@ -0,0 +1,10 @@ +import type { Composer } from "vue-i18n"; + +let i18n: Composer | null = null; + +export function useGlobalI18n() { + if (!i18n) { + i18n = useI18n(); + } + return i18n; +} diff --git a/frontend/composables/use-users/user-ratings.ts b/frontend/composables/use-users/user-ratings.ts index d827e64c0..36cd03d2e 100644 --- a/frontend/composables/use-users/user-ratings.ts +++ b/frontend/composables/use-users/user-ratings.ts @@ -5,26 +5,31 @@ const userRatings = ref([]); const loading = ref(false); const ready = ref(false); -export const useUserSelfRatings = function () { - const $auth = useMealieAuth(); - const api = useUserApi(); +const $auth = useMealieAuth(); +export const useUserSelfRatings = function () { async function refreshUserRatings() { if (!$auth.user.value || loading.value) { return; } loading.value = true; + const api = useUserApi(); + const { data } = await api.users.getSelfRatings(); userRatings.value = data?.ratings || []; + loading.value = false; ready.value = true; } async function setRating(slug: string, rating: number | null, isFavorite: boolean | null) { loading.value = true; + const api = useUserApi(); + const userId = $auth.user.value?.id || ""; await api.users.setRating(userId, slug, rating, isFavorite); + loading.value = false; await refreshUserRatings(); } diff --git a/frontend/layouts/admin.vue b/frontend/layouts/admin.vue index 2c8bdca97..9beaffe79 100644 --- a/frontend/layouts/admin.vue +++ b/frontend/layouts/admin.vue @@ -36,8 +36,9 @@ import AppHeader from "@/components/Layout/LayoutParts/AppHeader.vue"; import AppSidebar from "@/components/Layout/LayoutParts/AppSidebar.vue"; import TheSnackbar from "~/components/Layout/LayoutParts/TheSnackbar.vue"; import type { SidebarLinks } from "~/types/application-types"; +import { useGlobalI18n } from "~/composables/use-global-i18n"; -const i18n = useI18n(); +const i18n = useGlobalI18n(); const display = useDisplay(); const { $globals } = useNuxtApp(); diff --git a/frontend/layouts/basic.vue b/frontend/layouts/basic.vue index a74383f30..c33e32c89 100644 --- a/frontend/layouts/basic.vue +++ b/frontend/layouts/basic.vue @@ -13,11 +13,10 @@ - diff --git a/frontend/layouts/blank.vue b/frontend/layouts/blank.vue index b7a760679..e0d45f90b 100644 --- a/frontend/layouts/blank.vue +++ b/frontend/layouts/blank.vue @@ -24,6 +24,7 @@ diff --git a/frontend/layouts/error.vue b/frontend/layouts/error.vue index 55c8a224e..9bfa2c728 100644 --- a/frontend/layouts/error.vue +++ b/frontend/layouts/error.vue @@ -46,6 +46,8 @@