more paginated load
This commit is contained in:
parent
4237890344
commit
d907e310fb
5 changed files with 22 additions and 50 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
Reference in a new issue