github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/elm/src/Dashboard/RequestBuffer.elm (about)

     1  module Dashboard.RequestBuffer exposing (Buffer(..), handleCallback, handleDelivery)
     2  
     3  import EffectTransformer exposing (ET)
     4  import Message.Callback exposing (Callback)
     5  import Message.Effects exposing (Effect)
     6  import Message.Subscription exposing (Delivery(..), Interval(..))
     7  
     8  
     9  type Buffer a
    10      = Buffer Effect (Callback -> Bool) (a -> Bool) { get : a -> Bool, set : Bool -> a -> a }
    11  
    12  
    13  handleDelivery : Delivery -> List (Buffer a) -> ET a
    14  handleDelivery delivery =
    15      List.map (handleDeliverySingle delivery) >> List.foldl (>>) identity
    16  
    17  
    18  handleDeliverySingle : Delivery -> Buffer a -> ET a
    19  handleDeliverySingle delivery (Buffer effect _ isPaused shouldFire) ( model, effects ) =
    20      case delivery of
    21          ClockTicked FiveSeconds _ ->
    22              ( if isPaused model then
    23                  shouldFire.set True model
    24  
    25                else
    26                  shouldFire.set False model
    27              , if shouldFire.get model && not (isPaused model) then
    28                  effect :: effects
    29  
    30                else
    31                  effects
    32              )
    33  
    34          _ ->
    35              ( model, effects )
    36  
    37  
    38  handleCallback : Callback -> List (Buffer a) -> ET a
    39  handleCallback callback =
    40      List.map (handleCallbackSingle callback) >> List.foldl (>>) identity
    41  
    42  
    43  handleCallbackSingle : Callback -> Buffer a -> ET a
    44  handleCallbackSingle callback (Buffer _ callbackMatcher _ shouldFire) ( model, effects ) =
    45      ( if callbackMatcher callback then
    46          shouldFire.set True model
    47  
    48        else
    49          model
    50      , effects
    51      )