haskell-halogen-core-0.9.0: src/Halogen/Component/Debounced.hs
-- | Component capable of debouncing actions
module Halogen.Component.Debounced where
import Control.Monad.State.Delayed.Delayer
import Control.Monad.State.Delayed.Trans
import Data.NT
import Data.Time
import HPrelude
import Halogen.Component
import Halogen.Query.HalogenM
import System.IO.Unsafe (unsafePerformIO)
unsafeMkDebouncedComponent
:: forall state query action slots input output m
. NominalDiffTime
-> ComponentSpec' state query action slots input output m (DelayedStateT state (HalogenM state action slots output m))
-> Component query input output m
unsafeMkDebouncedComponent timeout cs = do
mkDebouncedComponent' (unsafePerformIO $ mkEmptyDelayer timeout) cs
mkDebouncedComponent'
:: forall state query action slots input output m
. Delayer state
-> ComponentSpec' state query action slots input output m (DelayedStateT state (HalogenM state action slots output m))
-> Component query input output m
mkDebouncedComponent' delayer ComponentSpec {..} =
mkComponent
$ ComponentSpec
{ initialState = initialState
, render = render
, eval = NT $ runDelayedStateT delayer . runNT eval
}