@@ -35,9 +35,9 @@ const SIDEBAR_KEYBOARD_SHORTCUT = "b"
3535type SidebarContextProps = {
3636 state : "expanded" | "collapsed"
3737 open : boolean
38- setOpen : ( open : boolean ) => void
38+ setOpen : React . Dispatch < React . SetStateAction < boolean > >
3939 openMobile : boolean
40- setOpenMobile : ( open : boolean ) => void
40+ setOpenMobile : React . Dispatch < React . SetStateAction < boolean > >
4141 isMobile : boolean
4242 toggleSidebar : ( ) => void
4343}
@@ -57,6 +57,8 @@ function SidebarProvider({
5757 defaultOpen = true ,
5858 open : openProp ,
5959 onOpenChange : setOpenProp ,
60+ openMobile : openMobileProp ,
61+ setOpenMobile : setOpenMobileProp ,
6062 className,
6163 style,
6264 children,
@@ -67,11 +69,26 @@ function SidebarProvider({
6769 defaultOpen ?: boolean
6870 open ?: boolean
6971 onOpenChange ?: ( open : boolean ) => void
72+ openMobile ?: boolean
73+ setOpenMobile ?: ( open : boolean ) => void
7074 shortcut ?: string
7175 noLayout ?: boolean
7276} ) {
7377 const isMobile = useIsMobile ( )
74- const [ openMobile , setOpenMobile ] = React . useState ( false )
78+ const [ _openMobile , _setOpenMobile ] = React . useState ( false )
79+
80+ const openMobile = openMobileProp ?? _openMobile
81+ const setOpenMobile = React . useCallback (
82+ ( value : boolean | ( ( value : boolean ) => boolean ) ) => {
83+ const mobileOpenState = typeof value === "function" ? value ( openMobile ) : value
84+ if ( setOpenMobileProp ) {
85+ setOpenMobileProp ( mobileOpenState )
86+ } else {
87+ _setOpenMobile ( mobileOpenState )
88+ }
89+ } ,
90+ [ setOpenMobileProp , openMobile ]
91+ )
7592
7693 // This is the internal state of the sidebar.
7794 // We use openProp and setOpenProp for control from outside the component.
0 commit comments