From 73acb68801768c6ab59f0ba2f5b7f1f253a3ea37 Mon Sep 17 00:00:00 2001 From: xander <63683502+xander113@users.noreply.github.com> Date: Mon, 14 Mar 2022 12:38:00 -1200 Subject: [PATCH] pagination for forum cuck --- web/app/Http/Controllers/Controller.php | 2 +- web/app/Http/Controllers/GridTest.php | 2 ++ web/resources/js/helpers/Auth.js | 1 - web/resources/js/helpers/utils.js | 19 ++++++++++++++ web/resources/js/pages/Forum.js | 34 +++++++++++++++++++++--- web/resources/js/pages/Post.js | 35 ++++++++++++++++++++++--- 6 files changed, 83 insertions(+), 10 deletions(-) diff --git a/web/app/Http/Controllers/Controller.php b/web/app/Http/Controllers/Controller.php index 1ae25bb..21f4ef7 100644 --- a/web/app/Http/Controllers/Controller.php +++ b/web/app/Http/Controllers/Controller.php @@ -75,7 +75,7 @@ class Controller extends BaseController if (!$category) {return Response()->json(false);} - $posts = $category->posts()->orderBy('pinned', 'desc')->orderBy('updated_at', 'desc')->paginate(20); + $posts = $category->posts()->orderBy('pinned', 'desc')->orderBy('updated_at', 'desc')->paginate(15); foreach ($posts as &$post) { $post['creator'] = User::where('id', $post['creator_id'])->first(); diff --git a/web/app/Http/Controllers/GridTest.php b/web/app/Http/Controllers/GridTest.php index 9b1ed17..1b26a5c 100644 --- a/web/app/Http/Controllers/GridTest.php +++ b/web/app/Http/Controllers/GridTest.php @@ -27,6 +27,8 @@ TestScript; $test = new SoapService('http://192.168.0.3:64989'); $result = $test->OpenJob(SoapService::MakeJobJSON('test', 10, 0, 0, 'test render', $testScript)); + return response($result); + return response(base64_decode($result->OpenJobExResult->LuaValue[0]->value)) ->header('Content-Type', 'image/png'); } diff --git a/web/resources/js/helpers/Auth.js b/web/resources/js/helpers/Auth.js index 7c1cb42..9921de0 100644 --- a/web/resources/js/helpers/Auth.js +++ b/web/resources/js/helpers/Auth.js @@ -39,7 +39,6 @@ export function LoginToAccount(form) { var badInputs = []; return new Promise(async (resolve, reject)=>{ - await axios.post(`${protocol}apis.${url}/account/login`, body, {headers: {'X-CSRF-TOKEN': document.querySelector(`meta[name="csrf-token"]`).content, "X-Requested-With":"XMLHttpRequest"}}).then(data=>{ const res = data.data; if (res.badInputs.length >= 1) { diff --git a/web/resources/js/helpers/utils.js b/web/resources/js/helpers/utils.js index f02ceb8..112fd14 100644 --- a/web/resources/js/helpers/utils.js +++ b/web/resources/js/helpers/utils.js @@ -41,6 +41,25 @@ export function checkCookie() { } } +export const paginate = async (decision, currentPage, meta) => { + if (decision && currentPage <= 1) return; + if (!decision && currentPage >= meta.last_page) return; + switch (decision) { + case true: + return new Promise(async (resolve, reject)=>{ + resolve("decrease"); + }); + break; + case false: + return new Promise(async (resolve, reject)=>{ + resolve("increase"); + }); + break; + default: + break; + } +} + export function useOnClickOutside(refs, handler) { useEffect( () => { diff --git a/web/resources/js/pages/Forum.js b/web/resources/js/pages/Forum.js index 80228c0..0b47ee0 100644 --- a/web/resources/js/pages/Forum.js +++ b/web/resources/js/pages/Forum.js @@ -13,6 +13,7 @@ import Loader from '../Components/Loader.js'; import { GenericErrorModal } from './Errors.js'; import { Card, CardTitle } from '../Layouts/Card.js'; +import { paginate } from '../helpers/utils.js'; var url = Config.BaseUrl.replace('http://', ''); var protocol = Config.Protocol; @@ -23,7 +24,7 @@ const Forum = (props) => { const [state, setState] = useState({offline: false, loading: true}); const [categories, setCategoires] = useState([]); const [category, setCategory] = useState([]); - const [posts, setPosts] = useState({posts: [], currentPage: 0, meta: []}); + const [posts, setPosts] = useState({posts: [], currentPage: 1, meta: []}); const user = props.user; if (!id) id = 1; @@ -35,19 +36,39 @@ const Forum = (props) => { } const fetchCategory = async () => { - await axios.get(`${protocol}apis.${url}/fetch/category/${id}`, {headers: {"X-Requested-With":"XMLHttpRequest"}}).then(data=>{ + 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 fetchCategories(); - await fetchCategory(); setState({...state, loading: false}); }, []); + + useEffect(async()=>{ + setState({...state, loading: true}); + await fetchCategory(); + setState({...state, loading: false}); + }, [posts.currentPage]); return ( state.loading @@ -61,7 +82,7 @@ const Forum = (props) => {
{category.description}
{user?[Avatar.]
{post.post.creator.username} +{post.post.body}
@@ -108,6 +130,11 @@ const Post = (props) => {