nicco.io/src/lib/wp.js

51 lines
1.3 KiB
JavaScript

import axios from 'axios'
const isDev = process.env.NODE_ENV !== 'production' && false
axios.defaults.baseURL = `${isDev ? 'http://localhost' : 'https://api.nicco.io'}/wp-json/wp/v2`
function normalize(post) {
return {
...post,
...post.acf,
id: post.id,
title: post.title.rendered,
content: post.content.rendered,
}
}
function combineUrlAndParams(url, params) {
const p = new URLSearchParams({
per_page: 100,
...params,
}).toString()
return `${url}?${p}`
}
export async function getOne(url, params = {}) {
const { data } = await axios(combineUrlAndParams(url, params))
if (!data.length) return null
else return normalize(data[0])
}
export async function getAll(url, params = {}) {
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)
}
export function sortByDate(data) {
return data.sort((a, b) => parseInt(b.date) - parseInt(a.date))
}
export function respond(res, body) {
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify(body))
}