@@ -32,10 +32,10 @@ type DrawerSectionProps = Omit<SectionData, 'content' | 'onClick'> & {
3232 order ?: number ;
3333} ;
3434
35- type DrawerOpenStateContextValue = {
36- current : {
37- isDrawerOpen : boolean ;
38- } ;
35+ type DrawerOpenStateContextValue = boolean ;
36+
37+ type DrawerSetOpenStateContextValue = {
38+ setIsDrawerOpen : ( isOpen : boolean ) => void ;
3939} ;
4040
4141type DrawerActionsContextValue = {
@@ -49,13 +49,13 @@ type DrawerActionsContextValue = {
4949
5050const DrawerStateContext = React . createContext < DrawerSectionProps [ ] > ( [ ] ) ;
5151
52- const DrawerOpenStateContext = React . createContext < DrawerOpenStateContextValue > (
53- {
54- current : {
55- isDrawerOpen : false ,
56- } ,
57- }
58- ) ;
52+ const DrawerOpenStateContext =
53+ React . createContext < DrawerOpenStateContextValue > ( false ) ;
54+
55+ const DrawerSetOpenStateContext =
56+ React . createContext < DrawerSetOpenStateContextValue > ( {
57+ setIsDrawerOpen : ( ) => { } ,
58+ } ) ;
5959
6060const DrawerActionsContext = React . createContext < DrawerActionsContextValue > ( {
6161 current : {
@@ -103,6 +103,8 @@ export const DrawerContentProvider: React.FunctionComponent = ({
103103 children,
104104} ) => {
105105 const [ drawerState , setDrawerState ] = useState < DrawerSectionProps [ ] > ( [ ] ) ;
106+ const [ drawerOpenState , setDrawerOpenState ] =
107+ useState < DrawerOpenStateContextValue > ( false ) ;
106108 const drawerActions = useRef ( {
107109 openDrawer : ( ) => undefined ,
108110 closeDrawer : ( ) => undefined ,
@@ -130,20 +132,28 @@ export const DrawerContentProvider: React.FunctionComponent = ({
130132
131133 return (
132134 < DrawerStateContext . Provider value = { drawerState } >
133- < DrawerActionsContext . Provider value = { drawerActions } >
134- { children }
135- </ DrawerActionsContext . Provider >
135+ < DrawerOpenStateContext . Provider value = { drawerOpenState } >
136+ < DrawerSetOpenStateContext . Provider
137+ value = { { setIsDrawerOpen : setDrawerOpenState } }
138+ >
139+ < DrawerActionsContext . Provider value = { drawerActions } >
140+ { children }
141+ </ DrawerActionsContext . Provider >
142+ </ DrawerSetOpenStateContext . Provider >
143+ </ DrawerOpenStateContext . Provider >
136144 </ DrawerStateContext . Provider >
137145 ) ;
138146} ;
139147
140148const DrawerContextGrabber : React . FunctionComponent = ( { children } ) => {
141149 const drawerToolbarContext = useDrawerToolbarContext ( ) ;
142150 const actions = useContext ( DrawerActionsContext ) ;
143- const state = useContext ( DrawerOpenStateContext ) ;
151+ const openStateSetter = useContext ( DrawerSetOpenStateContext ) ;
144152 actions . current . openDrawer = drawerToolbarContext . openDrawer ;
145153 actions . current . closeDrawer = drawerToolbarContext . closeDrawer ;
146- state . current . isDrawerOpen = drawerToolbarContext . isDrawerOpen ;
154+ useEffect ( ( ) => {
155+ openStateSetter . setIsDrawerOpen ( drawerToolbarContext . isDrawerOpen ) ;
156+ } , [ drawerToolbarContext . isDrawerOpen , openStateSetter ] ) ;
147157 return < > { children } </ > ;
148158} ;
149159
@@ -339,11 +349,11 @@ export function useDrawerActions() {
339349}
340350
341351export const useDrawerState = ( ) => {
342- const drawerToolbarContext = useContext ( DrawerOpenStateContext ) ;
352+ const drawerOpenStateContext = useContext ( DrawerOpenStateContext ) ;
343353 const drawerState = useContext ( DrawerStateContext ) ;
344354 return {
345- isOpen :
346- drawerToolbarContext . current . isDrawerOpen &&
355+ isDrawerOpen :
356+ drawerOpenStateContext &&
347357 // the second check is a workaround, because LG doesn't set isDrawerOpen to false when it's empty
348358 drawerState . length > 0 ,
349359 } ;
0 commit comments