@@ -17,6 +17,10 @@ const b = cn('ydb-drawer');
1717
1818import './Drawer.scss' ;
1919
20+ type DrawerEvent = MouseEvent & {
21+ _capturedInsideDrawer ?: boolean ;
22+ } ;
23+
2024interface DrawerPaneContentWrapperProps {
2125 isVisible : boolean ;
2226 onClose : ( ) => void ;
@@ -64,7 +68,11 @@ const DrawerPaneContentWrapper = ({
6468 return undefined ;
6569 }
6670
67- const handleClickOutside = ( event : MouseEvent ) => {
71+ const handleClickOutside = ( event : DrawerEvent ) => {
72+ //skip if event is captured inside drawer or not triggered by user
73+ if ( event . _capturedInsideDrawer || ! event . isTrusted ) {
74+ return ;
75+ }
6876 if (
6977 isVisible &&
7078 drawerRef . current &&
@@ -91,6 +99,10 @@ const DrawerPaneContentWrapper = ({
9199 }
92100 } ;
93101
102+ const handleClickInsideDrawer = ( event : React . MouseEvent < HTMLDivElement , MouseEvent > ) => {
103+ ( event . nativeEvent as DrawerEvent ) . _capturedInsideDrawer = true ;
104+ } ;
105+
94106 return (
95107 < GravityDrawer
96108 onEscape = { onClose }
@@ -109,7 +121,9 @@ const DrawerPaneContentWrapper = ({
109121 className = { b ( 'item' ) }
110122 ref = { detectClickOutside ? drawerRef : undefined }
111123 >
112- { children }
124+ < div className = { b ( 'click-handler' ) } onClickCapture = { handleClickInsideDrawer } >
125+ { children }
126+ </ div >
113127 </ DrawerItem >
114128 </ GravityDrawer >
115129 ) ;
@@ -184,7 +198,11 @@ export const DrawerWrapper = ({
184198 }
185199
186200 return (
187- < Flex justifyContent = "space-between" className = { b ( 'header-wrapper' , headerClassName ) } >
201+ < Flex
202+ justifyContent = "space-between"
203+ alignItems = "center"
204+ className = { b ( 'header-wrapper' , headerClassName ) }
205+ >
188206 < Text variant = "subheader-2" > { title } </ Text >
189207 < Flex className = { b ( 'controls' ) } > { controls } </ Flex >
190208 </ Flex >
0 commit comments