+ {[75, 90, 55, 80, 65, 85].map((titleWidth, i) => (
+
+
+
+
+ ))}
diff --git a/surfsense_web/components/layout/ui/sidebar/InboxSidebar.tsx b/surfsense_web/components/layout/ui/sidebar/InboxSidebar.tsx
index 8f7ca38c4..d46651440 100644
--- a/surfsense_web/components/layout/ui/sidebar/InboxSidebar.tsx
+++ b/surfsense_web/components/layout/ui/sidebar/InboxSidebar.tsx
@@ -15,7 +15,6 @@ import {
Inbox,
LayoutGrid,
ListFilter,
- Loader2,
MessageSquare,
Search,
X,
@@ -43,6 +42,7 @@ import {
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { Input } from "@/components/ui/input";
+import { Skeleton } from "@/components/ui/skeleton";
import { Spinner } from "@/components/ui/spinner";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
@@ -928,12 +928,39 @@ export function InboxSidebar({
{(isSearchMode ? isSearchLoading : loading) ? (
-
- {isSearchMode ? (
-
- ) : (
-
- )}
+
+ {activeTab === "comments"
+ ? /* Comments skeleton: avatar + two-line text + time */
+ [85, 60, 90, 70, 50, 75].map((titleWidth, i) => (
+
+ ))
+ : /* Status skeleton: status icon circle + two-line text + time */
+ [75, 90, 55, 80, 65, 85].map((titleWidth, i) => (
+
+ ))}
) : filteredItems.length > 0 ? (
@@ -1000,6 +1027,39 @@ export function InboxSidebar({
{!isSearchMode && filteredItems.length < 5 && hasMore && (
)}
+ {/* Loading more skeletons at the bottom during infinite scroll */}
+ {loadingMore && (
+ activeTab === "comments"
+ ? [80, 60, 90].map((titleWidth, i) => (
+
+ ))
+ : [70, 85, 55].map((titleWidth, i) => (
+
+ ))
+ )}
) : isSearchMode ? (