1- import React , { useState } from 'react'
1+ import React , { useState , useCallback } from 'react'
22import { StoryFn as Story , Meta } from '@storybook/react'
33
44import Drawer , { DrawerProps } from '.'
55import Button from '../Button'
66import Navbar from '../Navbar'
77import Menu from '../Menu'
88
9- const side = (
10- < ul className = "menu p-4 overflow-y-auto w-80 bg-base-100 text-base-content" >
11- < li >
12- < a > Sidebar Item 1</ a >
13- </ li >
14- < li >
15- < a > Sidebar Item 2</ a >
16- </ li >
17- </ ul >
18- )
19-
209export default {
2110 title : 'Layout/Drawer' ,
2211 component : Drawer ,
23- args : {
24- side,
12+ argTypes : {
13+ side : {
14+ control : false ,
15+ } ,
2516 } ,
2617} as Meta
2718
2819export const Default : Story < DrawerProps > = ( args ) => {
2920 const [ visible , setVisible ] = useState ( false )
3021
31- const toggleVisible = ( ) => {
32- setVisible ( ! visible )
33- }
22+ const toggleVisible = useCallback ( ( ) => {
23+ setVisible ( ( visible ) => ! visible )
24+ } , [ ] )
3425 return (
35- < Drawer { ...args } open = { visible } onClickOverlay = { toggleVisible } >
36- < div className = "flex h-56 items-center justify-center" >
37- < Button color = "primary" onClick = { toggleVisible } >
38- Open drawer
39- </ Button >
40- </ div >
26+ < Drawer
27+ { ...args }
28+ open = { visible }
29+ onClickOverlay = { toggleVisible }
30+ side = {
31+ < Menu className = "p-4 w-80 h-full bg-base-200 text-base-content" >
32+ < Menu . Item >
33+ < a > Sidebar Item 1</ a >
34+ </ Menu . Item >
35+ < Menu . Item >
36+ < a > Sidebar Item 2</ a >
37+ </ Menu . Item >
38+ </ Menu >
39+ }
40+ >
41+ < Button color = "primary" onClick = { toggleVisible } >
42+ Open drawer
43+ </ Button >
4144 </ Drawer >
4245 )
4346}
47+ Default . args = {
48+ sideClassName : 'h-full absolute' ,
49+ contentClassName : 'flex h-56 items-center justify-center' ,
50+ }
4451
45- export const ForMobileFixedSidebarForDesktop : Story < DrawerProps > = ( args ) => {
52+ export const Responsive : Story < DrawerProps > = ( args ) => {
4653 const [ visible , setVisible ] = useState ( false )
4754
48- const toggleVisible = ( ) => {
49- setVisible ( ! visible )
50- }
51-
55+ const toggleVisible = useCallback ( ( ) => {
56+ setVisible ( ( visible ) => ! visible )
57+ } , [ ] )
5258 return (
53- < Drawer { ...args } open = { visible } onClickOverlay = { toggleVisible } >
54- < div className = "flex h-56 items-center justify-center" >
55- < Button color = "primary" className = "lg:hidden" onClick = { toggleVisible } >
56- Open drawer
57- </ Button >
58- </ div >
59+ < Drawer
60+ { ...args }
61+ open = { visible }
62+ onClickOverlay = { toggleVisible }
63+ side = {
64+ < Menu className = "p-4 w-80 h-full bg-base-200 text-base-content" >
65+ < Menu . Item >
66+ < a > Sidebar Item 1</ a >
67+ </ Menu . Item >
68+ < Menu . Item >
69+ < a > Sidebar Item 2</ a >
70+ </ Menu . Item >
71+ </ Menu >
72+ }
73+ >
74+ < Button color = "primary" onClick = { toggleVisible } className = "lg:hidden" >
75+ Open drawer
76+ </ Button >
5977 </ Drawer >
6078 )
6179}
62-
63- ForMobileFixedSidebarForDesktop . args = {
64- mobile : true ,
80+ Responsive . args = {
81+ className : 'lg:drawer-open' ,
82+ sideClassName : 'h-full absolute' ,
83+ contentClassName : 'flex h-56 items-center justify-center' ,
6584}
6685
6786export const NavbarMenuForDesktopSidebarDrawerForMobile : Story < DrawerProps > = (
6887 args
6988) => {
7089 const [ visible , setVisible ] = useState ( false )
7190
72- const toggleVisible = ( ) => {
73- setVisible ( ! visible )
74- }
91+ const toggleVisible = useCallback ( ( ) => {
92+ setVisible ( ( visible ) => ! visible )
93+ } , [ ] )
7594
7695 return (
7796 < Drawer
7897 { ...args }
7998 open = { visible }
8099 onClickOverlay = { toggleVisible }
81- className = "font-sans"
100+ side = {
101+ < Menu className = "p-4 w-60 md:w-80 h-full bg-base-200" >
102+ < Menu . Item >
103+ < a > Sidebar Item 1</ a >
104+ </ Menu . Item >
105+ < Menu . Item >
106+ < a > Sidebar Item 2</ a >
107+ </ Menu . Item >
108+ </ Menu >
109+ }
82110 >
83- < Navbar >
111+ < Navbar className = "w-full bg-base-300" >
84112 < div className = "flex-none lg:hidden" >
85113 < Button shape = "square" color = "ghost" onClick = { toggleVisible } >
86114 < svg
@@ -92,9 +120,9 @@ export const NavbarMenuForDesktopSidebarDrawerForMobile: Story<DrawerProps> = (
92120 < path
93121 strokeLinecap = "round"
94122 strokeLinejoin = "round"
95- strokeWidth = { 2 }
123+ strokeWidth = "2"
96124 d = "M4 6h16M4 12h16M4 18h16"
97- / >
125+ > </ path >
98126 </ svg >
99127 </ Button >
100128 </ div >
@@ -110,7 +138,45 @@ export const NavbarMenuForDesktopSidebarDrawerForMobile: Story<DrawerProps> = (
110138 </ Menu >
111139 </ div >
112140 </ Navbar >
113- < div className = "flex h-36 items-center justify-center" > Content</ div >
141+ < div className = "flex flex-grow items-center justify-center" > Content</ div >
114142 </ Drawer >
115143 )
116144}
145+ NavbarMenuForDesktopSidebarDrawerForMobile . args = {
146+ className : 'h-56 rounded overflow-hidden' ,
147+ contentClassName : 'flex flex-col' ,
148+ }
149+
150+ export const RightSideOfPage : Story < DrawerProps > = ( args ) => {
151+ const [ visible , setVisible ] = useState ( false )
152+
153+ const toggleVisible = useCallback ( ( ) => {
154+ setVisible ( ( visible ) => ! visible )
155+ } , [ ] )
156+ return (
157+ < Drawer
158+ { ...args }
159+ open = { visible }
160+ onClickOverlay = { toggleVisible }
161+ side = {
162+ < Menu className = "p-4 w-80 h-full bg-base-200 text-base-content" >
163+ < Menu . Item >
164+ < a > Sidebar Item 1</ a >
165+ </ Menu . Item >
166+ < Menu . Item >
167+ < a > Sidebar Item 2</ a >
168+ </ Menu . Item >
169+ </ Menu >
170+ }
171+ >
172+ < Button color = "primary" onClick = { toggleVisible } >
173+ Open drawer
174+ </ Button >
175+ </ Drawer >
176+ )
177+ }
178+ RightSideOfPage . args = {
179+ sideClassName : 'h-full absolute' ,
180+ contentClassName : 'flex h-56 items-center justify-center' ,
181+ end : true ,
182+ }
0 commit comments