diff --git a/web/resources/js/pages/Dashboard.js b/web/resources/js/pages/Dashboard.js
index b768887..9c5c54f 100644
--- a/web/resources/js/pages/Dashboard.js
+++ b/web/resources/js/pages/Dashboard.js
@@ -13,6 +13,7 @@ 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;
@@ -20,13 +21,58 @@ var protocol = Config.Protocol;
const Dashboard = (props) => {
const [state, setState] = useState({loading: true});
- const [feedState, setFeedState] = 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
@@ -63,11 +109,18 @@ const Dashboard = (props) => {
{/* Feed */}
My Feed
+ {validity.error?
+
+ : null}
{
feedState.loading
@@ -76,9 +129,30 @@ const Dashboard = (props) => {
:
-
-
+ <>
+
+ {feedState.posts.posts.map(feed=>(
+ <>
+
+
+
{feed.creatorName}
+

+
+
+
+
+ >
+ ))}
+ {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}
+ >
}
diff --git a/web/resources/js/pages/User.js b/web/resources/js/pages/User.js
index 1c1ec35..91f8897 100644
--- a/web/resources/js/pages/User.js
+++ b/web/resources/js/pages/User.js
@@ -19,8 +19,10 @@ var protocol = Config.Protocol;
const User = (props) => {
+ const [validity, setValidity] = useState({error: false, message: ``, inputs: []});
const [state, setState] = useState(true);
const [user, setUser] = useState();
+ const [isFriend, setFriend] = useState(false);
const metaUser = props.user;
const userId = useParams().id;
const history = useHistory();
@@ -29,34 +31,78 @@ const User = (props) => {
const body = new FormData();
body.append('userId', userId);
body.append('decision', `fetchedUser`);
- axios.post(`${protocol}apis.${url}/fetch/user`, body).then(async(data)=>{
+ axios.get(`${protocol}apis.${url}/fetch/user/${userId}`, body).then(async(data)=>{
const res = data.data;
if (!res) {history.push(`/`);}
SetTitle(`${res.data.username}`);
+ setFriend(res.data.isFriend);
await setUser(res.data);
return;
});
}
+ const addFriend = async (decision) => {
+ const body = new FormData();
+ body.append('decision', decision);
+ setState(true);
+ axios.post(`${protocol}apis.${url}/api/add/user/${userId}`, body).then(async(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});
+ setState(false);
+ return;
+ }
+ await setFriend(res.data);
+ setState(false);
+ return;
+ });
+ }
+
useEffect(async()=>{
await fetchUser();
setState(false);
}, []);
return (
- !user
+ !user || state
?
:
+ {validity.error?
+
+ : null}
{user.username}
- [Avatar.]
+
+
+
+ {
+ !metaUser? null :
+ userId == metaUser.id?
This is you!
:
+ isFriend && isFriend == `pending`?
+
+ : isFriend && isFriend == `needToAccept`?
+
+ : isFriend?
+
+ :
+
+ }
+
+
+ "{user.about? user.about : `${user.username} doesn't have an about section!`}" - {user.username}
-
"{user.about? user.about : `${user.username} doesn't have an about section!`}" - {user.username}
+
Something else idk.
);
diff --git a/web/resources/sass/Graphictoria.scss b/web/resources/sass/Graphictoria.scss
index b472473..e53dc2d 100644
--- a/web/resources/sass/Graphictoria.scss
+++ b/web/resources/sass/Graphictoria.scss
@@ -45,6 +45,16 @@ $web-font-path: "https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,w
background-repeat: no-repeat;
}
+.a {
+ color: inherit !important;
+ text-decoration: none !important;
+}
+
+.a:hover {
+ color: inherit !important;
+ text-decoration: none !important;
+}
+
// Loader
.gtoria-loader-center {
@@ -1011,6 +1021,12 @@ p {
display: none !important;
}
+.graphic-thumb {
+ height: 60px;
+ width: 60px;
+ object-fit: cover;
+}
+
.graphic-post {
padding: 1rem 1rem;
text-align: start;
diff --git a/web/routes/apis.php b/web/routes/apis.php
index 1c3ae77..cd8e6ce 100644
--- a/web/routes/apis.php
+++ b/web/routes/apis.php
@@ -34,10 +34,16 @@ Route::post('/v1/user/login', 'AuthController@Login');
Route::post('/v1/user/logout', 'AuthController@Logout');
Route::get('/v1/user/settings', 'UserController@GetSettings');
+Route::get('/fetch/user/{id}', 'Controller@fetchUser');
+
Route::get('/banners/data', 'BannerController@getBanners');
Route::get('/games/metadata', 'GamesController@isAvailable');
+Route::get('/fetch/feed', 'Controller@fetchFeed');
+
+Route::post('/api/create/feed', 'HomeController@createFeed');
+
Route::get('/fetch/categories', 'Controller@fetchCategories');
Route::post('/fetch/categories/post', 'Controller@fetchCategoriesFP');
@@ -52,6 +58,8 @@ Route::get('/fetch/posts/{id}', 'Controller@fetchPosts');
Route::get('/fetch/post/{id}', 'Controller@fetchPost');
+Route::post('/api/add/user/{id}', 'HomeController@addFriend');
+
Route::post('/api/create/forum', 'HomeController@createPost');
Route::post('/api/create/reply/{id}', 'HomeController@createReply');
diff --git a/web/routes/web.php b/web/routes/web.php
index 696b045..852bacd 100644
--- a/web/routes/web.php
+++ b/web/routes/web.php
@@ -67,4 +67,6 @@ Route::get('/games', function(){
return view('main');
});
+Route::get('/account/logout', 'AuthController@logout');
+
Route::get('/test123', 'GridTest@generateThumbnail');