@@ -12,6 +12,7 @@ import Control.Coroutine as Coroutine
1212import Data.Maybe (Maybe(..))
1313import Data.Newtype (wrap)
1414import Effect (Effect)
15+import Effect.Aff (launchAff_)
1516import Halogen as H
1617import Halogen.Aff as HA
1718import Halogen.VDom.Driver (runUI)
@@ -21,10 +22,12 @@ import Web.DOM.Element as Element
2122import Web.DOM.Node as Node
2223import Web.DOM.ParentNode as ParentNode
2324import Web.DOM.Text as Text
25+import Web.Event.EventTarget (addEventListener, eventListener)
2426import Web.HTML as HTML
2527import Web.HTML.HTMLDocument as HTMLDocument
2628import Web.HTML.HTMLElement (fromElement)
2729import Web.HTML.Window as Window
30+import Web.HTML.Event.HashChangeEvent.EventTypes (hashchange)
2831
2932main :: Effect Unit
3033main = do
@@ -57,7 +60,18 @@ main = do
5760
5861 -- We need to read the URI hash only when both components are initialized and
5962 -- the search field is subscribed to the main component.
60− sfio.query (SearchField.ReadURIHash unit)
63+ void $ sfio.query $ H.tell SearchField.ReadURIHash
64+
65+ -- Subscribe to URI hash updates
66+ H.liftEffect do
67+
68+ listener <-
69+ eventListener \event ->
70+ launchAff_ do
71+ sfio.query $ H.tell SearchField.ReadURIHash
72+
73+ addEventListener hashchange listener true (Window.toEventTarget win)
74+
6175
6276insertStyle :: Document.Document -> Effect Unit
6377insertStyle doc = do