1 |
|
2 |
|
3 |
|
4 | type FetchPageArgs = {
|
5 | endpoint: string;
|
6 | pageArgName: string;
|
7 | page: number;
|
8 | token: string;
|
9 | }
|
10 |
|
11 | import agent from "superagent";
|
12 | import qs from "query-string";
|
13 |
|
14 | export const buildSuffix = (pageArgName : string, page : number, params : string) => {
|
15 | const parsedParams = qs.parse(params);
|
16 | let
|
17 | finalParsedParams = {},
|
18 | startString = "";
|
19 |
|
20 | for (const key of Object.keys(parsedParams)) {
|
21 | if (parsedParams[key] === null) {
|
22 | startString += key;
|
23 | } else {
|
24 | finalParsedParams = {
|
25 | ...finalParsedParams,
|
26 | [key]: parsedParams[key],
|
27 | };
|
28 | }
|
29 | }
|
30 | startString = startString === "" ? "?" : `${startString}?`;
|
31 |
|
32 | if (Object.keys(finalParsedParams).length > 0 && qs.extract(params) !== "") {
|
33 | startString = params.replace(qs.extract(params), "");
|
34 | }
|
35 |
|
36 | return startString + qs.stringify({
|
37 | ...finalParsedParams,
|
38 | [pageArgName]: page,
|
39 | }, { encode: false }).replace(startString, "");
|
40 | };
|
41 |
|
42 | export const fetchPage = ({ endpoint, pageArgName, page, token } : FetchPageArgs) => {
|
43 | const
|
44 | suffix = buildSuffix(pageArgName, page, token),
|
45 | url = endpoint + suffix;
|
46 |
|
47 | const promise : any = new Promise((resolve : any, reject : any) => agent.
|
48 | get(url).
|
49 | end((err : any, res : any) => err ? reject(err) : resolve(res))
|
50 | );
|
51 |
|
52 | return promise.then((res : { body : any }) => ({
|
53 | response: res.body,
|
54 | }));
|
55 | };
|