diff --git a/advanced/part4/src/Page/Home.elm b/advanced/part4/src/Page/Home.elm index 1d48c96..1fc8984 100644 --- a/advanced/part4/src/Page/Home.elm +++ b/advanced/part4/src/Page/Home.elm @@ -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 ] diff --git a/advanced/part4/src/Page/Profile.elm b/advanced/part4/src/Page/Profile.elm index a95d6b1..44477d8 100644 --- a/advanced/part4/src/Page/Profile.elm +++ b/advanced/part4/src/Page/Profile.elm @@ -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) -> diff --git a/advanced/part4/src/Page/Settings.elm b/advanced/part4/src/Page/Settings.elm index 0f4f201..007fef4 100644 --- a/advanced/part4/src/Page/Settings.elm +++ b/advanced/part4/src/Page/Settings.elm @@ -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 ""