fix landing screen
Gitea/movie-explorer/pipeline/head There was a failure building this commit
Details
Gitea/movie-explorer/pipeline/head There was a failure building this commit
Details
This commit is contained in:
parent
1427aedbbf
commit
66a44ea8ae
|
@ -10,6 +10,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/axios": "^0.14.0",
|
"@types/axios": "^0.14.0",
|
||||||
"axios": "^1.6.8",
|
"axios": "^1.6.8",
|
||||||
|
"lucide-react": "^0.451.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-crossfade-image": "^1.2.0",
|
"react-crossfade-image": "^1.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
|
@ -2998,6 +2999,14 @@
|
||||||
"yallist": "^3.0.2"
|
"yallist": "^3.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/lucide-react": {
|
||||||
|
"version": "0.451.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.451.0.tgz",
|
||||||
|
"integrity": "sha512-OwQ3uljZLp2cerj8sboy5rnhtGTCl9UCJIhT1J85/yOuGVlEH+xaUPR7tvNdddPvmV5M5VLdr7cQuWE3hzA4jw==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/merge2": {
|
"node_modules/merge2": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/axios": "^0.14.0",
|
"@types/axios": "^0.14.0",
|
||||||
"axios": "^1.6.8",
|
"axios": "^1.6.8",
|
||||||
|
"lucide-react": "^0.451.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-crossfade-image": "^1.2.0",
|
"react-crossfade-image": "^1.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
|
|
12
src/App.tsx
12
src/App.tsx
|
@ -24,6 +24,15 @@ class MovieClass implements Movie {
|
||||||
vote_average = 0
|
vote_average = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const splash: Movie = {
|
||||||
|
id: 0,
|
||||||
|
overview: "Select a movie to see others like it. Keep going until you find something to watch!",
|
||||||
|
title: "Welcome to Movie Explorer!",
|
||||||
|
vote_average: 0,
|
||||||
|
poster_path: null,
|
||||||
|
backdrop_path: null
|
||||||
|
}
|
||||||
|
|
||||||
class WatchProvidersClass implements WatchProviders {
|
class WatchProvidersClass implements WatchProviders {
|
||||||
flatrate = [];
|
flatrate = [];
|
||||||
rent = [];
|
rent = [];
|
||||||
|
@ -41,7 +50,7 @@ function App() {
|
||||||
})
|
})
|
||||||
const [movies, setMovies] = useState([new MovieClass()])
|
const [movies, setMovies] = useState([new MovieClass()])
|
||||||
const [backdrop, setBackdrop] = useState("")
|
const [backdrop, setBackdrop] = useState("")
|
||||||
const [chosenMovie, setChosenMovie] = useState(new MovieClass())
|
const [chosenMovie, setChosenMovie] = useState(splash)
|
||||||
const [similarMoviesAvailable, setSimilarMoviesAvailable] = useState(true)
|
const [similarMoviesAvailable, setSimilarMoviesAvailable] = useState(true)
|
||||||
const [watchProviders, setWatchProviders] = useState(new WatchProvidersClass())
|
const [watchProviders, setWatchProviders] = useState(new WatchProvidersClass())
|
||||||
useEffect(() => { tmdb.getPopular(config, setMovies) }, [])
|
useEffect(() => { tmdb.getPopular(config, setMovies) }, [])
|
||||||
|
@ -95,6 +104,7 @@ function App() {
|
||||||
<HamburgerMenu setConfig={setConfig} />
|
<HamburgerMenu setConfig={setConfig} />
|
||||||
</header>
|
</header>
|
||||||
<main className="flex flex-col-reverse xl:flex-row justify-start sm:justify-center items-center sm:gap-8 grow">
|
<main className="flex flex-col-reverse xl:flex-row justify-start sm:justify-center items-center sm:gap-8 grow">
|
||||||
|
{/* //TODO: fix initial screen */}
|
||||||
<Sidebar className="flex flex-col justify-around sm:justify-between items-center bg-black/80 text-white w-full sm:w-96 h-64 sm:h-full" movie={chosenMovie} similarMoviesAvailable={similarMoviesAvailable} watchProviders={watchProviders} config={config} />
|
<Sidebar className="flex flex-col justify-around sm:justify-between items-center bg-black/80 text-white w-full sm:w-96 h-64 sm:h-full" movie={chosenMovie} similarMoviesAvailable={similarMoviesAvailable} watchProviders={watchProviders} config={config} />
|
||||||
<MovieWall
|
<MovieWall
|
||||||
className={"flex flex-wrap gap-2 flex-grow w-full md:w-11/12 justify-center items-center xl:max-w-5xl p-2"}
|
className={"flex flex-wrap gap-2 flex-grow w-full md:w-11/12 justify-center items-center xl:max-w-5xl p-2"}
|
||||||
|
|
|
@ -56,7 +56,6 @@ export function MovieWall({ movies, setMovies, config, setChosenMovie, setSimila
|
||||||
]
|
]
|
||||||
const borderColor = isHighlighted ? "border-orange-300" : "border-gray-300"
|
const borderColor = isHighlighted ? "border-orange-300" : "border-gray-300"
|
||||||
posters.push(
|
posters.push(
|
||||||
// TODO: tailwind merge so that these break points actually work
|
|
||||||
<Poster className={twMerge("aspect-poster rounded-xl border-2 overflow-hidden relative " + borderColor + widths.join(" "))} movie={movie} key={movie.id} index={i}
|
<Poster className={twMerge("aspect-poster rounded-xl border-2 overflow-hidden relative " + borderColor + widths.join(" "))} movie={movie} key={movie.id} index={i}
|
||||||
listSimilar={tmdb.getSimilar}
|
listSimilar={tmdb.getSimilar}
|
||||||
config={config}
|
config={config}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import tmdb from "./tmdb";
|
||||||
import { WatchProviders, WhereToWatch } from "./whereToWatch";
|
import { WatchProviders, WhereToWatch } from "./whereToWatch";
|
||||||
import CrossfadeImage from 'react-crossfade-image'
|
import CrossfadeImage from 'react-crossfade-image'
|
||||||
import { Config } from "../App";
|
import { Config } from "../App";
|
||||||
|
import { Popcorn } from "lucide-react";
|
||||||
|
|
||||||
export interface SidebarProps extends React.ComponentPropsWithRef<"div"> {
|
export interface SidebarProps extends React.ComponentPropsWithRef<"div"> {
|
||||||
movie: Movie;
|
movie: Movie;
|
||||||
|
@ -18,22 +19,23 @@ export function Sidebar({ movie, similarMoviesAvailable, watchProviders, config,
|
||||||
config.language == "en" ?
|
config.language == "en" ?
|
||||||
"Summary unavailable." :
|
"Summary unavailable." :
|
||||||
""
|
""
|
||||||
//TODO: fix initial screen
|
|
||||||
return <div id="sidebar" className={className}>
|
return <div id="sidebar" className={className}>
|
||||||
<div className="sm:h-14 w-fit flex justify-center items-center">
|
<div className="sm:h-14 w-fit flex justify-center items-center">
|
||||||
<h1 className="font-bold text-base sm:text-lg sm:text-wrap my-1 sm:my-4 overflow-hidden text-center text-balance">{movie?.title ?? "loading"}</h1>
|
<h1 className="font-bold text-base sm:text-lg sm:text-wrap my-1 sm:my-4 overflow-hidden text-center text-balance">{movie?.title ?? "loading"}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-row sm:flex-col gap-2 justify-center items-center">
|
<div className="flex flex-row sm:flex-col gap-2 justify-center items-center">
|
||||||
<a href={tmdb.makeMovieLink(movie)} target="_blank" rel="noopener noreferrer" className="w-3/12 sm:h-96 aspect-poster flex justify-center">
|
<a href={tmdb.makeMovieLink(movie)} target="_blank" rel="noopener noreferrer" className="w-3/12 sm:h-96 aspect-poster flex justify-center">
|
||||||
<CrossfadeImage src={tmdb.makeImgUrl(movie.poster_path ?? "")} style={{
|
{movie.poster_path ?
|
||||||
objectFit: "clip",
|
<CrossfadeImage src={tmdb.makeImgUrl(movie.poster_path)} style={{
|
||||||
height: "100%",
|
objectFit: "clip",
|
||||||
apectRatio: "2 / 3"
|
height: "100%",
|
||||||
}} />
|
apectRatio: "2 / 3"
|
||||||
|
}} />
|
||||||
|
: <Popcorn height="100%" size="100%" />
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
{similarMoviesAvailable ? "" : "No hay data suficiente para darte pelílculas relacionadas."}
|
{similarMoviesAvailable ? "" : "No hay data suficiente para darte pelílculas relacionadas."}
|
||||||
<div className="h-36 sm:h-72 w-8/12 sm:w-full overflow-y-scroll overflow-x-hidden sm:mt-4 p-2 sm:p-4 text-sm sm:text-base flex justify-center items-center border-2 border-slate-800 rounded-lg ">
|
<div className="h-36 sm:h-72 w-8/12 sm:w-full overflow-y-scroll overflow-x-hidden sm:mt-4 p-2 sm:p-4 text-sm sm:text-base flex justify-center items-center border-2 border-slate-800 rounded-lg ">
|
||||||
{/* TODO: make the apology vertically centered */}
|
|
||||||
{movie.overview === null ?
|
{movie.overview === null ?
|
||||||
<p>Loading...</p>
|
<p>Loading...</p>
|
||||||
: movie.overview === "" ?
|
: movie.overview === "" ?
|
||||||
|
|
Loading…
Reference in New Issue