works, but maybe too clunky

This commit is contained in:
Ryan Haskell-Glatz 2019-10-16 19:17:55 -05:00
parent d72b74d20e
commit 105d3bcc43
4 changed files with 98 additions and 17 deletions

View File

@ -58,7 +58,7 @@ notFound =
}
users_slug : Application.Recipe Users_Slug.Model Users_Slug.Msg Model Msg
users_slug : Application.RecipeWithParams Users_Slug.Model Users_Slug.Msg Model Msg String
users_slug =
Users_Slug.page
{ toModel = Users_SlugModel
@ -81,8 +81,8 @@ init route =
Route.NotFound ->
notFound.init
Route.Users_Slug _ ->
users_slug.init
Route.Users_Slug slug ->
users_slug.init slug
update : Msg -> Model -> ( Model, Cmd Msg )

View File

@ -4,17 +4,18 @@ import Application
import Html exposing (..)
type Model
= Model
type alias Model =
{ slug : String
}
type Msg
= Msg
page : Application.Page Model Msg a b
page : Application.PageWithParams Model Msg a b String
page =
Application.element
Application.elementWithParams
{ init = init
, update = update
, view = view
@ -22,9 +23,9 @@ page =
}
init : ( Model, Cmd Msg )
init =
( Model, Cmd.none )
init : String -> ( Model, Cmd Msg )
init slug =
( Model slug, Cmd.none )
update : Msg -> Model -> ( Model, Cmd Msg )
@ -41,4 +42,4 @@ subscriptions model =
view : Model -> Html Msg
view model =
h1 [] [ text "New Element" ]
h1 [] [ text ("New Element for: " ++ model.slug) ]

View File

@ -1,16 +1,21 @@
module Application exposing
( Application, create
, Page, Recipe, Bundle, keep
, Page, Recipe
, PageWithParams, RecipeWithParams
, Bundle, keep
, Static, static
, Sandbox, sandbox
, Element, element
, ElementWithParams, elementWithParams
)
{-|
@docs Application, create
@docs Page, Recipe, Bundle, keep
@docs Page, Recipe
@docs PageWithParams, RecipeWithParams
@docs Bundle, keep
@docs Static, static
@ -18,6 +23,8 @@ module Application exposing
@docs Element, element
@docs ElementWithParams, elementWithParams
-}
import Browser
@ -196,6 +203,14 @@ type alias Recipe pageModel pageMsg model msg =
Page.Recipe pageModel pageMsg model msg
type alias PageWithParams pageModel pageMsg model msg arg =
Page.PageWithParams pageModel pageMsg model msg arg
type alias RecipeWithParams pageModel pageMsg model msg arg =
Page.RecipeWithParams pageModel pageMsg model msg arg
type alias Bundle msg =
Page.Bundle msg
@ -236,3 +251,14 @@ element :
-> Page pageModel pageMsg model msg
element =
Page.element
type alias ElementWithParams pageModel pageMsg arg =
Page.ElementWithParams pageModel pageMsg arg
elementWithParams :
ElementWithParams pageModel pageMsg arg
-> PageWithParams pageModel pageMsg model msg arg
elementWithParams =
Page.elementWithParams

View File

@ -1,13 +1,20 @@
module Internals.Page exposing
( Page, Recipe, Bundle
( Page, Recipe
, PageWithParams, RecipeWithParams
, Bundle
, Static, static
, Sandbox, sandbox
, Element, element
, ElementWithParams, elementWithParams
)
{-|
@docs Page, Recipe, Bundle
@docs Page, Recipe
@docs PageWithParams, RecipeWithParams
@docs Bundle
@docs Static, static
@ -15,6 +22,8 @@ module Internals.Page exposing
@docs Element, element
@docs ElementWithParams, elementWithParams
-}
import Html exposing (Html)
@ -93,7 +102,7 @@ sandbox page { toModel, toMsg } =
-- SANDBOX
-- ELEMENT
type alias Element pageModel pageMsg =
@ -108,7 +117,52 @@ element :
Element pageModel pageMsg
-> Page pageModel pageMsg model msg
element page { toModel, toMsg } =
{ init = page.init |> Tuple.mapBoth toModel (Cmd.map toMsg)
{ init =
page.init |> Tuple.mapBoth toModel (Cmd.map toMsg)
, update =
\msg model ->
page.update msg model
|> Tuple.mapBoth toModel (Cmd.map toMsg)
, bundle =
\model ->
{ view = page.view model |> Html.map toMsg
, subscriptions = Sub.none
}
}
-- ELEMENT WITH PARAMS
type alias ElementWithParams pageModel pageMsg arg =
{ init : arg -> ( pageModel, Cmd pageMsg )
, update : pageMsg -> pageModel -> ( pageModel, Cmd pageMsg )
, view : pageModel -> Html pageMsg
, subscriptions : pageModel -> Sub pageMsg
}
type alias RecipeWithParams pageModel pageMsg model msg arg =
{ init : arg -> ( model, Cmd msg )
, update : pageMsg -> pageModel -> ( model, Cmd msg )
, bundle : pageModel -> Bundle msg
}
type alias PageWithParams pageModel pageMsg model msg arg =
{ toModel : pageModel -> model
, toMsg : pageMsg -> msg
}
-> RecipeWithParams pageModel pageMsg model msg arg
elementWithParams :
ElementWithParams pageModel pageMsg arg
-> PageWithParams pageModel pageMsg model msg arg
elementWithParams page { toModel, toMsg } =
{ init =
page.init >> Tuple.mapBoth toModel (Cmd.map toMsg)
, update =
\msg model ->
page.update msg model