Solution for advanced/part4

This commit is contained in:
Richard Feldman
2018-08-14 02:58:14 -04:00
parent 75a0c00828
commit 176b28ae6b
3 changed files with 25 additions and 48 deletions

View File

@@ -103,7 +103,7 @@ view model =
Loaded feed -> Loaded feed ->
[ div [ class "feed-toggle" ] <| [ div [ class "feed-toggle" ] <|
List.concat List.concat
[ [ viewTabs model ] [ [ viewTabs model.session model.feedTab ]
, Feed.viewArticles model.timeZone feed , Feed.viewArticles model.timeZone feed
|> List.map (Html.map GotFeedMsg) |> List.map (Html.map GotFeedMsg)
, [ Feed.viewPagination ClickedFeedPage feed ] , [ Feed.viewPagination ClickedFeedPage feed ]
@@ -155,21 +155,16 @@ viewBanner =
-- TABS -- TABS
{-| 👉 TODO: refactor this to accept narrower types than the entire Model. viewTabs : Session -> FeedTab -> Html Msg
viewTabs session feedTab =
💡 HINT: It may end up with multiple arguments! case feedTab of
-}
viewTabs : Model -> Html Msg
viewTabs model =
case model.feedTab of
YourFeed cred -> YourFeed cred ->
Feed.viewTabs [] (yourFeed cred) [ globalFeed ] Feed.viewTabs [] (yourFeed cred) [ globalFeed ]
GlobalFeed -> GlobalFeed ->
let let
otherTabs = otherTabs =
case Session.cred model.session of case Session.cred session of
Just cred -> Just cred ->
[ yourFeed cred ] [ yourFeed cred ]
@@ -181,7 +176,7 @@ viewTabs model =
TagFeed tag -> TagFeed tag ->
let let
otherTabs = otherTabs =
case Session.cred model.session of case Session.cred session of
Just cred -> Just cred ->
[ yourFeed cred, globalFeed ] [ yourFeed cred, globalFeed ]

View File

@@ -61,9 +61,8 @@ init session username =
let let
maybeCred = maybeCred =
Session.cred session Session.cred session
in
model = ( { session = session
{ session = session
, timeZone = Time.utc , timeZone = Time.utc
, errors = [] , errors = []
, feedTab = defaultFeedTab , feedTab = defaultFeedTab
@@ -71,14 +70,12 @@ init session username =
, author = Loading username , author = Loading username
, feed = Loading username , feed = Loading username
} }
in
( model
, Cmd.batch , Cmd.batch
[ Author.fetch username maybeCred [ Author.fetch username maybeCred
|> Http.toTask |> Http.toTask
|> Task.mapError (Tuple.pair username) |> Task.mapError (Tuple.pair username)
|> Task.attempt CompletedAuthorLoad |> Task.attempt CompletedAuthorLoad
, fetchFeed model defaultFeedTab 1 , fetchFeed session username defaultFeedTab 1
, Task.perform GotTimeZone Time.here , Task.perform GotTimeZone Time.here
, Task.perform (\_ -> PassedSlowLoadThreshold) Loading.slowThreshold , Task.perform (\_ -> PassedSlowLoadThreshold) Loading.slowThreshold
] ]
@@ -110,19 +107,11 @@ defaultFeedTab =
-- HTTP -- HTTP
{-| 👉 TODO: refactor this to accept narrower types than the entire Model. fetchFeed : Session -> Username -> FeedTab -> Int -> Cmd Msg
fetchFeed session username feedTabs page =
💡 HINT: It may end up with multiple arguments!
-}
fetchFeed : Model -> FeedTab -> Int -> Cmd Msg
fetchFeed model feedTabs page =
let let
username =
currentUsername model
maybeCred = maybeCred =
Session.cred model.session Session.cred session
( extraParamName, extraParamVal ) = ( extraParamName, extraParamVal ) =
case feedTabs of case feedTabs of
@@ -138,7 +127,7 @@ fetchFeed model feedTabs page =
|> HttpBuilder.withQueryParam extraParamName extraParamVal |> HttpBuilder.withQueryParam extraParamName extraParamVal
|> Cred.addHeaderIfAvailable maybeCred |> Cred.addHeaderIfAvailable maybeCred
|> PaginatedList.fromRequestBuilder articlesPerPage page |> PaginatedList.fromRequestBuilder articlesPerPage page
|> Task.map (Feed.init model.session) |> Task.map (Feed.init session)
|> Task.mapError (Tuple.pair username) |> Task.mapError (Tuple.pair username)
|> Task.attempt CompletedFeedLoad |> Task.attempt CompletedFeedLoad
@@ -351,12 +340,12 @@ update msg model =
ClickedTab tab -> ClickedTab tab ->
( { model | feedTab = tab } ( { model | feedTab = tab }
, fetchFeed model tab 1 , fetchFeed model.session (currentUsername model) tab 1
) )
ClickedFeedPage page -> ClickedFeedPage page ->
( { model | feedPage = page } ( { model | feedPage = page }
, fetchFeed model model.feedTab page , fetchFeed model.session (currentUsername model) model.feedTab page
) )
CompletedFollowChange (Ok newAuthor) -> CompletedFollowChange (Ok newAuthor) ->

View File

@@ -100,7 +100,7 @@ view : Model -> { title : String, content : Html Msg }
view model = view model =
let let
form = form =
viewForm model viewForm (Session.cred model.session) model.form
in in
{ title = "Settings" { title = "Settings"
, content = , content =
@@ -124,16 +124,9 @@ view model =
} }
{-| 👉 TODO refactor this to accept narrower types than the entire Model. viewForm : Maybe Cred -> Form -> Html Msg
💡 HINT: It may end up with multiple arguments! viewForm maybeCred form =
-} case maybeCred of
viewForm : Model -> Html Msg
viewForm model =
let
form =
model.form
in
case Session.cred model.session of
Nothing -> Nothing ->
text "" text ""