Skip to content

Commit 4129739

Browse files
authored
Add drag event API binding (#641)
* feat(drag): add drag event API binding * feat(drag): update onDrag*/onDrop bindings
1 parent 5a4a87c commit 4129739

File tree

3 files changed

+90
-16
lines changed

3 files changed

+90
-16
lines changed

src/ReactDOM.re

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -441,21 +441,21 @@ module Props = {
441441
[@bs.optional]
442442
onDoubleClick: ReactEvent.Mouse.t => unit,
443443
[@bs.optional]
444-
onDrag: ReactEvent.Mouse.t => unit,
444+
onDrag: ReactEvent.Drag.t => unit,
445445
[@bs.optional]
446-
onDragEnd: ReactEvent.Mouse.t => unit,
446+
onDragEnd: ReactEvent.Drag.t => unit,
447447
[@bs.optional]
448-
onDragEnter: ReactEvent.Mouse.t => unit,
448+
onDragEnter: ReactEvent.Drag.t => unit,
449449
[@bs.optional]
450-
onDragExit: ReactEvent.Mouse.t => unit,
450+
onDragExit: ReactEvent.Drag.t => unit,
451451
[@bs.optional]
452-
onDragLeave: ReactEvent.Mouse.t => unit,
452+
onDragLeave: ReactEvent.Drag.t => unit,
453453
[@bs.optional]
454-
onDragOver: ReactEvent.Mouse.t => unit,
454+
onDragOver: ReactEvent.Drag.t => unit,
455455
[@bs.optional]
456-
onDragStart: ReactEvent.Mouse.t => unit,
456+
onDragStart: ReactEvent.Drag.t => unit,
457457
[@bs.optional]
458-
onDrop: ReactEvent.Mouse.t => unit,
458+
onDrop: ReactEvent.Drag.t => unit,
459459
[@bs.optional]
460460
onMouseDown: ReactEvent.Mouse.t => unit,
461461
[@bs.optional]
@@ -1465,21 +1465,21 @@ module Props = {
14651465
[@bs.optional]
14661466
onDoubleClick: ReactEvent.Mouse.t => unit,
14671467
[@bs.optional]
1468-
onDrag: ReactEvent.Mouse.t => unit,
1468+
onDrag: ReactEvent.Drag.t => unit,
14691469
[@bs.optional]
1470-
onDragEnd: ReactEvent.Mouse.t => unit,
1470+
onDragEnd: ReactEvent.Drag.t => unit,
14711471
[@bs.optional]
1472-
onDragEnter: ReactEvent.Mouse.t => unit,
1472+
onDragEnter: ReactEvent.Drag.t => unit,
14731473
[@bs.optional]
1474-
onDragExit: ReactEvent.Mouse.t => unit,
1474+
onDragExit: ReactEvent.Drag.t => unit,
14751475
[@bs.optional]
1476-
onDragLeave: ReactEvent.Mouse.t => unit,
1476+
onDragLeave: ReactEvent.Drag.t => unit,
14771477
[@bs.optional]
1478-
onDragOver: ReactEvent.Mouse.t => unit,
1478+
onDragOver: ReactEvent.Drag.t => unit,
14791479
[@bs.optional]
1480-
onDragStart: ReactEvent.Mouse.t => unit,
1480+
onDragStart: ReactEvent.Drag.t => unit,
14811481
[@bs.optional]
1482-
onDrop: ReactEvent.Mouse.t => unit,
1482+
onDrop: ReactEvent.Drag.t => unit,
14831483
[@bs.optional]
14841484
onMouseDown: ReactEvent.Mouse.t => unit,
14851485
[@bs.optional]

src/ReactEvent.re

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,36 @@ module Mouse = {
134134
[@bs.get] external shiftKey: t => bool = "shiftKey";
135135
};
136136

137+
module Drag = {
138+
type tag;
139+
type t = synthetic(tag);
140+
include MakeEventWithType({
141+
type nonrec t = t;
142+
});
143+
144+
// MouseEvent
145+
[@bs.get] external altKey: t => bool = "altKey";
146+
[@bs.get] external button: t => int = "button";
147+
[@bs.get] external buttons: t => int = "buttons";
148+
[@bs.get] external clientX: t => int = "clientX";
149+
[@bs.get] external clientY: t => int = "clientY";
150+
[@bs.get] external ctrlKey: t => bool = "ctrlKey";
151+
[@bs.send]
152+
external getModifierState: (t, string) => bool = "getModifierState";
153+
[@bs.get] external metaKey: t => bool = "metaKey";
154+
[@bs.get] external movementX: t => int = "movementX";
155+
[@bs.get] external movementY: t => int = "movementY";
156+
[@bs.get] external pageX: t => int = "pageX";
157+
[@bs.get] external pageY: t => int = "pageY";
158+
[@bs.get] [@bs.return nullable]
159+
external relatedTarget: t => option(Js.t({..})) = "relatedTarget"; /* Should return Dom.eventTarget */
160+
[@bs.get] external screenX: t => int = "screenX";
161+
[@bs.get] external screenY: t => int = "screenY";
162+
[@bs.get] external shiftKey: t => bool = "shiftKey";
163+
164+
[@bs.get] external dataTransfer: t => Dom.dataTransfer = "dataTransfer";
165+
};
166+
137167
module Pointer = {
138168
type tag;
139169
type t = synthetic(tag);

src/ReactEvent.rei

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,50 @@ module Composition: {
111111
[@bs.get] external data: t => string = "data";
112112
};
113113

114+
module Drag: {
115+
type tag;
116+
type t = synthetic(tag);
117+
118+
// SyntheticEvent
119+
[@bs.get] external bubbles: t => bool = "bubbles";
120+
[@bs.get] external cancelable: t => bool = "cancelable";
121+
[@bs.get] external currentTarget: t => Js.t({..}) = "currentTarget";
122+
[@bs.get] external defaultPrevented: t => bool = "defaultPrevented";
123+
[@bs.get] external eventPhase: t => int = "eventPhase";
124+
[@bs.get] external isTrusted: t => bool = "isTrusted";
125+
[@bs.get] external nativeEvent: t => Js.t({..}) = "nativeEvent";
126+
[@bs.send] external preventDefault: t => unit = "preventDefault";
127+
[@bs.send] external isDefaultPrevented: t => bool = "isDefaultPrevented";
128+
[@bs.send] external stopPropagation: t => unit = "stopPropagation";
129+
[@bs.send] external isPropagationStopped: t => bool = "isPropagationStopped";
130+
[@bs.get] external target: t => Js.t({..}) = "target";
131+
[@bs.get] external timeStamp: t => float = "timeStamp";
132+
[@bs.get] external type_: t => string = "type";
133+
[@bs.send] external persist: t => unit = "persist";
134+
135+
// MouseEvent
136+
[@bs.get] external altKey: t => bool = "altKey";
137+
[@bs.get] external button: t => int = "button";
138+
[@bs.get] external buttons: t => int = "buttons";
139+
[@bs.get] external clientX: t => int = "clientX";
140+
[@bs.get] external clientY: t => int = "clientY";
141+
[@bs.get] external ctrlKey: t => bool = "ctrlKey";
142+
[@bs.send]
143+
external getModifierState: (t, string) => bool = "getModifierState";
144+
[@bs.get] external metaKey: t => bool = "metaKey";
145+
[@bs.get] external movementX: t => int = "movementX";
146+
[@bs.get] external movementY: t => int = "movementY";
147+
[@bs.get] external pageX: t => int = "pageX";
148+
[@bs.get] external pageY: t => int = "pageY";
149+
[@bs.get] [@bs.return nullable]
150+
external relatedTarget: t => option(Js.t({..})) = "relatedTarget"; /* Should return Dom.eventTarget */
151+
[@bs.get] external screenX: t => int = "screenX";
152+
[@bs.get] external screenY: t => int = "screenY";
153+
[@bs.get] external shiftKey: t => bool = "shiftKey";
154+
155+
[@bs.get] external dataTransfer: t => Dom.dataTransfer = "dataTransfer";
156+
};
157+
114158
module Keyboard: {
115159
type tag;
116160
type t = synthetic(tag);

0 commit comments

Comments
 (0)