Solution for advanced/part4
This commit is contained in:
@@ -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 ]
|
||||
|
||||
|
||||
@@ -61,24 +61,21 @@ init session username =
|
||||
let
|
||||
maybeCred =
|
||||
Session.cred session
|
||||
|
||||
model =
|
||||
{ session = session
|
||||
, timeZone = Time.utc
|
||||
, errors = []
|
||||
, feedTab = defaultFeedTab
|
||||
, feedPage = 1
|
||||
, author = Loading username
|
||||
, feed = Loading username
|
||||
}
|
||||
in
|
||||
( model
|
||||
( { session = session
|
||||
, timeZone = Time.utc
|
||||
, errors = []
|
||||
, feedTab = defaultFeedTab
|
||||
, feedPage = 1
|
||||
, author = Loading username
|
||||
, feed = Loading username
|
||||
}
|
||||
, 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) ->
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user