github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/elm/src/Main.elm (about) 1 module Main exposing (main) 2 3 import Application.Application as Application 4 import Browser 5 import Browser.Navigation as Navigation 6 import Concourse 7 import Message.Effects as Effects 8 import Message.Subscription as Subscription 9 import Message.TopLevelMessage as Msgs 10 import Url 11 12 13 type alias TopLevelModel = 14 { key : Navigation.Key 15 , model : Application.Model 16 } 17 18 19 init : 20 Application.Flags 21 -> Url.Url 22 -> Navigation.Key 23 -> ( TopLevelModel, Cmd Msgs.TopLevelMessage ) 24 init flags url key = 25 let 26 ( model, effects ) = 27 Application.init flags url 28 in 29 ( { key = key, model = model }, effects ) 30 |> effectsToCmd 31 32 33 update : 34 Msgs.TopLevelMessage 35 -> TopLevelModel 36 -> ( TopLevelModel, Cmd Msgs.TopLevelMessage ) 37 update msg model = 38 let 39 ( appModel, effects ) = 40 Application.update msg model.model 41 in 42 ( { model | model = appModel }, effects ) 43 |> effectsToCmd 44 45 46 main : Program Application.Flags TopLevelModel Msgs.TopLevelMessage 47 main = 48 Browser.application 49 { init = init 50 , update = update 51 , view = view 52 , subscriptions = 53 .model 54 >> Application.subscriptions 55 >> subscriptionsToSub 56 , onUrlChange = Application.locationMsg 57 , onUrlRequest = Subscription.UrlRequest >> Msgs.DeliveryReceived 58 } 59 60 61 view : TopLevelModel -> Browser.Document Msgs.TopLevelMessage 62 view model = 63 Application.view model.model 64 65 66 effectsToCmd : 67 ( TopLevelModel, List Effects.Effect ) 68 -> ( TopLevelModel, Cmd Msgs.TopLevelMessage ) 69 effectsToCmd ( model, effs ) = 70 ( model 71 , List.map (effectToCmd model.model.session.csrfToken model.key) effs |> Cmd.batch 72 ) 73 74 75 76 -- there's a case to be made that this function should actually 77 -- accept a Session 78 79 80 effectToCmd : 81 Concourse.CSRFToken 82 -> Navigation.Key 83 -> Effects.Effect 84 -> Cmd Msgs.TopLevelMessage 85 effectToCmd csrfToken key eff = 86 Effects.runEffect eff key csrfToken |> Cmd.map Msgs.Callback 87 88 89 subscriptionsToSub : List Subscription.Subscription -> Sub Msgs.TopLevelMessage 90 subscriptionsToSub = 91 List.map Subscription.runSubscription 92 >> Sub.batch 93 >> Sub.map Msgs.DeliveryReceived