Skip to content

Commit 6bc6fa8

Browse files
committed
bunch of conditional styling
1 parent eb8843b commit 6bc6fa8

File tree

1 file changed

+94
-43
lines changed

1 file changed

+94
-43
lines changed

app/[locale]/roadmap/_components/ReleaseCarousel.tsx

Lines changed: 94 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,39 @@ const formatReleaseDate = (date: string) => {
2323
})
2424
}
2525

26+
const findLatestReleaseIndex = () => {
27+
const today = new Date()
28+
const twoMonthsFromNow = new Date()
29+
twoMonthsFromNow.setMonth(today.getMonth() + 2)
30+
31+
// First try to find a release within the next 2 months
32+
const upcomingReleaseIndex = releasesData.findIndex((release) => {
33+
const releaseDate = new Date(release.releaseDate)
34+
return releaseDate > today && releaseDate <= twoMonthsFromNow
35+
})
36+
37+
// If no upcoming release found, find the most recent release up to today
38+
if (upcomingReleaseIndex === -1) {
39+
const pastReleases = releasesData.filter(
40+
(release) => new Date(release.releaseDate) <= today
41+
)
42+
if (pastReleases.length > 0) {
43+
const mostRecentRelease = pastReleases[pastReleases.length - 1]
44+
return releasesData.findIndex(
45+
(release) => release.releaseDate === mostRecentRelease.releaseDate
46+
)
47+
}
48+
}
49+
50+
return upcomingReleaseIndex
51+
}
52+
2653
const ReleaseCarousel = () => {
2754
const swiperRef = useRef<SwiperRef>(null)
2855
const swiperRef2 = useRef<SwiperRef>(null)
2956
const containerRef = useRef<HTMLDivElement>(null)
3057
const containerRef2 = useRef<HTMLDivElement>(null)
31-
const [activeSlide, setActiveSlide] = useState(releasesData.length - 2)
58+
const [activeSlide, setActiveSlide] = useState(findLatestReleaseIndex())
3259
const pastReleases = releasesData.filter(
3360
(release) => release.releaseDate < new Date().toISOString().split("T")[0]
3461
)
@@ -81,50 +108,74 @@ const ReleaseCarousel = () => {
81108
initialSlide={activeSlide}
82109
centeredSlides={true}
83110
>
84-
{releasesData.map((release, index) => (
85-
<SwiperSlide
86-
key={release.releaseName}
87-
className="!w-1/3 items-center justify-center text-center"
88-
>
89-
<div className="mb-3 h-6">
90-
{pastReleases[pastReleases.length - 1].releaseDate ===
91-
release.releaseDate && (
92-
<div className="m-auto w-fit rounded-full bg-primary-low-contrast px-2 py-1">
93-
<p className="text-sm font-bold">We are here</p>
94-
</div>
95-
)}
96-
</div>
97-
<div className="flex w-full items-center justify-center text-center">
98-
<div
99-
className={cn(
100-
"flex flex-1 border-2",
101-
index !== 0 ? "border-primary" : "border-transparent"
102-
)}
103-
/>
104-
<div
105-
className={cn(
106-
"h-7 w-7 rounded-full",
107-
release.releaseDate <
108-
new Date().toISOString().split("T")[0]
109-
? "bg-primary"
110-
: "bg-primary-low-contrast"
111+
{releasesData.map((release, index) => {
112+
const releaseDate = new Date(release.releaseDate)
113+
const today = new Date()
114+
const twoMonthsFromNow = new Date()
115+
twoMonthsFromNow.setMonth(today.getMonth() + 2)
116+
const nextRelease =
117+
releaseDate > today && releaseDate <= twoMonthsFromNow
118+
119+
return (
120+
<SwiperSlide
121+
key={release.releaseName}
122+
className="!w-1/3 items-center justify-center text-center"
123+
>
124+
<div className="mb-3 h-6">
125+
{pastReleases[pastReleases.length - 1].releaseDate ===
126+
release.releaseDate && (
127+
<div className="m-auto w-fit rounded-lg bg-primary-low-contrast px-2 py-1">
128+
<p className="text-sm font-bold">We are here</p>
129+
</div>
111130
)}
112-
/>
113-
<div
114-
className={cn(
115-
"flex flex-1 border-2",
116-
index !== releasesData.length - 1
117-
? "border-primary"
118-
: "border-transparent"
131+
{nextRelease && (
132+
<div className="m-auto w-fit rounded-lg bg-warning-light px-2 py-1">
133+
<p className="text-sm font-bold">Coming soon</p>
134+
</div>
119135
)}
120-
/>
121-
</div>
122-
<p className="text-md font-bold">{release.releaseName}</p>
123-
<p className="font-mono text-sm text-body-medium">
124-
{formatReleaseDate(release.releaseDate)}
125-
</p>
126-
</SwiperSlide>
127-
))}
136+
</div>
137+
<div className="flex w-full items-center justify-center text-center">
138+
<div
139+
className={cn(
140+
"flex h-1 flex-1",
141+
index !== 0
142+
? nextRelease
143+
? "bg-gradient-to-r from-primary to-primary-low-contrast"
144+
: release.releaseDate <
145+
new Date().toISOString().split("T")[0]
146+
? "bg-primary"
147+
: "bg-primary-low-contrast"
148+
: "bg-transparent"
149+
)}
150+
/>
151+
<div
152+
className={cn(
153+
"h-7 w-7 rounded-full",
154+
release.releaseDate <
155+
new Date().toISOString().split("T")[0]
156+
? "bg-primary"
157+
: "bg-primary-low-contrast",
158+
nextRelease && "border-2 border-primary bg-background"
159+
)}
160+
/>
161+
<div
162+
className={cn(
163+
"flex h-1 flex-1",
164+
index !== releasesData.length - 1
165+
? index < findLatestReleaseIndex()
166+
? "bg-primary"
167+
: "bg-primary-low-contrast"
168+
: "bg-transparent"
169+
)}
170+
/>
171+
</div>
172+
<p className="text-md font-bold">{release.releaseName}</p>
173+
<p className="font-mono text-sm text-body-medium">
174+
{formatReleaseDate(release.releaseDate)}
175+
</p>
176+
</SwiperSlide>
177+
)
178+
})}
128179
</Swiper>
129180
</SwiperContainer>
130181
<div className="flex lg:hidden">

0 commit comments

Comments
 (0)