1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-20 19:17:01 +00:00

ui: Initial Elm UI import

Merged from https://github.com/jhillyerd/inbucket-elm

Uses https://github.com/halfzebra/create-elm-app
This commit is contained in:
James Hillyerd
2018-06-02 12:44:15 -07:00
parent 8b5a05eb40
commit c5b5321be3
24 changed files with 3027 additions and 1 deletions

88
ui/src/Page/Monitor.elm Normal file
View File

@@ -0,0 +1,88 @@
module Page.Monitor exposing (Model, Msg, init, subscriptions, update, view)
import Data.MessageHeader as MessageHeader exposing (MessageHeader)
import Data.Session as Session exposing (Session)
import Json.Decode exposing (decodeString)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events as Events
import Route
import WebSocket
-- MODEL --
type alias Model =
{ messages : List MessageHeader }
init : Model
init =
{ messages = [] }
-- SUBSCRIPTIONS --
subscriptions : Model -> Sub Msg
subscriptions model =
WebSocket.listen "ws://192.168.1.10:3000/api/v1/monitor/messages"
(decodeString MessageHeader.decoder >> NewMessage)
-- UPDATE --
type Msg
= NewMessage (Result String MessageHeader)
| OpenMessage MessageHeader
update : Session -> Msg -> Model -> ( Model, Cmd Msg, Session.Msg )
update session msg model =
case msg of
NewMessage (Ok msg) ->
( { model | messages = msg :: model.messages }, Cmd.none, Session.none )
NewMessage (Err err) ->
( model, Cmd.none, Session.SetFlash err )
OpenMessage msg ->
( model
, Route.newUrl (Route.Message msg.mailbox msg.id)
, Session.none
)
-- VIEW --
view : Session -> Model -> Html Msg
view session model =
div [ id "page" ]
[ h1 [] [ text "Monitor" ]
, p [] [ text "Messages will be listed here shortly after delivery." ]
, table [ id "monitor" ]
[ thead []
[ th [] [ text "Date" ]
, th [ class "desktop" ] [ text "From" ]
, th [] [ text "Mailbox" ]
, th [] [ text "Subject" ]
]
, tbody [] (List.map viewMessage model.messages)
]
]
viewMessage : MessageHeader -> Html Msg
viewMessage message =
tr [ Events.onClick (OpenMessage message) ]
[ td [] [ text message.date ]
, td [ class "desktop" ] [ text message.from ]
, td [] [ text message.mailbox ]
, td [] [ text message.subject ]
]