implement objectstats

This commit is contained in:
qpismont 2024-07-25 22:02:07 +02:00
parent 21547959c9
commit 587d96d652
6 changed files with 60 additions and 36 deletions

BIN
bun.lockb

Binary file not shown.

View file

@ -9,17 +9,17 @@
"astro": "astro" "astro": "astro"
}, },
"dependencies": { "dependencies": {
"@astrojs/check": "^0.8.1", "@astrojs/check": "^0.8.2",
"@astrojs/node": "^8.3.2", "@astrojs/node": "^8.3.2",
"@astrojs/react": "^3.6.0", "@astrojs/react": "^3.6.0",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"astro": "^4.11.5", "astro": "^4.12.2",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-icons": "^5.2.1", "react-icons": "^5.2.1",
"typescript": "^5.5.3" "typescript": "^5.5.4"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "1.8.3" "@biomejs/biome": "1.8.3"

View file

@ -1,14 +1,14 @@
import type { Movie } from "../../../types"; import type { MovieDetail } from "../../../types";
import CardMoviesListItem from "./CardMoviesListItem"; import CardMoviesListItem from "./CardMoviesListItem";
interface CardMoviesListProps { interface CardMoviesListProps {
movies: Movie[]; movies: MovieDetail[];
} }
export default function CardMoviesList({ movies }: CardMoviesListProps) { export default function CardMoviesList({ movies }: CardMoviesListProps) {
const items = movies.map((elt) => { const items = movies.map((elt) => {
return ( return (
<div key={elt.id} className="col-2 mb-4"> <div key={elt.movie.id} className="col-2 mb-4">
<CardMoviesListItem movie={elt} /> <CardMoviesListItem movie={elt} />
</div> </div>
); );

View file

@ -1,8 +1,8 @@
import { FaEye } from "react-icons/fa"; import { FaEye } from "react-icons/fa";
import type { Movie } from "../../../types"; import type { Movie, MovieDetail } from "../../../types";
interface CardMoviesListItemProps { interface CardMoviesListItemProps {
movie: Movie; movie: MovieDetail;
} }
export default function CardMoviesListItem({ movie }: CardMoviesListItemProps) { export default function CardMoviesListItem({ movie }: CardMoviesListItemProps) {
@ -10,7 +10,7 @@ export default function CardMoviesListItem({ movie }: CardMoviesListItemProps) {
<div <div
className="cardshadow" className="cardshadow"
style={{ style={{
backgroundImage: `url(${movie.poster_path})`, backgroundImage: `url(${movie.movie.poster_path})`,
backgroundPosition: "center", backgroundPosition: "center",
backgroundSize: "cover", backgroundSize: "cover",
height: "320px", height: "320px",
@ -23,7 +23,7 @@ export default function CardMoviesListItem({ movie }: CardMoviesListItemProps) {
<div style={{ height: "50%" }} className="row"> <div style={{ height: "50%" }} className="row">
<div className="col align-self-end"> <div className="col align-self-end">
<h5 style={{ textAlign: "center", verticalAlign: "center" }}> <h5 style={{ textAlign: "center", verticalAlign: "center" }}>
{movie.title} {movie.movie.title}
</h5> </h5>
</div> </div>
</div> </div>
@ -33,8 +33,19 @@ export default function CardMoviesListItem({ movie }: CardMoviesListItemProps) {
> >
<div className="col-8 align-self-center"> <div className="col-8 align-self-center">
<div className="d-grid"> <div className="d-grid">
{movie.stats ? (
<span className="badge text-bg-success mb-2">
Disponible
</span>
) : (
<span className="badge text-bg-secondary mb-2">
Bientot dispo.
</span>
)}
<br />
<a <a
href={`/home/movies/${movie.id}`} href={`/home/movies/${movie.movie.id}`}
className="btn btn-primary" className="btn btn-primary"
> >
<FaEye /> <FaEye />

View file

@ -2,7 +2,7 @@
import MoviesSearchInput from "../../components/MoviesSearchInput"; import MoviesSearchInput from "../../components/MoviesSearchInput";
import CardMoviesList from "../../components/lists/movies/CardMoviesList"; import CardMoviesList from "../../components/lists/movies/CardMoviesList";
import HomeLayout from "../../layouts/HomeLayout.astro"; import HomeLayout from "../../layouts/HomeLayout.astro";
import type { Movie } from "../../types"; import type { Movie, MovieDetail } from "../../types";
const jwt = Astro.cookies.get("jwt")?.value as string; const jwt = Astro.cookies.get("jwt")?.value as string;
const url = new URL(Astro.request.url); const url = new URL(Astro.request.url);
@ -11,7 +11,7 @@ const queryParams = new URLSearchParams();
const query = url.searchParams.get("q"); const query = url.searchParams.get("q");
if (query) { if (query) {
queryParams.append("q", query); queryParams.append("query", query);
} }
const res = await fetch( const res = await fetch(
@ -25,7 +25,7 @@ const res = await fetch(
}, },
); );
const resBody = (await res.json()) as { movies: Movie[] }; const resBody = (await res.json()) as { movies: MovieDetail[] };
const account = Astro.locals.account; const account = Astro.locals.account;
--- ---

View file

@ -1,3 +1,7 @@
export interface ObjectStats {
size: number;
}
export interface Movie { export interface Movie {
id: number; id: number;
title: string; title: string;
@ -7,6 +11,15 @@ export interface Movie {
release_date: string; release_date: string;
} }
export interface MovieDetail {
movie: Movie;
stats?: ObjectStats;
}
export type SearchMovie = {
ready: boolean;
} & Movie;
export interface CreateMovie { export interface CreateMovie {
title: string; title: string;
overview: string; overview: string;