From 807e78aa70689b616c25e419ce634aa6caab3863 Mon Sep 17 00:00:00 2001
From: RizqiSyahrendra <rizqialaudinsyahrendra@gmail.com>
Date: Wed, 5 Mar 2025 00:13:49 +0700
Subject: [PATCH] feat: blogs and pages set author

---
 src/collections/Blogs.ts       | 21 +++++++++++++--------
 src/collections/Pages.ts       | 26 +++++++++++++++++++++++---
 src/payload-types.ts           |  4 ++++
 src/utils/payload/setAuthor.ts | 19 +++++++++++--------
 4 files changed, 51 insertions(+), 19 deletions(-)

diff --git a/src/collections/Blogs.ts b/src/collections/Blogs.ts
index 8714a23..cbfe992 100644
--- a/src/collections/Blogs.ts
+++ b/src/collections/Blogs.ts
@@ -1,4 +1,5 @@
 import formatSlug from "@/utils/payload/formatSlug";
+import setAuthor from "@/utils/payload/setAuthor";
 import { lexicalEditor } from "@payloadcms/richtext-lexical";
 import type { CollectionConfig } from "payload";
 
@@ -78,19 +79,23 @@ export const Blogs: CollectionConfig = {
       name: "createdBy",
       type: "relationship",
       relationTo: "users",
-      hidden: true,
-      // hooks: {
-      //   beforeChange: [setAuthor],
-      // },
+      hooks: {
+        beforeChange: [setAuthor],
+      },
+      admin: {
+        hidden: true,
+      },
     },
     {
       name: "updatedBy",
       type: "relationship",
       relationTo: "users",
-      hidden: true,
-      // hooks: {
-      //   beforeChange: [setAuthor],
-      // },
+      hooks: {
+        beforeChange: [setAuthor],
+      },
+      admin: {
+        hidden: true,
+      },
     },
   ],
   admin: {
diff --git a/src/collections/Pages.ts b/src/collections/Pages.ts
index f7abf7f..869c4e7 100644
--- a/src/collections/Pages.ts
+++ b/src/collections/Pages.ts
@@ -8,6 +8,7 @@ import { HorizontalImageContentBlock } from "@/blocks/HorizontalImageContent";
 import { ImageSliderBlock } from "@/blocks/ImageSlider";
 import { OurTeamBlock } from "@/blocks/OurTeam";
 import formatSlug from "@/utils/payload/formatSlug";
+import setAuthor from "@/utils/payload/setAuthor";
 import { CollectionConfig } from "payload";
 
 export const Pages: CollectionConfig = {
@@ -29,9 +30,6 @@ export const Pages: CollectionConfig = {
       name: "slug",
       label: "Page Slug",
       type: "text",
-      admin: {
-        position: "sidebar",
-      },
       hooks: {
         beforeValidate: [formatSlug("title")],
       },
@@ -75,6 +73,28 @@ export const Pages: CollectionConfig = {
         },
       ],
     },
+    {
+      name: "createdBy",
+      type: "relationship",
+      relationTo: "users",
+      hooks: {
+        beforeChange: [setAuthor],
+      },
+      admin: {
+        hidden: true,
+      },
+    },
+    {
+      name: "updatedBy",
+      type: "relationship",
+      relationTo: "users",
+      hooks: {
+        beforeChange: [setAuthor],
+      },
+      admin: {
+        hidden: true,
+      },
+    },
   ],
   admin: {
     hideAPIURL: true,
diff --git a/src/payload-types.ts b/src/payload-types.ts
index 703eae5..15d164f 100644
--- a/src/payload-types.ts
+++ b/src/payload-types.ts
@@ -306,6 +306,8 @@ export interface Page {
     description?: string | null;
     cannonical_url?: string | null;
   };
+  createdBy?: (number | null) | User;
+  updatedBy?: (number | null) | User;
   updatedAt: string;
   createdAt: string;
 }
@@ -747,6 +749,8 @@ export interface PagesSelect<T extends boolean = true> {
         description?: T;
         cannonical_url?: T;
       };
+  createdBy?: T;
+  updatedBy?: T;
   updatedAt?: T;
   createdAt?: T;
 }
diff --git a/src/utils/payload/setAuthor.ts b/src/utils/payload/setAuthor.ts
index 954b436..f14e7e7 100644
--- a/src/utils/payload/setAuthor.ts
+++ b/src/utils/payload/setAuthor.ts
@@ -1,14 +1,17 @@
 import { FieldHook } from "payload";
 
-const setAuthor: FieldHook = ({ req, operation, data, value }) => {
-  // if (req.user && !!data) {
-  //   if (operation === "create") {
-  //     data.createdBy = req.user.id;
-  //   }
-  //   data.updatedBy = req.user.id;
-  // }
+const setAuthor: FieldHook = ({ value, req, data, field, operation }) => {
+  if (req.user && !!data) {
+    if (operation === "create") {
+      return req.user.id;
+    } else {
+      if (field.name === "updatedBy") {
+        return req.user.id;
+      }
+    }
+  }
 
-  return data;
+  return value;
 };
 
 export default setAuthor;