diff --git a/src/App.js b/src/App.js index 14bf864..ca446c1 100644 --- a/src/App.js +++ b/src/App.js @@ -17,6 +17,7 @@ import ListShows from "./components/ListShows"; import SportsActivitiesPage from "./components/SportsActivitiesPage"; import SportDetails from "./components/SportsDetails"; import GiftCard from "./components/GiftCard"; +import PlaysPage from "./components/PlaysPage"; function App() { @@ -45,6 +46,7 @@ function App() { }/> }/> }/> + }/> } /> } /> diff --git a/src/assets/images/plays/play1.png b/src/assets/images/plays/play1.png new file mode 100644 index 0000000..7e13b47 Binary files /dev/null and b/src/assets/images/plays/play1.png differ diff --git a/src/assets/images/plays/play2.png b/src/assets/images/plays/play2.png new file mode 100644 index 0000000..6c0b73b Binary files /dev/null and b/src/assets/images/plays/play2.png differ diff --git a/src/assets/images/plays/play3.png b/src/assets/images/plays/play3.png new file mode 100644 index 0000000..83a22ab Binary files /dev/null and b/src/assets/images/plays/play3.png differ diff --git a/src/assets/images/plays/playposter1.jpg b/src/assets/images/plays/playposter1.jpg new file mode 100644 index 0000000..5bafaaf Binary files /dev/null and b/src/assets/images/plays/playposter1.jpg differ diff --git a/src/assets/images/plays/playposter2.jpg b/src/assets/images/plays/playposter2.jpg new file mode 100644 index 0000000..04b5574 Binary files /dev/null and b/src/assets/images/plays/playposter2.jpg differ diff --git a/src/assets/images/plays/playposter3.jpg b/src/assets/images/plays/playposter3.jpg new file mode 100644 index 0000000..fbc4f04 Binary files /dev/null and b/src/assets/images/plays/playposter3.jpg differ diff --git a/src/assets/images/plays/playposter4.jpg b/src/assets/images/plays/playposter4.jpg new file mode 100644 index 0000000..939f049 Binary files /dev/null and b/src/assets/images/plays/playposter4.jpg differ diff --git a/src/assets/images/plays/playposter5.jpg b/src/assets/images/plays/playposter5.jpg new file mode 100644 index 0000000..ad078ea Binary files /dev/null and b/src/assets/images/plays/playposter5.jpg differ diff --git a/src/assets/styles/Play.css b/src/assets/styles/Play.css new file mode 100644 index 0000000..1eb14a4 --- /dev/null +++ b/src/assets/styles/Play.css @@ -0,0 +1,95 @@ +:root { + --primary-color: #ff4500; + --secondary-color: #ff6500; + --text-color: #ffffff; + --bg-color: #000000; + --font-family: 'Arial', sans-serif; + } + + .play { + border-radius: 15px; + overflow: hidden; + width: 250px; + text-align: center; + font-family: var(--font-family); + transition: transform 0.3s ease, box-shadow 0.3s ease; + position: relative; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); + background-color: #f8f8f8; + padding: 10px; + margin: 10px; + } + + .play:hover { + transform: scale(1.05); + box-shadow: 0 6px 15px rgba(0, 0, 0, 0.2); + } + + .play-poster { + width: 100%; + height: auto; + border-radius: 10px 10px 0 0; + margin-bottom: 40px; + } + + .play-ranking { + position: absolute; + text-align: left; + bottom: 100px; + width: 230px; + color: var(--text-color); + background-color: rgba(0, 0, 0, 0.8); + padding: 10px; + border-radius: 0 0 5px 5px; + font-size: 14px; + font-weight: bold; + } + + .ranking-badge { + color: var(--primary-color); + } + + .ranking-points { + color: var(--text-color); + font-size: 12px; + } + + .participants { + font-size: 12px; + color: var(--text-color); + } + + .play-name { + font-size: 20px; + text-align: left; + margin: 15px 0 5px 10px; + font-weight: bold; + color: #333; + } + + .play-category { + font-size: 12px; + margin: 5px 0 15px 10px; + text-align: left; + color: #777; + } + + .more-details-button { + background-color: var(--primary-color); + color: var(--text-color); + border: none; + border-radius: 5px; + padding: 10px 15px; + cursor: pointer; + transition: background-color 0.3s ease; + font-size: 14px; + } + + .more-details-button:hover { + background-color: var(--secondary-color); + } + + .book-tickets-button:hover { + background-color: var(--secondary-color); + } + \ No newline at end of file diff --git a/src/assets/styles/PlaysList.css b/src/assets/styles/PlaysList.css new file mode 100644 index 0000000..b61c115 --- /dev/null +++ b/src/assets/styles/PlaysList.css @@ -0,0 +1,36 @@ +/* SportList.css */ + +.play-list { + display: flex; + overflow-x: auto; + scroll-snap-type: x mandatory; + gap: 10px; + + justify-content: center; + align-items: center; + width: 100%; + min-height: 100vh; + margin-inline: auto; + position: relative; + + padding: 10px; + margin-bottom: 100px; + } + + .play-list::-webkit-scrollbar { + display: none; /* Hide scrollbar for better UX */ + } + + @media screen and (max-width:1100px) { + .play-list{ + top: 80px; + margin-bottom: 40px; + } + } + + @media screen and (max-width:800px) { + .play-list{ + top: 0px; + margin-bottom: -45px; + } + } \ No newline at end of file diff --git a/src/components/Play.js b/src/components/Play.js new file mode 100644 index 0000000..c6a4acc --- /dev/null +++ b/src/components/Play.js @@ -0,0 +1,23 @@ +import React from "react"; +import "../assets/styles/Play.css"; +import { Link } from "react-router-dom"; + +function Play({ id, image, name, ranking, participants, category }) { + return ( +
+ {`${name} +

+ 🎭 + {ranking} + ({participants} Participants) +

+

{name}

+

{category}

+ + + +
+ ); +} + +export default Play; diff --git a/src/components/PlaysImageSlider.js b/src/components/PlaysImageSlider.js new file mode 100644 index 0000000..374df41 --- /dev/null +++ b/src/components/PlaysImageSlider.js @@ -0,0 +1,76 @@ +import React from 'react'; +import image1 from '../assets/images/plays/play1.png'; +import image2 from '../assets/images/plays/play2.png'; +import image3 from '../assets/images/plays/play3.png'; +import Slider from 'react-slick'; +import 'slick-carousel/slick/slick.css'; +import 'slick-carousel/slick/slick-theme.css'; +import '../assets/styles/ImageSlider.css'; + +const ImageWithNoEffect = ({ imageSrc, altText }) => { + return ( +
+ {altText} +
+ ); +}; + +const ImageSlider = () => { + const settings = { + dots: true, + infinite: true, + speed: 500, + slidesToShow: 1, + centerMode: true, + centerPadding: '10%', + slidesToScroll: 1, + autoplay: true, + autoplaySpeed: 3000, + arrows: true, + prevArrow: , + nextArrow: , + }; + + return ( +
+ +
+ +
+
+ +
+
+ +
+
+
+ ); +}; + +const CustomPrevArrow = ({ onClick }) => { + return ( +
+ ◀ +
+ ); +}; + +const CustomNextArrow = ({ onClick }) => { + return ( +
+ ▶ +
+ ); +}; + +export default ImageSlider; diff --git a/src/components/PlaysList.js b/src/components/PlaysList.js new file mode 100644 index 0000000..f542d90 --- /dev/null +++ b/src/components/PlaysList.js @@ -0,0 +1,76 @@ +import React from 'react'; +import Play from './Play'; +import '../assets/styles/PlaysList.css'; + +import play1 from '../assets/images/plays/playposter1.jpg'; +import play2 from '../assets/images/plays/playposter2.jpg'; +import play3 from '../assets/images/plays/playposter3.jpg'; +import play4 from '../assets/images/plays/playposter4.jpg'; +import play5 from '../assets/images/plays/playposter5.jpg'; + +function PlaysList({ searchTerm }) { + const plays = [ + { + id: 1, + image: play1, + name: 'Hamlet', + ranking: 1, + participants: '1.2K', + category: 'Tragedy' + }, + { + id: 2, + image: play2, + name: 'Macbeth', + ranking: 2, + participants: '960.2K', + category: 'Tragedy' + }, + { + id: 3, + image: play3, + name: 'A Midsummer Night\'s Dream', + ranking: 3, + participants: '43.9K', + category: 'Comedy' + }, + { + id: 4, + image: play4, + name: 'Othello', + ranking: 4, + participants: '7.5K', + category: 'Tragedy' + }, + { + id: 5, + image: play5, + name: 'The Tempest', + ranking: 5, + participants: '44.2K', + category: 'Romantic' + }, + ]; + + const filteredPlays = plays.filter(play => + play.name.toLowerCase().includes(searchTerm.toLowerCase()) + ); + + return ( +
+ {filteredPlays.map((play, index) => ( + + ))} +
+ ); +} + +export default PlaysList; diff --git a/src/components/PlaysPage.js b/src/components/PlaysPage.js new file mode 100644 index 0000000..48367d5 --- /dev/null +++ b/src/components/PlaysPage.js @@ -0,0 +1,37 @@ +import React, { useEffect, useState } from 'react' +import Header from './Header' +import Chatbot from '../chatbot' +import Heading from './heading' +import Loader from './Loader' +import Footer from './Footer' +import PlaysImageSlider from './PlaysImageSlider' +import PlaysList from './PlaysList' + + +const PlaysActivities = () => { + const [loading, setLoading] = useState(true); + const [searchTerm, setSearchTerm] = useState(""); + + useEffect(() => { + const timer = setTimeout(() => { + setLoading(false); + }, 2000); + return () => clearTimeout(timer); + }, []); + + if (loading) { + return ; + } + return ( +
+
+ + + + +
+ ) +} + +export default PlaysActivities \ No newline at end of file