[loader] fix for double-loading in useLoaderBox

This was a tricky issue, where path' was watched in two places, which
triggered double fetch of ngrams table.
parent b1406873
......@@ -145,19 +145,28 @@ type UseLoaderBox path state =
useLoaderBox
:: forall path st
. Eq path
=> Show path
=> Eq st
=> Record (UseLoaderBox path st)
-> R.Hooks R.Element
useLoaderBox { errorHandler, herePrefix, loader: loader', path, render } = do
{ errors } <- Store.use
state <- T.useBox Nothing
path' <- T.useLive T.unequal path
useLoader
{ errorHandler
, herePrefix
, loader: loader'
, path: path'
, render
}
R.useEffect' $ do
liftEffect $ T.write_ Nothing state
R2.affEffect "useLoaderBox" $ do
result <- loader' path'
case result of
Left err -> liftEffect $ do
T.modify_ (A.cons $ FRESTError { error: err }) errors
case errorHandler of
Nothing -> logRESTError herePrefix err
Just eh -> eh err
Right val -> liftEffect $ T.write_ (Just val) state
pure $ loader { render, state } []
newtype HashedResponse a = HashedResponse { hash :: Hash, value :: a }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment