From 627554239d567c7d3b21888bdc90b16078652a42 Mon Sep 17 00:00:00 2001 From: Mari Zhevagin Date: Thu, 15 Oct 2026 17:42:08 +0200 Subject: [PATCH 1/3] fikset favoritt --- .../components/favorites/FavoriteButton.tsx | 65 +++++++++++++++++++ client/src/graphql/favorites.ts | 25 +++++++ server/src/schema/resolvers/user.ts | 33 ++++++++++ server/src/schema/typeDefs/user.graphql | 4 ++ 4 files changed, 127 insertions(+) create mode 100644 client/src/components/favorites/FavoriteButton.tsx create mode 100644 client/src/graphql/favorites.ts diff --git a/client/src/components/favorites/FavoriteButton.tsx b/client/src/components/favorites/FavoriteButton.tsx new file mode 100644 index 0000000..7515f67 --- /dev/null +++ b/client/src/components/favorites/FavoriteButton.tsx @@ -0,0 +1,65 @@ +import { useMutation, useQuery } from '@apollo/client/react'; +import FavoriteIcon from '@mui/icons-material/Favorite'; +import FavoriteBorderIcon from '@mui/icons-material/FavoriteBorder'; +import { useCurrentUser } from '../../lib/useCurrentUser'; +import { LoginRequiredDialog } from '../layout/LoginRequiredDialog'; +import { MY_FAVORITES, TOGGLE_FAVORITE } from '../../graphql/favorites'; + +type FavoriteButtonProps = { + recipeId: string; + title: string; +}; + +// rødt hjerte både tomt og fylt +const BUTTON = + 'flex cursor-pointer rounded-full bg-background p-2 text-red-600 shadow-sm transition-colors hover:bg-red-600/10 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-pink-light disabled:opacity-50'; + +// hjerteknapp som legger til eller fjerner en favoritt +export function FavoriteButton({ recipeId, title }: FavoriteButtonProps) { + const { user } = useCurrentUser(); + // henter favorittene en gang og deler svaret med alle hjertene på siden + const { data } = useQuery(MY_FAVORITES, { skip: !user }); + const [toggleFavorite, { loading }] = useMutation(TOGGLE_FAVORITE, { + variables: { recipeId }, + // henter favorittene på nytt så hjertene og favorittsiden blir riktige + refetchQueries: [MY_FAVORITES], + }); + + // ikke innlogget så hjertet åpner innloggingspopupen + if (!user) { + return ( + +