provide page context with route

This commit is contained in:
Ryan Haskell-Glatz 2019-11-19 19:54:13 -06:00
parent 459eb7a75d
commit 68e87b0050
5 changed files with 43 additions and 41 deletions

View File

@ -1,7 +1,7 @@
module Utils.Spa exposing
( Bundle
, LayoutContext
, Init
, LayoutContext
, Page
, PageContext
, Recipe
@ -26,11 +26,11 @@ type alias Recipe params model msg layoutModel layoutMsg appMsg =
type alias Init model msg =
App.Types.Init model msg Global.Model Global.Msg
App.Types.Init Route model msg Global.Model Global.Msg
type alias Update model msg =
App.Types.Update model msg Global.Model Global.Msg
App.Types.Update Route model msg Global.Model Global.Msg
type alias Bundle msg appMsg =
@ -50,7 +50,7 @@ type alias LayoutContext msg =
type alias PageContext =
App.Types.PageContext Global.Model
App.Types.PageContext Route Global.Model
layout :

View File

@ -241,7 +241,7 @@ init :
{ navigate : route -> Cmd (Msg globalMsg layoutMsg) }
-> flags
-> ( globalModel, Cmd globalMsg, Cmd (Msg globalMsg layoutMsg) )
, pages : route -> Page.Init layoutModel layoutMsg globalModel globalMsg
, pages : route -> Page.Init route layoutModel layoutMsg globalModel globalMsg
}
}
-> flags
@ -263,6 +263,7 @@ init config flags url key =
config.init.pages route
{ global = globalModel
, queryParameters = queryParameters url
, route = route
}
in
( { flags = flags
@ -307,7 +308,7 @@ update :
, routes : Routes route a
, transitions : List ( Pattern, Transition ui_msg )
}
, init : route -> Page.Init layoutModel layoutMsg globalModel globalMsg
, init : route -> Page.Init route layoutModel layoutMsg globalModel globalMsg
, update :
{ global :
{ navigate : route -> Cmd (Msg globalMsg layoutMsg) }
@ -317,7 +318,7 @@ update :
, pages :
layoutMsg
-> layoutModel
-> Page.Update layoutModel layoutMsg globalModel globalMsg
-> Page.Update route layoutModel layoutMsg globalModel globalMsg
}
}
-> Msg globalMsg layoutMsg
@ -342,6 +343,7 @@ update config msg model =
config.init route
{ global = model.global
, queryParameters = queryParameters model.url
, route = route
}
)
|> (\( pageModel, pageCmd, globalCmd ) ->
@ -418,6 +420,7 @@ update config msg model =
model.page
{ global = model.global
, queryParameters = queryParameters model.url
, route = config.routing.fromUrl model.url
}
|> (\( page, pageCmd, globalCmd ) ->
( { model | page = page }
@ -459,9 +462,9 @@ subscriptions config model =
, map = config.map
, transitioningPattern = model.transitioningPattern
, visibility = model.visibilities.page
, route = config.fromUrl model.url
}
{ global = model.global
, route = config.fromUrl model.url
, queryParameters = queryParameters model.url
}
).subscriptions
@ -494,9 +497,9 @@ view config model =
, map = config.map
, transitioningPattern = model.transitioningPattern
, visibility = model.visibilities.page
, route = config.fromUrl model.url
}
{ global = model.global
, route = config.fromUrl model.url
, queryParameters = queryParameters model.url
}
in

View File

