diff --git a/src/app/page.tsx b/src/app/page.tsx index 64c2463..78c171e 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,8 +1,10 @@ import { MovieList } from "@/components/molecules/MovieList"; +import { TrackedMovies } from "@/components/molecules/TrackedMovies"; export default async function Home() { return ( <> + = ({ + movie, + isUpcoming, +}) => { + const daysSinceRelease = Math.abs( + Math.floor( + (new Date().getTime() - new Date(movie.release_date).getTime()) / + (1000 * 60 * 60 * 24) + ) + ); + + return ( + +
+ {movie.title} +
+ +
+

+ {movie.title} +

+
+
+ {isUpcoming ? ( + + ) : ( + + )} + {formatter.formatDate(movie.release_date)} +
+ + {!!movie.vote_average && ( +
+ + {movie.vote_average.toFixed(1)} +
+ )} + + {movie.favorite && ( +
+ )} +
+
+ +
+ {isUpcoming + ? `za ${daysSinceRelease} dni` + : `od ${daysSinceRelease} dni`} +
+ + ); +}; diff --git a/src/components/molecules/TrackedMovies/index.tsx b/src/components/molecules/TrackedMovies/index.tsx new file mode 100644 index 0000000..27f5bea --- /dev/null +++ b/src/components/molecules/TrackedMovies/index.tsx @@ -0,0 +1,84 @@ +"use client"; +import { FC } from "react"; +import { useGlobalStore } from "@/app/store/globalStore"; +import Link from "next/link"; +import { FaCalendar, FaClock, FaStar } from "react-icons/fa"; +import { MovieRow } from "@/components/atoms/MovieRow"; + +export const TrackedMovies: FC = () => { + const { movies } = useGlobalStore(); + + if (movies.length === 0) { + return null; + } + + const today = new Date(); + const upcoming = movies.filter( + (movie) => new Date(movie.release_date) > today + ); + const inCinema = movies.filter((movie) => { + const daysSinceRelease = Math.floor( + (new Date().getTime() - new Date(movie.release_date).getTime()) / + (1000 * 60 * 60 * 24) + ); + + return ( + new Date(movie.release_date) <= today && + daysSinceRelease <= 30 && + !movie.seen + ); + }); + + // Sort by release date. + const sortedUpcoming = upcoming.sort( + (a, b) => + new Date(a.release_date).getTime() - new Date(b.release_date).getTime() + ); + const sortedInCinema = inCinema.sort( + (a, b) => + new Date(b.release_date).getTime() - new Date(a.release_date).getTime() + ); + + return ( +
+
+
+ {/* Currently in cinemas. */} + {sortedInCinema.length > 0 && ( +
+

+ + Aktualnie w kinach ({sortedInCinema.length}) +

+
+ {sortedInCinema.map((movie) => ( + + ))} +
+
+ )} + {/* Upcoming premieres. */} + {sortedUpcoming.length > 0 && ( +
+

+ + Nadchodzące premiery ({sortedUpcoming.length}) +

+
+ {sortedUpcoming.map((movie) => ( + + ))} +
+
+ )} +
+ + {sortedUpcoming.length === 0 && sortedInCinema.length === 0 && ( +

+ Wszystkie śledzone filmy zostały już obejrzane +

+ )} +
+
+ ); +};