design: move sidebar button to header in dashboard

This commit is contained in:
Aidan 2025-04-17 13:31:51 -04:00
parent e195cb7712
commit b054c9dcc9
3 changed files with 23 additions and 45 deletions

View File

@ -3,7 +3,6 @@
import * as React from "react" import * as React from "react"
import { Moon, Sun } from "lucide-react" import { Moon, Sun } from "lucide-react"
import { useTheme } from "next-themes" import { useTheme } from "next-themes"
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
import { import {
DropdownMenu, DropdownMenu,
@ -21,6 +20,7 @@ export function ThemeToggle() {
<Button <Button
size="icon" size="icon"
variant="outline" variant="outline"
className="cursor-pointer"
> >
<Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" /> <Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
<Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" /> <Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
@ -28,13 +28,13 @@ export function ThemeToggle() {
</Button> </Button>
</DropdownMenuTrigger> </DropdownMenuTrigger>
<DropdownMenuContent align="end"> <DropdownMenuContent align="end">
<DropdownMenuItem onClick={() => setTheme("light")}> <DropdownMenuItem className="cursor-pointer" onClick={() => setTheme("light")}>
Light Light
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem onClick={() => setTheme("dark")}> <DropdownMenuItem className="cursor-pointer" onClick={() => setTheme("dark")}>
Dark Dark
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem onClick={() => setTheme("system")}> <DropdownMenuItem className="cursor-pointer" onClick={() => setTheme("system")}>
System System
</DropdownMenuItem> </DropdownMenuItem>
</DropdownMenuContent> </DropdownMenuContent>

View File

@ -1,6 +1,5 @@
"use client" "use client"
import { SidebarTrigger } from "@/components/ui/sidebar"
import { useEffect, useState } from "react" import { useEffect, useState } from "react"
import { TbNoCopyright } from "react-icons/tb" import { TbNoCopyright } from "react-icons/tb"
@ -21,27 +20,22 @@ export function Footer() {
return ( return (
<footer className="py-2 px-4 text-sm text-muted-foreground bg-muted"> <footer className="py-2 px-4 text-sm text-muted-foreground bg-muted">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div className="flex items-center">
<SidebarTrigger variant="secondary" />
</div>
<div className="flex flex-col gap-1 md:flex-row md:items-center md:justify-end md:gap-4">
<div className="flex items-center"> <div className="flex items-center">
<TbNoCopyright className="mr-2" /> <TbNoCopyright className="mr-2" />
<p className="text-end text-xs md:text-sm"> <p className="text-xs md:text-sm">
Created by a community, not a company. Created by a community, not a company.
</p> </p>
</div> </div>
{renderTime !== null ? ( {renderTime !== null ? (
<p className="hidden text-end md:block md:text-sm"> <p className="text-sm">
Page rendered in {renderTime.toFixed(2)} ms Page rendered in {renderTime.toFixed(2)} ms
</p> </p>
) : ( ) : (
<p className="hidden text-end md:block md:text-sm"> <p className="text-sm">
Calculating render time... Calculating render time...
</p> </p>
)} )}
</div> </div>
</div>
</footer> </footer>
) )
} }

View File

@ -1,5 +1,4 @@
import { User, Bell } from "lucide-react" import { Bell } from "lucide-react"
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
import { import {
Popover, Popover,
@ -9,6 +8,7 @@ import {
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { auth } from "@/auth" import { auth } from "@/auth"
import { ThemeToggle } from "@/components/custom/ThemeToggle" import { ThemeToggle } from "@/components/custom/ThemeToggle"
import { SidebarTrigger } from "@/components/ui/sidebar"
export const Header = async () => { export const Header = async () => {
const session = await auth() const session = await auth()
@ -26,24 +26,7 @@ export const Header = async () => {
return ( return (
<header className="sticky top-0 h-16 z-30 bg-background border-b p-4 flex items-center justify-between"> <header className="sticky top-0 h-16 z-30 bg-background border-b p-4 flex items-center justify-between">
<div className="flex items-center space-x-4"> <div className="flex items-center space-x-4">
<Avatar> <SidebarTrigger variant="outline" className="p-4 cursor-pointer" />
{session.user.image || isNaN(Number(session.user.image)) ? (
<AvatarFallback>
<User/>
</AvatarFallback>
) : (
<div>
<AvatarImage src={session.user.image || "https://i.pravatar.cc/"}/>
<AvatarFallback>
<User/>
</AvatarFallback>
</div>
)}
</Avatar>
<div className="hidden sm:block">
<h2 className="font-semibold">{session.user.name}</h2>
<p className="text-sm text-muted-foreground">LibreCloud User</p>
</div>
</div> </div>
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">
<ThemeToggle /> <ThemeToggle />
@ -52,6 +35,7 @@ export const Header = async () => {
<Button <Button
size="icon" size="icon"
variant="outline" variant="outline"
className="cursor-pointer"
> >
<Bell className="h-5 w-5"/> <Bell className="h-5 w-5"/>
</Button> </Button>
@ -60,7 +44,7 @@ export const Header = async () => {
<div className="p-4"> <div className="p-4">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<h4 className="font-semibold">Notifications</h4> <h4 className="font-semibold">Notifications</h4>
<Button variant="ghost" size="sm" className="text-xs"> <Button variant="ghost" size="sm" className="text-xs cursor-pointer">
Mark all as read Mark all as read
</Button> </Button>
</div> </div>
@ -92,7 +76,7 @@ export const Header = async () => {
</div> </div>
<Separator/> <Separator/>
<div className="p-2"> <div className="p-2">
<Button variant="ghost" className="w-full text-sm"> <Button variant="ghost" className="w-full text-sm cursor-pointer">
View all notifications View all notifications
</Button> </Button>
</div> </div>