Done #1

Merged
sumitdml123 merged 5 commits from dev into main 2025-01-14 11:02:04 +00:00
4 changed files with 67 additions and 19 deletions
Showing only changes of commit 40ed26f5af - Show all commits

View file

@ -2,10 +2,10 @@ import React from "react";
import Star from "./Star"; import Star from "./Star";
const Card = ({ movie, favouriteList, setFavouriteList }) => { const Card = ({ movie, favouriteList, setFavouriteList }) => {
const { Title, Year, imdbID, Poster } = movie; const { Title, Year, Poster } = movie;
return ( return (
<div className="relative h-[30vh] w-[10vw] overflow-hidden border rounded-lg border-quadnary bg-secondary"> <div className="relative h-[30vh] w-[10vw] overflow-hidden border rounded-lg border-quadnary bg-secondary">
{favouriteList?.includes(imdbID) ? ( {favouriteList?.includes(movie) ? (
<Star <Star
fill="#FFD700" fill="#FFD700"
favouriteList={favouriteList} favouriteList={favouriteList}

View file

@ -22,14 +22,12 @@ const Star = ({
} }
const handleFavouriteList = () => { const handleFavouriteList = () => {
favouriteList?.includes(movie?.imdbID) favouriteList?.includes(movie)
? setFavouriteList((prevList) => ? setFavouriteList((prevList) =>
prevList?.filter((id) => id !== movie?.imdbID) prevList?.filter((movieItem) => movieItem !== movie)
) )
: setFavouriteList((prevList) => [...prevList, movie?.imdbID]); : setFavouriteList((prevList) => [...prevList, movie]);
let localStorageData = JSON.parse(window.localStorage.getItem("favouriteMovies"));
console.log(localStorageData)
window.localStorage.setItem("favouriteMovies", JSON.stringify({movies: [...localStorageData, movie]}));
}; };
return ( return (

View file

@ -1,4 +1,4 @@
import React, { useState } from "react"; import React, { useState, useEffect } from "react";
import useFetch from "../hooks/useFetch"; import useFetch from "../hooks/useFetch";
import { Pagination } from "@mui/material"; import { Pagination } from "@mui/material";
@ -11,8 +11,16 @@ const HomePage = () => {
const [inputValue, setInputValue] = useState(""); const [inputValue, setInputValue] = useState("");
const [searchValue, setSearchValue] = useState(""); const [searchValue, setSearchValue] = useState("");
const [page, setPage] = useState(1); const [page, setPage] = useState(1);
const [favouriteList, setFavouriteList] = useState([]); const [favouriteList, setFavouriteList] = useState(
JSON.parse(window.localStorage.getItem("favouriteMovies")) ?? []
);
const [showFavourite, setShowFavourite] = useState(false); const [showFavourite, setShowFavourite] = useState(false);
useEffect(() => {
window.localStorage.setItem("favouriteMovies", JSON.stringify(favouriteList))
console.log(favouriteList);
}, [favouriteList]);
const { data, loading, error } = useFetch( const { data, loading, error } = useFetch(
url + "&s=" + searchValue + "&page=" + page url + "&s=" + searchValue + "&page=" + page
); );
@ -57,15 +65,15 @@ const HomePage = () => {
</div> </div>
{(showFavourite && ( {(showFavourite && (
<div className="grid grid-cols-5 gap-4 mb-6 justify-center"> <div className="grid grid-cols-5 gap-4 mb-6 justify-center">
{favouriteList?.map((movie) => ( {favouriteList?.map((movie) => (
<Card <Card
key={movie?.imdbID} key={movie?.imdbID}
movie={movie} movie={movie}
setFavouriteList={setFavouriteList} setFavouriteList={setFavouriteList}
favouriteList={favouriteList} favouriteList={favouriteList}
/> />
))} ))}
</div> </div>
)) || )) ||
(data?.Search?.length > 0 && ( (data?.Search?.length > 0 && (
<div className="flex flex-col items-center m-10"> <div className="flex flex-col items-center m-10">
@ -101,3 +109,45 @@ const HomePage = () => {
}; };
export default HomePage; export default HomePage;
function SearchBar({
inputValue,
event,
setInputValue,
target,
value,
handleSearch,
setShowFavourite,
prev,
}) {
return (
<div className="flex items-center gap-10">
<form className="flex gap-3 items-center">
<input
type="text"
name="search"
id="search"
value={inputValue}
onChange={(event) => setInputValue(event?.target?.value)}
className="p-1 text-quadnary bg-secondary focus:bg-secondary rounded outline-none border border-ternary"
/>
<button
type="button"
className="px-4 py-1 font-semibold h-full rounded border border-quadnary text-quadnary bg-secondary"
onClick={handleSearch}
>
Search
</button>
</form>
<div className="">
<label htmlFor="favourite">Favourites</label>
<input
type="checkbox"
name="favourite"
id="favourite"
onClick={() => setShowFavourite((prev) => !prev)}
/>
</div>
</div>
);
}