diff --git a/lib/Draggable.js b/lib/Draggable.js index e42b47bb..c7b3a788 100644 --- a/lib/Draggable.js +++ b/lib/Draggable.js @@ -296,6 +296,8 @@ class Draggable extends React.Component { // Short-circuit if user's callback killed it. const shouldUpdate = this.props.onDrag(e, uiData); + + if (shouldUpdate?.controlled) return; if (shouldUpdate === false) return false; this.setState(newState); diff --git a/lib/DraggableCore.js b/lib/DraggableCore.js index c5a3da8f..e9d8dd60 100644 --- a/lib/DraggableCore.js +++ b/lib/DraggableCore.js @@ -357,6 +357,9 @@ export default class DraggableCore extends React.Component + export type DraggableEvent = + | React.MouseEvent | React.TouchEvent | MouseEvent - | TouchEvent + | TouchEvent; export type DraggableEventHandler = ( e: DraggableEvent, @@ -30,37 +31,49 @@ declare module 'react-draggable' { ) => void | false; export interface DraggableData { - node: HTMLElement, - x: number, y: number, - deltaX: number, deltaY: number, - lastX: number, lastY: number + node: HTMLElement; + x: number; + y: number; + deltaX: number; + deltaY: number; + lastX: number; + lastY: number; } - export type ControlPosition = {x: number, y: number}; + export type ControlPosition = { x: number; y: number }; - export type PositionOffsetControlPosition = {x: number|string, y: number|string}; + export type PositionOffsetControlPosition = { + x: number | string; + y: number | string; + }; export interface DraggableCoreProps { - allowAnyClick: boolean, - cancel: string, - disabled: boolean, - enableUserSelectHack: boolean, - offsetParent: HTMLElement, - grid: [number, number], - handle: string, - nodeRef?: React.RefObject, - onStart: DraggableEventHandler, - onDrag: DraggableEventHandler, - onStop: DraggableEventHandler, - onMouseDown: (e: MouseEvent) => void, - scale: number + allowAnyClick: boolean; + cancel: string; + disabled: boolean; + enableUserSelectHack: boolean; + offsetParent: HTMLElement; + grid: [number, number]; + handle: string; + nodeRef?: React.RefObject; + onStart: DraggableEventHandler; + onDrag: DraggableEventHandler; + onStop: DraggableEventHandler; + onMouseDown: (e: MouseEvent) => void; + scale: number; } - export default class Draggable extends React.Component, {}> { - static defaultProps : DraggableProps; + export default class Draggable extends React.Component< + Partial, + {} + > { + static defaultProps: DraggableProps; } - export class DraggableCore extends React.Component, {}> { - static defaultProps : DraggableCoreProps; + export class DraggableCore extends React.Component< + Partial, + {} + > { + static defaultProps: DraggableCoreProps; } }