diff --git a/client/src/components/favorites/FavoriteButton.tsx b/client/src/components/favorites/FavoriteButton.tsx new file mode 100644 index 0000000..018b632 --- /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-primary shadow-sm transition-colors hover:bg-primary/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 ( + +