nicco.io/src/lib/wp.js

51 lines
1.3 KiB
JavaScript
Raw Normal View History

2020-09-22 21:47:33 +02:00
import axios from 'axios'
2020-09-23 15:37:12 +02:00
const isDev = process.env.NODE_ENV !== 'production' && false
2020-09-22 21:47:33 +02:00
axios.defaults.baseURL = `${isDev ? 'http://localhost' : 'https://api.nicco.io'}/wp-json/wp/v2`
function normalize(post) {
return {
2020-09-23 15:37:12 +02:00
...post,
2020-09-22 21:47:33 +02:00
...post.acf,
id: post.id,
title: post.title.rendered,
content: post.content.rendered,
}
}
2020-09-23 15:37:12 +02:00
function combineUrlAndParams(url, params) {
const p = new URLSearchParams({
per_page: 100,
...params,
}).toString()
return `${url}?${p}`
}
2020-09-22 21:47:33 +02:00
export async function getOne(url, params = {}) {
2020-09-23 15:37:12 +02:00
const { data } = await axios(combineUrlAndParams(url, params))
2020-09-22 21:47:33 +02:00
if (!data.length) return null
else return normalize(data[0])
}
export async function getAll(url, params = {}) {
2020-09-23 15:37:12 +02:00
const { data, headers } = await axios(combineUrlAndParams(url, params))
const totalPages = parseInt(headers['x-wp-totalpages'])
const results = [...data]
if (totalPages > 1) {
for (let page = 2; page <= totalPages; page++) {
const { data } = await axios(combineUrlAndParams(url, { ...params, page }))
results.push(...data)
}
}
return results.map(normalize)
2020-09-22 21:47:33 +02:00
}
2020-09-24 19:29:43 +02:00
2020-09-28 16:02:16 +02:00
export function sortByDate(data) {
return data.sort((a, b) => parseInt(b.date) - parseInt(a.date))
2020-09-24 19:29:43 +02:00
}
2020-09-28 14:40:04 +02:00
export function respond(res, body) {
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify(body))
}