Skip to content

Commit

Permalink
refactor: responsive dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
kyzsuukii committed Apr 15, 2024
1 parent 426b000 commit 77803c8
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 2 deletions.
4 changes: 4 additions & 0 deletions src/components/dashboard-header.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Button } from "./ui/button";
import { useRouter } from "@tanstack/react-router";
import { BiHome } from "react-icons/bi";
import { DashboardMobileNav } from "./dashboard-mobile-nav";

export default function DashboardHeader() {
const router = useRouter();
Expand All @@ -18,6 +19,9 @@ export default function DashboardHeader() {
Home
</Button>
</div>
<div className="mr-4 block md:hidden">
<DashboardMobileNav />
</div>
</div>
</header>
);
Expand Down
92 changes: 92 additions & 0 deletions src/components/dashboard-mobile-nav.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import { useState } from "react";
import { cn } from "@/lib/utils";
import { Button } from "@/components/ui/button";
import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet";
import { Home, Menu } from "lucide-react";
import { Link, useRouter } from "@tanstack/react-router";

export function DashboardMobileNav() {
const [open, setOpen] = useState(false);

const data = [
{
title: "Products",
to: "/dashboard/products",
},
{
title: "Users",
to: "/dashboard/users",
},
{
title: "Orders",
to: "/dashboard/orders",
},
{
title: "Upload",
to: "/dashboard/upload",
},
];

return (
<Sheet open={open} onOpenChange={setOpen}>
<SheetTrigger asChild>
<Button
variant="ghost"
className="mr-2 px-0 text-base hover:bg-transparent focus-visible:bg-transparent focus-visible:ring-0 focus-visible:ring-offset-0 md:hidden"
>
<Menu />
<span className="sr-only">Toggle Menu</span>
</Button>
</SheetTrigger>
<SheetContent side="left" className="pr-0">
<MobileLink
to="/"
className="flex items-center gap-2"
onOpenChange={setOpen}
>
<Home className="h-4 w-4" />
<span className="font-bold">Home</span>
</MobileLink>
<div className="my-4 h-[calc(100vh-8rem)] pb-10 pl-6">
<div className="flex flex-col space-y-3">
{data.map((nav, index) => (
<MobileLink key={index} to={nav.to} onOpenChange={setOpen}>
{nav.title}
</MobileLink>
))}
</div>
</div>
</SheetContent>
</Sheet>
);
}

interface MobileLinkProps {
to: any;
onOpenChange?: (open: boolean) => void;
children: React.ReactNode;
className?: string;
}

function MobileLink({
to,
onOpenChange,
className,
children,
...props
}: MobileLinkProps) {
const router = useRouter();
return (
<Link
to={to}
onClick={() => {
router.navigate({ to: to.toString() });
onOpenChange?.(false);
}}
className={cn(className)}
{...props}
>
{children}
</Link>
);
}
4 changes: 2 additions & 2 deletions src/routes/_admin.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export const Route = createFileRoute("/_admin")({
}
},
component: () => (
<div className="block lg:grid lg:grid-cols-[230px,1fr]">
<div className="block md:grid md:grid-cols-[0.2fr,1fr]">
<Sidebar />
<div>
<Outlet />
Expand All @@ -20,7 +20,7 @@ export const Route = createFileRoute("/_admin")({

export function Sidebar() {
return (
<div className="pb-12 hidden lg:block">
<div className="pb-12 hidden md:block">
<div className="space-y-4 py-4">
<div className="px-3 py-2">
<h2 className="mb-2 px-4 text-lg font-semibold tracking-tight">
Expand Down

0 comments on commit 77803c8

Please sign in to comment.