@@ -5,6 +5,7 @@ module React where
5
5
6
6
foreign import data DOM :: !
7
7
foreign import data ReadPropsEff :: * -> !
8
+ foreign import data ReadRefsEff :: * -> !
8
9
foreign import data ReadStateEff :: * -> !
9
10
foreign import data WriteStateEff :: * -> !
10
11
foreign import data UI :: *
@@ -90,6 +91,13 @@ module React where
90
91
:: forall props eff.
91
92
Eff (p :: ReadPropsEff props | eff ) props
92
93
94
+ foreign import getRefs
95
+ " function getRefs() { \
96
+ \ return __current.refs; \
97
+ \ }"
98
+ :: forall refs eff.
99
+ Eff (f :: ReadRefsEff refs | eff ) refs
100
+
93
101
foreign import writeState
94
102
" function writeState(state) { \
95
103
\ __current.replaceState({state: state}); \
@@ -176,9 +184,34 @@ module React where
176
184
-> Render props state
177
185
-> (props -> UI )
178
186
179
- type Event = { }
187
+ type DOMEvent = forall attrs. { | attrs}
188
+ type DOMEventTarget = forall attrs. { | attrs }
189
+ type Event = { bubbles :: Boolean
190
+ , cancelable :: Boolean
191
+ , currentTarget :: DOMEventTarget
192
+ , defaultPrevented :: Boolean
193
+ , eventPhase :: Number
194
+ , isTrusted :: Boolean
195
+ , nativeEvent :: DOMEvent
196
+ , preventDefault :: {} -> {}
197
+ , stopPropagation :: {} -> {}
198
+ , target :: DOMEventTarget
199
+ , timeStamp :: Number
200
+ , eventType :: String
201
+ }
180
202
type MouseEvent = { pageX :: Number , pageY :: Number }
181
- type KeyboardEvent = { key :: String }
203
+ type KeyboardEvent = { altKey :: Boolean
204
+ , ctrlKey :: Boolean
205
+ , charCode :: Number
206
+ , key :: String
207
+ , keyCode :: Number
208
+ , locale :: String
209
+ , location :: Number
210
+ , metaKey :: Boolean
211
+ , repeat :: Boolean
212
+ , shiftKey :: Boolean
213
+ , which :: Number
214
+ }
182
215
183
216
type EventHandlerContext eff props state result = Eff (
184
217
p :: ReadPropsEff props ,
@@ -225,3 +258,16 @@ module React where
225
258
\ } \
226
259
\ }"
227
260
:: forall eff. String -> UI -> Eff (dom :: DOM | eff ) UI
261
+
262
+ foreign import deferred
263
+ " function deferred(action) {\
264
+ \ var component = __current;\
265
+ \ return function() {\
266
+ \ __current = component;\
267
+ \ try {\
268
+ \ return action();\
269
+ \ } finally {\
270
+ \ __current = null;\
271
+ \ }\
272
+ \ };\
273
+ \}" :: forall a eff. Eff eff a -> Eff eff a
0 commit comments