aboutsummaryrefslogtreecommitdiff
path: root/client/src/Util/WaitFor.hs
blob: 46882aa862bb94a195dce15ec8302a0851a7355f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
module Util.WaitFor
  ( waitFor
  ) where

import           Data.Time  (NominalDiffTime)
import           Reflex.Dom (Dynamic, Event, MonadWidget)
import qualified Reflex.Dom as R

waitFor
  :: forall t m a b. MonadWidget t m
  => (Event t a -> m (Event t b))
  -> Event t a
  -> m (Event t b, Event t Bool)
waitFor op input = do
  result <- op input >>= R.debounce (0.2 :: NominalDiffTime)
  let waiting = R.leftmost [ const True <$> input , const False <$> result ]
  return (result, waiting)