@@ -85,11 +85,12 @@ function usePreFetch(prefetch) {
85
85
const useEventListener = ( {
86
86
eventName,
87
87
handler,
88
- element = window . document . body ,
89
88
options = { }
90
89
} ) => {
91
90
const savedHandler = useRef ( ) ;
91
+ const removeHanlder = useRef ( ) ;
92
92
const { capture, passive, once } = options ;
93
+ const element = window . document . body ;
93
94
useEffect ( ( ) => {
94
95
savedHandler . current = handler ;
95
96
} , [ handler ] ) ;
@@ -101,16 +102,18 @@ const useEventListener = ({
101
102
const eventListener = ( event ) => savedHandler . current && savedHandler . current ( event ) ;
102
103
const opts = { capture, passive, once } ;
103
104
element . addEventListener ( eventName , eventListener , opts ) ;
104
- return ( ) => {
105
- element . removeEventListener ( eventName , eventListener , opts ) ;
106
- } ;
105
+ const remove = ( ) => element . removeEventListener ( eventName , eventListener , opts ) ;
106
+ removeHanlder . current = remove ;
107
+ return remove ;
107
108
} , [ eventName , element , capture , passive , once ] ) ;
109
+ return [ removeHanlder . current ] ;
108
110
} ;
109
111
function useIntent ( { expandTarget = 0 , targetRef, prefetch, timeToExcecute = 1e3 } ) {
110
112
const [ prefetchConfig , setprefetchConfig ] = useState ( ) ;
113
+ const [ once , setOnce ] = useState ( false ) ;
111
114
const timer = useRef ( ) ;
112
115
usePreFetch ( prefetchConfig ) ;
113
- useEventListener ( {
116
+ const [ remove ] = useEventListener ( {
114
117
eventName : "mousemove" ,
115
118
handler : ( { clientX, clientY } ) => {
116
119
var _a , _b , _c , _d , _e , _f , _g , _h , _i , _j , _k , _l ;
@@ -119,9 +122,12 @@ function useIntent({ expandTarget = 0, targetRef, prefetch, timeToExcecute = 1e3
119
122
let top = ( ( _h = ( _g = targetRef . current ) == null ? void 0 : _g . offsetTop ) != null ? _h : 0 ) - expandTarget ;
120
123
let bottom = ( ( _j = ( _i = targetRef . current ) == null ? void 0 : _i . offsetTop ) != null ? _j : 0 ) + ( ( _l = ( _k = targetRef . current ) == null ? void 0 : _k . offsetHeight ) != null ? _l : 0 ) + expandTarget ;
121
124
if ( clientX > left && clientX < right && clientY > top && clientY < bottom ) {
125
+ console . info ( "in target area" ) ;
122
126
if ( ! timer . current ) {
123
127
timer . current = setTimeout ( ( ) => {
124
128
setprefetchConfig ( prefetch ) ;
129
+ setOnce ( true ) ;
130
+ remove && remove ( ) ;
125
131
} , timeToExcecute ) ;
126
132
}
127
133
} else {
@@ -131,7 +137,7 @@ function useIntent({ expandTarget = 0, targetRef, prefetch, timeToExcecute = 1e3
131
137
}
132
138
}
133
139
} ,
134
- options : { passive : true }
140
+ options : { passive : true , once }
135
141
} ) ;
136
142
useEffect ( ( ) => ( ) => {
137
143
clearTimeout ( timer . current ) ;
0 commit comments