Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 48 additions & 2 deletions src/React.purs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ module React where

foreign import data DOM :: !
foreign import data ReadPropsEff :: * -> !
foreign import data ReadRefsEff :: * -> !
foreign import data ReadStateEff :: * -> !
foreign import data WriteStateEff :: * -> !
foreign import data UI :: *
Expand Down Expand Up @@ -90,6 +91,13 @@ module React where
:: forall props eff.
Eff (p :: ReadPropsEff props | eff) props

foreign import getRefs
" function getRefs() { \
\ return __current.refs; \
\ }"
:: forall refs eff.
Eff (f :: ReadRefsEff refs | eff) refs

foreign import writeState
" function writeState(state) { \
\ __current.replaceState({state: state}); \
Expand Down Expand Up @@ -176,9 +184,34 @@ module React where
-> Render props state
-> (props -> UI)

type Event = { }
type DOMEvent = forall attrs. { | attrs}
type DOMEventTarget = forall attrs. { | attrs }
type Event = { bubbles :: Boolean
, cancelable :: Boolean
, currentTarget :: DOMEventTarget
, defaultPrevented :: Boolean
, eventPhase :: Number
, isTrusted :: Boolean
, nativeEvent :: DOMEvent
, preventDefault :: {} -> {}
, stopPropagation :: {} -> {}
, target :: DOMEventTarget
, timeStamp :: Number
, eventType :: String
}
type MouseEvent = { pageX :: Number, pageY :: Number }
type KeyboardEvent = { key :: String }
type KeyboardEvent = { altKey :: Boolean
, ctrlKey :: Boolean
, charCode :: Number
, key :: String
, keyCode :: Number
, locale :: String
, location :: Number
, metaKey :: Boolean
, repeat :: Boolean
, shiftKey :: Boolean
, which :: Number
}

type EventHandlerContext eff props state result = Eff (
p :: ReadPropsEff props,
Expand Down Expand Up @@ -225,3 +258,16 @@ module React where
\ } \
\ }"
:: forall eff. String -> UI -> Eff (dom :: DOM | eff) UI

foreign import deferred
"function deferred(action) {\
\ var component = __current;\
\ return function() {\
\ __current = component;\
\ try {\
\ return action();\
\ } finally {\
\ __current = null;\
\ }\
\ };\
\}" :: forall a eff. Eff eff a -> Eff eff a