@ -124,8 +124,8 @@ import Internals.Transition as Transition exposing (Transition)
import Internals.Utils as Utils
type alias PageContext globalModel =
Internals.Page.PageContext globalModel
type alias PageContext route globalModel =
Internals.Page.PageContext route globalModel
type alias Page route pageParams pageModel pageMsg ui_pageMsg layoutModel layoutMsg ui_layoutMsg globalModel globalMsg msg ui_msg =
@ -193,7 +193,7 @@ match up with it's `model`, we use `keep` to leave the page as-is.
-}
keep :
layoutModel
-> Update layoutModel layoutMsg globalModel globalMsg
-> Update route layoutModel layoutMsg globalModel globalMsg
keep model =
always ( model, Cmd.none, Cmd.none )
@ -220,7 +220,7 @@ keep model =
-}
static :
{ title : { global : globalModel } -> String
, view : PageContext globalModel -> ui_pageMsg
, view : PageContext route globalModel -> ui_pageMsg
}
-> Page route pageParams () Never ui_pageMsg layoutModel layoutMsg ui_layoutMsg globalModel globalMsg msg ui_msg
static page =
@ -297,9 +297,9 @@ static page =
-}
sandbox :
{ title : { global : globalModel, model : pageModel } -> String
, init : PageContext globalModel -> pageParams -> pageModel
, update : PageContext globalModel -> pageMsg -> pageModel -> pageModel
, view : PageContext globalModel -> pageModel -> ui_pageMsg
, init : PageContext route globalModel -> pageParams -> pageModel
, update : PageContext route globalModel -> pageMsg -> pageModel -> pageModel
, view : PageContext route globalModel -> pageModel -> ui_pageMsg
}
-> Page route pageParams pageModel pageMsg ui_pageMsg layoutModel layoutMsg ui_layoutMsg globalModel globalMsg msg ui_msg
sandbox page =
@ -376,10 +376,10 @@ sandbox page =
-}
element :
{ title : { global : globalModel, model : pageModel } -> String
, init : PageContext globalModel -> pageParams -> ( pageModel, Cmd pageMsg )
, update : PageContext globalModel -> pageMsg -> pageModel -> ( pageModel, Cmd pageMsg )
, view : PageContext globalModel -> pageModel -> ui_pageMsg
, subscriptions : PageContext globalModel -> pageModel -> Sub pageMsg
, init : PageContext route globalModel -> pageParams -> ( pageModel, Cmd pageMsg )
, update : PageContext route globalModel -> pageMsg -> pageModel -> ( pageModel, Cmd pageMsg )
, view : PageContext route globalModel -> pageModel -> ui_pageMsg
, subscriptions : PageContext route globalModel -> pageModel -> Sub pageMsg
}
-> Page route pageParams pageModel pageMsg ui_pageMsg layoutModel layoutMsg ui_layoutMsg globalModel globalMsg msg ui_msg
element page =
@ -456,10 +456,10 @@ element page =
-}
component :
{ title : { global : globalModel, model : pageModel } -> String
, init : PageContext globalModel -> pageParams -> ( pageModel, Cmd pageMsg, Cmd globalMsg )
, update : PageContext globalModel -> pageMsg -> pageModel -> ( pageModel, Cmd pageMsg, Cmd globalMsg )
, view : PageContext globalModel -> pageModel -> ui_pageMsg
, subscriptions : PageContext globalModel -> pageModel -> Sub pageMsg
, init : PageContext route globalModel -> pageParams -> ( pageModel, Cmd pageMsg, Cmd globalMsg )
, update : PageContext route globalModel -> pageMsg -> pageModel -> ( pageModel, Cmd pageMsg, Cmd globalMsg )
, view : PageContext route globalModel -> pageModel -> ui_pageMsg
, subscriptions : PageContext route globalModel -> pageModel -> Sub pageMsg
}
-> Page route pageParams pageModel pageMsg ui_pageMsg layoutModel layoutMsg ui_layoutMsg globalModel globalMsg msg ui_msg
component page =
@ -549,7 +549,7 @@ layout map options =
{ page = page
, global = context.global
, fromGlobalMsg = private.fromGlobalMsg
, route = private.route
, route = context.route
}
myLayoutsVisibility : Transition.Visibility
@ -569,7 +569,6 @@ layout map options =
, map = map
, transitioningPattern = private.transitioningPattern
, visibility = private.visibility
, route = private.route
}
context
in

View File

@ -163,8 +163,8 @@ type alias Recipe route params pageModel pageMsg layoutModel layoutMsg ui_layout
-- ...
-}
type alias Init layoutModel layoutMsg globalModel globalMsg =
Page.Init layoutModel layoutMsg globalModel globalMsg
type alias Init route layoutModel layoutMsg globalModel globalMsg =
Page.Init route layoutModel layoutMsg globalModel globalMsg
{-|
@ -190,8 +190,8 @@ type alias Init layoutModel layoutMsg globalModel globalMsg =
-- ...
-}
type alias Update layoutModel layoutMsg globalModel globalMsg =
Page.Update layoutModel layoutMsg globalModel globalMsg
type alias Update route layoutModel layoutMsg globalModel globalMsg =
Page.Update route layoutModel layoutMsg globalModel globalMsg
{-|
@ -276,8 +276,8 @@ type alias Layout route pageParams pageModel pageMsg ui_pageMsg globalModel glob
{-| TODO: PageContext docs
-}
type alias PageContext globalModel =
Page.PageContext globalModel
type alias PageContext route globalModel =
Page.PageContext route globalModel
{-| TODO: LayoutContext docs

View File

@ -16,8 +16,9 @@ import Internals.Pattern exposing (Pattern)
import Internals.Transition as Transition exposing (Transition)
type alias PageContext globalModel =
type alias PageContext route globalModel =
{ global : globalModel
, route : route
, queryParameters : Dict String String
}
@ -35,8 +36,8 @@ type alias Page_ route pageParams pageModel pageMsg ui_pageMsg layoutModel layou
type alias Recipe route pageParams pageModel pageMsg layoutModel layoutMsg ui_layoutMsg globalModel globalMsg msg ui_msg =
{ init : pageParams -> Init layoutModel layoutMsg globalModel globalMsg
, update : pageMsg -> pageModel -> Update layoutModel layoutMsg globalModel globalMsg
{ init : pageParams -> Init route layoutModel layoutMsg globalModel globalMsg
, update : pageMsg -> pageModel -> Update route layoutModel layoutMsg globalModel globalMsg
, bundle : pageModel -> Bundle route layoutMsg ui_layoutMsg globalModel globalMsg msg ui_msg
}
@ -64,13 +65,13 @@ upgrade map config =
}
type alias Init layoutModel layoutMsg globalModel globalMsg =
PageContext globalModel
type alias Init route layoutModel layoutMsg globalModel globalMsg =
PageContext route globalModel
-> ( layoutModel, Cmd layoutMsg, Cmd globalMsg )
type alias Update layoutModel layoutMsg globalModel globalMsg =
PageContext globalModel
type alias Update route layoutModel layoutMsg globalModel globalMsg =
PageContext route globalModel
-> ( layoutModel, Cmd layoutMsg, Cmd globalMsg )
@ -78,11 +79,10 @@ type alias Bundle route layoutMsg ui_layoutMsg globalModel globalMsg msg ui_msg
{ fromGlobalMsg : globalMsg -> msg
, fromPageMsg : layoutMsg -> msg
, map : (layoutMsg -> msg) -> ui_layoutMsg -> ui_msg
, route : route
, visibility : Transition.Visibility
, transitioningPattern : Pattern
}
-> PageContext globalModel
-> PageContext route globalModel
->
{ title : String
, view : ui_msg