@@ -14,7 +14,7 @@ import Effect.Ref as Ref
14
14
import Effect.Uncurried as EFn
15
15
import Foreign.Object as Object
16
16
import Halogen.VDom.DOM.Prop.Checkers (checkAttributeExistsAndIsEqual , checkPropExistsAndIsEqual )
17
- import Halogen.VDom.DOM.Prop.Types (ElemRef (..), EmitterInputBuilder , EventListenerAndCurrentEmitterInputBuilder , Prop (..))
17
+ import Halogen.VDom.DOM.Prop.Types (ElemRef (..), EmitterInputBuilder , EventListenerAndCurrentEmitterInputBuilder , Prop (..), PropValue )
18
18
import Halogen.VDom.DOM.Prop.Utils (removeProperty , setProperty , unsafeGetProperty )
19
19
import Halogen.VDom.Set as Set
20
20
import Halogen.VDom.Types (ElemName (..))
@@ -23,6 +23,8 @@ import Halogen.VDom.Util as Util
23
23
import Web.DOM.Element (Element ) as DOM
24
24
import Web.Event.Event (EventType (..), Event ) as DOM
25
25
import Web.Event.EventTarget (eventListener , EventListener ) as DOM
26
+ import Foreign (unsafeToForeign , typeOf )
27
+ import Unsafe.Coerce (unsafeCoerce )
26
28
27
29
deleteRequiredElement :: EFn.EffectFn2 String (Set.Set String ) Unit
28
30
deleteRequiredElement = EFn .mkEffectFn2 \element set -> do
@@ -66,7 +68,21 @@ hydrateApplyProp = Fn.mkFn4 \extraAttributeNames el emit events → EFn.mkEffect
66
68
_ -> do
67
69
checkPropExistsAndIsEqual propName val el
68
70
let fullAttributeName' = toLower propName -- transforms `colSpan` to `colspan`
69
- EFn .runEffectFn2 deleteRequiredElement fullAttributeName' extraAttributeNames
71
+ case typeOf (unsafeToForeign val), (unsafeCoerce :: PropValue -> Boolean ) val of
72
+ -- | if this is a boolean and is false - then it should not have been prerendered
73
+ -- |
74
+ -- | For example:
75
+ -- | `HH.button [HP.disabled false] []` should be rendered as `<button></button>`
76
+ -- | `HH.button [HP.disabled true] []` should be rendered as `<button disabled></button>`
77
+ -- |
78
+ -- | Why it should NOT be rendered at all? Because
79
+ -- | `<button disabled></button>` the `$0.disabled === true`
80
+ -- | `<button disabled="false"></button>` the `$0.disabled === true`
81
+ -- | `<button disabled="true"></button>` the `$0.disabled === true`
82
+ -- | `<button disabled=""></button>` the `$0.disabled === true`
83
+ -- | `<button></button>` the `$0.disabled === false`
84
+ " boolean" , false -> pure unit
85
+ _, _ -> EFn .runEffectFn2 deleteRequiredElement fullAttributeName' extraAttributeNames
70
86
71
87
-- | EFn.runEffectFn2 warnAny "checkPropExistsAndIsEqual after" { propName, val, el, extraAttributeNames }
72
88
0 commit comments