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 )