more paginated load

This commit is contained in:
“spicecat” 2022-07-30 23:31:31 -04:00
commit d907e310fb
5 changed files with 22 additions and 50 deletions

View file

@ -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

View file

@ -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]);

View file

@ -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');

View file

@ -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) {

View file

@ -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;