diff --git a/src/AboutUs/AboutUs.js b/src/AboutUs/AboutUs.js index 0a21442..b8e3960 100644 --- a/src/AboutUs/AboutUs.js +++ b/src/AboutUs/AboutUs.js @@ -1,16 +1,5 @@ -import React from 'react'; -import ImageSlider from '../Images/ImageSlider'; // Adjust the import path based on your directory structure - +import React from "react"; export default function AboutsUs() { - // return ( - //

About Us

- // ); - - return ( -
-

Image Slider

- -
- ); -}; \ No newline at end of file + return

About Us

; +} diff --git a/src/Club Membership & Upcoming Events/PreviousEvents/PreviousEvents.js b/src/Club Membership & Upcoming Events/PreviousEvents/PreviousEvents.js index 262b756..af57c86 100644 --- a/src/Club Membership & Upcoming Events/PreviousEvents/PreviousEvents.js +++ b/src/Club Membership & Upcoming Events/PreviousEvents/PreviousEvents.js @@ -1,6 +1,8 @@ import { useEffect, useState } from "react"; import yaml from "js-yaml"; import eventData from "../../MockDB/pastCompetitions.yml"; +import SlideShow from "../../ImageSlider/SlideShow"; +import { Link } from "react-router-dom"; /** * @param {null} null - requires nothing @@ -47,7 +49,7 @@ const PreviousEvents = () => { const competition = previousCompetitionsDict[competitionKey]; console.log(competition.SAEYoutubeLink); return ( - +
@@ -94,9 +96,14 @@ const PreviousEvents = () => {

This Year's Events

- + + + {/* will change to thing below when merged onto dev branch */} {/* */} +
); diff --git a/src/Club Membership & Upcoming Events/UpcominEvents/UpcomingEvents.js b/src/Club Membership & Upcoming Events/UpcominEvents/UpcomingEvents.js index 9487246..fb8ddb0 100644 --- a/src/Club Membership & Upcoming Events/UpcominEvents/UpcomingEvents.js +++ b/src/Club Membership & Upcoming Events/UpcominEvents/UpcomingEvents.js @@ -3,6 +3,7 @@ import yaml from "js-yaml"; import "./UpcomingEvents.css"; import eventData from "../../MockDB/currentCompetition.yml"; import CountDownTimer from "../../CountDown/CountDownTimer"; +import { Link } from "react-router-dom"; /** * @param {null} null - requires nothing @@ -98,7 +99,9 @@ const UpcominEvents = () => {

Previous Events

- + + + {/* will change to thing below when merged onto dev branch */} {/* */} diff --git a/src/Gallery/Gallery.js b/src/Gallery/Gallery.js index 163bf1c..27a4977 100644 --- a/src/Gallery/Gallery.js +++ b/src/Gallery/Gallery.js @@ -1,7 +1,4 @@ -import Modal from 'react-modal'; -import { useState } from "react"; -import './Gallery.css'; -import { ImageFinder } from '../Images/ImageFinder.js'; +import "./Gallery.css"; /** * @param {null} null - requires onthing @@ -10,56 +7,55 @@ import { ImageFinder } from '../Images/ImageFinder.js'; * @author Sarim * @todo Seperate the Modal section into its own seperate function, and add comments */ -export default function Gallery() { - const [open, setOpen] = useState(false) - const [display, setDisplay] = useState('') - const [altDisplay, setAltDisplay] =useState('') - const allImages = ImageFinder('all') +const Gallery = () => { + return ( +
+ Gallery + {/*
+ {allImages.map((image, index) => ( + {image.alt} handleClick(image.src, image.alt)} + /> + ))} +
*/} + {/*
+ setOpen(false)} + style={{ + overlay: { + display: "flex", + alignItems: "center", + justifyContent: "center", + }, + content: { + position: "initial", + border: "none", + borderRadius: "0px", + padding: "0px", + }, + }}> +
+ + {altDisplay} setOpen(false)} + /> +
+
+
*/} +
+ ); +}; - const handleClick = (image, alt) => { - setDisplay(image) - setAltDisplay(alt) - setOpen(true) - console.log(open) - } - - return ( -
-
- {allImages.map((image, index) => ( - {image.alt} handleClick(image.src, image.alt)} - /> - ))} -
-
- setOpen(false)} - style={{ - overlay: { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - }, - content: { - position: 'initial', - border: 'none', - borderRadius: '0px', - padding: '0px' - } - }} - > -
- - {altDisplay} setOpen(false)} /> -
-
-
-
- ); -} \ No newline at end of file +export default Gallery; diff --git a/src/ImageSlider/SlideShow.css b/src/ImageSlider/SlideShow.css new file mode 100644 index 0000000..2038f0c --- /dev/null +++ b/src/ImageSlider/SlideShow.css @@ -0,0 +1,77 @@ +.slideShow figure { + display: none; + position: relative; +} + +.fade { + animation-name: fade; + animation-duration: 1.5s; +} + +@keyframes fade { + from { + opacity: 0.4; + } + to { + opacity: 1; + } +} + +.slideShow .next, +.slideShow .prev { + cursor: pointer; + position: relative; + top: 50%; + width: auto; + margin-top: -22px; + padding: 16px; + color: white; + font-weight: bold; + font-size: 18px; + transition: 0.6s ease; + border-radius: 0 3px 3px 0; + user-select: none; +} +.slideShow .next { + right: 0; + border-radius: 3px 0 0 3px; +} + +.slideShow .next:hover, +.slideShow .prev:hover { + background-color: rgba(0, 0, 0, 0.8); +} + +.slideShow figure p { + color: #f2f2f2; + font-size: 12px; + padding: 8px 12px; + position: relative; + top: 0; +} + +.slideShow figure figcaption { + color: #f2f2f2; + font-size: 15px; + padding: 8px 12px; + position: relative; + bottom: 8px; + width: 100%; + text-align: center; +} + +.slideShow .dot { + cursor: pointer; + height: 15px; + width: 15px; + margin: 0 2px; + background-color: #bbb; + border-radius: 50%; + display: inline-block; + transition: background-color 0.6s ease; +} + +.slideShow .active, +.slideShow .dot:hover { + background-color: #717171; +} diff --git a/src/ImageSlider/SlideShow.jsx b/src/ImageSlider/SlideShow.jsx new file mode 100644 index 0000000..d301178 --- /dev/null +++ b/src/ImageSlider/SlideShow.jsx @@ -0,0 +1,106 @@ +import { useEffect, useState } from "react"; +import "./SlideShow.css"; + +const SlideShow = (imgList) => { + console.log(imgList); + const [imgArray, setImgArray] = useState(imgList["imgList"]); + let showIndex = 1; + const ErrorMessage = `Please add an Object Like This \`imgList: \`{ imgList: [ { AltTag: 'linkurl' }, { AltTag: 'linkurl' }, { AltTag: 'linkurl' } ] }`; + const slides = document.getElementsByTagName("figure"); + const dots = document.getElementsByClassName("dot"); + + useEffect(() => { + if (imgArray !== undefined) { + showSlide(1); + } + }, []); + + const showSlide = (indexToShow) => { + if (indexToShow > slides.length) { + indexToShow = 1; + } + if (indexToShow < 1) { + indexToShow = slides.length; + } + + showIndex = indexToShow; + + let indexToNotShow; + for (indexToNotShow = 0; indexToNotShow < slides.length; indexToNotShow++) { + slides[indexToNotShow].style.display = "none"; + } + + for (indexToNotShow = 0; indexToNotShow < slides.length; indexToNotShow++) { + dots[indexToNotShow].className = dots[indexToNotShow].className.replace( + " active", + "" + ); + } + + slides[showIndex - 1].style.display = "block"; + dots[showIndex - 1].className += " active"; + }; + + return ( +
+ {imgArray === undefined ? ( +

+ ) : ( + <> +
+ {Object.keys(imgArray).map((imgIndex) => { + let imgSrc = imgArray[imgIndex]; + let imgLink = Object.values(imgSrc)[0]; + let imgCaption = Object.keys(imgSrc)[0]; + return ( +
+

+ {parseInt(imgIndex) + 1} / {imgArray.length} +

+ {imgCaption} +
{imgCaption}
+
+ ); + })} + +

{ + showSlide(showIndex - 1); + }}> + ❮ +

+

{ + showSlide(showIndex + 1); + }}> + ❯ +

+
+
+ {Object.keys(imgArray).map((imgIndex) => { + return ( + { + showSlide(imgIndex); + }}> + ); + })} +
+ + )} +
+ ); +}; + +export default SlideShow; diff --git a/src/Images/ImageFinder.js b/src/Images/ImageFinder.js deleted file mode 100644 index dc3a2b5..0000000 --- a/src/Images/ImageFinder.js +++ /dev/null @@ -1,11 +0,0 @@ -import imagesData from './Images.json'; - -// Function to search and filter images based on the provided category -export const ImageFinder = (category) => { - if (category === 'all') { - return imagesData; - } else { - const filteredImages = imagesData.filter(image => image.category === category); - return filteredImages; - } -}; \ No newline at end of file diff --git a/src/Images/ImageSlider.js b/src/Images/ImageSlider.js deleted file mode 100644 index 6ace210..0000000 --- a/src/Images/ImageSlider.js +++ /dev/null @@ -1,57 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { ImageFinder } from './ImageFinder.js'; -import RenderImage from './RenderImage.js'; - -const ImageSlider = ({ category }) => { - // Time Interval before the ImageSlider moves to the next image - const timeInterval = 5000; - - // State to hold the images of the specified category and the current index - const [categoryImages, setCategoryImages] = useState([]); - const [currentIndex, setCurrentIndex] = useState(0); - - // Effect to filter images based on the provided category when it changes - useEffect(() => { - const filteredImages = ImageFinder(category); - setCategoryImages(filteredImages); - setCurrentIndex(0); - }, [category]); - - // Effect to automatically move to the next image after a certain time interval - useEffect(() => { - const intervalId = setInterval(() => {handleNext();}, timeInterval); - - // Cleanup: Clear the interval on component unmount or when currentIndex or categoryImages changes - return () => clearInterval(intervalId); - }, [currentIndex, categoryImages]); - - // Function to handle moving to the next image - const handleNext = () => { - setCurrentIndex((prevIndex) => (prevIndex + 1) % categoryImages.length); - }; - - // Function to handle moving to the previous image - const handlePrev = () => { - setCurrentIndex((prevIndex) => (prevIndex - 1 + categoryImages.length) % categoryImages.length); - }; - - return ( -
- {/* Container to display previous, current, and next images */} -
- {/* Button to move to the previous image */} - - {/* Render the previous image */} - {RenderImage((currentIndex - 1 + categoryImages.length) % categoryImages.length, categoryImages)} - {/* Render the current image */} - {RenderImage(currentIndex, categoryImages)} - {/* Render the next image */} - {RenderImage((currentIndex + 1) % categoryImages.length, categoryImages)} - {/* Button to move to the next image */} - -
-
- ); - }; - -export default ImageSlider; diff --git a/src/Images/Images.json b/src/Images/Images.json deleted file mode 100644 index f79b149..0000000 --- a/src/Images/Images.json +++ /dev/null @@ -1,51 +0,0 @@ -[ - { - "id": 1, - "src": "https://img.freepik.com/free-photo/luxurious-car-parked-highway-with-illuminated-headlight-sunset_181624-60607.jpg?size=626&ext=jpg&ga=GA1.1.87170709.1707264000&semt=sph", - "alt": "Image 1", - "category": "Car" - }, - { - "id": 2, - "src": "https://media.architecturaldigest.com/photos/63079fc7b4858efb76814bd2/16:9/w_4000,h_2250,c_limit/9.%20DeLorean-Alpha-5%20%5BDeLorean%5D.jpg", - "alt": "Image 2", - "category": "Car" - }, - { - "id": 3, - "src": "https://cdn.motor1.com/images/mgl/g440ng/s3/rimac-nevera.jpg", - "alt": "Image 3", - "category": "Car" - }, - { - "id": 4, - "src": "https://www.shutterstock.com/image-vector/realistic-vector-red-car-gradients-260nw-2271536365.jpg", - "alt": "Image 4", - "category": "Car" - }, - { - "id": 5, - "src": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTJNuga_vmLPm7BLwbqQmsuNklxIsqXm_tTMg&usqp=CAU", - "alt": "Image 5", - "category": "Members" - }, - { - "id": 6, - "src": "data:image/png;base64,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", - "alt": "Image 6", - "category": "Members" - }, - { - "id": 7, - "src": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRMdEL6UJgg3rFpj41o1bcjX4z2b_OEaYYNJg&usqp=CAU", - "alt": "Image 7", - "category": "Members" - }, - { - "id": 8, - "src": "https://png.pngtree.com/png-vector/20220331/ourmid/pngtree-group-of-people-silhouette-png-image_4520545.png", - "alt": "Image 8", - "category": "Members" - } - ] - \ No newline at end of file diff --git a/src/Images/RenderImage.js b/src/Images/RenderImage.js deleted file mode 100644 index 0fc92ad..0000000 --- a/src/Images/RenderImage.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from "react"; - -// Function to render an image based on the provided index -const RenderImage = (index, categoryImages) => { - // Check if categoryImages is not empty before accessing its properties - if (categoryImages.length > 0 && categoryImages[index]) { - return ( - {categoryImages[index].alt} - ); - } else { - return null; // or handle this case as needed - } -} - -export default RenderImage; - -// // Function to handle custom click actions on the image -// const handleImageClick = () => { -// // Will be worked on later -// }; \ No newline at end of file diff --git a/src/OurSponsors/OurSponsors.css b/src/OurSponsors/OurSponsors.css index 1eac26e..7e56246 100644 --- a/src/OurSponsors/OurSponsors.css +++ b/src/OurSponsors/OurSponsors.css @@ -1,4 +1,4 @@ -#OurSponsors { +/* #OurSponsors { display: flex; flex-direction: column; justify-content: center; @@ -48,4 +48,4 @@ #OurSponsors h3 { text-align: left; } - + */ diff --git a/src/Teams/Teams.js b/src/Teams/Teams.js index 7373d0b..a4346e6 100644 --- a/src/Teams/Teams.js +++ b/src/Teams/Teams.js @@ -1,15 +1,5 @@ -import React from 'react'; -import ImageSlider from '../Images/ImageSlider'; // Adjust the import path based on your directory structure +import React from "react"; export default function Teams() { - // return ( - //

Teams

- // ); - - return ( -
-

Image Slider

- -
- ); -}; \ No newline at end of file + return

Teams

; +}