UNPKG

1.46 kBJavaScriptView Raw
1// @flow
2/* eslint-disable no-bitwise*/
3
4type FetchPageArgs = {
5 endpoint: string;
6 pageArgName: string;
7 page: number;
8 token: string;
9}
10
11import agent from "superagent";
12import qs from "query-string";
13
14export 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
42export 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};