Files
freeCodeCamp/paginate.js

42 lines
1.2 KiB
JavaScript
Raw Normal View History

2018-11-07 20:12:04 -08:00
const { owner, repo } = require('./constants');
const paginate = async function paginate (method, octokit, firstPR, lastPR, prPropsToGet) {
2018-11-07 21:20:21 -08:00
const prFilter = (prs, first, last, prPropsToGet) => {
const filtered = [];
for (let pr of prs) {
2018-11-07 20:12:04 -08:00
if (pr.number >= first && pr.number <= last) {
const propsObj = prPropsToGet.reduce((obj, prop) => {
obj[prop] = pr[prop];
return obj;
} ,{});
2018-11-07 21:20:21 -08:00
filtered.push(propsObj);
}
if (pr.number >= last) {
done = true;
return filtered;
2018-11-06 23:04:43 -08:00
}
2018-11-07 21:20:21 -08:00
}
return filtered;
2018-11-07 20:12:04 -08:00
};
const methodProps = {
owner, repo, state: 'open',
base: 'master', sort: 'created',
direction: 'asc', page: 1, per_page: 100
};
let done = false; // will be true when lastPR is seen paginated results
let response = await method(methodProps);
let { data } = response;
2018-11-07 21:20:21 -08:00
data = prFilter(data, firstPR, lastPR, prPropsToGet);
while (octokit.hasNextPage(response) && !done ) {
2018-11-07 20:12:04 -08:00
response = await octokit.getNextPage(response);
2018-11-07 21:20:21 -08:00
let dataFiltered = prFilter(response.data, firstPR, lastPR, prPropsToGet);
2018-11-07 20:12:04 -08:00
data = data.concat(dataFiltered);
}
return data;
};
2018-11-11 23:52:00 -08:00
module.exports = { paginate };