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 }