- {elm.title}
+ {elm.title}
{sanitizeBlogContentIntoStringPreview(elm.content)}
diff --git a/src/services/payload/blog.ts b/src/services/payload/blog.ts
index c4dd027..a4102a4 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 = {
@@ -51,6 +52,41 @@ 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",
+ });
+
+ // 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({
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;
+}