Skip to content

Commit cfd471e

Browse files
committed
fix: error expected false, but got true on <button disabled></button>
1 parent 42cb725 commit cfd471e

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/Halogen/VDom/DOM/Prop/Implementation.purs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import Effect.Ref as Ref
1414
import Effect.Uncurried as EFn
1515
import Foreign.Object as Object
1616
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)
1818
import Halogen.VDom.DOM.Prop.Utils (removeProperty, setProperty, unsafeGetProperty)
1919
import Halogen.VDom.Set as Set
2020
import Halogen.VDom.Types (ElemName(..))
@@ -23,6 +23,8 @@ import Halogen.VDom.Util as Util
2323
import Web.DOM.Element (Element) as DOM
2424
import Web.Event.Event (EventType(..), Event) as DOM
2525
import Web.Event.EventTarget (eventListener, EventListener) as DOM
26+
import Foreign (unsafeToForeign, typeOf)
27+
import Unsafe.Coerce (unsafeCoerce)
2628

2729
deleteRequiredElement :: EFn.EffectFn2 String (Set.Set String) Unit
2830
deleteRequiredElement = EFn.mkEffectFn2 \element set -> do
@@ -66,7 +68,21 @@ hydrateApplyProp = Fn.mkFn4 \extraAttributeNames el emit events → EFn.mkEffect
6668
_ -> do
6769
checkPropExistsAndIsEqual propName val el
6870
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
7086

7187
-- | EFn.runEffectFn2 warnAny "checkPropExistsAndIsEqual after" { propName, val, el, extraAttributeNames }
7288

0 commit comments

Comments
 (0)