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
177 lines
3.7 KiB
TypeScript
177 lines
3.7 KiB
TypeScript
/**
|
|
* A helper for the GraphQL API.
|
|
*
|
|
* @param {String} query - The query to fetch for
|
|
* @param {Object} param1.variables - The variables to pass to the query
|
|
* @param {Object} param1.preview - Indicate if the query should be previewed
|
|
* @returns {Promise} - A promise that resolves to the result of the query
|
|
*/
|
|
async function fetchAPI(query, { variables } = { variables: null }) {
|
|
const res = await fetch(
|
|
process.env.NEXT_PUBLIC_DOTCMS_HOST + "/api/v1/graphql",
|
|
{
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
Authorization: `Bearer ${process.env.DOTCMS_TOKEN}`,
|
|
},
|
|
body: JSON.stringify({
|
|
query,
|
|
variables,
|
|
}),
|
|
},
|
|
);
|
|
|
|
const json = await res.json();
|
|
|
|
if (json.errors) {
|
|
console.error(json.errors);
|
|
throw new Error("Failed to fetch API");
|
|
}
|
|
|
|
return json.data;
|
|
}
|
|
|
|
/**
|
|
* Get the correct type to filter post using preview flag
|
|
*
|
|
* @param preview
|
|
* @returns {string}
|
|
*/
|
|
const showPreviewPosts = (preview) => {
|
|
return preview === true
|
|
? "+working:true +deleted:false"
|
|
: "+live:true +deleted:false";
|
|
};
|
|
|
|
/**
|
|
* Fetch a single post and more posts
|
|
*
|
|
* @param {String} slug - The slug of the post to fetch
|
|
* @param {boolean} preview - Whether or not to fetch the live post
|
|
* @returns An object with a post and more posts array
|
|
*/
|
|
export async function getPostAndMorePosts(slug, preview) {
|
|
const data = await fetchAPI(
|
|
`
|
|
query PostBySlug($query: String!, $morePostsQuery: String!) {
|
|
post: BlogCollection(query: $query, limit: 1) {
|
|
title
|
|
urlTitle
|
|
blogContent {
|
|
json
|
|
}
|
|
postingDate
|
|
image {
|
|
idPath
|
|
}
|
|
author {
|
|
firstName
|
|
lastName
|
|
profilePhoto {
|
|
idPath
|
|
}
|
|
}
|
|
}
|
|
|
|
morePosts: BlogCollection(query: $morePostsQuery, limit: 2) {
|
|
title
|
|
urlTitle
|
|
teaser
|
|
postingDate
|
|
image {
|
|
idPath
|
|
}
|
|
author {
|
|
firstName
|
|
lastName
|
|
profilePhoto {
|
|
idPath
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
{
|
|
variables: {
|
|
query: `+urlmap:/blog/post/${slug} ${showPreviewPosts(preview)}`,
|
|
morePostsQuery: `-urlmap:/blog/post/${slug} ${showPreviewPosts(
|
|
preview,
|
|
)}`,
|
|
},
|
|
},
|
|
);
|
|
return {
|
|
post: data?.post[0] ?? {},
|
|
morePosts: data?.morePosts ?? [],
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Fetch one post and more post with preview mode flag.
|
|
*
|
|
* @param slug
|
|
* @param isPreview
|
|
* @returns {Promise<{post, morePosts}>}
|
|
*/
|
|
export async function getPreviewPostBySlug(slug, isPreview) {
|
|
return await getPostAndMorePosts(slug, isPreview);
|
|
}
|
|
|
|
/**
|
|
* Fetch all posts with slug
|
|
*
|
|
* @returns An array of posts with the following shape:
|
|
* {
|
|
* urlTitle: string
|
|
* }
|
|
*/
|
|
export async function getAllPostsWithSlug() {
|
|
const entries = await fetchAPI(`
|
|
query getAllPostsWithSlug {
|
|
BlogCollection(query: "+live:true +deleted:false") {
|
|
urlTitle
|
|
}
|
|
}
|
|
`);
|
|
|
|
return entries?.BlogCollection ?? [];
|
|
}
|
|
|
|
/**
|
|
* Fetch all posts
|
|
*
|
|
* @param {boolean} preview - If true, return a preview of the post
|
|
* @returns An array of posts
|
|
*/
|
|
export async function getAllPostsForHome(preview) {
|
|
const entries = await fetchAPI(
|
|
`
|
|
query getAllPostsForHome($query: String!) {
|
|
BlogCollection(query: $query) {
|
|
title
|
|
teaser
|
|
postingDate
|
|
author {
|
|
firstName
|
|
lastName
|
|
profilePhoto {
|
|
idPath
|
|
}
|
|
}
|
|
urlTitle
|
|
image {
|
|
idPath
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
{
|
|
variables: {
|
|
query: `${showPreviewPosts(preview)}`,
|
|
},
|
|
},
|
|
);
|
|
return entries?.BlogCollection ?? [];
|
|
}
|