@@ -17,6 +17,10 @@ const b = cn('ydb-drawer');
17
17
18
18
import './Drawer.scss' ;
19
19
20
+ type DrawerEvent = MouseEvent & {
21
+ _capturedInsideDrawer ?: boolean ;
22
+ } ;
23
+
20
24
interface DrawerPaneContentWrapperProps {
21
25
isVisible : boolean ;
22
26
onClose : ( ) => void ;
@@ -64,7 +68,11 @@ const DrawerPaneContentWrapper = ({
64
68
return undefined ;
65
69
}
66
70
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
+ }
68
76
if (
69
77
isVisible &&
70
78
drawerRef . current &&
@@ -91,6 +99,10 @@ const DrawerPaneContentWrapper = ({
91
99
}
92
100
} ;
93
101
102
+ const handleClickInsideDrawer = ( event : React . MouseEvent < HTMLDivElement , MouseEvent > ) => {
103
+ ( event . nativeEvent as DrawerEvent ) . _capturedInsideDrawer = true ;
104
+ } ;
105
+
94
106
return (
95
107
< GravityDrawer
96
108
onEscape = { onClose }
@@ -109,7 +121,9 @@ const DrawerPaneContentWrapper = ({
109
121
className = { b ( 'item' ) }
110
122
ref = { detectClickOutside ? drawerRef : undefined }
111
123
>
112
- { children }
124
+ < div className = { b ( 'click-handler' ) } onClickCapture = { handleClickInsideDrawer } >
125
+ { children }
126
+ </ div >
113
127
</ DrawerItem >
114
128
</ GravityDrawer >
115
129
) ;
@@ -184,7 +198,11 @@ export const DrawerWrapper = ({
184
198
}
185
199
186
200
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
+ >
188
206
< Text variant = "subheader-2" > { title } </ Text >
189
207
< Flex className = { b ( 'controls' ) } > { controls } </ Flex >
190
208
</ Flex >
0 commit comments