@@ -31,6 +31,7 @@ import qualified Functora.Web as Web
31
31
import Language.Javascript.JSaddle ((!) , (!!) )
32
32
import qualified Language.Javascript.JSaddle as JS
33
33
import qualified Miso
34
+ import qualified Network.URI as URI (parseURI )
34
35
import qualified Text.URI as URI
35
36
36
37
#ifdef wasi_HOST_OS
@@ -199,10 +200,12 @@ updateModel (ChanUpdate prevSt) _ = do
199
200
consoleLog e
200
201
pure $ prevSt & # modelLoading .~ False
201
202
)
202
- $ foldlM (\ acc updater -> evalModel $ updater acc) prevSt actions
203
+ . evalModel
204
+ $ foldl (&) prevSt actions
203
205
uri <- URI. mkURI $ shareLink nextSt
204
206
Storage. insertStorage (" favorite-" <> vsn) (nextSt ^. # modelFavMap)
205
207
Storage. insertStorage (" current-" <> vsn) uri
208
+ syncUri uri
206
209
if nextSt ^. # modelLoading
207
210
then do
208
211
void
@@ -395,6 +398,19 @@ evalModel raw = do
395
398
& # modelOnlineAt
396
399
.~ ct
397
400
401
+ syncUri :: URI -> JSM ()
402
+ syncUri uri = do
403
+ textUri <- fmap Prelude. inspect getCurrentURI
404
+ prevUri <- URI. mkURI textUri
405
+ let nextUri = prevUri {URI. uriQuery = URI. uriQuery uri}
406
+ when (nextUri /= prevUri)
407
+ $ pushURI
408
+ =<< ( maybe (throwString $ " Bad URI " <> textUri) pure
409
+ . URI. parseURI
410
+ . from @ Prelude. Text @ Prelude. String
411
+ $ URI. render nextUri
412
+ )
413
+
398
414
getBaseConverterMoneyLens :: TopOrBottom -> ALens' Model (Money Unique )
399
415
getBaseConverterMoneyLens = \ case
400
416
Top -> # modelState . # stDoc . # stDocTopMoney
0 commit comments