react-haskell-2.0.1: src/React/PropTypes.hs
{-# LANGUAGE CPP, FlexibleInstances #-}
#ifdef __GHCJS__
{-# LANGUAGE JavaScriptFFI #-}
#else
{-# OPTIONS_GHC -fno-warn-missing-methods #-}
#endif
module React.PropTypes where
import Data.Monoid
import Data.Text (Text)
import React.GHCJS
import React.Imports
data FPropType_
type FPropType = JSRef FPropType_
#ifdef __GHCJS__
foreign import javascript unsafe "React.PropTypes.bool"
fPropBool :: FPropType
foreign import javascript unsafe "React.PropTypes.func"
fPropFunc :: FPropType
foreign import javascript unsafe "React.PropTypes.number"
fPropNumber :: FPropType
foreign import javascript unsafe "React.PropTypes.string"
fPropString :: FPropType
foreign import javascript unsafe "React.PropTypes.object"
fPropObject :: FPropType
foreign import javascript unsafe "$1.isRequired"
fIsRequired :: FPropType -> FPropType
#else
fPropBool :: FPropType
fPropBool = undefined
fPropFunc :: FPropType
fPropFunc = undefined
fPropNumber :: FPropType
fPropNumber = undefined
fPropString :: FPropType
fPropString = undefined
fPropObject :: FPropType
fPropObject = undefined
fIsRequired :: FPropType -> FPropType
fIsRequired = undefined
#endif
data PropRequired = IsRequired | IsntRequired
-- | The equivalent to React propTypes.
data PropType
-- = PropArrayOf PropType
= PropBool PropRequired
| PropFunc PropRequired
| PropNumber PropRequired
| PropString PropRequired
| PropObject PropRequired
-- PropArray
-- PropShape (H.HashMap Text PropType)
-- PropEnum [Text]
-- PropUnion [PropType]
toJsPropType :: PropType -> FPropType
toJsPropType (PropBool req) = ptReq req fPropBool
toJsPropType (PropFunc req) = ptReq req fPropFunc
toJsPropType (PropNumber req) = ptReq req fPropNumber
toJsPropType (PropString req) = ptReq req fPropString
toJsPropType (PropObject req) = ptReq req fPropObject
ptReq :: PropRequired -> FPropType -> FPropType
ptReq IsRequired = fIsRequired
ptReq IsntRequired = id
-- | Describe the PropType of a type
--
-- Examples:
--
-- @
-- propType (_ :: JSString) = PropString IsRequired
--
-- propType (_ :: Bool) = PropBool IsRequired
-- @
class PropTypable a where
propType :: a -> PropType
instance PropTypable (JSRef ()) where
-- TOOD(joel) instanceOf this
propType _ = PropObject IsRequired
instance PropTypable JSString where
propType _ = PropString IsRequired