File tree 6 files changed +63
-21
lines changed 6 files changed +63
-21
lines changed Original file line number Diff line number Diff line change 1
- import Navbar from "@/components/shared/Navbar" ;
2
- import Sidebar from "@/components/shared/Sidebar" ;
1
+ import LayoutWrapper from "@/components/v6/layout-wrapper" ;
3
2
import type { Metadata } from "next" ;
4
- import styles from "@/styles/component/layout.module.css" ;
5
- import { cn } from "@/lib/utils" ;
6
3
7
4
export const metadata : Metadata = {
8
5
title : "Dashboard Layout V6" ,
@@ -17,19 +14,7 @@ export default function RootLayout({
17
14
return (
18
15
< html lang = "en" >
19
16
< body >
20
- < div className = "overflow-hidden h-dvh" >
21
- < Navbar />
22
- < main
23
- className = { cn (
24
- "h-[calc(100vh-var(--h-navbar))]" ,
25
- styles . main_wrapper ,
26
- ) }
27
- >
28
- < Sidebar height = "h-[calc(100vh-var(--h-navbar)]" />
29
- < main className = { styles . main_content_with_navbar } > { children } </ main >
30
- < Sidebar height = "h-[calc(100vh-var(--h-navbar)]" />
31
- </ main >
32
- </ div >
17
+ < LayoutWrapper > { children } </ LayoutWrapper >
33
18
</ body >
34
19
</ html >
35
20
) ;
Original file line number Diff line number Diff line change @@ -4,7 +4,11 @@ import { useWindowSize } from "@/hooks";
4
4
import { cn } from "@/lib/utils" ;
5
5
import styles from "@/styles/component/sidebar.module.css" ;
6
6
7
- export default function Sidebar ( { isOpen, setIsOpen } : ISidebar ) {
7
+ export default function SidebarWithOpenClose ( {
8
+ isOpen,
9
+ setIsOpen,
10
+ className,
11
+ } : ISidebar ) {
8
12
const { width } = useWindowSize ( ) ;
9
13
const isMobile = width <= 768 ;
10
14
const refOutside = useRef < HTMLDivElement > ( null ) ;
@@ -34,7 +38,7 @@ export default function Sidebar({ isOpen, setIsOpen }: ISidebar) {
34
38
} , [ isMobile , isOpen ] ) ;
35
39
36
40
return (
37
- < div className = "relative w-fit" ref = { refOutside } >
41
+ < div className = { cn ( "relative w-fit" , className ) } ref = { refOutside } >
38
42
< div
39
43
className = { cn ( styles . sidebarWithOpenClose , {
40
44
[ styles . sidebarWithOpenCloseActive ] : ! isOpen ,
Original file line number Diff line number Diff line change @@ -4,15 +4,17 @@ import { cn } from "@/lib/utils";
4
4
export default function CloseOpen ( {
5
5
isOpen,
6
6
setIsOpen,
7
+ className,
7
8
} : {
8
9
isOpen : boolean ;
9
10
setIsOpen : React . Dispatch < React . SetStateAction < boolean > > ;
11
+ className ?: string ;
10
12
} ) {
11
13
return (
12
14
< button
13
15
type = "button"
14
16
onClick = { ( ) => setIsOpen ( ! isOpen ) }
15
- className = { cn ( "absolute top-3 bg-dark-700 p-3 " , {
17
+ className = { cn ( "absolute top-3 bg-dark-700 p-3 " , className , {
16
18
"right-0 rounded-l-lg " : isOpen ,
17
19
"left-0 rounded-r-lg" : ! isOpen ,
18
20
} ) }
Original file line number Diff line number Diff line change 1
1
"use client" ;
2
2
import { useState } from "react" ;
3
3
4
- import Sidebar from "./sidebar " ;
4
+ import Sidebar from "@/components/shared/SidebarOpenClose " ;
5
5
import Navbar from "@/components/shared/Navbar" ;
6
6
import CloseOpen from "./close-open" ;
7
7
import styles from "@/styles/component/layout.module.css" ;
Original file line number Diff line number Diff line change
1
+ "use client" ;
2
+ import Navbar from "@/components/shared/Navbar" ;
3
+ import Sidebar from "@/components/shared/Sidebar" ;
4
+ import styles from "@/styles/component/layout.module.css" ;
5
+ import { cn } from "@/lib/utils" ;
6
+ import { useState } from "react" ;
7
+ import CloseOpen from "../v3/close-open" ;
8
+
9
+ export default function LayoutWrapper ( {
10
+ children,
11
+ } : {
12
+ children : React . ReactNode ;
13
+ } ) {
14
+ const [ isOpen , setIsOpen ] = useState ( false ) ;
15
+
16
+ return (
17
+ < div className = "overflow-hidden h-dvh" >
18
+ < Navbar className = "relative" >
19
+ < CloseOpen
20
+ isOpen = { isOpen }
21
+ setIsOpen = { setIsOpen }
22
+ className = { cn ( `lg:!hidden !rounded-l-none !rounded-r-lg left-0 ` , {
23
+ "!w-fit" : isOpen ,
24
+ } ) }
25
+ />
26
+ </ Navbar >
27
+ < main
28
+ className = { cn (
29
+ "relative h-[calc(100vh-var(--h-navbar))]" ,
30
+ styles . main_wrapper ,
31
+ ) }
32
+ >
33
+ < Sidebar
34
+ className = { cn ( `absolute lg:block` , {
35
+ "left-0 !min-w-[200px] !h-[calc(100vh-var(--h-navbar))]" : isOpen ,
36
+ "left-[-280px]" : ! isOpen ,
37
+ } ) }
38
+ height = "h-[calc(100vh-var(--h-navbar)]"
39
+ />
40
+ < main className = { cn ( "px-2 lg:px-0" , styles . main_content_with_navbar ) } >
41
+ { children }
42
+ </ main >
43
+ < Sidebar
44
+ className = "hidden lg:block"
45
+ height = "h-[calc(100vh-var(--h-navbar)]"
46
+ />
47
+ </ main >
48
+ </ div >
49
+ ) ;
50
+ }
Original file line number Diff line number Diff line change 1
1
declare interface ISidebar {
2
2
isOpen : boolean ;
3
3
setIsOpen : React . Dispatch < React . SetStateAction < boolean > > ;
4
+ className ?: string ;
4
5
}
You can’t perform that action at this time.
0 commit comments