Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. import Dict exposing (Dict)
  2. import Html exposing (Html, div, text, input, ul, li)
  3. import Html.Events exposing (..)
  4. import Task exposing (Task)
  5. import String
  6.  
  7. ---------------------------
  8.  
  9. main =
  10. Html.program
  11. { init = init
  12. , view = view viewSuggestion
  13. , update = update getSuggestions
  14. , subscriptions = subscriptions
  15. }
  16.  
  17. ---------------------------
  18.  
  19. data : List String
  20. data =
  21. [ "Arizona"
  22. , "Arkansas"
  23. , "California"
  24. , "Colorado"
  25. , "Delaware"
  26. , "Florida"
  27. , "New York"
  28. , "New Jersey"
  29. , "Pennsylvania"
  30. , "Texas" ]
  31.  
  32. attemptedSuggestions : String -> Result String (List suggestion) -> Msg suggestion
  33. attemptedSuggestions query result =
  34. case result of
  35. Ok suggestions ->
  36. AddSuggestions query suggestions
  37. Err _ ->
  38. NoOp
  39.  
  40. getSuggestions : String -> Task String (List String)
  41. getSuggestions query =
  42. if String.trim query == ""
  43. then
  44. Task.fail "No Query"
  45. else
  46. (data
  47. |> List.filter (String.startsWith query)
  48. |> Task.succeed)
  49.  
  50.  
  51. ---------------------------
  52.  
  53. type alias Model suggestion =
  54. { cache : Dict String (List suggestion)
  55. , query : String
  56. }
  57.  
  58.  
  59. type Msg suggestion
  60. = Query String
  61. | AddSuggestions String (List suggestion)
  62. | NoOp
  63.  
  64.  
  65.  
  66. init : (Model suggestion, Cmd (Msg suggestion))
  67. init =
  68. ( { cache = Dict.empty
  69. , query = ""
  70. }
  71. , Cmd.none )
  72.  
  73.  
  74. subscriptions : Model suggestion -> Sub (Msg suggestion)
  75. subscriptions model =
  76. Sub.none
  77.  
  78.  
  79. update : (String -> Task String (List suggestion))
  80. -> Msg suggestion
  81. -> Model suggestion
  82. -> (Model suggestion, Cmd (Msg suggestion))
  83. update getSuggestions msg model =
  84. case msg of
  85. Query query ->
  86. let cmd =
  87. Task.attempt (attemptedSuggestions query) (getSuggestions query)
  88. in
  89. ( { model | query = query }
  90. , cmd )
  91.  
  92. AddSuggestions query suggestions ->
  93. ( { model | cache = Dict.insert query suggestions model.cache }
  94. , Cmd.none )
  95.  
  96. NoOp ->
  97. ( model
  98. , Cmd.none )
  99.  
  100.  
  101. view : (suggestion -> Html (Msg suggestion)) -> Model suggestion -> Html (Msg suggestion)
  102. view viewSuggestion model =
  103. let suggestions =
  104. case Dict.get model.query model.cache of
  105. Nothing ->
  106. []
  107. Just results ->
  108. results
  109.  
  110. in
  111. div
  112. []
  113. [ input
  114. [ onInput Query ]
  115. [ ]
  116.  
  117. , div
  118. []
  119. ( List.map viewSuggestion suggestions ) ]
  120.  
  121.  
  122. viewSuggestion : String -> Html a
  123. viewSuggestion suggestion =
  124. div
  125. []
  126. [ text suggestion ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement