diff --git a/src/app/page.tsx b/src/app/page.tsx
index d5877e1..5cfc556 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -11,6 +11,7 @@ import {
import { Footer, Navbar } from '@/components/ui'
import {
+ BecauseYouLiked,
MovieHero,
MovieModal,
MovieSlider,
@@ -57,19 +58,13 @@ export default async function HomePage() {
-
+
+
diff --git a/src/components/ui/movie-card.tsx b/src/components/ui/movie-card.tsx
index df8527b..5656438 100644
--- a/src/components/ui/movie-card.tsx
+++ b/src/components/ui/movie-card.tsx
@@ -4,7 +4,12 @@ import clsx from 'clsx'
import Image from 'next/image'
import Link from 'next/link'
-import { useMovieModalStore, useStore, useUserMoviesStore } from '@/store'
+import {
+ useMovieModalStore,
+ useStore,
+ useUserMoviePreferences,
+ useUserMoviesStore,
+} from '@/store'
import { Check, Dislike, Like, Play, Plus } from '@/components/icons'
import { MovieActionButton } from './movie-action-button'
@@ -28,6 +33,16 @@ export const MovieCard = ({ movie, scaleOnHover = true }: Props) => {
const updateUserMovies = useUserMoviesStore((store) => store.updateUserMovies)
const openMovieModal = useMovieModalStore((store) => store.openMovieModal)
+ const isMovieLiked = useStore(useUserMoviePreferences, (store) =>
+ store.isMovieLiked(movie.id),
+ )
+ const updateLikedMovies = useUserMoviePreferences(
+ (store) => store.updateLikedMovies,
+ )
+ const updateDislikedMovies = useUserMoviePreferences(
+ (store) => store.updateDislikedMovies,
+ )
+
const genres = (movie?.genre_ids ?? [])
.map((genreId) => getGenreById(genreId))
.join(' • ')
@@ -46,6 +61,19 @@ export const MovieCard = ({ movie, scaleOnHover = true }: Props) => {
updateUserMovies(movie)
}
+ const onClickLike = (event: React.MouseEvent) => {
+ event.stopPropagation()
+ updateLikedMovies(movie)
+ }
+
+ const onClickDislike = (event: React.MouseEvent) => {
+ event.stopPropagation()
+ if (isMovieLiked) {
+ updateLikedMovies(movie)
+ }
+ updateDislikedMovies(movie)
+ }
+
return (
{
{isMovieInUserList ? : }
-
-
+
+
-
+
diff --git a/src/components/ui/movie-hero.tsx b/src/components/ui/movie-hero.tsx
index e286b74..0873518 100644
--- a/src/components/ui/movie-hero.tsx
+++ b/src/components/ui/movie-hero.tsx
@@ -1,30 +1,54 @@
+'use client'
+
import Image from 'next/image'
import clsx from 'clsx'
import Link from 'next/link'
-import { Info, Play } from '@/components/icons'
+import { useStore, useUserMoviePreferences } from '@/store'
+
+import { Dislike, Info, Like, Play } from '@/components/icons'
+import { MovieActionButton } from './movie-action-button'
import { getImageUrl } from '@/utils'
+import type { Movie } from '@/models'
+
interface Props {
- movieId: string | number
- title: string
- overview: string
- backdrop_path: string
+ movie: Movie
movieLogo?: string | null
paddingBottom?: boolean
fadeIn?: boolean
}
export const MovieHero = ({
- movieId,
- title,
- overview,
- backdrop_path,
+ movie,
movieLogo,
paddingBottom = true,
fadeIn = false,
}: Props) => {
+ const { id: movieId, title, overview, backdrop_path } = movie
+
+ const isMovieLiked = useStore(useUserMoviePreferences, (store) =>
+ store.isMovieLiked(movie.id),
+ )
+ const updateLikedMovies = useUserMoviePreferences(
+ (store) => store.updateLikedMovies,
+ )
+ const updateDislikedMovies = useUserMoviePreferences(
+ (store) => store.updateDislikedMovies,
+ )
+
+ const onClickLike = () => {
+ updateLikedMovies(movie)
+ }
+
+ const onClickDislike = () => {
+ if (isMovieLiked) {
+ updateLikedMovies(movie)
+ }
+ updateDislikedMovies(movie)
+ }
+
return (