{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Reflex.Bulmex.PreventDefault where
import Control.Lens ((%~), (.~))
import Data.Map (Map)
import Data.Proxy (Proxy (..))
import Data.Text (Text)
import Reflex.Dom.Core
elDynAttrPrevDef ::
forall a en m t. (DomBuilder t m, PostBuild t m)
=> EventName en
-> Text
-> Dynamic t (Map Text Text)
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
elDynAttrPrevDef ev =
elDynAttrModConf
(\elCfg ->
elCfg &
elementConfig_eventSpec %~
addEventSpecFlags
(Proxy :: Proxy (DomBuilderSpace m))
ev
(const preventDefault))
elDynAttrModConf ::
(DomBuilder t m, PostBuild t m)
=> (ElementConfig EventResult t (DomBuilderSpace m) -> ElementConfig EventResult t (DomBuilderSpace m))
-> Text
-> Dynamic t (Map Text Text)
-> m a
-> m (Element EventResult (DomBuilderSpace m) t, a)
elDynAttrModConf f elementTag attrs child = do
modifyAttrs <- dynamicAttributesToModifyAttributes attrs
let cfg =
def & modifyAttributes .~ fmapCheap mapKeysToAttributeName modifyAttrs
result <- element elementTag (f cfg) child
postBuild <- getPostBuild
notReadyUntil postBuild
pure result