// © XlXi 2021
// Graphictoria 5
import axios from 'axios';
import React, { useEffect, useState } from "react";
import { Link, useHistory, useParams } from "react-router-dom";
import Config from '../config.js';
import SetTitle from "../Helpers/Title.js";
import Loader from '../Components/Loader.js';
import { GenericErrorModal } from './Errors.js';
import { Card, CardTitle } from '../Components/Card.js';
import { paginate } from '../helpers/utils.js';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
var url = Config.BaseUrl.replace('http://', '');
var protocol = Config.Protocol;
const Forum = (props) => {
var id = useParams().id;
const [state, setState] = useState({offline: false, loading: true});
const [categories, setCategoires] = useState([]);
const [category, setCategory] = useState([]);
const [posts, setPosts] = useState({posts: [], currentPage: 1, meta: []});
const user = props.user;
if (!id) id = 1;
const fetchCategories = async () => {
await axios.get(`${protocol}apis.${url}/fetch/categories`, {headers: {"X-Requested-With":"XMLHttpRequest"}}).then(data=>{
setCategoires(data.data.categories);
}).catch(error=>{console.log(error);});
}
const fetchCategory = async () => {
await axios.get(`${protocol}apis.${url}/fetch/category/${id}?page=${posts.currentPage}`, {headers: {"X-Requested-With":"XMLHttpRequest"}}).then(data=>{
if (!data.data) {window.location.href=`/forum`;return;}
setCategory(data.data.data);
setPosts({...posts, posts: data.data.posts.data, meta: data.data.posts});
}).catch(error=>{console.log(error);});
}
const paginatePosts = async (decision) => {
paginate(decision, posts.currentPage, posts.meta).then(res=>{
switch(res){
case "increase":
setPosts({...posts, currentPage: posts.currentPage+1});
break;
case "decrease":
setPosts({...posts, currentPage: posts.currentPage-1});
break;
default:
break;
}
}).catch(error=>console.log(error));
}
useEffect(async ()=>{
SetTitle(`Forum`);
await fetchCategory();
await fetchCategories();
setState({...state, loading: false});
}, []);
useEffect(async()=>{
setState({...state, loading: true});
await fetchCategory();
setState({...state, loading: false});
}, [posts.currentPage]);
return (
state.loading || categories.length <= 0
?
{category.description}
{user?There are currently no posts!
: null} {posts.posts.map(post=>( <>
Posted by:
{post.creator.username}