design: move sidebar button to header in dashboard
This commit is contained in:
parent
e195cb7712
commit
b054c9dcc9
@ -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>
|
||||||
|
@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user