From 653380f0fbf9a9a98bf43b410ac87c78738231f2 Mon Sep 17 00:00:00 2001 From: Norbert Maciaszek Date: Thu, 21 Aug 2025 21:55:59 +0200 Subject: [PATCH] feat: enhance MovieList and MovieRow components with display type toggle and additional props for improved flexibility --- src/app/odkrywaj/page.tsx | 8 +++++ src/components/atoms/Dropdown/index.tsx | 12 +++++-- src/components/atoms/MovieRow/index.tsx | 35 ++++++++++++-------- src/components/molecules/MovieCast/index.tsx | 2 +- src/components/molecules/MovieList/index.tsx | 32 +++++++++++++++--- 5 files changed, 67 insertions(+), 22 deletions(-) diff --git a/src/app/odkrywaj/page.tsx b/src/app/odkrywaj/page.tsx index d7ac6e8..d7b61c9 100644 --- a/src/app/odkrywaj/page.tsx +++ b/src/app/odkrywaj/page.tsx @@ -47,6 +47,8 @@ export default async function Home() { loadMore icon={} colors="blue" + showFilters={false} + displayType="list" /> @@ -57,6 +59,8 @@ export default async function Home() { loadMore icon={} colors="blue" + showFilters={false} + displayType="list" /> @@ -67,6 +71,8 @@ export default async function Home() { loadMore icon={} colors="red" + showFilters={false} + displayType="list" /> @@ -77,6 +83,8 @@ export default async function Home() { loadMore icon={} colors="green" + showFilters={false} + displayType="list" /> diff --git a/src/components/atoms/Dropdown/index.tsx b/src/components/atoms/Dropdown/index.tsx index 0731934..5cc0430 100644 --- a/src/components/atoms/Dropdown/index.tsx +++ b/src/components/atoms/Dropdown/index.tsx @@ -1,6 +1,6 @@ "use client"; import { useOutsideClick } from "@/hooks/useOutsideClick"; -import { FC, useEffect, useRef, useState } from "react"; +import { FC, ReactNode, useEffect, useRef, useState } from "react"; import { FaFilter } from "react-icons/fa"; import { Button } from "../Button"; @@ -9,11 +9,17 @@ type Props = { label: string; value: string; }[]; + icon?: ReactNode; defaultValue: string; callback?: (value: string) => void; }; -export const Dropdown: FC = ({ items, defaultValue, callback }) => { +export const Dropdown: FC = ({ + items, + icon, + defaultValue, + callback, +}) => { const ref = useRef(null); const [isOpen, setIsOpen] = useState(false); const [value, setValue] = useState(defaultValue); @@ -27,7 +33,7 @@ export const Dropdown: FC = ({ items, defaultValue, callback }) => { return (
= ({ +type Props = { + movie: Movie; + isUpcoming?: boolean; + compact?: boolean; +}; + +export const MovieRow: FC = ({ movie, - isUpcoming, + isUpcoming = false, + compact = false, }) => { const daysSinceRelease = Math.abs( Math.floor( @@ -56,17 +63,19 @@ export const MovieRow: FC<{ movie: Movie; isUpcoming: boolean }> = ({
-
- {isUpcoming - ? `za ${daysSinceRelease} dni` - : `od ${daysSinceRelease} dni`} -
+ {!compact && ( +
+ {isUpcoming + ? `za ${daysSinceRelease} dni` + : `od ${daysSinceRelease} dni`} +
+ )} ); }; diff --git a/src/components/molecules/MovieCast/index.tsx b/src/components/molecules/MovieCast/index.tsx index 15a0bc4..5d65800 100644 --- a/src/components/molecules/MovieCast/index.tsx +++ b/src/components/molecules/MovieCast/index.tsx @@ -71,7 +71,7 @@ export const MovieCast: FC = ({ movieDetails }) => { {limit < movieDetails.credits.cast.length && (
)} @@ -201,14 +215,22 @@ export const MovieList: FC = ({ className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-y-6 gap-3 sm:gap-6 mt-8 justify-center" ref={parent} > - {sortedMovies.map((movie) => ( - - ))} + {sortedMovies.map((movie) => + display === "grid" ? ( + + ) : ( + + ) + )} )} {loadMore && filteredMovies.length > loaded && (
-