11import React from 'react' ;
22
3+ import { debounce } from 'lodash' ;
4+
35import { DiskStateProgressBar } from '../../../components/DiskStateProgressBar/DiskStateProgressBar' ;
46import { InternalLink } from '../../../components/InternalLink' ;
57import { PDiskPopup } from '../../../components/PDiskPopup/PDiskPopup' ;
@@ -16,6 +18,8 @@ import './PDisk.scss';
1618
1719const b = cn ( 'pdisk-storage' ) ;
1820
21+ const DEBOUNCE_TIMEOUT = 100 ;
22+
1923interface PDiskProps {
2024 data ?: PreparedPDisk ;
2125 vDisks ?: PreparedVDisk [ ] ;
@@ -44,15 +48,15 @@ export const PDisk = ({
4448 const { NodeId, PDiskId} = data ;
4549 const pDiskIdsDefined = valueIsDefined ( NodeId ) && valueIsDefined ( PDiskId ) ;
4650
47- const handleShowPopup = ( ) => {
51+ const debouncedHandleShowPopup = debounce ( ( ) => {
4852 setIsPopupVisible ( true ) ;
4953 onShowPopup ?.( ) ;
50- } ;
54+ } , DEBOUNCE_TIMEOUT ) ;
5155
52- const handleHidePopup = ( ) => {
56+ const debouncedHandleHidePopup = debounce ( ( ) => {
5357 setIsPopupVisible ( false ) ;
5458 onHidePopup ?.( ) ;
55- } ;
59+ } , DEBOUNCE_TIMEOUT ) ;
5660
5761 const renderVDisks = ( ) => {
5862 if ( ! vDisks ?. length ) {
@@ -101,8 +105,11 @@ export const PDisk = ({
101105 < InternalLink
102106 to = { pDiskPath }
103107 className = { b ( 'content' ) }
104- onMouseEnter = { handleShowPopup }
105- onMouseLeave = { handleHidePopup }
108+ onMouseEnter = { debouncedHandleShowPopup }
109+ onMouseLeave = { ( ) => {
110+ debouncedHandleShowPopup . cancel ( ) ;
111+ debouncedHandleHidePopup ( ) ;
112+ } }
106113 >
107114 < DiskStateProgressBar
108115 diskAllocatedPercent = { data . AllocatedPercent }
0 commit comments