Skip to content

Commit 275fe37

Browse files
Fix useSelector Hook never sees the initialStore (#19)
Co-authored-by: Alex Valdetaro <avaldetaro@snapchat.com>
1 parent 7dbf39d commit 275fe37

File tree

4 files changed

+21
-17
lines changed

4 files changed

+21
-17
lines changed
Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ module Hooks.Counter where
22

33
import Prelude
44

5-
import Basic.Store as BS
6-
import Data.Maybe (fromMaybe)
5+
import Hooks.Store as HS
6+
import Data.Maybe (Maybe(..))
77
import Halogen as H
88
import Halogen.HTML as HH
99
import Halogen.HTML.Events as HE
@@ -14,18 +14,20 @@ import Halogen.Store.UseSelector (useSelector)
1414

1515
component
1616
:: forall query input output m
17-
. MonadStore BS.Action BS.Store m
17+
. MonadStore HS.Action HS.Store m
1818
=> H.Component query input output m
1919
component = Hooks.component \_ _ -> Hooks.do
2020
count <- useSelector $ selectEq _.count
2121
Hooks.pure do
22-
let cnt = fromMaybe 0 count
23-
HH.div_
24-
[ HH.button
25-
[ HE.onClick \_ -> updateStore BS.Increment ]
26-
[ HH.text "Increment" ]
27-
, HH.text $ " Count: " <> show cnt <> " "
28-
, HH.button
29-
[ HE.onClick \_ -> updateStore BS.Decrement ]
30-
[ HH.text "Decrement" ]
31-
]
22+
case count of
23+
Nothing -> HH.text ""
24+
Just cnt ->
25+
HH.div_
26+
[ HH.button
27+
[ HE.onClick \_ -> updateStore HS.Increment ]
28+
[ HH.text "Increment" ]
29+
, HH.text $ " Count: " <> show cnt <> " "
30+
, HH.button
31+
[ HE.onClick \_ -> updateStore HS.Decrement ]
32+
[ HH.text "Decrement" ]
33+
]
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ module Hooks.Main where
22

33
import Prelude
44

5-
import Basic.Counter as Counter
6-
import Basic.Store as BS
5+
import Hooks.Counter as Counter
6+
import Hooks.Store as HS
77
import Effect (Effect)
88
import Effect.Aff (launchAff_)
99
import Halogen.Aff as HA
@@ -13,5 +13,5 @@ import Halogen.VDom.Driver (runUI)
1313
main :: Effect Unit
1414
main = launchAff_ do
1515
body <- HA.awaitBody
16-
root <- runStoreT BS.initialStore BS.reduce Counter.component
16+
root <- runStoreT HS.initialStore HS.reduce Counter.component
1717
void $ runUI root unit body

src/Halogen/Store/UseSelector.purs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Data.Maybe (Maybe(..))
66
import Data.Tuple.Nested ((/\))
77
import Halogen.Hooks (class HookNewtype, type (<>), Hook, UseEffect, UseState)
88
import Halogen.Hooks as Hooks
9-
import Halogen.Store.Monad (class MonadStore, emitSelected)
9+
import Halogen.Store.Monad (class MonadStore, emitSelected, getStore)
1010
import Halogen.Store.Select (Selector(..))
1111

1212
foreign import data UseSelector :: Type -> Type -> Type -> Hooks.HookType
@@ -30,6 +30,8 @@ useSelector (Selector selector) = Hooks.wrap hook
3030
Hooks.useLifecycleEffect do
3131
emitter <- emitSelected (Selector selector)
3232
subscriptionId <- Hooks.subscribe $ map (Hooks.put ctxId <<< Just) emitter
33+
initialCtx <- map selector.select getStore
34+
Hooks.put ctxId $ Just initialCtx
3335
pure $ Just $ Hooks.unsubscribe subscriptionId
3436

3537
Hooks.pure ctx

0 commit comments

Comments
 (0)