starshard/peafowl
Template
1
Fork 0
mirror of https://github.com/starshardstudio/peafowl.git synced 2024-11-21 20:44:19 +00:00
peafowl/_includes/index.tsx

132 lines
4 KiB
TypeScript
Raw Normal View History

2024-06-16 11:49:13 +00:00
import {compareDate} from "../_utils/date.ts"
import { GameData } from "../_utils/game.ts";
import {GameTable} from "../_components/GameTable.tsx"
import {compare_progress} from "../_utils/progress.ts"
import {GlobalData} from "../_utils/site.ts"
export const layout = "base.tsx"
export default function(data: GlobalData, helpers: Lume.Helpers) {
const intro_section = data.content ? (
<section id={"index-section-intro"}>
{data.children}
</section>
) : null
const games: GameData[] = data.search.pages("game")
const active_games = games
.filter(game => game.active)
.sort(compareDate as any)
const active_games_section = (
<section id={"index-section-games-active"} className={"flex flex-v"}>
<h3>
Now playing
</h3>
<div>
<GameTable games={active_games} columns={["progress", "name", "hoursplayed", "date"]} priority={"progress"}/>
</div>
</section>
)
const top_games = games
.sort((a, b) => ((b.rating ?? 0) - (a.rating ?? 0)))
.slice(0, 10)
const top_games_section = (
<section id={"index-section-games-top"} className={"flex flex-v"}>
<h3>
Top games
</h3>
<div>
<GameTable games={top_games} columns={["rating", "name", "hascontent"]} priority={"rating"}/>
</div>
</section>
)
const played_games = games
.sort((a, b) => ((b.hours_played ?? 0) - (a.hours_played ?? 0)))
.slice(0, 10)
const played_games_section = (
<section id={"index-section-games-top"} className={"flex flex-v"}>
<h3>
Most played games
</h3>
<div>
<GameTable games={played_games} columns={["hoursplayed", "name"]}/>
</div>
</section>
)
const progress_games = games
.sort((a, b) => -compare_progress(a, b))
.slice(0, 10)
const progress_games_section = (
<section id={"index-section-games-top"} className={"flex flex-v"}>
<h3>
Most progressed games
</h3>
<div>
<GameTable games={progress_games} columns={["progress", "name", "hoursplayed"]} priority={"progress"}/>
</div>
</section>
)
const latest_games = games
.sort((a, b) => -compareDate(a, b))
.slice(0, 10)
const latest_games_section = (
<section id={"index-section-games-latest"} className={"flex flex-v"}>
<h3>
Latest updates
</h3>
<div>
<GameTable games={latest_games} columns={["hascontent", "name", "date"]}/>
</div>
</section>
)
const games_cols = (games.length > 0) ? (
<section className={"flex flex-v"}>
<h2>
Videogames
<small>
<a href={helpers.url("~/list-games.md")}>
<i className={"fa-sharp fa-solid fa-magnifying-glass"}/> View all
</a>
</small>
<small>
<a href={helpers.url("/games/feed.rss")}>
<i className={"fa-sharp fa-solid fa-rss"}/> Feed
</a>
</small>
</h2>
{active_games.length > 0 && (
<div className={"flex flex-1"}>
{active_games_section}
</div>
)}
<div className={"flex flex-2"}>
{top_games_section}
{progress_games_section}
</div>
<div className={"flex flex-2"}>
{played_games_section}
{latest_games_section}
</div>
</section>
) : null
return (
<main id={"index-main"} className={"flex flex-v"}>
{intro_section}
{games_cols}
</main>
)
}