From 4dcc4e21dafc3bb1356583fb1b10a2ed49be1555 Mon Sep 17 00:00:00 2001 From: Ersin Akinci Date: Wed, 30 Dec 2020 16:50:30 -0800 Subject: [PATCH 1/2] feat(drag): add drag event API binding --- src/ReactEvent.re | 30 ++++++++++++++++++++++++++++++ src/ReactEvent.rei | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/src/ReactEvent.re b/src/ReactEvent.re index 0735962e3..a69738e82 100644 --- a/src/ReactEvent.re +++ b/src/ReactEvent.re @@ -134,6 +134,36 @@ module Mouse = { [@bs.get] external shiftKey: t => bool = "shiftKey"; }; +module Drag = { + type tag; + type t = synthetic(tag); + include MakeEventWithType({ + type nonrec t = t; + }); + + // MouseEvent + [@bs.get] external altKey: t => bool = "altKey"; + [@bs.get] external button: t => int = "button"; + [@bs.get] external buttons: t => int = "buttons"; + [@bs.get] external clientX: t => int = "clientX"; + [@bs.get] external clientY: t => int = "clientY"; + [@bs.get] external ctrlKey: t => bool = "ctrlKey"; + [@bs.send] + external getModifierState: (t, string) => bool = "getModifierState"; + [@bs.get] external metaKey: t => bool = "metaKey"; + [@bs.get] external movementX: t => int = "movementX"; + [@bs.get] external movementY: t => int = "movementY"; + [@bs.get] external pageX: t => int = "pageX"; + [@bs.get] external pageY: t => int = "pageY"; + [@bs.get] [@bs.return nullable] + external relatedTarget: t => option(Js.t({..})) = "relatedTarget"; /* Should return Dom.eventTarget */ + [@bs.get] external screenX: t => int = "screenX"; + [@bs.get] external screenY: t => int = "screenY"; + [@bs.get] external shiftKey: t => bool = "shiftKey"; + + [@bs.get] external dataTransfer: t => Dom.dataTransfer = "dataTransfer"; +}; + module Pointer = { type tag; type t = synthetic(tag); diff --git a/src/ReactEvent.rei b/src/ReactEvent.rei index 29a89ea14..c889a8456 100644 --- a/src/ReactEvent.rei +++ b/src/ReactEvent.rei @@ -111,6 +111,50 @@ module Composition: { [@bs.get] external data: t => string = "data"; }; +module Drag: { + type tag; + type t = synthetic(tag); + + // SyntheticEvent + [@bs.get] external bubbles: t => bool = "bubbles"; + [@bs.get] external cancelable: t => bool = "cancelable"; + [@bs.get] external currentTarget: t => Js.t({..}) = "currentTarget"; + [@bs.get] external defaultPrevented: t => bool = "defaultPrevented"; + [@bs.get] external eventPhase: t => int = "eventPhase"; + [@bs.get] external isTrusted: t => bool = "isTrusted"; + [@bs.get] external nativeEvent: t => Js.t({..}) = "nativeEvent"; + [@bs.send] external preventDefault: t => unit = "preventDefault"; + [@bs.send] external isDefaultPrevented: t => bool = "isDefaultPrevented"; + [@bs.send] external stopPropagation: t => unit = "stopPropagation"; + [@bs.send] external isPropagationStopped: t => bool = "isPropagationStopped"; + [@bs.get] external target: t => Js.t({..}) = "target"; + [@bs.get] external timeStamp: t => float = "timeStamp"; + [@bs.get] external type_: t => string = "type"; + [@bs.send] external persist: t => unit = "persist"; + + // MouseEvent + [@bs.get] external altKey: t => bool = "altKey"; + [@bs.get] external button: t => int = "button"; + [@bs.get] external buttons: t => int = "buttons"; + [@bs.get] external clientX: t => int = "clientX"; + [@bs.get] external clientY: t => int = "clientY"; + [@bs.get] external ctrlKey: t => bool = "ctrlKey"; + [@bs.send] + external getModifierState: (t, string) => bool = "getModifierState"; + [@bs.get] external metaKey: t => bool = "metaKey"; + [@bs.get] external movementX: t => int = "movementX"; + [@bs.get] external movementY: t => int = "movementY"; + [@bs.get] external pageX: t => int = "pageX"; + [@bs.get] external pageY: t => int = "pageY"; + [@bs.get] [@bs.return nullable] + external relatedTarget: t => option(Js.t({..})) = "relatedTarget"; /* Should return Dom.eventTarget */ + [@bs.get] external screenX: t => int = "screenX"; + [@bs.get] external screenY: t => int = "screenY"; + [@bs.get] external shiftKey: t => bool = "shiftKey"; + + [@bs.get] external dataTransfer: t => Dom.dataTransfer = "dataTransfer"; +}; + module Keyboard: { type tag; type t = synthetic(tag); From e0c92d982c20b92495069469ab2c6b6163301e83 Mon Sep 17 00:00:00 2001 From: Ersin Akinci Date: Wed, 30 Dec 2020 16:56:51 -0800 Subject: [PATCH 2/2] feat(drag): update onDrag*/onDrop bindings --- src/ReactDOM.re | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/ReactDOM.re b/src/ReactDOM.re index e693407a9..2e217dbd3 100644 --- a/src/ReactDOM.re +++ b/src/ReactDOM.re @@ -439,21 +439,21 @@ module Props = { [@bs.optional] onDoubleClick: ReactEvent.Mouse.t => unit, [@bs.optional] - onDrag: ReactEvent.Mouse.t => unit, + onDrag: ReactEvent.Drag.t => unit, [@bs.optional] - onDragEnd: ReactEvent.Mouse.t => unit, + onDragEnd: ReactEvent.Drag.t => unit, [@bs.optional] - onDragEnter: ReactEvent.Mouse.t => unit, + onDragEnter: ReactEvent.Drag.t => unit, [@bs.optional] - onDragExit: ReactEvent.Mouse.t => unit, + onDragExit: ReactEvent.Drag.t => unit, [@bs.optional] - onDragLeave: ReactEvent.Mouse.t => unit, + onDragLeave: ReactEvent.Drag.t => unit, [@bs.optional] - onDragOver: ReactEvent.Mouse.t => unit, + onDragOver: ReactEvent.Drag.t => unit, [@bs.optional] - onDragStart: ReactEvent.Mouse.t => unit, + onDragStart: ReactEvent.Drag.t => unit, [@bs.optional] - onDrop: ReactEvent.Mouse.t => unit, + onDrop: ReactEvent.Drag.t => unit, [@bs.optional] onMouseDown: ReactEvent.Mouse.t => unit, [@bs.optional] @@ -1461,21 +1461,21 @@ module Props = { [@bs.optional] onDoubleClick: ReactEvent.Mouse.t => unit, [@bs.optional] - onDrag: ReactEvent.Mouse.t => unit, + onDrag: ReactEvent.Drag.t => unit, [@bs.optional] - onDragEnd: ReactEvent.Mouse.t => unit, + onDragEnd: ReactEvent.Drag.t => unit, [@bs.optional] - onDragEnter: ReactEvent.Mouse.t => unit, + onDragEnter: ReactEvent.Drag.t => unit, [@bs.optional] - onDragExit: ReactEvent.Mouse.t => unit, + onDragExit: ReactEvent.Drag.t => unit, [@bs.optional] - onDragLeave: ReactEvent.Mouse.t => unit, + onDragLeave: ReactEvent.Drag.t => unit, [@bs.optional] - onDragOver: ReactEvent.Mouse.t => unit, + onDragOver: ReactEvent.Drag.t => unit, [@bs.optional] - onDragStart: ReactEvent.Mouse.t => unit, + onDragStart: ReactEvent.Drag.t => unit, [@bs.optional] - onDrop: ReactEvent.Mouse.t => unit, + onDrop: ReactEvent.Drag.t => unit, [@bs.optional] onMouseDown: ReactEvent.Mouse.t => unit, [@bs.optional]