From 6cd75ac184ecdcdaba09f684534ce722002e8819 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Wed, 20 Dec 2017 19:40:02 +0100 Subject: feat(elm): Add initial (broken) MDL layout for tasks The idea is that every task should be shown as an MDL "card" and have some sort of associated action (probably more than just a click, but that I'll look at ...). Tasks are coloured based on their current "urgency". --- frontend/Main.elm | 93 +++++++++++++++++++++++++++++++++++++---------- frontend/elm-package.json | 3 +- 2 files changed, 75 insertions(+), 21 deletions(-) diff --git a/frontend/Main.elm b/frontend/Main.elm index c977e890ae95..3527540d9e9f 100644 --- a/frontend/Main.elm +++ b/frontend/Main.elm @@ -1,10 +1,21 @@ module Main exposing (..) import Html exposing (Html, text, div, span) +import Html.Attributes exposing (style) import Json.Decode exposing (..) import Http +-- Material design imports + +import Material +import Material.Card as Card +import Material.Color as Color +import Material.Grid exposing (grid, cell, size, Device(..)) +import Material.Layout as Layout +import Material.Scheme as Scheme + + -- API interface to Gemma @@ -52,24 +63,16 @@ type Msg = None | LoadTasks | NewTasks (Result Http.Error (List Task)) + | Mdl (Material.Msg Msg) type alias Model = { tasks : List Task , error : Maybe String + , mdl : Material.Model } -renderTask : Task -> Html Msg -renderTask task = - div [] [ span [] [ text task.name ] ] - - -view : Model -> Html Msg -view model = - div [] (List.map renderTask model.tasks) - - update : Msg -> Model -> ( Model, Cmd Msg ) update msg model = case msg of @@ -77,7 +80,7 @@ update msg model = ( model, loadTasks ) NewTasks (Ok tasks) -> - ( { tasks = tasks, error = Nothing }, Cmd.none ) + ( { model | tasks = tasks, error = Nothing }, Cmd.none ) NewTasks (Err err) -> ( { model | error = Just (toString err) }, Cmd.none ) @@ -86,16 +89,66 @@ update msg model = ( model, Cmd.none ) -init : ( Model, Cmd Msg ) -init = - ( { tasks = [], error = Nothing }, loadTasks ) + +-- View implementation + + +white = + Color.text Color.white + + +taskColor : Task -> Color.Hue +taskColor task = + if task.remaining > 2 then + Color.Green + else if task.remaining < 0 then + Color.Red + else + Color.Yellow + + +renderTask : Task -> Html Msg +renderTask task = + Card.view + [ Color.background (Color.color (taskColor task) Color.S800) ] + [ Card.title [] [ Card.head [ white ] [ text task.name ] ] ] + + + +-- div [] [ span [] [ ] ] + + +gemmaView : Model -> Html Msg +gemmaView model = + grid [] + (List.map (\t -> cell [ size All 3 ] [ renderTask t ]) + model.tasks + ) + + +view : Model -> Html Msg +view model = + gemmaView model |> Scheme.top + + + +-- div [ style [ ( "padding", "2rem" ) ] ] +-- +-- |> Scheme.top main : Program Never Model Msg main = - Html.program - { init = init - , view = view - , update = update - , subscriptions = always Sub.none - } + let + model = + { tasks = [] + , error = Nothing + , mdl = Material.model + } + in + Html.program + { init = ( model, Cmd.batch [ loadTasks, Material.init Mdl ] ) + , view = view + , update = update + , subscriptions = Material.subscriptions Mdl + } diff --git a/frontend/elm-package.json b/frontend/elm-package.json index e0c71aadfdc6..2ae541ae0b95 100644 --- a/frontend/elm-package.json +++ b/frontend/elm-package.json @@ -10,7 +10,8 @@ "dependencies": { "elm-lang/core": "5.1.1 <= v < 6.0.0", "elm-lang/html": "2.0.0 <= v < 3.0.0", - "elm-lang/http": "1.0.0 <= v < 2.0.0" + "elm-lang/http": "1.0.0 <= v < 2.0.0", + "debois/elm-mdl": "8.1.0 <= v < 9.0.0" }, "elm-version": "0.18.0 <= v < 0.19.0" } -- cgit 1.4.1