/*
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 ?
:
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;