// Preact import { h } from 'preact'; import { useState, useEffect } from 'preact/hooks'; import Cookies from 'js-cookie' import { jwtDecode } from 'jwt-decode' // Functions import { getMod, deleteMod } from '../services/mods'; // Components import Button from '../components/Buttons/button'; // 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) const [owner, setOwner] = useState(false); // UseEffect useEffect(() => { // Load mod informations 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 // Handles const handleDeleteMod = async () => { await deleteMod(mod.name); location.replace('/dashboard'); }; // Load user informations //TODO use a service //? for some reason, doesn't work inside useEffect const token = Cookies.get('authToken'); if (token) { const decoded_token = jwtDecode(token); if (decoded_token) { console.debug('Here'); if (decoded_token.username === mod.author) { setOwner(true); } } } 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 }

{/* Sanitized by the backend */}

{mod.author}

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

Versions

v3.0 (latest)
v2.0
v1.0
{ owner ? (
) : ( <> ) }
) } export default ModPage