import { NDKFilter, NDKKind, NDKSubscriptionCacheUsage } from '@nostr-dev-kit/ndk' import { ModCard } from 'components/ModCard' import { ModFilter } from 'components/ModsFilter' import { PaginationWithPageNumbers } from 'components/Pagination' import { MAX_MODS_PER_PAGE, T_TAG_VALUE } from 'constants.ts' import { useAppSelector, useFilteredMods, useMuteLists, useNDKContext, useNSFWList } from 'hooks' import { useEffect, useState } from 'react' import { useParams } from 'react-router-dom' import { FilterOptions, ModDetails, ModeratedFilter, NSFWFilter, SortBy } from 'types' import { extractModData, isModDataComplete } from 'utils' export const GamePage = () => { const params = useParams() const { name: gameName } = params const { ndk } = useNDKContext() const muteLists = useMuteLists() const nsfwList = useNSFWList() const [filterOptions, setFilterOptions] = useState({ sort: SortBy.Latest, nsfw: NSFWFilter.Hide_NSFW, source: window.location.host, moderated: ModeratedFilter.Moderated }) const [mods, setMods] = useState([]) const [currentPage, setCurrentPage] = useState(1) const userState = useAppSelector((state) => state.user) const filteredMods = useFilteredMods( mods, userState, filterOptions, nsfwList, muteLists ) // Pagination logic const totalGames = filteredMods.length const totalPages = Math.ceil(totalGames / MAX_MODS_PER_PAGE) const startIndex = (currentPage - 1) * MAX_MODS_PER_PAGE const endIndex = startIndex + MAX_MODS_PER_PAGE const currentMods = filteredMods.slice(startIndex, endIndex) const handlePageChange = (page: number) => { if (page >= 1 && page <= totalPages) { setCurrentPage(page) } } useEffect(() => { const filter: NDKFilter = { kinds: [NDKKind.Classified], '#t': [T_TAG_VALUE] } const subscription = ndk.subscribe(filter, { cacheUsage: NDKSubscriptionCacheUsage.PARALLEL, closeOnEose: true }) subscription.on('event', (ndkEvent) => { if (isModDataComplete(ndkEvent)) { const mod = extractModData(ndkEvent) if (mod.game === gameName) setMods((prev) => { if (prev.find((e) => e.aTag === mod.aTag)) return [...prev] return [...prev, mod] }) } }) subscription.start() // Cleanup function to stop subscription return () => { subscription.stop() } }, [gameName, ndk]) if (!gameName) return null return ( <>

Game:  {gameName}

{currentMods.map((mod) => ( ))}
) }