github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/elm/src/SubPage/SubPage.elm (about) 1 module SubPage.SubPage exposing 2 ( Model(..) 3 , handleCallback 4 , handleDelivery 5 , handleNotFound 6 , init 7 , subscriptions 8 , tooltip 9 , update 10 , urlUpdate 11 , view 12 ) 13 14 import Application.Models exposing (Session) 15 import Build.Build as Build 16 import Build.Header.Models 17 import Build.Models 18 import Dashboard.Dashboard as Dashboard 19 import Dashboard.Models 20 import EffectTransformer exposing (ET) 21 import FlySuccess.FlySuccess as FlySuccess 22 import FlySuccess.Models 23 import HoverState 24 import Html exposing (Html) 25 import Job.Job as Job 26 import Login.Login as Login 27 import Message.Callback exposing (Callback(..)) 28 import Message.Effects exposing (Effect(..)) 29 import Message.Message exposing (Message(..)) 30 import Message.Subscription exposing (Delivery(..), Interval(..), Subscription) 31 import Message.TopLevelMessage exposing (TopLevelMessage(..)) 32 import NotFound.Model 33 import NotFound.NotFound as NotFound 34 import Pipeline.Pipeline as Pipeline 35 import Resource.Models 36 import Resource.Resource as Resource 37 import Routes 38 import Tooltip 39 import UpdateMsg exposing (UpdateMsg) 40 41 42 type Model 43 = BuildModel Build.Models.Model 44 | JobModel Job.Model 45 | ResourceModel Resource.Models.Model 46 | PipelineModel Pipeline.Model 47 | NotFoundModel NotFound.Model.Model 48 | DashboardModel Dashboard.Models.Model 49 | FlySuccessModel FlySuccess.Models.Model 50 51 52 init : Session -> Routes.Route -> ( Model, List Effect ) 53 init session route = 54 case route of 55 Routes.Build { id, highlight } -> 56 Build.init 57 { highlight = highlight 58 , pageType = Build.Header.Models.JobBuildPage id 59 , fromBuildPage = Nothing 60 } 61 |> Tuple.mapFirst BuildModel 62 63 Routes.OneOffBuild { id, highlight } -> 64 Build.init 65 { highlight = highlight 66 , pageType = Build.Header.Models.OneOffBuildPage id 67 , fromBuildPage = Nothing 68 } 69 |> Tuple.mapFirst BuildModel 70 71 Routes.Resource { id, page } -> 72 Resource.init 73 { resourceId = id 74 , paging = page 75 } 76 |> Tuple.mapFirst ResourceModel 77 78 Routes.Job { id, page } -> 79 Job.init 80 { jobId = id 81 , paging = page 82 } 83 |> Tuple.mapFirst JobModel 84 85 Routes.Pipeline { id, groups } -> 86 Pipeline.init 87 { pipelineLocator = id 88 , turbulenceImgSrc = session.turbulenceImgSrc 89 , selectedGroups = groups 90 } 91 |> Tuple.mapFirst PipelineModel 92 93 Routes.Dashboard { searchType, dashboardView } -> 94 Dashboard.init 95 { searchType = searchType 96 , dashboardView = dashboardView 97 } 98 |> Tuple.mapFirst DashboardModel 99 100 Routes.FlySuccess noop flyPort -> 101 FlySuccess.init 102 { authToken = session.authToken 103 , flyPort = flyPort 104 , noop = noop 105 } 106 |> Tuple.mapFirst FlySuccessModel 107 108 109 handleNotFound : String -> Routes.Route -> ET Model 110 handleNotFound notFound route ( model, effects ) = 111 case getUpdateMessage model of 112 UpdateMsg.NotFound -> 113 let 114 ( newModel, newEffects ) = 115 NotFound.init { notFoundImgSrc = notFound, route = route } 116 in 117 ( NotFoundModel newModel, effects ++ newEffects ) 118 119 UpdateMsg.AOK -> 120 ( model, effects ) 121 122 123 getUpdateMessage : Model -> UpdateMsg 124 getUpdateMessage model = 125 case model of 126 BuildModel mdl -> 127 Build.getUpdateMessage mdl 128 129 JobModel mdl -> 130 Job.getUpdateMessage mdl 131 132 ResourceModel mdl -> 133 Resource.getUpdateMessage mdl 134 135 PipelineModel mdl -> 136 Pipeline.getUpdateMessage mdl 137 138 _ -> 139 UpdateMsg.AOK 140 141 142 genericUpdate : 143 ET Build.Models.Model 144 -> ET Job.Model 145 -> ET Resource.Models.Model 146 -> ET Pipeline.Model 147 -> ET Dashboard.Models.Model 148 -> ET NotFound.Model.Model 149 -> ET FlySuccess.Models.Model 150 -> ET Model 151 genericUpdate fBuild fJob fRes fPipe fDash fNF fFS ( model, effects ) = 152 case model of 153 BuildModel buildModel -> 154 fBuild ( buildModel, effects ) 155 |> Tuple.mapFirst BuildModel 156 157 JobModel jobModel -> 158 fJob ( jobModel, effects ) 159 |> Tuple.mapFirst JobModel 160 161 PipelineModel pipelineModel -> 162 fPipe ( pipelineModel, effects ) 163 |> Tuple.mapFirst PipelineModel 164 165 ResourceModel resourceModel -> 166 fRes ( resourceModel, effects ) 167 |> Tuple.mapFirst ResourceModel 168 169 DashboardModel dashboardModel -> 170 fDash ( dashboardModel, effects ) 171 |> Tuple.mapFirst DashboardModel 172 173 FlySuccessModel flySuccessModel -> 174 fFS ( flySuccessModel, effects ) 175 |> Tuple.mapFirst FlySuccessModel 176 177 NotFoundModel notFoundModel -> 178 fNF ( notFoundModel, effects ) 179 |> Tuple.mapFirst NotFoundModel 180 181 182 handleCallback : Callback -> Session -> ET Model 183 handleCallback callback session = 184 genericUpdate 185 (Build.handleCallback callback) 186 (Job.handleCallback callback) 187 (Resource.handleCallback callback session) 188 (Pipeline.handleCallback callback) 189 (Dashboard.handleCallback callback) 190 identity 191 identity 192 >> (case callback of 193 LoggedOut (Ok ()) -> 194 genericUpdate 195 handleLoggedOut 196 handleLoggedOut 197 handleLoggedOut 198 handleLoggedOut 199 handleLoggedOut 200 handleLoggedOut 201 handleLoggedOut 202 203 _ -> 204 identity 205 ) 206 207 208 handleLoggedOut : ET { a | isUserMenuExpanded : Bool } 209 handleLoggedOut ( m, effs ) = 210 ( { m | isUserMenuExpanded = False } 211 , effs 212 ++ [ NavigateTo <| 213 Routes.toString <| 214 Routes.Dashboard 215 { searchType = Routes.Normal "" 216 , dashboardView = Routes.ViewNonArchivedPipelines 217 } 218 ] 219 ) 220 221 222 handleDelivery : { a | hovered : HoverState.HoverState } -> Delivery -> ET Model 223 handleDelivery session delivery = 224 genericUpdate 225 (Build.handleDelivery session delivery) 226 (Job.handleDelivery delivery) 227 (Resource.handleDelivery session delivery) 228 (Pipeline.handleDelivery delivery) 229 (Dashboard.handleDelivery delivery) 230 (NotFound.handleDelivery delivery) 231 (FlySuccess.handleDelivery delivery) 232 233 234 update : Session -> Message -> ET Model 235 update session msg = 236 genericUpdate 237 (Login.update msg >> Build.update msg) 238 (Login.update msg >> Job.update msg) 239 (Login.update msg >> Resource.update msg) 240 (Login.update msg >> Pipeline.update msg) 241 (Login.update msg >> Dashboard.update session msg) 242 (Login.update msg) 243 (Login.update msg >> FlySuccess.update msg) 244 >> (case msg of 245 GoToRoute route -> 246 handleGoToRoute route 247 248 _ -> 249 identity 250 ) 251 252 253 handleGoToRoute : Routes.Route -> ET a 254 handleGoToRoute route ( a, effs ) = 255 ( a, effs ++ [ NavigateTo <| Routes.toString route ] ) 256 257 258 urlUpdate : Routes.Transition -> ET Model 259 urlUpdate routes = 260 genericUpdate 261 (case routes.to of 262 Routes.Build { id, highlight } -> 263 Build.changeToBuild 264 { pageType = Build.Header.Models.JobBuildPage id 265 , highlight = highlight 266 , fromBuildPage = 267 case routes.from of 268 Routes.Build params -> 269 Just <| Build.Header.Models.JobBuildPage params.id 270 271 _ -> 272 Nothing 273 } 274 275 Routes.OneOffBuild { id, highlight } -> 276 Build.changeToBuild 277 { pageType = Build.Header.Models.OneOffBuildPage id 278 , highlight = highlight 279 , fromBuildPage = 280 case routes.from of 281 Routes.OneOffBuild params -> 282 Just <| Build.Header.Models.OneOffBuildPage params.id 283 284 _ -> 285 Nothing 286 } 287 288 _ -> 289 identity 290 ) 291 (case routes.to of 292 Routes.Job { id, page } -> 293 Job.changeToJob { jobId = id, paging = page } 294 295 _ -> 296 identity 297 ) 298 (case routes.to of 299 Routes.Resource { id, page } -> 300 Resource.changeToResource { resourceId = id, paging = page } 301 302 _ -> 303 identity 304 ) 305 (case routes.to of 306 Routes.Pipeline { id, groups } -> 307 Pipeline.changeToPipelineAndGroups 308 { pipelineLocator = id 309 , selectedGroups = groups 310 } 311 312 _ -> 313 identity 314 ) 315 (case routes.to of 316 Routes.Dashboard { searchType, dashboardView } -> 317 Tuple.mapFirst 318 (\dm -> 319 { dm 320 | highDensity = searchType == Routes.HighDensity 321 , dashboardView = dashboardView 322 } 323 ) 324 325 _ -> 326 identity 327 ) 328 identity 329 identity 330 331 332 view : Session -> Model -> ( String, Html Message ) 333 view ({ userState } as session) mdl = 334 case mdl of 335 BuildModel model -> 336 ( Build.documentTitle model 337 , Build.view session model 338 ) 339 340 JobModel model -> 341 ( Job.documentTitle model 342 , Job.view session model 343 ) 344 345 PipelineModel model -> 346 ( Pipeline.documentTitle model 347 , Pipeline.view session model 348 ) 349 350 ResourceModel model -> 351 ( Resource.documentTitle model 352 , Resource.view session model 353 ) 354 355 DashboardModel model -> 356 ( Dashboard.documentTitle 357 , Dashboard.view session model 358 ) 359 360 NotFoundModel model -> 361 ( NotFound.documentTitle 362 , NotFound.view session model 363 ) 364 365 FlySuccessModel model -> 366 ( FlySuccess.documentTitle 367 , FlySuccess.view userState model 368 ) 369 370 371 tooltip : Model -> Session -> Maybe Tooltip.Tooltip 372 tooltip mdl = 373 case mdl of 374 BuildModel model -> 375 Build.tooltip model 376 377 JobModel model -> 378 Job.tooltip model 379 380 PipelineModel model -> 381 Pipeline.tooltip model 382 383 ResourceModel model -> 384 Resource.tooltip model 385 386 DashboardModel model -> 387 Dashboard.tooltip model 388 389 NotFoundModel model -> 390 NotFound.tooltip model 391 392 FlySuccessModel model -> 393 FlySuccess.tooltip model 394 395 396 subscriptions : Model -> List Subscription 397 subscriptions mdl = 398 case mdl of 399 BuildModel model -> 400 Build.subscriptions model 401 402 JobModel _ -> 403 Job.subscriptions 404 405 PipelineModel _ -> 406 Pipeline.subscriptions 407 408 ResourceModel model -> 409 Resource.subscriptions model 410 411 DashboardModel _ -> 412 Dashboard.subscriptions 413 414 NotFoundModel _ -> 415 NotFound.subscriptions 416 417 FlySuccessModel _ -> 418 FlySuccess.subscriptions