Update global styles and refactor MovieList component: change text color in globals.css, enhance MovieList filtering logic with numeric props, and improve MovieCard layout for better UI consistency.
This commit is contained in:
		
							parent
							
								
									83e931c27f
								
							
						
					
					
						commit
						5a50387685
					
				|  | @ -3,10 +3,15 @@ import { MovieList } from "@/components/molecules/MovieList"; | ||||||
| export default async function Home() { | export default async function Home() { | ||||||
|   return ( |   return ( | ||||||
|     <> |     <> | ||||||
|       <MovieList heading="Upcoming" filterUpcoming sortDirection="desc" /> |       <MovieList heading="Upcoming" filterUpcoming={1} sortDirection="desc" /> | ||||||
|       <MovieList heading="My Watchlist" filterReleased /> |       <MovieList | ||||||
|       <MovieList heading="Seen" filterSeen /> |         heading="My Watchlist" | ||||||
|       <MovieList heading="Favorites" filterFavorites /> |         filterReleased={1} | ||||||
|  |         filterSeen={0} | ||||||
|  |         filterFavorites={0} | ||||||
|  |       /> | ||||||
|  |       <MovieList heading="Seen" filterSeen={1} /> | ||||||
|  |       <MovieList heading="Favorites" filterFavorites={1} /> | ||||||
|     </> |     </> | ||||||
|   ); |   ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| @custom-variant dark (&:is(.dark *)); | @custom-variant dark (&:is(.dark *)); | ||||||
| 
 | 
 | ||||||
| @theme { | @theme { | ||||||
|   --color-text: #1d1d1d; |   --color-text: #fafafa; | ||||||
| 
 | 
 | ||||||
|   --color-primary-50: #eefaff; |   --color-primary-50: #eefaff; | ||||||
|   --color-primary-100: #dcf5ff; |   --color-primary-100: #dcf5ff; | ||||||
|  | @ -17,41 +17,17 @@ | ||||||
|   --color-primary-900: #00547a; |   --color-primary-900: #00547a; | ||||||
|   --color-primary-950: #003049; |   --color-primary-950: #003049; | ||||||
| 
 | 
 | ||||||
|   --color-secondary-50: #ffeeee; |   --color-secondary-50: #fef9ee; | ||||||
|   --color-secondary-100: #ffdada; |   --color-secondary-100: #fdf0d5; | ||||||
|   --color-secondary-200: #ffbbbb; |   --color-secondary-200: #fadfae; | ||||||
|   --color-secondary-300: #ff8b8b; |   --color-secondary-300: #f7c77a; | ||||||
|   --color-secondary-400: #ff4949; |   --color-secondary-400: #f2a545; | ||||||
|   --color-secondary-500: #ff1111; |   --color-secondary-500: #ef8a20; | ||||||
|   --color-secondary-600: #ff0000; |   --color-secondary: #e07016; | ||||||
|   --color-secondary-700: #e70000; |   --color-secondary-700: #ba5514; | ||||||
|   --color-secondary: #be0000; |   --color-secondary-800: #944418; | ||||||
|   --color-secondary-900: #780000; |   --color-secondary-900: #773917; | ||||||
|   --color-secondary-950: #560000; |   --color-secondary-950: #401c0a; | ||||||
| 
 |  | ||||||
|   --color-monza-50: #fff1f2; |  | ||||||
|   --color-monza-100: #ffe0e2; |  | ||||||
|   --color-monza-200: #ffc7cb; |  | ||||||
|   --color-monza-300: #ffa0a7; |  | ||||||
|   --color-monza-400: #ff6974; |  | ||||||
|   --color-monza-500: #fa3947; |  | ||||||
|   --color-monza-600: #e71b2a; |  | ||||||
|   --color-monza-700: #c1121f; |  | ||||||
|   --color-monza-800: #a1131e; |  | ||||||
|   --color-monza-900: #85171f; |  | ||||||
|   --color-monza-950: #49060b; |  | ||||||
| 
 |  | ||||||
|   --color-pink-lady-50: #fef9ee; |  | ||||||
|   --color-pink-lady-100: #fdf0d5; |  | ||||||
|   --color-pink-lady-200: #fadfae; |  | ||||||
|   --color-pink-lady-300: #f7c77a; |  | ||||||
|   --color-pink-lady-400: #f2a545; |  | ||||||
|   --color-pink-lady-500: #ef8a20; |  | ||||||
|   --color-pink-lady-600: #e07016; |  | ||||||
|   --color-pink-lady-700: #ba5514; |  | ||||||
|   --color-pink-lady-800: #944418; |  | ||||||
|   --color-pink-lady-900: #773917; |  | ||||||
|   --color-pink-lady-950: #401c0a; |  | ||||||
| 
 | 
 | ||||||
|   --color-hippie-blue-50: #f4f7fb; |   --color-hippie-blue-50: #f4f7fb; | ||||||
|   --color-hippie-blue-100: #e9eff5; |   --color-hippie-blue-100: #e9eff5; | ||||||
|  | @ -72,7 +48,7 @@ | ||||||
| 
 | 
 | ||||||
| @layer base { | @layer base { | ||||||
|   body { |   body { | ||||||
|     @apply bg-pink-lady-50 text-text; |     @apply bg-hippie-blue-950 text-text; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   .container { |   .container { | ||||||
|  |  | ||||||
|  | @ -55,7 +55,7 @@ export const MovieCard: FC<Props> = ({ layout = "default", ...movie }) => { | ||||||
| 
 | 
 | ||||||
|   if (layout === "zeus") { |   if (layout === "zeus") { | ||||||
|     return ( |     return ( | ||||||
|       <article className="flex flex-col w-full shadow-md rounded-lg overflow-hidden bg-white"> |       <article className="flex flex-col w-full shadow-lg rounded-t-lg overflow-hidden bg-black/50 shadow-white/5"> | ||||||
|         <figure className="relative "> |         <figure className="relative "> | ||||||
|           <img |           <img | ||||||
|             className="w-full object-cover xl:h-[420px]" |             className="w-full object-cover xl:h-[420px]" | ||||||
|  | @ -135,7 +135,7 @@ export const MovieCard: FC<Props> = ({ layout = "default", ...movie }) => { | ||||||
|           </div> |           </div> | ||||||
|           <p |           <p | ||||||
|             className={`text-sm mt-2 flex items-center gap-1 leading-[1.1] ${ |             className={`text-sm mt-2 flex items-center gap-1 leading-[1.1] ${ | ||||||
|               isReleased ? "text-green-700" : "text-yellow-700" |               isReleased ? "text-green-700" : "text-yellow-500" | ||||||
|             }`}
 |             }`}
 | ||||||
|           > |           > | ||||||
|             {isReleased ? <RiCalendarCheckLine /> : <RiCalendarScheduleLine />} |             {isReleased ? <RiCalendarCheckLine /> : <RiCalendarScheduleLine />} | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ export const ReadMore: FC<Props> = ({ text }) => { | ||||||
|     <p |     <p | ||||||
|       className={`${ |       className={`${ | ||||||
|         isOpen ? "line-clamp-none" : "line-clamp-2" |         isOpen ? "line-clamp-none" : "line-clamp-2" | ||||||
|       } hover:text-primary cursor-pointer`}
 |       } hover:text-secondary cursor-pointer`}
 | ||||||
|       onClick={() => setIsOpen(!isOpen)} |       onClick={() => setIsOpen(!isOpen)} | ||||||
|     > |     > | ||||||
|       {text} |       {text} | ||||||
|  |  | ||||||
|  | @ -10,10 +10,10 @@ type Props = { | ||||||
|   heading?: string; |   heading?: string; | ||||||
|   overrideMovies?: Movie[]; |   overrideMovies?: Movie[]; | ||||||
| 
 | 
 | ||||||
|   filterSeen?: boolean; |   filterSeen?: 0 | 1; | ||||||
|   filterFavorites?: boolean; |   filterFavorites?: 0 | 1; | ||||||
|   filterUpcoming?: boolean; |   filterUpcoming?: 0 | 1; | ||||||
|   filterReleased?: boolean; |   filterReleased?: 0 | 1; | ||||||
| 
 | 
 | ||||||
|   fluid?: boolean; |   fluid?: boolean; | ||||||
|   showFilters?: boolean; |   showFilters?: boolean; | ||||||
|  | @ -43,12 +43,23 @@ export const MovieList: FC<Props> = ({ | ||||||
| 
 | 
 | ||||||
|   const filteredMovies = movies.filter((movie) => { |   const filteredMovies = movies.filter((movie) => { | ||||||
|     let result = true; |     let result = true; | ||||||
|     if (filterSeen) result = !!movie.seen; |     const today = new Date(); | ||||||
|     if (filterFavorites) result = result && !!movie.favorite; |     if (filterSeen !== undefined) { | ||||||
|     if (filterUpcoming) |       result = movie.seen === !!filterSeen; | ||||||
|       result = result && new Date(movie.release_date) > new Date(); |     } | ||||||
|     if (filterReleased) |     if (filterFavorites !== undefined) { | ||||||
|       result = result && new Date(movie.release_date) < new Date(); |       result = result && movie.favorite === !!filterFavorites; | ||||||
|  |     } | ||||||
|  |     if (filterUpcoming !== undefined) { | ||||||
|  |       const releaseDate = new Date(movie.release_date); | ||||||
|  |       result = | ||||||
|  |         result && filterUpcoming ? releaseDate > today : releaseDate < today; | ||||||
|  |     } | ||||||
|  |     if (filterReleased !== undefined) { | ||||||
|  |       const releaseDate = new Date(movie.release_date); | ||||||
|  |       result = | ||||||
|  |         result && filterReleased ? releaseDate < today : releaseDate > today; | ||||||
|  |     } | ||||||
|     return result; |     return result; | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|  | @ -69,8 +80,8 @@ export const MovieList: FC<Props> = ({ | ||||||
|   return ( |   return ( | ||||||
|     <section className="my-4 md:my-10"> |     <section className="my-4 md:my-10"> | ||||||
|       <div className={`${fluid ? "max-w-full" : "container"}`}> |       <div className={`${fluid ? "max-w-full" : "container"}`}> | ||||||
|         <div className="row"> |  | ||||||
|         {heading && ( |         {heading && ( | ||||||
|  |           <div className="row"> | ||||||
|             <div className="col-12 md:col-10 flex gap-2 items-center"> |             <div className="col-12 md:col-10 flex gap-2 items-center"> | ||||||
|               {showFilters && ( |               {showFilters && ( | ||||||
|                 <Dropdown |                 <Dropdown | ||||||
|  | @ -85,8 +96,8 @@ export const MovieList: FC<Props> = ({ | ||||||
|               )} |               )} | ||||||
|               <h2 className="text-2xl font-bold">{heading}</h2> |               <h2 className="text-2xl font-bold">{heading}</h2> | ||||||
|             </div> |             </div> | ||||||
|           )} |  | ||||||
|           </div> |           </div> | ||||||
|  |         )} | ||||||
|         {filteredMovies.length === 0 && ( |         {filteredMovies.length === 0 && ( | ||||||
|           <p className="text-text/60 text-sm">No movies found</p> |           <p className="text-text/60 text-sm">No movies found</p> | ||||||
|         )} |         )} | ||||||
|  |  | ||||||
|  | @ -41,14 +41,14 @@ export const Search = () => { | ||||||
|   return ( |   return ( | ||||||
|     <> |     <> | ||||||
|       <button |       <button | ||||||
|         className="text-text hover:text-primary-900 cursor-pointer" |         className="text-text hover:text-secondary cursor-pointer transition-colors" | ||||||
|         onClick={() => setIsSearchOpen(!isSearchOpen)} |         onClick={() => setIsSearchOpen(!isSearchOpen)} | ||||||
|       > |       > | ||||||
|         <IoSearch size={25} fill="currentColor" /> |         <IoSearch size={25} fill="currentColor" /> | ||||||
|       </button> |       </button> | ||||||
| 
 | 
 | ||||||
|       {isSearchOpen && ( |       {isSearchOpen && ( | ||||||
|         <div className="fixed inset-0 bg-black/50 z-20 backdrop-blur-sm overflow-y-auto flex items-center"> |         <div className="fixed inset-0 bg-black/50 z-20 backdrop-blur-sm overflow-y-auto flex py-20"> | ||||||
|           <button |           <button | ||||||
|             className="absolute top-4 right-4 text-white cursor-pointer" |             className="absolute top-4 right-4 text-white cursor-pointer" | ||||||
|             onClick={handleClose} |             onClick={handleClose} | ||||||
|  | @ -66,7 +66,7 @@ export const Search = () => { | ||||||
|               /> |               /> | ||||||
|             </div> |             </div> | ||||||
|             {results && ( |             {results && ( | ||||||
|               <div className="col-span-full"> |               <div className="col-span-full mt-2 lg:mt-10 text-center "> | ||||||
|                 <p className="text-white">{total_results} movies found</p> |                 <p className="text-white">{total_results} movies found</p> | ||||||
|               </div> |               </div> | ||||||
|             )} |             )} | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ const links = [ | ||||||
| 
 | 
 | ||||||
| export const Navbar = () => { | export const Navbar = () => { | ||||||
|   return ( |   return ( | ||||||
|     <header className="bg-white shadow-sm max-sm:sticky top-0 w-full z-30"> |     <header className="bg-hippie-blue-700 shadow-sm max-sm:sticky top-0 w-full z-30"> | ||||||
|       <div className="container"> |       <div className="container"> | ||||||
|         <div className="flex items-center gap-8 py-4"> |         <div className="flex items-center gap-8 py-4"> | ||||||
|           <Link className="block text-teal-600" href="/"> |           <Link className="block text-teal-600" href="/"> | ||||||
|  | @ -42,7 +42,7 @@ export const Navbar = () => { | ||||||
|               <div className="flex gap-4 sm:gap-6"> |               <div className="flex gap-4 sm:gap-6"> | ||||||
|                 <Search /> |                 <Search /> | ||||||
|                 <a |                 <a | ||||||
|                   className="block rounded-md bg-primary px-5 py-2.5 text-sm font-medium text-white transition hover:bg-primary-900" |                   className="block border-b-2 border-secondary-700 px-5 py-2.5 text-sm font-medium text-white transition hover:bg-secondary-700" | ||||||
|                   href="#" |                   href="#" | ||||||
|                 > |                 > | ||||||
|                   Random Movie |                   Random Movie | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue