showcase games in /games of ones with mods fetched from the latest 100 mod posts, added new games file #41

Merged
freakoverse merged 7 commits from staging into master 2024-09-23 12:35:46 +00:00
5 changed files with 55 additions and 13 deletions

View File

@ -0,0 +1,2 @@
Game Name,16 by 9 image,Boxart image
Fire Emblem Engage,,https://image.nostr.build/f9f883f88c7d1abc38b98b0aa2394684e52e10171b621011f348034ab9973476.jpg
1 Game Name 16 by 9 image Boxart image
2 Fire Emblem Engage https://image.nostr.build/f9f883f88c7d1abc38b98b0aa2394684e52e10171b621011f348034ab9973476.jpg

View File

@ -1,4 +1,4 @@
Game Name,16 by 9 image,Boxart image Game Name,16 by 9 image,Boxart image
Minecraft,,https://image.nostr.build/b75b2d3a7855370230f2976567e2d5f913a567c57ac61adfb60c7e1102f05117.jpg Minecraft,,https://image.nostr.build/b75b2d3a7855370230f2976567e2d5f913a567c57ac61adfb60c7e1102f05117.jpg
Vintage Story,, Vintage Story,,https://image.nostr.build/9efe683d339cc864032a99047ce26b2b5c19fab1ec4dcc6d4db96e2785c44eda.png
Yandere Simulator,, Yandere Simulator,,https://image.nostr.build/54ba56b752bb9d411cbdc1d249fa0cb74c6062a305bcd0a70ecacb61b8d50030.png
1 Game Name 16 by 9 image Boxart image
2 Minecraft https://image.nostr.build/b75b2d3a7855370230f2976567e2d5f913a567c57ac61adfb60c7e1102f05117.jpg
3 Vintage Story https://image.nostr.build/9efe683d339cc864032a99047ce26b2b5c19fab1ec4dcc6d4db96e2785c44eda.png
4 Yandere Simulator https://image.nostr.build/54ba56b752bb9d411cbdc1d249fa0cb74c6062a305bcd0a70ecacb61b8d50030.png

View File

@ -171052,7 +171052,7 @@ Race The Sun,,
The Cat Lady,, The Cat Lady,,
Halfway,, Halfway,,
Kingdom Wars 2: Battles,, Kingdom Wars 2: Battles,,
A Hat in Time,, A Hat in Time,,https://image.nostr.build/c57f62758acbd80bfa05cd7ca11be73a490acb788967bb87bd08cc895c7638e4.jpg
Stonehearth,, Stonehearth,,
FOTONICA,, FOTONICA,,
Fester Mudd: Curse of the Gold - Episode 1,, Fester Mudd: Curse of the Gold - Episode 1,,
@ -200513,7 +200513,7 @@ Circuit Superstars,,
Battle Aces,, Battle Aces,,
Anime Collector: Evo,, Anime Collector: Evo,,
琉隐九绝,, 琉隐九绝,,
Hogwarts Legacy,, Hogwarts Legacy,,https://image.nostr.build/ad464ead9d4fd8a099d346dccc8ff2d12926498fd387632c15f6cc1629f4794f.jpg
House Flipper 2,, House Flipper 2,,
For The King II,, For The King II,,
God Edge,, God Edge,,
@ -201749,7 +201749,7 @@ Nose Demo,,
Summer Clover,, Summer Clover,,
Super Fantasy Kingdom Playtest,, Super Fantasy Kingdom Playtest,,
Automobilista 2 Beta - Dedicated Server,, Automobilista 2 Beta - Dedicated Server,,
Baldur's Gate 3,, Baldur's Gate 3,,https://image.nostr.build/cf27d232726e2408d1c85666044f6e082b306ce48bf88a53e8feb81c8086aa5c.jpg
MultiVersus,, MultiVersus,,
Geometry May. I swear it's a nice free game,, Geometry May. I swear it's a nice free game,,
指尖沙场,, 指尖沙场,,
@ -202104,7 +202104,7 @@ Portal BAGLEY,,
Metal Slug Tactics,, Metal Slug Tactics,,
Time is Life,, Time is Life,,
Cairn,, Cairn,,
Palworld,, Palworld,,https://image.nostr.build/2e0113739cb67fac76ef975309fcc5790f75e84c68c9e68806cc8d72693a6f30.jpg
TerraTech Worlds Dedicated Server,, TerraTech Worlds Dedicated Server,,
CyberTD,, CyberTD,,
Easy Red 2,, Easy Red 2,,
@ -202398,7 +202398,7 @@ Hidden Corgi Mansion Soundtrack,,
Aarik and the Ruined Kingdom,, Aarik and the Ruined Kingdom,,
Rust - Staging Branch,, Rust - Staging Branch,,
竹书纪年:三国志风云录,, 竹书纪年:三国志风云录,,
Starfield,, Starfield,,https://image.nostr.build/057be1e9aa57b5724169f25ee01722a607e7bed38045e6bea743a85647ed0299.jpg
Theatre of War,, Theatre of War,,
isekizima: Ruins and Tails Journey Playtest,, isekizima: Ruins and Tails Journey Playtest,,
Pet Shop Simulator,, Pet Shop Simulator,,
@ -202716,7 +202716,7 @@ SunnySide,,
Cloudbuilt,, Cloudbuilt,,
LONESTAR,, LONESTAR,,
Into the Emberlands - Supporter Pack,, Into the Emberlands - Supporter Pack,,
Caravan Sandwitch,,https://s2.ezgif.com/tmp/ezgif-2-a4cdee2a97.jpg Caravan Sandwitch,,https://image.nostr.build/cb5597718bfa7e41c7bed29fcf65dd372d88872446bae0e6dab7532fb2e45acb.jpg
Nine Sols,, Nine Sols,,
Stardeus,, Stardeus,,
Keyboard Tennis Demo,, Keyboard Tennis Demo,,

Can't render this file because it is too large.

View File

@ -15,7 +15,7 @@ export const LANDING_PAGE_DATA = {
], ],
featuredGames: [ featuredGames: [
'Persona 3 Reload', 'Persona 3 Reload',
'Caravan Sandwitch', 'Baldur\'s Gate 3',
'Cyberpunk 2077', 'Cyberpunk 2077',
'ELDEN RING', 'ELDEN RING',
'FINAL FANTASY VII REMAKE INTERGRADE' 'FINAL FANTASY VII REMAKE INTERGRADE'
@ -112,6 +112,7 @@ export const REACTIONS = {
// NOTE: there should be a corresponding CSV file in public/assets/games folder for each entry in the array // NOTE: there should be a corresponding CSV file in public/assets/games folder for each entry in the array
export const GAME_FILES = [ export const GAME_FILES = [
'Games_Itch.csv', 'Games_Itch.csv',
'Games_Nintendo.csv',
'Games_Other.csv', 'Games_Other.csv',
'Games_Steam.csv' 'Games_Steam.csv'
] ]

View File

@ -1,26 +1,65 @@
import { PaginationWithPageNumbers } from 'components/Pagination' import { PaginationWithPageNumbers } from 'components/Pagination'
import { MAX_GAMES_PER_PAGE } from 'constants.ts' import { MAX_GAMES_PER_PAGE } from 'constants.ts'
import { useGames } from 'hooks' import { useDidMount, useGames } from 'hooks'
import { useRef, useState } from 'react' import { useMemo, useRef, useState } from 'react'
import { GameCard } from '../components/GameCard' import { GameCard } from '../components/GameCard'
import '../styles/pagination.css' import '../styles/pagination.css'
import '../styles/search.css' import '../styles/search.css'
import '../styles/styles.css' import '../styles/styles.css'
import { createSearchParams, useNavigate } from 'react-router-dom' import { createSearchParams, useNavigate } from 'react-router-dom'
import { appRoutes } from 'routes' import { appRoutes } from 'routes'
import { fetchMods } from 'utils'
export const GamesPage = () => { export const GamesPage = () => {
const navigate = useNavigate() const navigate = useNavigate()
const searchTermRef = useRef<HTMLInputElement>(null) const searchTermRef = useRef<HTMLInputElement>(null)
const games = useGames() const games = useGames()
const [gamesWithMods, setGamesWithMods] = useState<string[]>([])
const [currentPage, setCurrentPage] = useState(1) const [currentPage, setCurrentPage] = useState(1)
useDidMount(() => {
fetchMods({ limit: 100 }).then((mods) => {
mods.sort((a, b) => b.published_at - a.published_at)
const gameNames = new Set<string>()
mods.map((mod) => gameNames.add(mod.game))
setGamesWithMods(Array.from(gameNames))
})
})
const sortedGames = useMemo(() => {
// Create a map for the order array, assigning each game name a rank based on its index.
const orderMap = new Map<string, number>()
gamesWithMods.forEach((gameName, index) => {
orderMap.set(gameName, index)
})
const gamesArray = [...games]
return gamesArray.sort((a, b) => {
const indexA = orderMap.get(a['Game Name'])
const indexB = orderMap.get(b['Game Name'])
// Games that are not in the order array should go after those that are in the array.
if (indexA !== undefined && indexB !== undefined) {
return indexA - indexB
} else if (indexA !== undefined) {
return -1 // a comes before b
} else if (indexB !== undefined) {
return 1 // b comes before a
} else {
return 0 // keep original order if neither is in the array
}
})
}, [games, gamesWithMods])
// Pagination logic // Pagination logic
const totalGames = games.length const totalGames = sortedGames.length
const totalPages = Math.ceil(totalGames / MAX_GAMES_PER_PAGE) const totalPages = Math.ceil(totalGames / MAX_GAMES_PER_PAGE)
const startIndex = (currentPage - 1) * MAX_GAMES_PER_PAGE const startIndex = (currentPage - 1) * MAX_GAMES_PER_PAGE
const endIndex = startIndex + MAX_GAMES_PER_PAGE const endIndex = startIndex + MAX_GAMES_PER_PAGE
const currentGames = games.slice(startIndex, endIndex) const currentGames = sortedGames.slice(startIndex, endIndex)
const handlePageChange = (page: number) => { const handlePageChange = (page: number) => {
if (page >= 1 && page <= totalPages) { if (page >= 1 && page <= totalPages) {