Skip to content

Instantly share code, notes, and snippets.

@mrb
Created September 9, 2016 14:44
Show Gist options
  • Save mrb/ddff90dec53163041c5722eae4dc8ede to your computer and use it in GitHub Desktop.
Save mrb/ddff90dec53163041c5722eae4dc8ede to your computer and use it in GitHub Desktop.
Tips
module Main exposing (..)
import Html exposing (Html, div, button, text, img, br, p)
import Html.Attributes exposing (src)
import Html.Events exposing (onClick)
import Html.App
import Http
import Task exposing (Task)
import Json.Decode as Decode exposing (Decoder(..), string, (:=), succeed, list)
import Extra exposing ((|:))
-- MODEL
type alias Model =
List Tip
init : ( Model, Cmd Msg )
init =
( [], fetchCmd )
-- MESSAGES
type Msg
= Fetch
| FetchSuccess (List Tip)
| FetchError Http.Error
type alias Tip =
{ title : String
, date : String
, tags : String
, image : String
, thumbnail : String
}
-- VIEW
view : Model -> Html Msg
view model =
div []
(List.map
(\x ->
div []
[ text x.title
, p [] []
, img [ src x.thumbnail ] []
]
)
(List.filter (\x -> (x.tags == "food")) model)
)
decodeTip : Decode.Decoder Tip
decodeTip =
Decode.succeed Tip
|: ("title" := string)
|: ("date" := string)
|: ("tags" := string)
|: ("image" := string)
|: ("thumbnail" := string)
decode : Decode.Decoder (List Tip)
decode =
Decode.list decodeTip
url : String
url =
"https://api.myjson.com/bins/498wk"
fetchTask : Task Http.Error (List Tip)
fetchTask =
Http.get decode url
fetchCmd : Cmd Msg
fetchCmd =
Task.perform FetchError FetchSuccess fetchTask
-- UPDATE
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
Fetch ->
( model, fetchCmd )
FetchSuccess tips ->
( tips, Cmd.none )
FetchError error ->
( [ { title = (toString error), date = "", tags = "", image = "", thumbnail = "" } ], Cmd.none )
-- MAIN
main : Program Never
main =
Html.App.program
{ init = init
, view = view
, update = update
, subscriptions = (always Sub.none)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment