rsnext/examples/cms-cosmic/lib/api.js
Luis Alvarez D 2cd691050a
Add new import flow to CMS examples (#14053)
[ch2502]

- Added new import flow to every CMS example, using the deploy button, and removed `vercel.json`
- Replaced `dotenv` with the new env support in outdated examples
2020-06-11 23:44:23 +00:00

75 lines
1.7 KiB
JavaScript

import Cosmic from 'cosmicjs'
const BUCKET_SLUG = process.env.COSMIC_BUCKET_SLUG
const READ_KEY = process.env.COSMIC_READ_KEY
const bucket = Cosmic().bucket({
slug: BUCKET_SLUG,
read_key: READ_KEY,
})
const is404 = (error) => /not found/i.test(error.message)
export async function getPreviewPostBySlug(slug) {
const params = {
slug,
props: 'slug',
status: 'all',
}
try {
const data = await bucket.getObject(params)
return data.object
} catch (error) {
// Don't throw if an slug doesn't exist
if (is404(error)) return
throw error
}
}
export async function getAllPostsWithSlug() {
const params = {
type: 'posts',
props: 'slug',
}
const data = await bucket.getObjects(params)
return data.objects
}
export async function getAllPostsForHome(preview) {
const params = {
type: 'posts',
props: 'title,slug,metadata,created_at',
...(preview && { status: 'all' }),
}
const data = await bucket.getObjects(params)
return data.objects
}
export async function getPostAndMorePosts(slug, preview) {
const singleObjectParams = {
slug,
props: 'slug,title,metadata,created_at',
...(preview && { status: 'all' }),
}
const moreObjectParams = {
type: 'posts',
limit: 3,
props: 'title,slug,metadata,created_at',
...(preview && { status: 'all' }),
}
const object = await bucket.getObject(singleObjectParams).catch((error) => {
// Don't throw if an slug doesn't exist
if (is404(error)) return
throw error
})
const moreObjects = await bucket.getObjects(moreObjectParams)
const morePosts = moreObjects.objects
?.filter(({ slug: object_slug }) => object_slug !== slug)
.slice(0, 2)
return {
post: object?.object,
morePosts,
}
}