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

View File

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

View File

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