/** * @file components/layout/ServerSettingsMenu.tsx * @description Single settings dropdown menu providing server management actions (Settings, Create Category, Create Channel). */ "use client"; import { useState, useRef, useEffect } from "react"; import { Settings, FolderPlus, PlusCircle, Sliders } from "lucide-react"; import { EditServerModal } from "@/components/modals/EditServerModal"; import { CreateCategoryModal } from "@/components/modals/CreateCategoryModal"; import { CreateChannelModal } from "@/components/modals/CreateChannelModal"; /** Props for the ServerSettingsMenu component. */ interface ServerSettingsMenuProps { serverId: string; serverName: string; } /** Renders a server management dropdown menu with modal triggers for channel, category, and server settings. */ export function ServerSettingsMenu({ serverId, serverName, }: ServerSettingsMenuProps) { const [isMenuOpen, setIsMenuOpen] = useState(false); const [isEditServerOpen, setIsEditServerOpen] = useState(false); const [isCreateCategoryOpen, setIsCreateCategoryOpen] = useState(false); const [isCreateChannelOpen, setIsCreateChannelOpen] = useState(false); const menuRef = useRef(null); // Close the menu when clicked outside of it useEffect(() => { function handleClickOutside(event: MouseEvent) { if (menuRef.current && !menuRef.current.contains(event.target as Node)) { setIsMenuOpen(false); } } if (isMenuOpen) { document.addEventListener("mousedown", handleClickOutside); } return () => document.removeEventListener("mousedown", handleClickOutside); }, [isMenuOpen]); return (
{/* Button */} {/* Dropdown MenĂ¼ */} {isMenuOpen && (
)} {/* Modals */} setIsEditServerOpen(false)} /> setIsCreateCategoryOpen(false)} serverId={serverId} /> setIsCreateChannelOpen(false)} serverId={serverId} />
); }