// Preact import { h } from 'preact'; import { useState, useEffect } from 'preact/hooks'; // Functions import { getMod } from '../services/mods'; // Components // Images import logo from '../assets/logo.png' import profile from '../assets/profile.svg' import download_icon from '../assets/download_alt.svg' import favorite_icon from '../assets/favorite.svg' // Styles import styles from '../styles/content_page.module.css' function ModPage({name}) { // UseState const [mod, setMod] = useState({}) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) // UseEffect useEffect(() => { async function loadItems() { setLoading(true); setError(false); try { const fetched_mod = await getMod(name); setMod(fetched_mod); } catch (err) { setError(err.message); } finally { setLoading(false); } } loadItems(); }, []); // <-- Tells useEffect to run once after render const base_page = ( <> ); if (loading) { // TODO replace by loading screen return ( <> {base_page}

Loading...

); } if (error) { // TODO replace by popup return ( <> {base_page}

Couldn't load this mod

{error}

); } return ( <> {base_page}

{mod.display_name || mod.name }

{mod.mod_infos.full_description || "No description"}

{mod.author}

{mod.mod_infos.downloads_count || 0}
{mod.mod_infos.favorites_count || 0}

Versions

v3.0 (latest)
v2.0
v1.0
) } export default ModPage