diff --git a/backend/src/tables.js b/backend/src/tables.js index 76049e8..1e410a0 100644 --- a/backend/src/tables.js +++ b/backend/src/tables.js @@ -20,12 +20,12 @@ const managers = [ FilmManager, SerieManager, EnTendanceFilmManager, - EnTendanceSerieManager, FavoriFilmManager, FavoriSerieManager, CategorieParFilmManager, - S1_tableJointure CategorieParSerieManager, + EnTendanceSerieManager, + // S1_tableJointure, // Add other managers here ]; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 13481bf..9e4aa52 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,6 +9,7 @@ "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-multi-carousel": "^2.8.4", "react-router-dom": "^6.14.2", "saas": "^1.0.0", "sass": "^1.69.5" @@ -4037,6 +4038,14 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-multi-carousel": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/react-multi-carousel/-/react-multi-carousel-2.8.4.tgz", + "integrity": "sha512-7Is5Wr+m2ebkR+oq2Su2tjUdBwpVtB2O6Tjb74KDNfxWe/FrsTQwezTJTk/r9cKCrRp9Li308v822/5bZm7XKg==", + "engines": { + "node": ">=8" + } + }, "node_modules/react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", @@ -7796,6 +7805,11 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-multi-carousel": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/react-multi-carousel/-/react-multi-carousel-2.8.4.tgz", + "integrity": "sha512-7Is5Wr+m2ebkR+oq2Su2tjUdBwpVtB2O6Tjb74KDNfxWe/FrsTQwezTJTk/r9cKCrRp9Li308v822/5bZm7XKg==" + }, "react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index bcd760b..3eeb358 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -2,13 +2,16 @@ "scripts": { "dev": "vite --host", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "prettier": "npx prettier --write .", + "lint": "npx eslint --fix ." }, "dependencies": { "axios": "^1.6.2", "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-multi-carousel": "^2.8.4", "react-router-dom": "^6.14.2", "saas": "^1.0.0", "sass": "^1.69.5" diff --git a/frontend/src/components/DynamicHeroSlider.jsx b/frontend/src/components/DynamicHeroSlider.jsx new file mode 100644 index 0000000..13b388c --- /dev/null +++ b/frontend/src/components/DynamicHeroSlider.jsx @@ -0,0 +1,64 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { NavLink } from "react-router-dom"; +import PropTypes from "prop-types"; +import Carousel from "react-multi-carousel"; +import "react-multi-carousel/lib/styles.css"; +import HeroMovieSlide from "./HeroMovieSlide"; + +const responsive = { + desktop: { + breakpoint: { max: 3000, min: 1025 }, + items: 1, + }, + tablet: { + breakpoint: { max: 1024, min: 465 }, + items: 1, + }, + mobile: { + breakpoint: { max: 464, min: 0 }, + items: 1, + }, +}; + +function DynamicHeroSlider({ movies }) { + return ( + + {movies.map((movie) => { + if (movie.IsAvailable) { + return ( + + + + ); + } + return null; + })} + + ); +} + +DynamicHeroSlider.propTypes = { + movies: PropTypes.arrayOf( + PropTypes.shape({ + id: PropTypes.number.isRequired, + cover: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + videoUrl: PropTypes.string, + duration: PropTypes.number.isRequired, + year: PropTypes.string.isRequired, + description: PropTypes.string.isRequired, + IsAvailable: PropTypes.number.isRequired, + }) + ).isRequired, +}; + +export default DynamicHeroSlider; diff --git a/frontend/src/components/HeroMovieSlide.jsx b/frontend/src/components/HeroMovieSlide.jsx new file mode 100644 index 0000000..65b935f --- /dev/null +++ b/frontend/src/components/HeroMovieSlide.jsx @@ -0,0 +1,22 @@ +import PropTypes from "prop-types"; + +function HeroMovieSlide({ movie }) { + return ( + {movie.title} + ); +} + +HeroMovieSlide.propTypes = { + movie: PropTypes.shape({ + id: PropTypes.number.isRequired, + cover: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + videoUrl: PropTypes.string, + duration: PropTypes.number.isRequired, + year: PropTypes.string.isRequired, + description: PropTypes.string.isRequired, + IsAvailable: PropTypes.number.isRequired, + }).isRequired, +}; + +export default HeroMovieSlide; diff --git a/frontend/src/components/MovieLink.jsx b/frontend/src/components/MovieLink.jsx new file mode 100644 index 0000000..addc3fb --- /dev/null +++ b/frontend/src/components/MovieLink.jsx @@ -0,0 +1,19 @@ +import { NavLink } from "react-router-dom"; +import PropTypes from "prop-types"; +import MovieSlide from "./MovieSlide"; + +function MovieLink({ movie }) { + return ( + + + + ); +} + +MovieLink.propTypes = { + movie: PropTypes.shape({ + id: PropTypes.number.isRequired, + }).isRequired, +}; + +export default MovieLink; diff --git a/frontend/src/components/MovieSlide.jsx b/frontend/src/components/MovieSlide.jsx index 4f22d0d..28f0150 100644 --- a/frontend/src/components/MovieSlide.jsx +++ b/frontend/src/components/MovieSlide.jsx @@ -8,8 +8,14 @@ function MovieSlide({ movie }) { ); } return ( -
- {movie.title} + <> +
+ {movie.title} +
-
+ ); } diff --git a/frontend/src/pages/Home.jsx b/frontend/src/pages/Home.jsx index b5f8329..da51779 100644 --- a/frontend/src/pages/Home.jsx +++ b/frontend/src/pages/Home.jsx @@ -1,6 +1,6 @@ -import { NavLink } from "react-router-dom"; import { useMovies } from "../contexts/MovieContext"; -import MovieSlide from "../components/MovieSlide"; +import DynamicHeroSlider from "../components/DynamicHeroSlider"; +import MovieLink from "../components/MovieLink"; function Home() { const { movies } = useMovies(); @@ -15,8 +15,7 @@ function Home() { alt="wildtube logo" /> - {/*
-
*/} + {/*