@@ -5,6 +5,7 @@ module React where
55
66 foreign import data DOM :: !
77 foreign import data ReadPropsEff :: * -> !
8+ foreign import data ReadRefsEff :: * -> !
89 foreign import data ReadStateEff :: * -> !
910 foreign import data WriteStateEff :: * -> !
1011 foreign import data UI :: *
@@ -90,6 +91,13 @@ module React where
9091 :: forall props eff.
9192 Eff (p :: ReadPropsEff props | eff ) props
9293
94+ foreign import getRefs
95+ " function getRefs() { \
96+ \ return __current.refs; \
97+ \ }"
98+ :: forall refs eff.
99+ Eff (f :: ReadRefsEff refs | eff ) refs
100+
93101 foreign import writeState
94102 " function writeState(state) { \
95103 \ __current.replaceState({state: state}); \
@@ -176,9 +184,34 @@ module React where
176184 -> Render props state
177185 -> (props -> UI )
178186
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+ }
180202 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+ }
182215
183216 type EventHandlerContext eff props state result = Eff (
184217 p :: ReadPropsEff props ,
@@ -225,3 +258,16 @@ module React where
225258 \ } \
226259 \ }"
227260 :: 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