Flesh out part10
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
module Main exposing (..)
|
||||
|
||||
import Pages.Home
|
||||
import Pages.Repository
|
||||
import Page.Home
|
||||
import Page.Repository
|
||||
import Navigation
|
||||
import Page exposing (Page(..))
|
||||
import Tuple2
|
||||
@@ -11,13 +11,14 @@ import Html.App as Html
|
||||
|
||||
|
||||
type Model
|
||||
= Home Pages.Home.Model
|
||||
| Repository Pages.Repository.Model
|
||||
= Home Page.Home.Model
|
||||
| Repository Page.Repository.Model
|
||||
| NotFound
|
||||
|
||||
|
||||
type Msg
|
||||
= HomeMsg Pages.Home.Msg
|
||||
| RepositoryMsg Pages.Repository.Msg
|
||||
= HomeMsg Page.Home.Msg
|
||||
| RepositoryMsg Page.Repository.Msg
|
||||
|
||||
|
||||
main : Program Never
|
||||
@@ -35,17 +36,37 @@ subscriptions : Model -> Sub Msg
|
||||
subscriptions model =
|
||||
case model of
|
||||
Home pageModel ->
|
||||
Pages.Home.subscriptions pageModel
|
||||
-- TODO use Sub.map to translate from Page.Home.subscriptions
|
||||
Page.Home.subscriptions pageModel
|
||||
|> Sub.map HomeMsg
|
||||
|
||||
Repository pageModel ->
|
||||
-- Repository has no subscriptions, so there's nothing to translate!
|
||||
Sub.none
|
||||
|
||||
NotFound ->
|
||||
-- NotFound has no subscriptions, so there's nothing to translate!
|
||||
Sub.none
|
||||
|
||||
|
||||
init : Result String Page -> ( Model, Cmd Msg )
|
||||
init result =
|
||||
Home (fst Pages.Home.init)
|
||||
|> urlUpdate result
|
||||
case result of
|
||||
Ok (Page.Home) ->
|
||||
-- TODO use Html.map to translate from Page.Home.view
|
||||
Page.Home.init
|
||||
|> Tuple2.mapEach Home (Cmd.map HomeMsg)
|
||||
|
||||
Ok (Page.Repository repoOwner repoName) ->
|
||||
-- TODO use Html.map to translate from Page.Repository.view
|
||||
Page.Repository.init repoOwner repoName
|
||||
|> Tuple2.mapEach Repository (Cmd.map RepositoryMsg)
|
||||
|
||||
Ok (Page.NotFound) ->
|
||||
( NotFound, Cmd.none )
|
||||
|
||||
Err err ->
|
||||
( NotFound, Cmd.none )
|
||||
|
||||
|
||||
view : Model -> Html Msg
|
||||
@@ -53,13 +74,18 @@ view model =
|
||||
withHeader <|
|
||||
case model of
|
||||
Home pageModel ->
|
||||
Pages.Home.view pageModel
|
||||
-- TODO use Html.map to translate from Page.Home.view
|
||||
Page.Home.view pageModel
|
||||
|> Html.map HomeMsg
|
||||
|
||||
Repository pageModel ->
|
||||
Pages.Repository.view pageModel
|
||||
-- TODO use Html.map to translate from Page.Repository.view
|
||||
Page.Repository.view pageModel
|
||||
|> Html.map RepositoryMsg
|
||||
|
||||
NotFound ->
|
||||
h1 [] [ text "Page Not Found" ]
|
||||
|
||||
|
||||
withHeader : Html msg -> Html msg
|
||||
withHeader innerContent =
|
||||
@@ -76,14 +102,20 @@ update : Msg -> Model -> ( Model, Cmd Msg )
|
||||
update msg model =
|
||||
case ( msg, model ) of
|
||||
( HomeMsg pageMsg, Home pageModel ) ->
|
||||
Pages.Home.update pageMsg pageModel
|
||||
-- TODO use Tuple2.mapEach and (Cmd.map HomeMsg)
|
||||
-- to translate from Page.Home.update
|
||||
--
|
||||
-- mapEach : (a -> newA) -> (b -> newB) -> ( a, b ) -> ( newA, newB )
|
||||
Page.Home.update pageMsg pageModel
|
||||
|> Tuple2.mapEach Home (Cmd.map HomeMsg)
|
||||
|
||||
( RepositoryMsg pageMsg, Repository pageModel ) ->
|
||||
Pages.Repository.update pageMsg pageModel
|
||||
-- TODO use Tuple2.mapEach and (Cmd.map RepositoryMsg)
|
||||
-- to translate from Page.Repository.update
|
||||
Page.Repository.update pageMsg pageModel
|
||||
|> Tuple2.mapEach Repository (Cmd.map RepositoryMsg)
|
||||
|
||||
( _, _ ) ->
|
||||
_ ->
|
||||
( model, Cmd.none )
|
||||
|
||||
|
||||
@@ -91,15 +123,23 @@ urlUpdate : Result String Page -> Model -> ( Model, Cmd Msg )
|
||||
urlUpdate result model =
|
||||
case result of
|
||||
Ok (Page.Home) ->
|
||||
Pages.Home.init
|
||||
-- TODO use Tuple2.mapEach and (Cmd.map HomeMsg)
|
||||
-- to translate from Page.Home.init
|
||||
--
|
||||
-- mapEach : (a -> newA) -> (b -> newB) -> ( a, b ) -> ( newA, newB )
|
||||
Page.Home.init
|
||||
|> Tuple2.mapEach Home (Cmd.map HomeMsg)
|
||||
|
||||
Ok (Page.Repository id) ->
|
||||
Pages.Repository.init id
|
||||
Ok (Page.Repository repoOwner repoName) ->
|
||||
-- TODO use Tuple2.mapEach and (Cmd.map RepositoryMsg)
|
||||
-- to translate from Page.Repository.init
|
||||
--
|
||||
-- HINT: Page.Repository.init is a function that takes 2 arguments.
|
||||
Page.Repository.init repoOwner repoName
|
||||
|> Tuple2.mapEach Repository (Cmd.map RepositoryMsg)
|
||||
|
||||
Ok NotFound ->
|
||||
( model, Cmd.none )
|
||||
Ok (Page.NotFound) ->
|
||||
( NotFound, Cmd.none )
|
||||
|
||||
Err _ ->
|
||||
( model, Navigation.modifyUrl "/" )
|
||||
Err err ->
|
||||
( NotFound, Cmd.none )
|
||||
|
||||
Reference in New Issue
Block a user