BugFixes galore

This commit is contained in:
2026-03-08 17:01:36 +01:00
parent 781f0f14fa
commit c8895c8e80
39 changed files with 2255 additions and 237 deletions

View File

@@ -31,6 +31,7 @@ import {
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
@@ -450,29 +451,35 @@ export function Sidebar() {
sideOffset={8}
className="w-52"
>
<DropdownMenuLabel className="font-normal">
<div className="flex flex-col gap-0.5">
<span className="text-sm font-medium text-foreground">
{session?.user?.name ?? "—"}
</span>
<span className="text-xs text-muted-foreground truncate">
{session?.user?.email ?? "—"}
</span>
</div>
</DropdownMenuLabel>
<DropdownMenuGroup>
<DropdownMenuLabel className="font-normal">
<div className="flex flex-col gap-0.5">
<span className="text-sm font-medium text-foreground">
{session?.user?.name ?? "—"}
</span>
<span className="text-xs text-muted-foreground truncate">
{session?.user?.email ?? "—"}
</span>
</div>
</DropdownMenuLabel>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem onClick={() => router.push("/settings")}>
<Settings className="h-4 w-4" />
Account Settings
</DropdownMenuItem>
<DropdownMenuGroup>
<DropdownMenuItem onClick={() => router.push("/settings")}>
<Settings className="h-4 w-4" />
Account Settings
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem
variant="destructive"
onClick={handleLogout}
>
<LogOut className="h-4 w-4" />
Sign out
</DropdownMenuItem>
<DropdownMenuGroup>
<DropdownMenuItem
variant="destructive"
onClick={handleLogout}
>
<LogOut className="h-4 w-4" />
Sign out
</DropdownMenuItem>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
</div>

View File

@@ -22,6 +22,7 @@ import { Button } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
@@ -54,7 +55,8 @@ const PAGE_TITLES: Record<string, string> = {
"/plugins": "Plugins",
"/files": "File Manager",
"/backups": "Backups",
"/settings": "Server Settings",
"/settings": "Account Settings",
"/server": "Server Settings",
"/updates": "Updates",
"/team": "Team",
"/audit": "Audit Log",
@@ -96,7 +98,7 @@ function ServerStatusBadge({ status }: { status: ServerStatus | undefined }) {
);
}
const config = {
const statusConfigs = {
online: {
dot: "bg-emerald-500",
text: "Online",
@@ -117,7 +119,12 @@ function ServerStatusBadge({ status }: { status: ServerStatus | undefined }) {
text: "Stopping…",
className: "border-orange-500/20 bg-orange-500/10 text-orange-400",
},
}[status.status];
};
const config = statusConfigs[status.status] ?? {
dot: "bg-zinc-500",
text: status.status,
className: "border-zinc-700/50 bg-zinc-800/50 text-zinc-400",
};
return (
<span
@@ -287,6 +294,27 @@ function NotificationBell() {
// ---------------------------------------------------------------------------
function ThemeToggle() {
const { resolvedTheme, setTheme } = useTheme();
const [mounted, setMounted] = React.useState(false);
React.useEffect(() => {
setMounted(true);
}, []);
// Render a placeholder until mounted to avoid SSR/client mismatch
if (!mounted) {
return (
<Button
variant="ghost"
size="icon"
className="h-8 w-8 text-zinc-400"
aria-label="Toggle theme"
disabled
>
<Moon className="h-4 w-4" />
</Button>
);
}
const isDark = resolvedTheme === "dark";
return (
@@ -344,24 +372,30 @@ function UserMenu() {
</DropdownMenuTrigger>
<DropdownMenuContent align="end" sideOffset={8} className="w-48">
<DropdownMenuLabel className="font-normal">
<div className="flex flex-col gap-0.5">
<span className="text-sm font-medium">{session?.user?.name ?? "—"}</span>
<span className="text-xs text-muted-foreground truncate">
{session?.user?.email ?? "—"}
</span>
</div>
</DropdownMenuLabel>
<DropdownMenuGroup>
<DropdownMenuLabel className="font-normal">
<div className="flex flex-col gap-0.5">
<span className="text-sm font-medium">{session?.user?.name ?? "—"}</span>
<span className="text-xs text-muted-foreground truncate">
{session?.user?.email ?? "—"}
</span>
</div>
</DropdownMenuLabel>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem onClick={() => router.push("/settings")}>
<Settings className="h-4 w-4" />
Settings
</DropdownMenuItem>
<DropdownMenuGroup>
<DropdownMenuItem onClick={() => router.push("/settings")}>
<Settings className="h-4 w-4" />
Settings
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem variant="destructive" onClick={handleLogout}>
<LogOut className="h-4 w-4" />
Sign out
</DropdownMenuItem>
<DropdownMenuGroup>
<DropdownMenuItem variant="destructive" onClick={handleLogout}>
<LogOut className="h-4 w-4" />
Sign out
</DropdownMenuItem>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
);