rsnext/examples/cms-buttercms/lib/api.js
Steven 4466ba436b
chore(examples): use default prettier for examples/templates (#60530)
## Description
This PR ensures that the default prettier config is used for examples
and templates.

This config is compatible with `prettier@3` as well (upgrading prettier
is bigger change that can be a future PR).

## Changes
- Updated `.prettierrc.json` in root with `"trailingComma": "es5"` (will
be needed upgrading to prettier@3)
- Added `examples/.prettierrc.json` with default config (this will
change every example)
- Added `packages/create-next-app/templates/.prettierrc.json` with
default config (this will change every template)

## Related

- Fixes #54402
- Closes #54409
2024-01-11 16:01:44 -07:00

140 lines
3.1 KiB
JavaScript

import Butter from "buttercms";
let butter;
const previewSetting = process.env.PREVIEW;
// make preview mode by default
const preview =
previewSetting === "true" || previewSetting === undefined ? 1 : 0;
try {
butter = Butter(process.env.NEXT_PUBLIC_BUTTER_CMS_API_KEY, preview);
} catch (e) {
console.log(e);
}
const defaultPageSize = 100;
const defaultPostCount = 10;
async function getLandingPagesData(page, pageSize = defaultPageSize) {
try {
const params = {
page,
page_size: pageSize,
};
const response = await butter.page.list("landing-page", params);
return {
pages: response?.data?.data,
prevPage: response?.data?.meta.previous_page,
nextPage: response?.data?.meta.next_page,
};
} catch (e) {
throw e.response.data.detail;
}
}
export async function getLandingPage(slug) {
try {
const page = await butter.page.retrieve("landing-page", slug);
return page?.data?.data;
} catch (e) {
throw e.response.data.detail;
}
}
export async function getLandingPages() {
let paginatedLandingPages = [];
let currentPage = 1;
while (!!currentPage) {
const landingPagesData = await getLandingPagesData(currentPage);
paginatedLandingPages.push(...landingPagesData.pages);
currentPage = landingPagesData.nextPage;
}
return paginatedLandingPages;
}
export async function getPostsData(
{ page, pageSize, tag, category } = { page: 1, pageSize: defaultPostCount },
) {
try {
// https://buttercms.com/docs/api/node?javascript#get-your-blog-posts
const params = {
page_size: pageSize || defaultPostCount,
page: page || 1,
};
if (tag) {
params.tag_slug = tag;
}
if (category) {
params.category_slug = category;
}
const response = await butter.post.list(params);
return {
posts: response?.data?.data,
prevPage: response?.data?.meta.previous_page,
nextPage: response?.data?.meta.next_page,
};
} catch (e) {
throw e.response.data.detail;
}
}
export async function getPost(slug) {
try {
const response = await butter.post.retrieve(slug);
return response?.data?.data;
} catch (e) {
throw e.response.data.detail;
}
}
export async function getMainMenu() {
try {
const response = await butter.content.retrieve(["navigation_menu"]);
const mainMenu = response?.data?.data?.navigation_menu.find(
(menu) => menu.name === "Main menu",
);
return mainMenu ? mainMenu.menu_items : [];
} catch (e) {
throw e.response.data.detail;
}
}
export async function getCategories() {
try {
const response = await butter.category.list();
return response?.data?.data;
} catch (e) {
throw e.response.data.detail;
}
}
export async function getTags() {
try {
const response = await butter.tag.list();
return response?.data?.data;
} catch (e) {
throw e.response.data.detail;
}
}
export async function searchPosts({ query }) {
try {
const response = await butter.post.search(query);
return response?.data?.data;
} catch (e) {
throw e.response.data.detail;
}
}