@@ -39,15 +39,18 @@ data CommonButtonConfig t = CommonButtonConfig
3939 , disabledClasses :: Classes
4040 , buttonEnabled :: Dynamic t Bool
4141 , buttonText :: TextBuilder t
42− , buttonBaseTag :: BaseButtonTag
42+ , buttonBaseTag :: BaseButtonTag t
4343 }
4444 deriving stock (Generic)
4545
46−data BaseButtonTag = ButtonTag | ATag Text
46+data BaseButtonTag t = ButtonTag | ATag (Dynamic t Text)
4747
48−baseTag :: BaseButtonTag -> (Text, Map Text Text)
49−baseTag ButtonTag = ("button", "type" =: "button")
50−baseTag (ATag url) = ("a", "href" =: url <> "target" =: "_blank")
48+baseTag :: Reflex t => BaseButtonTag t -> (Text, Dynamic t (Map Text Text))
49+baseTag ButtonTag = ("button", pure $ "type" =: "button")
50+baseTag (ATag urlDyn) =
51+ ( "a"
52+ , urlDyn <&> \url -> "href" =: url <> "target" =: "_blank"
53+ )
5154
5255buttonEl ::
5356 forall m t.
@@ -55,15 +58,16 @@ buttonEl ::
5558 CommonButtonConfig t ->
5659 m (Event t (Either () ()))
5760buttonEl cfg = do
58− let (t, staticAttrs) = baseTag (cfg ^. #buttonBaseTag)
61+ let (t, tagAttrsDyn) = baseTag (cfg ^. #buttonBaseTag)
5962 attrsDyn = do
6063 enabled <- cfg ^. #buttonEnabled
6164 let (enabledClasses, enabledAttrs) = case enabled of
6265 True -> (cfg ^. #enabledClasses, mempty)
6366 False -> (cfg ^. #disabledClasses, "disabled" =: "")
6467 cs <- cfg ^. #constantClasses
68+ tagAttrs <- tagAttrsDyn
6569 pure $
66− staticAttrs
70+ tagAttrs
6771 <> "class" =: destructClasses (enabledClasses <> cs)
6872 <> enabledAttrs
6973 modAttrs <- dynamicAttributesToModifyAttributes attrsDyn