1+ // @flow
12import { default as React , PropTypes } from 'react' ;
23import { matchesSelector , createCoreEvent , addEvent , removeEvent , addUserSelectStyles ,
34 removeUserSelectStyles , styleHacks } from './utils/domFns' ;
@@ -6,7 +7,7 @@ import {dontSetMe} from './utils/shims';
67import log from './utils/log' ;
78
89// Simple abstraction for dragging events names.
9- let eventsFor = {
10+ const eventsFor = {
1011 touch : {
1112 start : 'touchstart' ,
1213 move : 'touchmove' ,
@@ -22,6 +23,13 @@ let eventsFor = {
2223// Default to mouse events.
2324let dragEventFor = eventsFor . mouse ;
2425
26+ type EventHandler = ( e : Event ) => void ;
27+ type CoreState = {
28+ dragging : boolean ,
29+ lastX : ?number ,
30+ lastY : ?number
31+ } ;
32+
2533//
2634// Define <DraggableCore>.
2735//
@@ -222,7 +230,7 @@ export default class DraggableCore extends React.Component {
222230 onMouseDown : function ( ) { }
223231 } ;
224232
225- state = {
233+ state : CoreState = {
226234 dragging : false ,
227235 // Used while dragging to determine deltas.
228236 lastX : null , lastY : null
@@ -239,7 +247,7 @@ export default class DraggableCore extends React.Component {
239247 if ( this . props . enableUserSelectHack ) removeUserSelectStyles ( ) ;
240248 }
241249
242- handleDragStart = ( e ) => {
250+ handleDragStart : EventHandler = ( e ) => {
243251 // Make it possible to attach event handlers on top of this one.
244252 this . props . onMouseDown ( e ) ;
245253
@@ -300,7 +308,7 @@ export default class DraggableCore extends React.Component {
300308 addEvent ( document , dragEventFor . stop , this . handleDragStop ) ;
301309 } ;
302310
303- handleDrag = ( e ) => {
311+ handleDrag : EventHandler = ( e ) => {
304312 // Return if this is a touch event, but not the correct one for this element
305313 if ( e . targetTouches && ( e . targetTouches [ 0 ] . identifier !== this . state . touchIdentifier ) ) return ;
306314
@@ -314,13 +322,13 @@ export default class DraggableCore extends React.Component {
314322 clientX = this . state . lastX + deltaX , clientY = this . state . lastY + deltaY ;
315323 }
316324
317- let coreEvent = createCoreEvent ( this , clientX , clientY ) ;
325+ const coreEvent = createCoreEvent ( this , clientX , clientY ) ;
318326
319327 log ( 'DraggableCore: handleDrag: %j' , coreEvent . position ) ;
320328
321329
322330 // Call event handler. If it returns explicit false, trigger end.
323- let shouldUpdate = this . props . onDrag ( e , coreEvent ) ;
331+ const shouldUpdate = this . props . onDrag ( e , coreEvent ) ;
324332 if ( shouldUpdate === false ) {
325333 this . handleDragStop ( { } ) ;
326334 return ;
@@ -332,7 +340,7 @@ export default class DraggableCore extends React.Component {
332340 } ) ;
333341 } ;
334342
335- handleDragStop = ( e ) => {
343+ handleDragStop : EventHandler = ( e ) => {
336344 if ( ! this . state . dragging ) return ;
337345
338346 // Short circuit if this is not the correct touch event. `changedTouches` contains all
@@ -343,7 +351,7 @@ export default class DraggableCore extends React.Component {
343351 if ( this . props . enableUserSelectHack ) removeUserSelectStyles ( ) ;
344352
345353 let { clientX, clientY} = getControlPosition ( e ) ;
346- let coreEvent = createCoreEvent ( this , clientX , clientY ) ;
354+ const coreEvent = createCoreEvent ( this , clientX , clientY ) ;
347355
348356 log ( 'DraggableCore: handleDragStop: %j' , coreEvent . position ) ;
349357
@@ -366,8 +374,8 @@ export default class DraggableCore extends React.Component {
366374
367375 // When the user scrolls, adjust internal state so the draggable moves along the page properly.
368376 // This only fires when a drag is active.
369- handleScroll = ( e ) => {
370- let s = this . state , x = document . body . scrollLeft , y = document . body . scrollTop ;
377+ handleScroll : EventHandler = ( e ) => {
378+ const s = this . state , x = document . body . scrollLeft , y = document . body . scrollTop ;
371379
372380 // Create the usual event, but make the scroll offset our deltas.
373381 let coreEvent = createCoreEvent ( this ) ;
@@ -383,7 +391,7 @@ export default class DraggableCore extends React.Component {
383391 } ;
384392
385393 // On mousedown, consider the drag started.
386- onMouseDown = ( e ) => {
394+ onMouseDown : EventHandler = ( e ) => {
387395 // HACK: Prevent 'ghost click' which happens 300ms after touchstart if the event isn't cancelled.
388396 // We don't cancel the event on touchstart because of #37; we might want to make a scrollable item draggable.
389397 // More on ghost clicks: http://ariatemplates.com/blog/2014/05/ghost-clicks-in-mobile-browsers/
@@ -395,14 +403,14 @@ export default class DraggableCore extends React.Component {
395403 } ;
396404
397405 // Same as onMouseDown (start drag), but now consider this a touch device.
398- onTouchStart = ( e ) => {
406+ onTouchStart : EventHandler = ( e ) => {
399407 // We're on a touch device now, so change the event handlers
400408 dragEventFor = eventsFor . touch ;
401409
402410 return this . handleDragStart ( e ) ;
403411 } ;
404412
405- render ( ) {
413+ render ( ) : ReactElement {
406414 // Reuse the child provided
407415 // This makes it flexible to use whatever element is wanted (div, ul, etc)
408416 return React . cloneElement ( React . Children . only ( this . props . children ) , {
0 commit comments