Skip to content

Commit 77a3747

Browse files
author
Ming Xuan Yong
committed
Added in automatic slide feature as well as fixed the dates
1 parent f277d05 commit 77a3747

File tree

1 file changed

+39
-31
lines changed

1 file changed

+39
-31
lines changed
Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState } from 'react';
1+
import React, { useState, useEffect } from 'react';
22
import { eventInfo } from '../../../public/data/data';
33

44
interface CarouselProps {
@@ -7,23 +7,39 @@ interface CarouselProps {
77

88
const Carousel: React.FC<CarouselProps> = ({ events }) => {
99
const [currentIndex, setCurrentIndex] = useState(0);
10+
const [isFading, setIsFading] = useState(false);
11+
12+
useEffect(() => {
13+
const intervalId = setInterval(() => {
14+
fadeToNextSlide();
15+
}, 3000);
16+
17+
return () => clearInterval(intervalId);
18+
}, [events.length]);
19+
20+
const fadeToNextSlide = () => {
21+
setIsFading(true);
22+
23+
setTimeout(() => {
24+
setCurrentIndex((prevIndex) => (prevIndex === events.length - 1 ? 0 : prevIndex + 1));
25+
setIsFading(false);
26+
}, 300);
27+
};
1028

1129
const prevSlide = () => {
12-
setCurrentIndex((prevIndex) =>
13-
prevIndex === 0 ? events.length - 1 : prevIndex - 1
14-
);
30+
setCurrentIndex((prevIndex) => (prevIndex === 0 ? events.length - 1 : prevIndex - 1));
1531
};
1632

1733
const nextSlide = () => {
18-
setCurrentIndex((prevIndex) =>
19-
prevIndex === events.length - 1 ? 0 : prevIndex + 1
20-
);
34+
fadeToNextSlide();
2135
};
2236

2337
return (
2438
<div className="relative max-w-4xl mx-auto">
2539
<div className="w-full text-center">
26-
<a href={events[currentIndex].link} target="_blank" rel="noopener noreferrer" className="relative block w-full h-64 group">
40+
<a href={events[currentIndex].link} target="_blank" rel="noopener noreferrer" className={`relative block w-full h-64 group transition-opacity duration-3000 ${
41+
isFading ? 'opacity-0' : 'opacity-100'
42+
}`}>
2743
<img
2844
src={events[currentIndex].image}
2945
alt={events[currentIndex].title}
@@ -34,34 +50,13 @@ const Carousel: React.FC<CarouselProps> = ({ events }) => {
3450
<h2 className="font-extrabold text-xl mb-2">{events[currentIndex].title}</h2>
3551
<h3 className="font-bold text-lg">{events[currentIndex].location}</h3>
3652
<p className="mt-2">
37-
{new Date(events[currentIndex].startTime).toLocaleDateString()} -{" "}
38-
{new Date(events[currentIndex].endTime).toLocaleDateString()}
53+
{formatEventDate(events[currentIndex].startTime, events[currentIndex].endTime)}
3954
</p>
4055
</div>
4156
</div>
4257
</a>
43-
{/* <div className="p-5">
44-
<h2 className="text-3xl font-bold">{events[currentIndex].title}</h2>
45-
<p className="text-lg">{events[currentIndex].description}</p>
46-
<p className="text-sm">Location: {events[currentIndex].location}</p>
47-
<p className="text-sm">
48-
Start Time: {new Date(events[currentIndex].startTime).toLocaleString()}
49-
</p>
50-
<p className="text-sm">
51-
End Time: {new Date(events[currentIndex].endTime).toLocaleString()}
52-
</p>
53-
<a
54-
href={events[currentIndex].link}
55-
target="_blank"
56-
rel="noopener noreferrer"
57-
className="text-blue-500 underline mt-2 block"
58-
>
59-
Event Link
60-
</a>
61-
</div> */}
6258
</div>
6359

64-
{/* Left and right buttons */}
6560
<button
6661
onClick={prevSlide}
6762
className="absolute left-0 top-1/2 transform -translate-y-1/2 bg-black bg-opacity-50 text-white p-2 rounded-full hover:bg-opacity-75"
@@ -75,7 +70,6 @@ const Carousel: React.FC<CarouselProps> = ({ events }) => {
7570
&#10095;
7671
</button>
7772

78-
{/* Dots indicator */}
7973
<div className="flex justify-center mt-4">
8074
{events.map((_, index) => (
8175
<span
@@ -91,4 +85,18 @@ const Carousel: React.FC<CarouselProps> = ({ events }) => {
9185
);
9286
};
9387

88+
const formatEventDate = (startTime: string, endTime: string): string => {
89+
const startDate = new Date(startTime);
90+
const endDate = new Date(endTime);
91+
92+
const sameDay = startDate.toDateString() === endDate.toDateString();
93+
94+
if (sameDay) {
95+
return startDate.toLocaleDateString();
96+
} else {
97+
return `${startDate.toLocaleDateString()} - ${endDate.toLocaleDateString()}`;
98+
}
99+
};
100+
101+
94102
export default Carousel;

0 commit comments

Comments
 (0)