From bf8fb35c1a063acb462aca377cdea9ed68e54c0d Mon Sep 17 00:00:00 2001 From: xander <63683502+xander113@users.noreply.github.com> Date: Fri, 18 Mar 2022 10:15:41 -1200 Subject: [PATCH] user page started balls --- web/app/Http/Controllers/Controller.php | 37 ++++++++++---- web/resources/js/layouts/App.js | 6 +++ web/resources/js/pages/User.js | 65 +++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 10 deletions(-) create mode 100644 web/resources/js/pages/User.js diff --git a/web/app/Http/Controllers/Controller.php b/web/app/Http/Controllers/Controller.php index 21f4ef7..2f73267 100644 --- a/web/app/Http/Controllers/Controller.php +++ b/web/app/Http/Controllers/Controller.php @@ -28,18 +28,35 @@ class Controller extends BaseController public function fetchUser() { $POST; - if (!isset($_POST['token'])) {return Response()->json(false);} + if (!isset($_POST['decision'])) {return Response()->json(false);} - $POST = $_POST['token']; - $user = User::where('token', $POST)->first(); + $decision = $_POST['decision']; - if (!$user) {return Response()->json(false);} - - $array = $user->toArray(); - - $staff = Staff::where('user_id', $user->id)->first(); - - if ($staff) {$array['power'] = $staff->power_level;} + switch($decision) { + case "metaUser": + if (!isset($_POST['token'])) {return Response()->json(false);} + $POST = $_POST['token']; + $user = User::where('token', $POST)->first(); + if (!$user) {return Response()->json(false);} + $array = $user->toArray(); + $staff = Staff::where('user_id', $user->id)->first(); + if ($staff) {$array['power'] = $staff->power_level;} + return Response()->json(["data"=>$array]); + break; + case "fetchedUser": + if (!isset($_POST['userId'])) {return Response()->json(false);} + $POST = $_POST['userId']; + $user = User::where('id', $POST)->first(); + if (!$user) {return Response()->json(false);} + $array = $user->toArray(); + $staff = Staff::where('user_id', $user->id)->first(); + if ($staff) {$array['power'] = $staff->power_level;} + return Response()->json(["data"=>$array]); + break; + default: + return Response()->json(false); + break; + } return Response()->json(["data"=>$array]); } diff --git a/web/resources/js/layouts/App.js b/web/resources/js/layouts/App.js index 1374a69..92c6667 100644 --- a/web/resources/js/layouts/App.js +++ b/web/resources/js/layouts/App.js @@ -34,6 +34,7 @@ import Post from '../pages/Post.js'; import CreatePost from '../pages/CreatePost.js'; import CreateReply from '../pages/CreateReply.js'; import Settings from '../pages/Settings.js'; +import User from '../pages/User.js'; axios.defaults.withCredentials = true @@ -61,6 +62,7 @@ const App = () => { function fetchUser() { const body = new FormData(); body.append('token', encodeURIComponent(getCookie(`gtok`))); + body.append('decision', `metaUser`); axios.post(`${protocol}apis.${url}/fetch/user`, body).then((res)=>{ if (res.data.data == `expired`) {setCookie(`gtok`, null, null);window.location.replace(`/login`);} setUser(res.data.data); @@ -136,6 +138,10 @@ const App = () => { {state.maintenance ? : null} + + + + diff --git a/web/resources/js/pages/User.js b/web/resources/js/pages/User.js new file mode 100644 index 0000000..b5994c8 --- /dev/null +++ b/web/resources/js/pages/User.js @@ -0,0 +1,65 @@ +// © 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 '../Layouts/Card.js'; + +var url = Config.BaseUrl.replace('http://', ''); +var protocol = Config.Protocol; + +const User = (props) => { + + const [state, setState] = useState(true); + const [user, setUser] = useState(); + const metaUser = props.user; + const userId = useParams().id; + const history = useHistory(); + + const fetchUser = async () => { + const body = new FormData(); + body.append('userId', userId); + body.append('decision', `fetchedUser`); + axios.post(`${protocol}apis.${url}/fetch/user`, body).then(async(data)=>{ + const res = data.data; + if (!res) {history.push(`/`);} + SetTitle(`${res.data.username}`); + await setUser(res.data); + return; + }); + } + + useEffect(async()=>{ + await fetchUser(); + setState(false); + }, []); + + return ( + !user + ? + + : +
+
+ + {user.username} +

[Avatar.]

+
+
+
+

"{user.about? user.about : `${user.username} doesn't have an about section!`}" - {user.username}

+
+
+ ); +} + +export default User;