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