diff --git a/client/src/containers/Buffet.jsx b/client/src/containers/Buffet.jsx index d597ff7..ef551d2 100644 --- a/client/src/containers/Buffet.jsx +++ b/client/src/containers/Buffet.jsx @@ -15,17 +15,8 @@ import { searchQuestions } from 'services/questionsServices'; const recent = {}; const best = { sort: 'u' }; - -const interesting = { match: JSON.stringify({ 'answers': 0 }), sort: 'uvc' } - -/*const interesting = { - match: { answers : 0 }, - sort: 'uvc', -};*/ -const hot = { - match: JSON.stringify({ hasAcceptedAnswer: false }), - sort: 'uvac', -}; +const interesting = { match: JSON.stringify({ 'answers': 0 }), sort: 'uvc' }; +const hot = { match: JSON.stringify({ hasAcceptedAnswer: false }), sort: 'uvac' }; const sortObjArr = [recent, best, interesting, hot]; export default function Buffet() { @@ -33,9 +24,12 @@ export default function Buffet() { const [sort, setSort] = useState(0); - const getData = async () => { - - const { error, questions } = await searchQuestions(sortObjArr[sort]); + const getData = async ({ question_id }) => { + + const { error, questions } = await searchQuestions({ + ...sortObjArr[sort], + after: question_id + }); if (error) { setError(error); } else diff --git a/client/src/controllers/PaginatedListController.jsx b/client/src/controllers/PaginatedListController.jsx index 8222d7a..d1ec6be 100644 --- a/client/src/controllers/PaginatedListController.jsx +++ b/client/src/controllers/PaginatedListController.jsx @@ -3,17 +3,25 @@ import { PaginatedList } from 'components'; const rowsPerPage = 5; export default function PaginatedListController({ count, Component, getData, noData }) { - const [data, setData] = useState(); + const [data, setData] = useState([]); const [page, setPage] = useState(1); + const [load, setLoad] = useState(true); const handleChangePage = (_, newPage) => { setPage(newPage); + if (load && newPage > ((count ?? data.length) - 100) / rowsPerPage) + loadData(); }; + const loadData = async () => { + const newData = await getData(data[data.length - 1] ?? {}); + if (newData.length) + setData(data.concat(newData)); + else + setLoad(false); + } + useEffect(() => { - const loadData = async () => { - setData(await getData()) - } loadData(); }, [getData]); diff --git a/server/routes/question/CreateAnswerComment.js b/server/routes/question/CreateAnswerComment.js index 5f5f726..fb9439d 100644 --- a/server/routes/question/CreateAnswerComment.js +++ b/server/routes/question/CreateAnswerComment.js @@ -1,7 +1,7 @@ const config = require('server/config.json'); const Answer = require('server/db/models/Answer'); const Comment = require('server/db/models/Comment'); -const { getQuestion, refreshQuestion } = require('server/utils/question'); +const { getQuestion } = require('server/utils/question'); const createRequest = require('server/utils/api'); const getUserLevel = require('server/utils/getUserLevel'); diff --git a/server/routes/question/GetComments.js b/server/routes/question/GetComments.js index 7719a0d..691d391 100644 --- a/server/routes/question/GetComments.js +++ b/server/routes/question/GetComments.js @@ -1,6 +1,6 @@ const config = require('server/config.json'); const Comment = require('server/db/models/Comment'); -const { getQuestion, refreshQuestion } = require('server/utils/question'); +const { getQuestion } = require('server/utils/question'); const fetchComments = require('server/utils/fetchComments'); async function GetComments(req, res) { diff --git a/server/utils/fetchAnswers.js b/server/utils/fetchAnswers.js deleted file mode 100644 index 4617a6e..0000000 --- a/server/utils/fetchAnswers.js +++ /dev/null @@ -1,30 +0,0 @@ -const createRequest = require('./api'); -const config = require('server/config.json'); - -const defaultAcc = { success: true, requests: [] }; - -async function fetchAnswers( - url, - recentTimestamp = 0, - acc = defaultAcc, - after = '' -) { - const request = await createRequest('get', url, { after }); - - if (!request.success) return config.errorGeneric; - if (!request.answers.length) return acc; - - const newAcc = { - success: true, - requests: [...acc.requests, ...request.answers], - }; - - const oldest = request.answers[request.answers.length - 1]; - if (oldest.createdAt < recentTimestamp) { - return newAcc; - } - - return fetchAnswers(url, recentTimestamp, newAcc, oldest['answer_id']); -} - -module.exports = fetchAnswers;