draupnir4all-web

git clone git://archive.git.mtrnord.blog/MTRNord/draupnir4all-web.git
Log | Files | Refs | README | LICENSE

commit 4cc6244fe98e6ef1d8a7d3bb956679e50dc43240
parent 3e7d7a877074d8babb874d3e5ab54ea00f57c4f6
Author: MTRNord <mtrnord1@gmail.com>
Date:   Mon, 28 Apr 2025 12:47:13 +0200

Further mobile fixes

Signed-off-by: MTRNord <mtrnord1@gmail.com>

Diffstat:
Msrc/components/dashboard/dashboard-header.tsx | 95++++++++++++++++++++++++++++++++++++++++---------------------------------------
Msrc/components/modals/add-ban.tsx | 9+++++----
Msrc/components/modals/kick-user.tsx | 2+-
3 files changed, 54 insertions(+), 52 deletions(-)

diff --git a/src/components/dashboard/dashboard-header.tsx b/src/components/dashboard/dashboard-header.tsx @@ -6,7 +6,7 @@ import { usePathname, useRouter, useSearchParams } from "next/navigation" import { Shield, Bell, Menu, Ban, LogOut, Crown, ChevronDown, Plus, X } from "lucide-react" import { Button } from "@/components/ui/button" -import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet" +import { Sheet, SheetContent, SheetTitle, SheetTrigger } from "@/components/ui/sheet" import { Separator } from "@/components/ui/separator" import { DropdownMenu, @@ -23,6 +23,8 @@ import AddBan from "../modals/add-ban" import KickUserModal from "../modals/kick-user" import CreateBotModal from "../modals/create-bot" import { mockPolicyLists, Team } from "../../app/dashboard/mockData" +// @ts-expect-error - Missing types for Radix UI visuallyHidden +import { VisuallyHidden } from "@radix-ui/react-visually-hidden"; interface Notification { id: string @@ -130,15 +132,6 @@ export function DashboardHeader({ teams }: DashboardHeaderProps) { } } - const navigateToTab = (tab: string) => { - const baseUrl = tab === "overview" ? "/dashboard" : `/dashboard/${tab}` - - // Preserve team parameter - const params = new URLSearchParams() - params.set("team", selectedTeam.id) - router.push(`${baseUrl}?${params.toString()}`) - } - return ( <header className="sticky top-0 z-10 border-b border-gray-800 bg-black/80 backdrop-blur-sm"> <div className="container flex h-16 items-center justify-between px-4 md:px-6"> @@ -151,7 +144,7 @@ export function DashboardHeader({ teams }: DashboardHeaderProps) { {/* Global Team Selector */} <DropdownMenu> <DropdownMenuTrigger asChild> - <Button variant="outline" className="border-purple-500 text-purple-400 hover:bg-purple-950"> + <Button variant="outline" className="hidden md:flex border-purple-500 text-purple-400 hover:bg-purple-950"> <Crown className="mr-2 h-4 w-4" /> {selectedTeam.name} <ChevronDown className="ml-2 h-4 w-4" /> @@ -282,6 +275,9 @@ export function DashboardHeader({ teams }: DashboardHeaderProps) { </Button> </SheetTrigger> <SheetContent side="right" className="bg-gray-950 border-gray-800 p-0"> + <VisuallyHidden asChild> + <SheetTitle>Navigaion</SheetTitle> + </VisuallyHidden> <div className="flex flex-col h-full"> <div className="border-b border-gray-800 p-4"> <div className="flex items-center gap-2"> @@ -301,7 +297,7 @@ export function DashboardHeader({ teams }: DashboardHeaderProps) { <ChevronDown className="ml-2 h-4 w-4" /> </Button> </DropdownMenuTrigger> - <DropdownMenuContent className="w-56 bg-gray-900 border-gray-800"> + <DropdownMenuContent className="bg-gray-900 border-gray-800"> <DropdownMenuLabel>Your Bots</DropdownMenuLabel> <DropdownMenuSeparator className="bg-gray-800" /> {teams.map((team) => ( @@ -317,41 +313,46 @@ export function DashboardHeader({ teams }: DashboardHeaderProps) { </DropdownMenu> </div> <nav className="flex flex-col p-4 gap-2"> - <Button - variant={activeTab === "overview" ? "secondary" : "ghost"} - className="justify-start" - onClick={() => navigateToTab("overview")} - > - Overview - </Button> - <Button - variant={activeTab === "reports" ? "secondary" : "ghost"} - className="justify-start" - onClick={() => navigateToTab("reports")} - > - Reports - </Button> - <Button - variant={activeTab === "bans" ? "secondary" : "ghost"} - className="justify-start" - onClick={() => navigateToTab("bans")} - > - Bans - </Button> - <Button - variant={activeTab === "analytics" ? "secondary" : "ghost"} - className="justify-start" - onClick={() => navigateToTab("analytics")} - > - Analytics - </Button> - <Button - variant={activeTab === "settings" ? "secondary" : "ghost"} - className="justify-start" - onClick={() => navigateToTab("settings")} - > - Settings - </Button> + <Link href="/dashboard/overview"> + <Button + variant={activeTab === "overview" ? "secondary" : "ghost"} + className="justify-start w-full" + > + Overview + </Button> + </Link> + <Link href="/dashboard/reports"> + <Button + variant={activeTab === "reports" ? "secondary" : "ghost"} + className="justify-start w-full" + > + Reports + </Button> + </Link> + <Link href="/dashboard/bans"> + <Button + variant={activeTab === "bans" ? "secondary" : "ghost"} + className="justify-start w-full" + > + Bans + </Button> + </Link> + <Link href="/dashboard/analytics"> + <Button + variant={activeTab === "analytics" ? "secondary" : "ghost"} + className="justify-start w-full" + > + Analytics + </Button> + </Link> + <Link href="/dashboard/settings"> + <Button + variant={activeTab === "settings" ? "secondary" : "ghost"} + className="justify-start w-full" + > + Settings + </Button> + </Link> <Separator className="my-2" /> diff --git a/src/components/modals/add-ban.tsx b/src/components/modals/add-ban.tsx @@ -12,9 +12,10 @@ interface AddBanProps { policyLists: PolicyList[]; filled?: boolean; header?: boolean; + buttonClasses?: string; } -export default function AddBan({ filled, policyLists, header }: AddBanProps) { +export default function AddBan({ filled, policyLists, header, buttonClasses }: AddBanProps) { return ( <Dialog> <DialogTrigger asChild> @@ -22,19 +23,19 @@ export default function AddBan({ filled, policyLists, header }: AddBanProps) { <Button variant="outline" size="sm" - className="hidden md:flex border-red-500 text-red-400 hover:bg-red-950 hover:text-red-300" + className={`${buttonClasses} border-red-500 text-red-400 hover:bg-red-950 hover:text-red-300`} > <Ban className="mr-2 h-4 w-4" /> Add Ban </Button> ) : ( filled ? ( - <Button size="sm" className="bg-purple-600 text-white hover:bg-purple-700"> + <Button size="sm" className={`${buttonClasses} bg-purple-600 text-white hover:bg-purple-700`}> <Ban className="mr-2 h-4 w-4" /> Add Ban </Button> ) : ( - <Button variant="ghost" size="sm" className="h-7 px-2 text-xs text-purple-400"> + <Button variant="ghost" size="sm" className={`${buttonClasses} h-7 px-2 text-xs text-purple-400`}> <Plus className="h-3 w-3 mr-1" /> Add Ban </Button> diff --git a/src/components/modals/kick-user.tsx b/src/components/modals/kick-user.tsx @@ -9,7 +9,7 @@ export default function KickUserModal() { <Button variant="outline" size="sm" - className="w-full justify-start border-orange-500 text-orange-400 hover:bg-orange-950 hover:text-orange-300" + className="border-orange-500 text-orange-400 hover:bg-orange-950 hover:text-orange-300" > <UserX className="mr-2 h-4 w-4" /> Kick User