diff --git a/components/layout/MemberSidebar.tsx b/components/layout/MemberSidebar.tsx
index 6e43ef1..7c4e4f3 100644
--- a/components/layout/MemberSidebar.tsx
+++ b/components/layout/MemberSidebar.tsx
@@ -1,6 +1,6 @@
/**
* @file components/layout/MemberSidebar.tsx
- * @description Member sidebar component displaying server members with desktop sliding panel and mobile drawer functionality.
+ * @description Sidebar component fetching and displaying the server member list with responsive overlay support.
*/
"use client";
@@ -11,15 +11,15 @@ import { useActiveServer } from "@/lib/context/ServerContext";
import { MemberList } from "@/components/members/MemberList";
import { X, Loader2 } from "lucide-react";
import { clsx } from "clsx";
-import { User } from "@/db/schema";
+import type { User } from "@/db/schema";
-/** Properties for the MemberHeader component. */
+/** Props for the MemberHeader component. */
interface MemberHeaderProps {
title: string;
onClose: () => void;
}
-/** Renders the header section of the member sidebar with a title and close button. */
+/** Header element for the member sidebar with title and close button. */
function MemberHeader({ title, onClose }: MemberHeaderProps) {
return (
@@ -38,7 +38,7 @@ function MemberHeader({ title, onClose }: MemberHeaderProps) {
);
}
-/** Displays the list of members for the active server in a responsive sidebar or drawer layout. */
+/** Collapsible sidebar component displaying members of the currently active server. */
export function MemberSidebar() {
const { isMembersOpen, closeMembers } = useSidebarStore();
const { activeServer } = useActiveServer();
@@ -85,7 +85,14 @@ export function MemberSidebar() {
useEffect(() => {
function handleClickOutside(event: MouseEvent) {
const target = event.target as HTMLElement;
- if (target.closest('button[title*="Mitgliederliste"]')) return;
+
+ if (
+ target.closest('button[title*="Mitgliederliste"]') ||
+ target.closest('[role="dialog"]') ||
+ target.closest(".user-profile-popover")
+ ) {
+ return;
+ }
if (
isMembersOpen &&
@@ -102,7 +109,7 @@ export function MemberSidebar() {
return () => document.removeEventListener("mousedown", handleClickOutside);
}, [isMembersOpen, closeMembers]);
- /** Renders either a loading spinner or the populated member list depending on state. */
+ /** Renders loading indicator or the member list depending on state. */
const renderContent = () => {
if (isLoading && members.length === 0) {
return (
@@ -116,17 +123,23 @@ export function MemberSidebar() {
return (
<>
- {/* Desktop View */}
+ {isMembersOpen && (
+
+ )}
+
-
- {/* Mobile Backdrop & Drawer */}
- {isMembersOpen && (
-
- )}
-
-
>
);
}