{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DisambiguateRecordFields #-}
{-# LANGUAGE DuplicateRecordFields #-}

module Glazier.React.Action.KeyDownKey where

import Control.DeepSeq
import Control.Monad.Trans
import Control.Monad.Trans.Maybe
import qualified GHC.Generics as G
import qualified GHCJS.Types as J
import Glazier.React
import Glazier.React.Event.Keyboard
import Glazier.React.Event.Synthetic

data KeyDownKey = KeyDownKey EventTarget J.JSString
    deriving (G.Generic, NFData)

fireKeyDownKey :: Notice -> MaybeT IO KeyDownKey
fireKeyDownKey ntc = do
    kevt <- MaybeT $ pure $ toKeyboardEvent ntc
    let evt = toSyntheticEvent ntc
        k = key kevt
    t <- lift $ pure $ target evt
    pure $ KeyDownKey t k