/* Copyright © XlXi 2022 */ import { Component, createRef } from 'react'; import classNames from 'classnames/bind'; import axios from 'axios'; import Twemoji from 'react-twemoji'; import { buildGenericApiUrl } from '../util/HTTP.js'; import ProgressiveImage from './ProgressiveImage'; import Loader from './Loader'; axios.defaults.withCredentials = true; function commaSeparate(num) { let str = num.toString().split('.'); str[0] = str[0].replace(/\B(?=(\d{3})+(?!\d))/g, ','); return str.join('.'); } class GameItemCard extends Component { constructor(props) { super(props); this.state = { hovered: false } } render() { return ( this.setState({hovered: true})} onMouseLeave={() => this.setState({hovered: false})} >

{ this.props.item.Name }

{commaSeparate(this.props.item.Playing)} Playing

{ this.state.hovered ?

By { this.props.item.Creator.Name }

: null } ); } } class Games extends Component { constructor(props) { super(props); this.state = { pageItems: [], pageLoaded: true, pageNumber: null, pageCount: null, error: false }; this.navigate = this.navigate.bind(this); } componentDidMount() { this.navigate(); } navigate(data = {}) { this.setState({pageLoaded: false}); let url = buildGenericApiUrl('api', 'games/v1/list-json'); let paramIterator = 0; Object.keys(data).map(key => { url += ((paramIterator++ == 0 ? '?' : '&') + `${key}=${data[key]}`); }); axios.get(url) .then(res => { const items = res.data; this.setState({ pageItems: items.data, pageCount: items.pages, pageNumber: 1, pageLoaded: true, error: false }); }).catch(err => { const data = err.response.data; let errorMessage = 'An error occurred while processing your request.'; if(data.errors) errorMessage = data.errors[0].message; this.setState({ pageItems: [], pageCount: 1, pageNumber: 1, pageLoaded: true, error: errorMessage }); }); } render() { return (

Games

{ this.state.error ?
{this.state.error}
: null } { !this.state.pageLoaded ?
: null } { (this.state.pageItems.length == 0 && !this.state.error) ?

Nothing found.

:
{ this.state.pageItems.map((item, index) => ) }
} { this.state.pageCount > 1 ? : null }
); } } export default Games;