Skip to content

Instantly share code, notes, and snippets.

@adrianhajdin
Created March 4, 2022 06:49
Show Gist options
  • Save adrianhajdin/997a8cdf94234e889fa47be89a4759f1 to your computer and use it in GitHub Desktop.
Save adrianhajdin/997a8cdf94234e889fa47be89a4759f1 to your computer and use it in GitHub Desktop.
Movie App
@import url("https://fonts.googleapis.com/css?family=Roboto+Slab:100,300,400,700");
@import url("https://fonts.googleapis.com/css?family=Raleway:300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i");
* {
margin: 0;
border: 0;
box-sizing: border-box;
}
:root {
--font-roboto: "Roboto Slab", serif;
--font-raleway: "Raleway", sans-serif;
}
body {
font-family: var(--font-roboto);
background-color: #212426;
}
.app {
padding: 4rem;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
h1 {
font-size: 3rem;
letter-spacing: 0.9px;
background: linear-gradient(
90deg,
rgba(249, 211, 180, 1) 0%,
rgba(249, 211, 180, 0) 100%
);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
width: fit-content;
}
.search {
width: 71%;
margin: 4rem 0 2rem;
display: flex;
align-items: center;
justify-content: center;
padding: 1.5rem 1.75rem;
border-radius: 3rem;
background: #1f2123;
-webkit-box-shadow: 5px 5px 7px #1c1d1f, -5px -5px 7px #222527;
box-shadow: 5px 5px 7px #1c1d1f, -5px -5px 7px #222527;
}
.search input {
flex: 1;
border: none;
font-size: 1.5rem;
font-family: var(--font-raleway);
font-weight: 500;
padding-right: 1rem;
outline: none;
color: #a1a1a1;
background: #1f2123;
}
.search img {
width: 35px;
height: 35px;
cursor: pointer;
}
/* .search button {
padding: 20px 40px;
border-radius: 0.5rem;
margin-left: 15px;
color: #a1a1a1;
font-family: var(--font-raleway);
font-weight: 900;
letter-spacing: 0.75px;
font-size: 1.25rem;
cursor: pointer;
background: #1f2123;
-webkit-box-shadow: 5px 5px 7px #1c1d1f, -5px -5px 7px #222527;
box-shadow: 5px 5px 7px #1c1d1f, -5px -5px 7px #222527;
} */
.empty {
width: 100%;
margin-top: 3rem;
display: flex;
justify-content: center;
align-items: center;
}
.empty h2 {
font-size: 1.25rem;
color: #f9d3b4;
font-family: var(--font-raleway);
}
.container {
width: 100%;
margin-top: 3rem;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
}
.movie {
width: 310px;
height: 460px;
margin: 1.5rem;
position: relative;
border-radius: 12px;
overflow: hidden;
border: none;
transition: all 0.4s cubic-bezier(0.175, 0.885, 0, 1);
box-shadow: 0px 13px 10px -7px rgba(0, 0, 0, 0.1);
}
.movie div:nth-of-type(1) {
position: absolute;
padding: 16px;
width: 100%;
opacity: 0;
top: 0;
color: #f9d3b4;
}
.movie:hover {
box-shadow: 0px 30px 18px -8px rgba(0, 0, 0, 0.1);
transform: scale(1.05, 1.05);
}
.movie div:nth-of-type(2) {
width: 100%;
height: 100%;
}
.movie div:nth-of-type(2) img {
height: 100%;
width: 100%;
}
.movie div:nth-of-type(3) {
z-index: 2;
background-color: #343739;
padding: 16px 24px 24px 24px;
position: absolute;
bottom: 0;
right: 0;
left: 0;
}
.movie div:nth-of-type(3) span {
font-family: "Raleway", sans-serif;
text-transform: uppercase;
font-size: 13px;
letter-spacing: 2px;
font-weight: 500;
color: #f0f0f0;
}
.movie div:nth-of-type(3) h3 {
margin-top: 5px;
font-family: "Roboto Slab", serif;
color: #f9d3b4;
}
.movie:hover div:nth-of-type(2) {
height: 100%;
opacity: 0.3;
}
.movie:hover div:nth-of-type(3) {
background-color: transparent;
}
.movie:hover div:nth-of-type(1) {
opacity: 1;
}
@media screen and (max-width: 600px) {
.app {
padding: 4rem 2rem;
}
.search {
padding: 1rem 1.75rem;
width: 100%;
}
.search input {
font-size: 1rem;
}
.search img {
width: 20px;
height: 20px;
}
}
@media screen and (max-width: 400px) {
.app {
padding: 4rem 1rem;
}
h1 {
font-size: 2rem;
}
.container {
margin-top: 2rem;
}
.movie {
width: "100%";
margin: 1rem;
}
}
import React, { useState, useEffect } from "react";
import MovieCard from "./MovieCard";
import SearchIcon from "./search.svg";
import "./App.css";
const API_URL = "http://www.omdbapi.com?apikey=b6003d8a";
const App = () => {
const [searchTerm, setSearchTerm] = useState("");
const [movies, setMovies] = useState([]);
useEffect(() => {
searchMovies("Batman");
}, []);
const searchMovies = async (title) => {
const response = await fetch(`${API_URL}&s=${title}`);
const data = await response.json();
setMovies(data.Search);
};
return (
<div className="app">
<h1>MovieLand</h1>
<div className="search">
<input
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
placeholder="Search for movies"
/>
<img
src={SearchIcon}
alt="search"
onClick={() => searchMovies(searchTerm)}
/>
</div>
{movies?.length > 0 ? (
<div className="container">
{movies.map((movie) => (
<MovieCard movie={movie} />
))}
</div>
) : (
<div className="empty">
<h2>No movies found</h2>
</div>
)}
</div>
);
};
export default App;
import React from 'react';
const MovieCard = ({ movie: { imdbID, Year, Poster, Title, Type } }) => {
return (
<div className="movie" key={imdbID}>
<div>
<p>{Year}</p>
</div>
<div>
<img src={Poster !== "N/A" ? Poster : "https://via.placeholder.com/400"} alt={Title} />
</div>
<div>
<span>{Type}</span>
<h3>{Title}</h3>
</div>
</div>
);
}
export default MovieCard;
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@Bhavyansh-prajapati-0805

Hey all the setup is Cool!

@Ok45sg
Copy link

Ok45sg commented Mar 23, 2024

Hi folks,

For those who are struggling to get the code for 'search.svg,' simply click the "Display the source blob" button shown below.

image

Thanks, it works. Upon clicking that icon, it went up to app.jss and scrolled back to look at the search.svg, lo and behold, the code appeared there. I tried to paste it here:
search

@MPNKOSI
Copy link

MPNKOSI commented Apr 1, 2024

search.svg is there just click this "<>" it wll show thats how i got it

@Sayan447
Copy link

Sayan447 commented Apr 5, 2024

Can anyone provide the readme description?

@JuanCollince
Copy link

Folks initially the codes worked well on my end but now nothing to display its dissapointing

@herre0
Copy link

herre0 commented May 2, 2024

<svg width="42" height="42" viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M29.8594 29.8594L39.4219 39.4219" stroke="#D88769" stroke-width="4.5" stroke-linecap="round" stroke-linejoin="round"/> <path d="M17.9062 33.0469C26.2682 33.0469 33.0469 26.2682 33.0469 17.9062C33.0469 9.54431 26.2682 2.76562 17.9062 2.76562C9.54431 2.76562 2.76562 9.54431 2.76562 17.9062C2.76562 26.2682 9.54431 33.0469 17.9062 33.0469Z" stroke="#D88769" stroke-width="4.5" stroke-linecap="round" stroke-linejoin="round"/> </svg>

@Captain-Per0xide
Copy link

CSS is not Working as display in the Video

@pola2555
Copy link

pola2555 commented May 22, 2024

if you want to display more then 10 movies you can adjust the function searchMovies to this one

const searchMovies = async (search, pages = 100) => {
    let allMovies = [];
    for (let page = 1; page <= pages; page++) {
      const response = await fetch(`${API_URL}&s=${search}&page=${page}`);
      const data = await response.json();
      if (data.Search) {
        allMovies = allMovies.concat(data.Search);
      } else {
        break; // Stop if no more results
      }
    }
    setMovies(allMovies);
  }

@niharika1102
Copy link

niharika1102 commented May 24, 2024

I am not able to fetch data from the movie search results. It tells me, can't read properties of null. Can someone help me out with this?

@lespanola
Copy link

Hi folks,

For those who are struggling to get the code for 'search.svg,' simply click the "Display the source blob" button shown below.

image

I tried this and it worked. Thank you so much for your help. Awesome!

@tawshif-a-devo
Copy link

when i am importing moviecard on app.js it showing this eror :
Already included file name 'c:/Users/Tech aarohi/Desktop/my react pro/my-react-proj/src/MovieCard.jsx' differs from file name 'c:/Users/Tech aarohi/Desktop/my react pro/my-react-proj/src/Moviecard.jsx' only in casing.
The file is in the program because:
Imported via '../src/MovieCard' from file 'c:/Users/Tech aarohi/Desktop/my react pro/my-react-proj/src/App.jsx'
Root file specified for compilation

@qa3emnik
Copy link

qa3emnik commented Jun 3, 2024

I am not able to fetch data from the movie search results. It tells me, can't read properties of null. Can someone help me out with this?

can you share a shot of the screen.

@qa3emnik
Copy link

qa3emnik commented Jun 3, 2024

when i am importing moviecard on app.js it showing this eror : Already included file name 'c:/Users/Tech aarohi/Desktop/my react pro/my-react-proj/src/MovieCard.jsx' differs from file name 'c:/Users/Tech aarohi/Desktop/my react pro/my-react-proj/src/Moviecard.jsx' only in casing. The file is in the program because: Imported via '../src/MovieCard' from file 'c:/Users/Tech aarohi/Desktop/my react pro/my-react-proj/src/App.jsx' Root file specified for compilation

Is it solved?

@MPNKOSI
Copy link

MPNKOSI commented Jun 3, 2024 via email

@qa3emnik
Copy link

qa3emnik commented Jun 3, 2024

If you know how to write it, create new app and start code yourself. without looking at the source code, It might take some hours, but you will be resolve it. I'm sure, because I know that feeling.

@MPNKOSI
Copy link

MPNKOSI commented Jun 3, 2024 via email

@dawudab
Copy link

dawudab commented Jun 11, 2024

I've been trying to figure this out, everything was going good until I started adding the MovieCard. Now it seems like nothing is working. I'm not getting any errors on VSC, just when I try to open to open the website to preview. After failing i've tried to just copy the code and its still not working. Back and front from here to chatgpt and its still not working, this is the error im getting:

ERROR
Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

Check the render method of App.
Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

Check the render method of App.
at createFiberFromTypeAndProps (http://localhost:3000/static/js/bundle.js:30445:21)
at createFiberFromElement (http://localhost:3000/static/js/bundle.js:30466:19)
at updateElement (http://localhost:3000/static/js/bundle.js:17494:23)
at updateSlot (http://localhost:3000/static/js/bundle.js:17587:26)
at reconcileChildrenArray (http://localhost:3000/static/js/bundle.js:17733:26)
at reconcileChildFibers (http://localhost:3000/static/js/bundle.js:18120:20)
at reconcileChildren (http://localhost:3000/static/js/bundle.js:22547:32)
at updateHostComponent (http://localhost:3000/static/js/bundle.js:23191:7)
at beginWork (http://localhost:3000/static/js/bundle.js:24643:18)
at HTMLUnknownElement.callCallback (http://localhost:3000/static/js/bundle.js:9601:18)

I'm just really lost and don't understand anything.

@zakariem
Copy link

zakariem commented Jul 28, 2024

the search icon code

@amannesiha
Copy link

the search icon code

@amannesiha
Copy link

Create a file name "search.svg" and copy ,paste the code above

@anasali321
Copy link

anasali321 commented Aug 12, 2024 via email

@Divyaa01
Copy link

Why it is movies?.length . why not movies.length?

If you use movies.length? it might give you an error I guess. While chaining you are supposed to write it like: 'object?.property'.

@Dharmaajay2222
Copy link

CSS is not Working as display in the Video

yes i also hadd that problem

@ojrandy
Copy link

ojrandy commented Sep 20, 2024

import React from "react";
import ReactDOM from "react-dom/client";

import App from "./App";
import "./index.css";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
// <React.StrictMode>

// </React.StrictMode>
);

For the Newer version of React, you need to use the Strict Mode. But with the strict Mode, Console.log will give to the same values

@ojrandy
Copy link

ojrandy commented Sep 20, 2024

import React from "react"; import ReactDOM from "react-dom/client";

import App from "./App"; import "./index.css";

const root = ReactDOM.createRoot(document.getElementById("root")); root.render( // <React.StrictMode> // </React.StrictMode> );

For the Newer version of React, you need to use the Strict Mode. But with the strict Mode, Console.log will give to the same values

import React from "react";
import ReactDOM from "react-dom/client";

import App from "./App";
import "./index.css";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
// <React.StrictMode>

// </React.StrictMode>
);

For the Newer version of React, you need to use the Strict Mode. But with the strict Mode, Console.log will give to the same values

@Bonga123
Copy link

Bonga123 commented Oct 3, 2024

true

@Jeeban369
Copy link

i faced the same problem : "API not working"

solution: Verify Your Email ( ...by the received link)

@Jayb-oy17
Copy link

Jayb-oy17 commented Nov 6, 2024 via email

@its-me-mhd
Copy link

if you get any issue contact me i am here to help 4 everybody

@AishikDasgupta
Copy link

i think the api isn't working
help me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment