Skip to content

Commit b48bf24

Browse files
authored
fix(Drawer): handle clicks in components inside Drawer (#2264)
1 parent 4006a27 commit b48bf24

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

src/components/Drawer/Drawer.scss

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
top: 0;
2424
left: 0;
2525

26-
padding: var(--g-spacing-4) var(--g-spacing-4) 0 var(--g-spacing-6);
26+
padding: var(--g-spacing-4) var(--g-spacing-4) 0 var(--g-spacing-4);
2727

2828
background-color: var(--g-color-base-background);
2929
}
@@ -34,5 +34,10 @@
3434
flex-direction: column;
3535

3636
height: 100%;
37+
//split-pane resizer size
38+
margin-left: var(--g-spacing-2);
39+
}
40+
&__click-handler {
41+
display: contents;
3742
}
3843
}

src/components/Drawer/Drawer.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ const b = cn('ydb-drawer');
1717

1818
import './Drawer.scss';
1919

20+
type DrawerEvent = MouseEvent & {
21+
_capturedInsideDrawer?: boolean;
22+
};
23+
2024
interface 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

Comments
 (0)