-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSearch.elm
More file actions
113 lines (70 loc) · 1.79 KB
/
Copy pathSearch.elm
File metadata and controls
113 lines (70 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
port module AlgoliaSearch exposing (..)
import Html exposing (..)
import Html as App
import Html.Attributes exposing (..)
import Html.Events exposing (..)
main =
App.program
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}
-- MODEL
type alias Model =
{ query : String
, results : AlgoliaResult
}
type alias AlgoliaResult =
{ query : String
, hits : List Hit
}
type alias Hit =
{ text : String
, title : String
, tags : List String
, article_link : String
}
emptyAlgoliaResult : AlgoliaResult
emptyAlgoliaResult =
(AlgoliaResult "" [])
init : ( Model, Cmd Msg )
init =
( Model "" emptyAlgoliaResult, Cmd.none )
-- UPDATE
type Msg
= Query String
| Search
| Show AlgoliaResult
port search : String -> Cmd msg
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
Query newQuery ->
( Model newQuery model.results, search newQuery )
Search ->
( model, search model.query )
Show newResults ->
( Model model.query newResults, Cmd.none )
toHtmlList : AlgoliaResult -> Html msg
toHtmlList result =
if List.isEmpty result.hits then
div [] []
else
ul [] (List.map toLi result.hits)
toLi : Hit -> Html msg
toLi hit =
li [] [ a [ href hit.article_link ] [ text hit.title ] ]
-- SUBSCRIPTIONS
port results : (AlgoliaResult -> msg) -> Sub msg
subscriptions : Model -> Sub Msg
subscriptions model =
results Show
-- VIEW
view : Model -> Html Msg
view model =
div []
[ input [ type_ "text", placeholder "search for a post", onInput Query ] []
, div [] [ toHtmlList model.results ]
-- not sure how to get a list here
]