- {elm.title}
+ {elm.title}
{sanitizeBlogContentIntoStringPreview(elm.content)}
diff --git a/src/services/payload/blog.ts b/src/services/payload/blog.ts
index c4dd027..9fa5a01 100644
--- a/src/services/payload/blog.ts
+++ b/src/services/payload/blog.ts
@@ -1,5 +1,6 @@
import payloadConfig from "@/payload.config";
import { formatDate } from "@/utils/datetime";
+import { getRandomNumber } from "@/utils/general";
import { getPayload, Where } from "payload";
type FetchBlogParams = {
@@ -12,7 +13,10 @@ type FetchBlogParams = {
export async function fetchBlog({ page, search = "", categoryId, tagId }: FetchBlogParams = {}) {
const payload = await getPayload({ config: payloadConfig });
- const queryCondition: Where = {};
+ const queryCondition: Where = {
+ _status: { equals: "published" },
+ };
+
if (!!search) {
queryCondition["title"] = {
contains: search,
@@ -51,11 +55,48 @@ export async function fetchBlog({ page, search = "", categoryId, tagId }: FetchB
};
}
+export async function fetchBlogSuggestion() {
+ const payload = await getPayload({ config: payloadConfig });
+ const limitPerPage = 2;
+ const blogCountQuery = await payload.count({
+ collection: "blogs",
+ where: { _status: { equals: "published" } },
+ });
+
+ // randomize page
+ let page = 1;
+ const totalDocs = blogCountQuery.totalDocs;
+ if (totalDocs > limitPerPage) {
+ const totalPage = Math.ceil(totalDocs / limitPerPage);
+ page = getRandomNumber(totalPage);
+ }
+
+ const blogDataQuery = await payload.find({
+ collection: "blogs",
+ page,
+ limit: limitPerPage,
+ });
+
+ const formattedData = blogDataQuery.docs.map((item) => {
+ return {
+ ...item,
+ imgFormatted: typeof item.img !== "number" ? { url: item?.img?.url ?? "", alt: item.img.alt } : undefined,
+ createdAtFormatted: formatDate(item.createdAt),
+ };
+ });
+
+ return {
+ ...blogDataQuery,
+ formattedData,
+ };
+}
+
export async function fetchBlogDetail(slug: string | undefined) {
const payload = await getPayload({ config: payloadConfig });
const blogDataQuery = await payload.find({
collection: "blogs",
where: {
+ _status: { equals: "published" },
slug: { equals: slug },
},
limit: 1,
@@ -82,6 +123,7 @@ export async function fetchBlogCategoryBySlug(slug: string) {
const category = await payload.find({
collection: "blogCategories",
where: {
+ _status: { equals: "published" },
slug: { equals: slug },
},
});
@@ -98,6 +140,7 @@ export async function fetchBlogTagBySlug(slug: string) {
const tag = await payload.find({
collection: "blogTags",
where: {
+ _status: { equals: "published" },
slug: { equals: slug },
},
});
diff --git a/src/services/payload/page.ts b/src/services/payload/page.ts
index 583221d..80bc2e0 100644
--- a/src/services/payload/page.ts
+++ b/src/services/payload/page.ts
@@ -11,6 +11,7 @@ export const fetchPageBySlug = async ({ slug }: { slug: string | undefined }) =>
pagination: false,
// overrideAccess: draft,
where: {
+ _status: { equals: "published" },
slug: {
equals: slug,
},
diff --git a/src/utils/general.ts b/src/utils/general.ts
index 8623424..294ef90 100644
--- a/src/utils/general.ts
+++ b/src/utils/general.ts
@@ -1,3 +1,7 @@
export function limitString(text: string) {
return `${text.length > 100 ? `${text.slice(0, 100)}...` : text}`;
}
+
+export function getRandomNumber(range: number): number {
+ return Math.floor(Math.random() * range) + 1;
+}