@@ -202,26 +202,14 @@ const TinderCard = React.forwardRef(({ flickOnSwipe = true, children, onSwipe, o
202202 swipeAlreadyReleased . current = false
203203 } , [ swipeAlreadyReleased ] )
204204
205+ const [ offset , setOffset ] = React . useState ( { x : null , y : null } )
206+ const [ speed , setSpeed ] = React . useState ( { x : 0 , y : 0 } )
207+ const [ lastLocation , setLastLocation ] = React . useState ( { x : 0 , y : 0 , time : new Date ( ) . getTime ( ) } )
208+ const [ mouseIsClicked , setMouseIsClicked ] = React . useState ( false )
209+
205210 React . useLayoutEffect ( ( ) => {
206- let offset = { x : null , y : null }
207- let speed = { x : 0 , y : 0 }
208- let lastLocation = { x : 0 , y : 0 , time : new Date ( ) . getTime ( ) }
209- let mouseIsClicked = false
210211 let swipeThresholdFulfilledDirection = 'none'
211212
212- element . current . addEventListener ( ( 'touchstart' ) , ( ev ) => {
213- ev . preventDefault ( )
214- handleSwipeStart ( )
215- offset = { x : - touchCoordinatesFromEvent ( ev ) . x , y : - touchCoordinatesFromEvent ( ev ) . y }
216- } )
217-
218- element . current . addEventListener ( ( 'mousedown' ) , ( ev ) => {
219- ev . preventDefault ( )
220- mouseIsClicked = true
221- handleSwipeStart ( )
222- offset = { x : - mouseCoordinatesFromEvent ( ev ) . x , y : - mouseCoordinatesFromEvent ( ev ) . y }
223- } )
224-
225213 const handleMove = ( coordinates ) => {
226214 // Check fulfillment
227215 if ( onSwipeRequirementFulfilled || onSwipeRequirementUnfulfilled ) {
@@ -243,39 +231,69 @@ const TinderCard = React.forwardRef(({ flickOnSwipe = true, children, onSwipe, o
243231 onCardLocationChange ( lastLocation . x , lastLocation . y )
244232 }
245233
246- element . current . addEventListener ( ( 'touchmove' ) , ( ev ) => {
234+ const touchStart = ( ev ) => {
235+ ev . preventDefault ( )
236+ handleSwipeStart ( )
237+ setOffset ( { x : - touchCoordinatesFromEvent ( ev ) . x , y : - touchCoordinatesFromEvent ( ev ) . y } )
238+ }
239+ element . current . addEventListener ( ( 'touchstart' ) , touchStart )
240+
241+ const mouseDown = ( ev ) => {
242+ ev . preventDefault ( )
243+ setMouseIsClicked ( true )
244+ handleSwipeStart ( )
245+ setOffset ( { x : - mouseCoordinatesFromEvent ( ev ) . x , y : - mouseCoordinatesFromEvent ( ev ) . y } )
246+ }
247+ element . current . addEventListener ( ( 'mousedown' ) , mouseDown )
248+
249+ const touchMove = ( ev ) => {
247250 ev . preventDefault ( )
248251 handleMove ( touchCoordinatesFromEvent ( ev ) )
249- } )
252+ }
253+ element . current . addEventListener ( ( 'touchmove' ) , touchMove )
250254
251- element . current . addEventListener ( ( 'mousemove' ) , ( ev ) => {
255+ const mouseMove = ( ev ) => {
252256 ev . preventDefault ( )
253257 if ( mouseIsClicked ) {
254258 handleMove ( mouseCoordinatesFromEvent ( ev ) )
255259 }
256- } )
260+ }
261+ element . current . addEventListener ( ( 'mousemove' ) , mouseMove )
257262
258- element . current . addEventListener ( ( 'touchend' ) , ( ev ) => {
263+ const touchEnd = ( ev ) => {
259264 ev . preventDefault ( )
260265 handleSwipeReleased ( element . current , speed )
261- } )
266+ }
267+ element . current . addEventListener ( ( 'touchend' ) , touchEnd )
262268
263- element . current . addEventListener ( ( 'mouseup' ) , ( ev ) => {
269+ const mouseUp = ( ev ) => {
264270 if ( mouseIsClicked ) {
265271 ev . preventDefault ( )
266- mouseIsClicked = false
272+ setMouseIsClicked ( false )
267273 handleSwipeReleased ( element . current , speed )
268274 }
269- } )
275+ }
276+ element . current . addEventListener ( ( 'mouseup' ) , mouseUp )
270277
271- element . current . addEventListener ( ( 'mouseleave' ) , ( ev ) => {
278+ const mouseLeave = ( ev ) => {
272279 if ( mouseIsClicked ) {
273280 ev . preventDefault ( )
274- mouseIsClicked = false
281+ setMouseIsClicked ( false )
275282 handleSwipeReleased ( element . current , speed )
276283 }
277- } )
278- } , [ ] ) // TODO fix so swipeRequirementType can be changed on the fly. Pass as dependency cleanup eventlisteners and update new eventlisteners.
284+ }
285+ element . current . addEventListener ( ( 'mouseleave' ) , mouseLeave )
286+
287+ return ( ) => {
288+ element . current . removeEventListener ( ( 'touchstart' ) , touchStart )
289+ element . current . removeEventListener ( ( 'mousedown' ) , mouseDown )
290+ element . current . removeEventListener ( ( 'touchmove' ) , touchMove )
291+ element . current . removeEventListener ( ( 'mousemove' ) , mouseMove )
292+ element . current . removeEventListener ( ( 'touchend' ) , touchEnd )
293+ element . current . removeEventListener ( ( 'mouseup' ) , mouseUp )
294+ element . current . removeEventListener ( ( 'mouseleave' ) , mouseLeave )
295+ }
296+ } , [ preventSwipe , offset , speed , lastLocation , mouseIsClicked ] )
279297
280298 return (
281299 React . createElement ( 'div' , { ref : element , className } , children )
0 commit comments