Index: client/src/Dashboard/components/Forum.jsx
===================================================================
--- client/src/Dashboard/components/Forum.jsx	(revision 920772ba56382fc978ec163d458fcd099c2a5498)
+++ client/src/Dashboard/components/Forum.jsx	(revision e176d66bf79f1fac404e7a93d6dc99c64fca1ee0)
@@ -19,4 +19,5 @@
     postId: null,
   });
+  const [isDeleting, setIsDeleting] = useState(false);
   const postsPerPage = 5;
   const { user } = useAuth();
@@ -32,5 +33,7 @@
   const confirmDelete = async () => {
     if (modal.postId) {
+      setIsDeleting(true);
       await handleDeletePost(modal.postId);
+      setIsDeleting(false);
     }
     closeModal();
@@ -237,9 +240,24 @@
             <p className="py-4">{modal.message}</p>
             <div className="flex justify-end gap-3 mt-4">
-              <button className="btn btn-ghost" onClick={closeModal}>
+              <button
+                className="btn btn-ghost"
+                onClick={closeModal}
+                disabled={isDeleting}
+              >
                 Cancel
               </button>
-              <button className="btn btn-error" onClick={confirmDelete}>
-                Delete
+              <button
+                className="btn btn-error"
+                onClick={confirmDelete}
+                disabled={isDeleting}
+              >
+                {isDeleting ? (
+                  <>
+                    <span className="loading loading-spinner loading-sm mr-2"></span>
+                    Deleting...
+                  </>
+                ) : (
+                  "Delete"
+                )}
               </button>
             </div>
Index: client/src/Dashboard/components/ForumPostDetail.jsx
===================================================================
--- client/src/Dashboard/components/ForumPostDetail.jsx	(revision 920772ba56382fc978ec163d458fcd099c2a5498)
+++ client/src/Dashboard/components/ForumPostDetail.jsx	(revision e176d66bf79f1fac404e7a93d6dc99c64fca1ee0)
@@ -22,4 +22,5 @@
     commentId: null,
   });
+  const [isDeleting, setIsDeleting] = useState(false);
   const location = useLocation();
   const statePost = useState(location.state?.post || {});
@@ -40,5 +41,7 @@
   const confirmDelete = async () => {
     if (modal.commentId) {
+      setIsDeleting(true);
       await handleDeleteComment(modal.commentId);
+      setIsDeleting(false);
     }
     closeModal();
@@ -256,9 +259,24 @@
             <p className="py-4">{modal.message}</p>
             <div className="flex justify-end gap-3 mt-4">
-              <button className="btn btn-ghost" onClick={closeModal}>
+              <button
+                className="btn btn-ghost"
+                onClick={closeModal}
+                disabled={isDeleting}
+              >
                 Cancel
               </button>
-              <button className="btn btn-error" onClick={confirmDelete}>
-                Delete
+              <button
+                className="btn btn-error"
+                onClick={confirmDelete}
+                disabled={isDeleting}
+              >
+                {isDeleting ? (
+                  <>
+                    <span className="loading loading-spinner loading-sm mr-2"></span>
+                    Deleting...
+                  </>
+                ) : (
+                  "Delete"
+                )}
               </button>
             </div>
Index: client/src/Dashboard/components/ManagePosts.jsx
===================================================================
--- client/src/Dashboard/components/ManagePosts.jsx	(revision 920772ba56382fc978ec163d458fcd099c2a5498)
+++ client/src/Dashboard/components/ManagePosts.jsx	(revision e176d66bf79f1fac404e7a93d6dc99c64fca1ee0)
@@ -26,4 +26,5 @@
     post: null,
   });
+  const [isActionLoading, setIsActionLoading] = useState(false);
 
   const showModal = (message, type, postId = null, post = null) => {
@@ -41,10 +42,12 @@
   };
 
-  const confirmAction = () => {
+  const confirmAction = async () => {
+    setIsActionLoading(true);
     if (modal.type === "delete" && modal.postId) {
-      handleDeletePost(modal.postId);
+      await handleDeletePost(modal.postId);
     } else if (modal.type === "approve" && modal.post) {
-      handleApprovePost(modal.post);
-    }
+      await handleApprovePost(modal.post);
+    }
+    setIsActionLoading(false);
     closeModal();
   };
@@ -314,5 +317,9 @@
             <p className="py-4">{modal.message}</p>
             <div className="flex justify-end gap-3 mt-4">
-              <button className="btn btn-ghost" onClick={closeModal}>
+              <button
+                className="btn btn-ghost"
+                onClick={closeModal}
+                disabled={isActionLoading}
+              >
                 Cancel
               </button>
@@ -322,6 +329,16 @@
                 }`}
                 onClick={confirmAction}
+                disabled={isActionLoading}
               >
-                {modal.type === "approve" ? "Approve" : "Delete"}
+                {isActionLoading ? (
+                  <>
+                    <span className="loading loading-spinner loading-sm mr-2"></span>
+                    {modal.type === "approve" ? "Approving..." : "Deleting..."}
+                  </>
+                ) : modal.type === "approve" ? (
+                  "Approve"
+                ) : (
+                  "Delete"
+                )}
               </button>
             </div>
