diff --git a/src/App.css b/src/App.css index 44438c7..c421f1c 100644 --- a/src/App.css +++ b/src/App.css @@ -2,6 +2,7 @@ --poster-width: 15rem; --posters-wide: 10; + --posters-gap: 1rem; } #root { @@ -12,13 +13,15 @@ main { display: flex; background-size: cover; + justify-content: center; } #movie-wall-container { display: inline-flex; flex-wrap: wrap; - flex-basis: calc(var(--poster-width)*var(--posters-wide)) + flex-basis: 60%; + gap: 1em; } #sidebar { @@ -29,6 +32,16 @@ main { width: var(--poster-width); aspect-ratio: 2/3; background-size: cover; + display: grid; + + img { + height: 100%; + aspect-ratio: 2/3; + } +} + +.poster>* { + grid-area: 1/1; } @@ -38,8 +51,9 @@ main { height: 100%; width: 100%; background-color: rgba(255, 255, 255, 0.5); - opacity: 0; cursor: pointer; + z-index: 2; + opacity: 0; } .overlay:hover { diff --git a/src/App.tsx b/src/App.tsx index 2525a62..4f71bf2 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,7 +4,6 @@ import { MovieWall } from './objects/movie-wall' import { useState, useEffect } from 'react' import tmdb from './objects/tmdb' import { Sidebar } from './objects/sidebar' -import { makeImgUrl } from './functions' import { Movie } from './objects/movie-wall' export type Config = { @@ -29,11 +28,13 @@ function App() { const [movies, setMovies] = useState([new MovieClass()]) const [backdrop, setBackdrop] = useState("") const [chosenMovie, setChosenMovie] = useState(new MovieClass()) + const [loadedMovies, setLoadedMovies] = useState(0) useEffect(() => { tmdb.getPopular(config, setMovies) }, []) useEffect(() => { + setLoadedMovies(movies.length) if (movies[0].backdrop_path) { - setBackdrop(makeImgUrl(movies[0].backdrop_path)) + setBackdrop(tmdb.makeBgImgUrl(movies[0].backdrop_path)) } }, [movies]) return ( @@ -43,8 +44,14 @@ function App() {
- -
+ {loadedMovies === movies.length ? + + : "LOADING " + loadedMovies}
diff --git a/src/functions.tsx b/src/functions.tsx index 1ef49bf..6ab9370 100644 --- a/src/functions.tsx +++ b/src/functions.tsx @@ -19,7 +19,4 @@ export function relocateArrayItem(array: Array, from: number, to: number) { /** * Returns a complete tmdb image url */ -export function makeImgUrl(path: string) { - return "url(https://image.tmdb.org/t/p/w500" + path + ")" -} diff --git a/src/objects/movie-wall.tsx b/src/objects/movie-wall.tsx index 292d9a5..3542647 100644 --- a/src/objects/movie-wall.tsx +++ b/src/objects/movie-wall.tsx @@ -1,7 +1,6 @@ -import React from "react" +import React, { useState } from "react" import { Config } from "../App" import tmdb from "./tmdb" -import { makeImgUrl } from "../functions" export interface Movie { id: number | null @@ -32,15 +31,17 @@ const sampleData = { interface MovieWallProps extends React.ComponentPropsWithRef<"div"> { movies: Array; setMovies: Function; + setChosenMovie: Function; + setLoadedMovies: Function; config: Config; } -export function MovieWall({ movies, setMovies, config }: MovieWallProps) { +export function MovieWall({ movies, setMovies, config, setChosenMovie, setLoadedMovies }: MovieWallProps) { const posters: Array = [] for (let i = 0; i < movies.length; i++) { posters.push( - + ) } return <> @@ -54,17 +55,26 @@ interface PosterProps extends React.ComponentPropsWithRef<"div"> { index: number; config: Config; setMovies: Function; + setChosenMovie: Function; + setLoadedMovies: Function; } -function Poster({ movie, config, listSimilar, setMovies }: PosterProps) { +function Poster({ movie, config, listSimilar, setMovies, setChosenMovie, setLoadedMovies }: PosterProps) { + function clickHandler() { + setChosenMovie(movie) + listSimilar(config, movie, setMovies) + } const style = { - backgroundImage: makeImgUrl(movie.poster_path) + // backgroundImage: img.src } return
-
{ listSimilar(config, movie, setMovies) }}> - +
clickHandler()}>
+ console.log("LOADED IMG")} + />
} diff --git a/src/objects/sidebar.tsx b/src/objects/sidebar.tsx index 3e6281b..c6d1c51 100644 --- a/src/objects/sidebar.tsx +++ b/src/objects/sidebar.tsx @@ -1,11 +1,12 @@ import React from "react"; import { Movie } from "./movie-wall"; +import tmdb from "./tmdb"; export interface SidebarProps extends React.ComponentPropsWithRef<"div"> { movie: Movie; } export function Sidebar({ movie }: SidebarProps) { const style = { - + backgroundImage: tmdb.makeBgImgUrl(movie.backdrop_path ?? "") } return