36 lines
1.1 KiB
JavaScript
36 lines
1.1 KiB
JavaScript
import fetch from 'isomorphic-unfetch';
|
|
import parseSort from './parseSort';
|
|
import getUrl from './getUrl';
|
|
import getJwt from './getJwt';
|
|
|
|
export const $limit = 12; // number of docs per page
|
|
export const select = ['id', 'name', 'updated', 'dir']
|
|
.map((f, i) => ({ [`$select[${i}]`]: f }));
|
|
|
|
export const getDocs = async (q, jwt) => {
|
|
const docsRes = await fetch(getUrl('docs', Boolean(jwt)) + q, {
|
|
headers: { Authorization: jwt || getJwt() }
|
|
}).catch(({ message }) => ({ ok: false, error: message }));
|
|
if(docsRes.ok) {
|
|
const res = await docsRes.json();
|
|
const total = res.total || 0;
|
|
const docs = res.data || [];
|
|
return { docs, total };
|
|
}
|
|
return { total: 0, docs: [], error: docsRes.message };
|
|
};
|
|
|
|
export const buildQ = q => {
|
|
if(!q.$search) delete q.$search;
|
|
if(!q.$skip) delete q.$skip;
|
|
else {
|
|
q.$skip = (q.$skip - 1) * $limit;
|
|
}
|
|
const $sort = parseSort(q.$sort ? q.$sort : 'updated:-1');
|
|
delete q.$sort;
|
|
select.forEach(sel => q = {...q, ...sel});
|
|
q = { $limit, ...q };
|
|
let url = Object.keys(q).map(k => `${k}=${encodeURIComponent(q[k])}`).join('&');
|
|
url = `?${url}&${$sort}`;
|
|
return url;
|
|
};
|