Skip to content

Commit bc25412

Browse files
nojafFreddy03h
authored andcommitted
Use WebAPI types in events
1 parent 9bb5ccf commit bc25412

File tree

4 files changed

+94
-86
lines changed

4 files changed

+94
-86
lines changed

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ReactDOM.res

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@
66
calls and add the appropriate `require("react-dom")` in the file calling this `render` */
77

88
// Helper so that ReactDOM itself doesn't bring any runtime
9+
10+
open WebAPI
11+
912
@val @return(nullable)
10-
external querySelector: string => option<Dom.element> = "document.querySelector"
13+
external querySelector: string => option<DOMAPI.element> = "document.querySelector"
1114

1215
module Client = {
1316
module Root = {
@@ -19,10 +22,10 @@ module Client = {
1922
}
2023

2124
@module("react-dom/client")
22-
external createRoot: Dom.element => Root.t = "createRoot"
25+
external createRoot: DOMAPI.element => Root.t = "createRoot"
2326

2427
@module("react-dom/client")
25-
external hydrateRoot: (Dom.element, React.element) => Root.t = "hydrateRoot"
28+
external hydrateRoot: (DOMAPI.element, React.element) => Root.t = "hydrateRoot"
2629
}
2730

2831
// Very rudimentary form data bindings
@@ -72,18 +75,18 @@ module FormData = {
7275
}
7376

7477
@module("react-dom")
75-
external createPortal: (React.element, Dom.element) => React.element = "createPortal"
78+
external createPortal: (React.element, DOMAPI.element) => React.element = "createPortal"
7679

77-
external domElementToObj: Dom.element => {..} = "%identity"
80+
external domElementToObj: DOMAPI.element => {..} = "%identity"
7881

7982
type style = ReactDOMStyle.t
8083

8184
type domRef = JsxDOM.domRef
8285

8386
module Ref = {
8487
type t = domRef
85-
type currentDomRef = React.ref<Js.nullable<Dom.element>>
86-
type callbackDomRef = Js.nullable<Dom.element> => option<unit => unit>
88+
type currentDomRef = React.ref<Js.nullable<DOMAPI.element>>
89+
type callbackDomRef = Js.nullable<DOMAPI.element> => option<unit => unit>
8790

8891
external domRef: currentDomRef => domRef = "%identity"
8992
external callbackDomRef: callbackDomRef => domRef = "%identity"

src/ReactEvent.res

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,43 @@ module MakeEventWithType = (
55
type t
66
},
77
) => {
8+
open WebAPI
9+
810
@get external bubbles: Type.t => bool = "bubbles"
911
@get external cancelable: Type.t => bool = "cancelable"
1012
@get
11-
external currentTarget: Type.t => {..} = "currentTarget" /* Should return Dom.eventTarget */
13+
external currentTarget: Type.t => DOMAPI.node = "currentTarget"
1214
@get external defaultPrevented: Type.t => bool = "defaultPrevented"
1315
@get external eventPhase: Type.t => int = "eventPhase"
1416
@get external isTrusted: Type.t => bool = "isTrusted"
15-
@get external nativeEvent: Type.t => {..} = "nativeEvent" /* Should return Dom.event */
17+
@get external nativeEvent: Type.t => EventAPI.event = "nativeEvent"
1618
@send external preventDefault: Type.t => unit = "preventDefault"
1719
@send
1820
external isDefaultPrevented: Type.t => bool = "isDefaultPrevented"
1921
@send external stopPropagation: Type.t => unit = "stopPropagation"
2022
@send
2123
external isPropagationStopped: Type.t => bool = "isPropagationStopped"
22-
@get external target: Type.t => {..} = "target" /* Should return Dom.eventTarget */
24+
@get external target: Type.t => DOMAPI.node = "target"
2325
@get external timeStamp: Type.t => float = "timeStamp"
2426
@get external type_: Type.t => string = "type"
2527
@send external persist: Type.t => unit = "persist"
2628
}
2729

30+
open WebAPI
31+
2832
module Synthetic = {
2933
type tag = JsxEvent.Synthetic.tag
3034
type t = synthetic<tag>
3135
@get external bubbles: synthetic<'a> => bool = "bubbles"
3236
@get external cancelable: synthetic<'a> => bool = "cancelable"
3337
@get
34-
external currentTarget: synthetic<'a> => {..} =
35-
"currentTarget" /* Should return Dom.eventTarget */
38+
external currentTarget: synthetic<'a> => DOMAPI.node = "currentTarget"
3639
@get
3740
external defaultPrevented: synthetic<'a> => bool = "defaultPrevented"
3841
@get external eventPhase: synthetic<'a> => int = "eventPhase"
3942
@get external isTrusted: synthetic<'a> => bool = "isTrusted"
4043
@get
41-
external nativeEvent: synthetic<'a> => {..} = "nativeEvent" /* Should return Dom.event */
44+
external nativeEvent: synthetic<'a> => EventAPI.event = "nativeEvent"
4245
@send
4346
external preventDefault: synthetic<'a> => unit = "preventDefault"
4447
@send
@@ -47,7 +50,7 @@ module Synthetic = {
4750
external stopPropagation: synthetic<'a> => unit = "stopPropagation"
4851
@send
4952
external isPropagationStopped: synthetic<'a> => bool = "isPropagationStopped"
50-
@get external target: synthetic<'a> => {..} = "target" /* Should return Dom.eventTarget */
53+
@get external target: synthetic<'a> => DOMAPI.node = "target"
5154
@get external timeStamp: synthetic<'a> => float = "timeStamp"
5255
@get external type_: synthetic<'a> => string = "type"
5356
@send external persist: synthetic<'a> => unit = "persist"
@@ -62,7 +65,7 @@ module Clipboard = {
6265
include MakeEventWithType({
6366
type t = t
6467
})
65-
@get external clipboardData: t => {..} = "clipboardData" /* Should return Dom.dataTransfer */
68+
@get external clipboardData: t => WebAPI.UIEventsAPI.dataTransfer = "clipboardData"
6669
}
6770

6871
module Composition = {
@@ -103,7 +106,7 @@ module Focus = {
103106
type t = t
104107
})
105108
@get @return(nullable)
106-
external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */
109+
external relatedTarget: t => option<EventAPI.eventTarget> = "relatedTarget"
107110
}
108111

109112
module Form = {
@@ -134,7 +137,7 @@ module Mouse = {
134137
@get external pageX: t => int = "pageX"
135138
@get external pageY: t => int = "pageY"
136139
@get @return(nullable)
137-
external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */
140+
external relatedTarget: t => option<EventAPI.eventTarget> = "relatedTarget"
138141
@get external screenX: t => int = "screenX"
139142
@get external screenY: t => int = "screenY"
140143
@get external shiftKey: t => bool = "shiftKey"
@@ -149,7 +152,7 @@ module Pointer = {
149152

150153
// UIEvent
151154
@get external detail: t => int = "detail"
152-
@get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */
155+
@get external view: t => DOMAPI.window = "view"
153156

154157
// MouseEvent
155158
@get external screenX: t => int = "screenX"
@@ -172,7 +175,7 @@ module Pointer = {
172175
@get external buttons: t => int = "buttons"
173176

174177
@get @return(nullable)
175-
external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */
178+
external relatedTarget: t => option<EventAPI.eventTarget> = "relatedTarget"
176179

177180
// PointerEvent
178181
@get external pointerId: t => Dom.eventPointerId = "pointerId"
@@ -202,14 +205,14 @@ module Touch = {
202205
type t = t
203206
})
204207
@get external altKey: t => bool = "altKey"
205-
@get external changedTouches: t => {..} = "changedTouches" /* Should return Dom.touchList */
208+
@get external changedTouches: t => UIEventsAPI.touchList = "changedTouches"
206209
@get external ctrlKey: t => bool = "ctrlKey"
207210
@send
208211
external getModifierState: (t, string) => bool = "getModifierState"
209212
@get external metaKey: t => bool = "metaKey"
210213
@get external shiftKey: t => bool = "shiftKey"
211-
@get external targetTouches: t => {..} = "targetTouches" /* Should return Dom.touchList */
212-
@get external touches: t => {..} = "touches" /* Should return Dom.touchList */
214+
@get external targetTouches: t => UIEventsAPI.touchList = "targetTouches"
215+
@get external touches: t => UIEventsAPI.touchList = "touches"
213216
}
214217

215218
module UI = {
@@ -219,7 +222,7 @@ module UI = {
219222
type t = t
220223
})
221224
@get external detail: t => int = "detail"
222-
@get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */
225+
@get external view: t => DOMAPI.window = "view"
223226
}
224227

225228
module Wheel = {

0 commit comments

Comments
 (0)