Skip to content

Commit 6ebd399

Browse files
committed
fix: popup closes on context menu copy
1 parent a278618 commit 6ebd399

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

src/components/PDiskPopup/PDiskPopup.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,24 @@ export const PDiskPopup = ({data, ...props}: PDiskPopupProps) => {
7171
const info = React.useMemo(() => preparePDiskData(data, nodeHost), [data, nodeHost]);
7272

7373
const [isPopupContentHovered, setIsPopupContentHovered] = React.useState(false);
74+
const [isFocused, setIsFocused] = React.useState(false);
75+
7476
const onMouseLeave = React.useCallback(() => {
7577
setIsPopupContentHovered(false);
7678
}, []);
79+
7780
const onMouseEnter = React.useCallback(() => {
7881
setIsPopupContentHovered(true);
7982
}, []);
8083

84+
const onContextMenu = React.useCallback(() => {
85+
setIsFocused(true);
86+
}, []);
87+
88+
const onBlur = React.useCallback(() => {
89+
setIsFocused(false);
90+
}, []);
91+
8192
return (
8293
<Popup
8394
contentClassName={b()}
@@ -88,10 +99,13 @@ export const PDiskPopup = ({data, ...props}: PDiskPopupProps) => {
8899
offset={[0, 12]}
89100
onMouseLeave={onMouseLeave}
90101
onMouseEnter={onMouseEnter}
102+
onBlur={onBlur}
91103
{...props}
92-
open={isPopupContentHovered || props.open}
104+
open={isPopupContentHovered || props.open || isFocused}
93105
>
94-
<InfoViewer title="PDisk" info={info} size="s" />
106+
<div onContextMenu={onContextMenu}>
107+
<InfoViewer title="PDisk" info={info} size="s" />
108+
</div>
95109
</Popup>
96110
);
97111
};

src/components/VDiskPopup/VDiskPopup.tsx

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,13 +138,24 @@ export const VDiskPopup = ({data, ...props}: VDiskPopupProps) => {
138138
const isFullData = isFullVDiskData(data);
139139

140140
const [isPopupContentHovered, setIsPopupContentHovered] = React.useState(false);
141+
const [isFocused, setIsFocused] = React.useState(false);
142+
141143
const onMouseLeave = React.useCallback(() => {
142144
setIsPopupContentHovered(false);
143145
}, []);
146+
144147
const onMouseEnter = React.useCallback(() => {
145148
setIsPopupContentHovered(true);
146149
}, []);
147150

151+
const onContextMenu = React.useCallback(() => {
152+
setIsFocused(true);
153+
}, []);
154+
155+
const onBlur = React.useCallback(() => {
156+
setIsFocused(false);
157+
}, []);
158+
148159
const vdiskInfo = React.useMemo(
149160
() => (isFullData ? prepareVDiskData(data) : prepareUnavailableVDiskData(data)),
150161
[data, isFullData],
@@ -191,13 +202,16 @@ export const VDiskPopup = ({data, ...props}: VDiskPopupProps) => {
191202
offset={[0, 12]}
192203
onMouseEnter={onMouseEnter}
193204
onMouseLeave={onMouseLeave}
205+
onBlur={onBlur}
194206
{...props}
195-
open={isPopupContentHovered || props.open}
207+
open={isPopupContentHovered || props.open || isFocused}
196208
>
197-
{data.DonorMode && <Label className={b('donor-label')}>Donor</Label>}
198-
<InfoViewer title="VDisk" info={vdiskInfo} size="s" />
199-
{pdiskInfo && <InfoViewer title="PDisk" info={pdiskInfo} size="s" />}
200-
{donorsInfo.length > 0 && <InfoViewer title="Donors" info={donorsInfo} size="s" />}
209+
<div onContextMenu={onContextMenu}>
210+
{data.DonorMode && <Label className={b('donor-label')}>Donor</Label>}
211+
<InfoViewer title="VDisk" info={vdiskInfo} size="s" />
212+
{pdiskInfo && <InfoViewer title="PDisk" info={pdiskInfo} size="s" />}
213+
{donorsInfo.length > 0 && <InfoViewer title="Donors" info={donorsInfo} size="s" />}
214+
</div>
201215
</Popup>
202216
);
203217
};

0 commit comments

Comments
 (0)