Flesh out part10

This commit is contained in:
Richard Feldman
2016-09-02 22:21:10 -07:00
parent 5fd5863b53
commit 6ec25f4f57
8 changed files with 221 additions and 86 deletions

View File

@@ -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 )