// © XlXi 2021 // Graphictoria 5 import axios from 'axios'; import React, { useEffect, useState } from "react"; import { Link, useHistory } 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 { MiniCard, MiniCardTitle } from '../Components/Card.js'; import { paginate } from '../helpers/utils.js'; var url = Config.BaseUrl.replace('http://', ''); var protocol = Config.Protocol; const Dashboard = (props) => { const [state, setState] = useState({loading: true}); const [validity, setValidity] = useState({error: false, message: ``, inputs: []}); const [feedState, setFeedState] = useState({loading: true, posts: {posts: [], meta: [], currentPage: 1}}); const user = props.user; const createFeed = async () => { setFeedState({...feedState.posts, loading: true}); await axios.post(`${protocol}apis.${url}/api/create/feed`, new FormData(document.getElementById(`form`)), {headers: {"X-Requested-With":"XMLHttpRequest"}}).then(data=>{ const res = data.data; if (res.badInputs.length >= 1) { setValidity({error: true, message:res.message, inputs: res.badInputs}); setTimeout(()=>{setValidity({...validity, error: false, inputs: res.badInputs});}, 4000); setFeedState({...feedState, loading: false}); }else{ document.getElementById('input').value = ""; setFeedState({loading: false, posts: {...feedState.posts, posts: res.data.data, meta: res.data}}); } }).catch(error=>{console.log(error);}); } const fetchFeed = async () => { await axios.get(`${protocol}apis.${url}/fetch/feed?page=${feedState.posts.currentPage}`, {headers: {"X-Requested-With":"XMLHttpRequest"}}).then(data=>{ const res = data.data; setFeedState({loading: false, posts: {...feedState.posts,posts: res.data.data, meta: res.data}}); }).catch(error=>{console.log(error);}); } const paginatePosts = async (decision) => { paginate(decision, feedState.posts.currentPage, feedState.posts.meta).then(res=>{ switch(res){ case "increase": setFeedState({...feedState, posts: {...feedState.posts, currentPage: feedState.posts.currentPage+1}}); break; case "decrease": setFeedState({...feedState, posts: {...feedState.posts, currentPage: feedState.posts.currentPage-1}}); break; default: break; } }).catch(error=>console.log(error)); } useEffect(()=>{ SetTitle(`Dashboard`); fetchFeed(); setState({loading: false}); }, []); useEffect(async()=>{ setState({loading: true}); await fetchFeed(); setState({loading: false}); }, [feedState.posts.currentPage]); return ( state.loading ? :
{/* User image, blog, friends */}

Hello, {user.username}!

"{ user.about }"

Blog Friends
{/* Feed */}

My Feed

{validity.error?

{validity.message}

: null}
{e.preventDefault();createFeed();}} id={`form`}>
{ feedState.loading ?
: <>
{feedState.posts.posts.map(feed=>( <>

{feed.creatorName}

"{feed.body}"


))}
{feedState.posts.posts.length <= 0?

There isn't any posts right now!

: null} {feedState.posts.posts.length >= 1?
{feedState.posts.currentPage >= 2? : null} {feedState.posts.currentPage < feedState.posts.meta.last_page? : null}
: null} }
{/* Recently Played */}
recently played
); } export default Dashboard;