'use client' import { useGlobal } from '@/providers/GlobalProvider' import { Swiper, SwiperSlide } from 'swiper/react' import type { Swiper as SwiperType } from 'swiper' import { Navigation } from 'swiper/modules' import 'swiper/css' import 'swiper/css/navigation' import { formatDistanceToNow } from 'date-fns' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faChevronLeft, faChevronRight, faEllipsis, faPlay } from '@fortawesome/free-solid-svg-icons' import { useEffect, useRef, useState } from 'react' export default function HomePage () { const { launchesList, serverVersionList, versionsList, accountName, launchGame, setManagingVersion, setPopupMode, setShowPopup, setFadeOut } = useGlobal() const filteredLaunchesList = Object.fromEntries( Object.entries(launchesList) .flatMap(([gameId, launches]) => { const entries = Object.entries(launches).filter(([version]) => { return ( serverVersionList?.versions.find(v => version == v.id) && Object.entries(versionsList).find(([v]) => v == version) ) }) if (entries.length === 0) return [] const [version, timestamp] = entries.reduce((latest, current) => current[1] > latest[1] ? current : latest ) return [[`${gameId}-${version}`, timestamp] as const] }) .sort((a, b) => b[1] - a[1]) ) const swiperRef = useRef(null) const prevRef = useRef(null) const nextRef = useRef(null) const [recentSlidesPerView, setRecentSlidesPerView] = useState(1) useEffect(() => { const update = () => { setRecentSlidesPerView(Math.floor(window.innerWidth / 400)) } update() window.addEventListener('resize', update) return () => window.removeEventListener('resize', update) }, []) return (

Home

Welcome back, {accountName ?? 'User'}!

Jump back in

{Object.entries(filteredLaunchesList).length == 0 ? (

You have no recently launched games

) : (
{ swiperRef.current = swiper }} onBeforeInit={swiper => { if ( swiper.params.navigation && typeof swiper.params.navigation !== 'boolean' ) { swiper.params.navigation.prevEl = prevRef.current swiper.params.navigation.nextEl = nextRef.current } }} > {Object.entries(filteredLaunchesList).map(([key, timestamp]) => { const versionInfo = serverVersionList?.versions.find( v => v.id == key.split('-').slice(1).join('-') ) if (!versionInfo) return return (

{versionInfo?.displayName}

Last played{' '} {formatDistanceToNow(new Date(timestamp), { addSuffix: true })}

await launchGame(versionInfo)} /> { setManagingVersion(versionInfo.id) setPopupMode(2) setShowPopup(true) setFadeOut(false) }} />
) })}
)}
) }