{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Glazier.React.Event.Synthetic
( SyntheticEvent(..)
, toSyntheticEvent
)
where
import Control.DeepSeq
import qualified GHC.Generics as G
import qualified GHCJS.Types as J
import Glazier.React.EventTarget.Internal
import Glazier.React.NativeEvent.Internal
import Glazier.React.Notice.Internal
import qualified JavaScript.Extras as JE
data SyntheticEvent = SyntheticEvent
{ bubbles :: Bool
, cancelable :: Bool
, currentTarget :: EventTarget
, defaultPrevented :: Bool
, eventPhase :: Int
, isTrusted :: Bool
, nativeEvent :: NativeEvent
, target :: EventTarget
, timeStamp :: Int
, eventType :: J.JSString
}
deriving (G.Generic)
instance NFData SyntheticEvent
toSyntheticEvent :: Notice -> SyntheticEvent
toSyntheticEvent (Notice (JE.JSRep evt)) =
SyntheticEvent
{ bubbles = unsafeGetProperty evt "bubbles"
, cancelable = unsafeGetProperty evt "cancelable"
, currentTarget = EventTarget $ JE.JSRep $ unsafeGetProperty evt "currentTarget"
, defaultPrevented = unsafeGetProperty evt "defaultPrevented"
, eventPhase = unsafeGetProperty evt "eventPhase"
, isTrusted = unsafeGetProperty evt "isTrusted"
, nativeEvent = NativeEvent $ JE.JSRep $ evt
, target = EventTarget $ JE.JSRep $ unsafeGetProperty evt "target"
, timeStamp = unsafeGetProperty evt "timeStamp"
, eventType = unsafeGetProperty evt "type"
}