Files
Arian Tron 61f56f997c
Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
first commit
2026-03-10 19:37:31 +03:30

141 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;
}
}