11import * as React from 'react' ;
2+ import { flushSync } from 'react-dom' ;
23import type { OnStartMove } from '../interface' ;
34import { getIndex } from '../util' ;
45import type { HandleProps } from './Handle' ;
@@ -27,6 +28,7 @@ export interface HandlesProps {
2728
2829export interface HandlesRef {
2930 focus : ( index : number ) => void ;
31+ hideHelp : VoidFunction ;
3032}
3133
3234const Handles = React . forwardRef < HandlesRef , HandlesProps > ( ( props , ref ) => {
@@ -45,24 +47,36 @@ const Handles = React.forwardRef<HandlesRef, HandlesProps>((props, ref) => {
4547 } = props ;
4648 const handlesRef = React . useRef < Record < number , HTMLDivElement > > ( { } ) ;
4749
48- React . useImperativeHandle ( ref , ( ) => ( {
49- focus : ( index : number ) => {
50- handlesRef . current [ index ] ?. focus ( ) ;
51- } ,
52- } ) ) ;
53-
5450 // =========================== Active ===========================
55- const [ activeIndex , setActiveIndex ] = React . useState < number > ( - 1 ) ;
51+ const [ activeVisible , setActiveVisible ] = React . useState ( false ) ;
52+ const [ activeIndex , setActiveIndex ] = React . useState ( - 1 ) ;
5653
57- const onHandleFocus = ( e : React . FocusEvent < HTMLDivElement > , index : number ) => {
54+ const onActive = ( index : number ) => {
5855 setActiveIndex ( index ) ;
56+ setActiveVisible ( true ) ;
57+ } ;
58+
59+ const onHandleFocus = ( e : React . FocusEvent < HTMLDivElement > , index : number ) => {
60+ onActive ( index ) ;
5961 onFocus ?.( e ) ;
6062 } ;
6163
6264 const onHandleMouseEnter = ( e : React . MouseEvent < HTMLDivElement > , index : number ) => {
63- setActiveIndex ( index ) ;
65+ onActive ( index ) ;
6466 } ;
6567
68+ // =========================== Render ===========================
69+ React . useImperativeHandle ( ref , ( ) => ( {
70+ focus : ( index : number ) => {
71+ handlesRef . current [ index ] ?. focus ( ) ;
72+ } ,
73+ hideHelp : ( ) => {
74+ flushSync ( ( ) => {
75+ setActiveVisible ( false ) ;
76+ } ) ;
77+ } ,
78+ } ) ) ;
79+
6680 // =========================== Render ===========================
6781 // Handle Props
6882 const handleProps = {
@@ -101,7 +115,7 @@ const Handles = React.forwardRef<HandlesRef, HandlesProps>((props, ref) => {
101115 } ) }
102116
103117 { /* Used for render tooltip, this is not a real handle */ }
104- { activeHandleRender && (
118+ { activeHandleRender && activeVisible && (
105119 < Handle
106120 key = "a11y"
107121 { ...handleProps }
0 commit comments