From b93775169f3e70da74fb352411e6d586f6c2dd3e Mon Sep 17 00:00:00 2001 From: Richard Feldman Date: Sun, 27 Mar 2016 06:26:36 -0700 Subject: [PATCH] Add TODOs to 8 --- stages/8/ElmHub.elm | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/stages/8/ElmHub.elm b/stages/8/ElmHub.elm index 648be29..336076a 100644 --- a/stages/8/ElmHub.elm +++ b/stages/8/ElmHub.elm @@ -9,6 +9,7 @@ import Effects exposing (Effects) import Json.Decode exposing (Decoder, (:=)) import Json.Encode import Signal exposing (Address) +import Dict exposing (Dict) searchFeed : String -> Task x Action @@ -18,7 +19,7 @@ searchFeed query = url = "https://api.github.com/search/repositories?q=" ++ query - ++ "+language:elm&sort=stars&order=desc" + ++ "+language:elm" task = Http.get responseDecoder url @@ -43,7 +44,7 @@ searchResultDecoder = type alias Model = { query : String - , results : List SearchResult + , results : Dict ResultId SearchResult } @@ -61,7 +62,7 @@ type alias ResultId = initialModel : Model initialModel = { query = "tutorial" - , results = [] + , results = Dict.empty } @@ -78,10 +79,16 @@ view address model = , button [ class "search-button", onClick address Search ] [ text "Search" ] , ul [ class "results" ] - (List.map (viewSearchResult address) model.results) + (viewSearchResults address model.results) ] +viewSearchResults : Address Action -> Dict ResultId SearchResult -> List Html +viewSearchResults address results = + -- TODO sort by star count and render + [] + + onInput address wrap = on "input" targetValue (\val -> Signal.message address (wrap val)) @@ -122,18 +129,13 @@ update action model = SetResults results -> let - newModel = - { model | results = results } + -- TODO convert results list into a Dict + resultsById : Dict ResultId SearchResult + resultsById = + Dict.empty in - ( newModel, Effects.none ) + ( { model | results = resultsById }, Effects.none ) - DeleteById idToHide -> - let - newResults = - model.results - |> List.filter (\{ id } -> id /= idToHide) - - newModel = - { model | results = newResults } - in - ( newModel, Effects.none ) + DeleteById id -> + -- TODO delete the result with the given id + ( model, Effects.none )