Add lamassu-admin-elm to this repo (#185)
This commit is contained in:
parent
5ee7e40872
commit
f4fc9d6328
134 changed files with 28171 additions and 83 deletions
132
lamassu-admin-elm/src/Pair.elm
Normal file
132
lamassu-admin-elm/src/Pair.elm
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
module Pair exposing (..)
|
||||
|
||||
import Html exposing (Html, Attribute, h1, a, div, hr, input, span, text, node, button, strong, label)
|
||||
import Html.Attributes exposing (id, attribute, placeholder, disabled, style, size)
|
||||
import Html.Events exposing (onClick, onInput)
|
||||
import Http
|
||||
import HttpBuilder exposing (..)
|
||||
import String
|
||||
import RemoteData exposing (RemoteData(NotAsked, Loading, Failure, Success))
|
||||
import QRCode
|
||||
import Css.Admin exposing (..)
|
||||
import Css.Classes as C
|
||||
import QRCode.ECLevel as ECLevel
|
||||
|
||||
|
||||
-- MODEL
|
||||
|
||||
|
||||
type alias Model =
|
||||
{ totem : RemoteData.WebData String
|
||||
, name : String
|
||||
, serverStatus : Bool
|
||||
}
|
||||
|
||||
|
||||
getTotem : String -> Cmd Msg
|
||||
getTotem name =
|
||||
get "/api/totem"
|
||||
|> withQueryParams [ ( "name", name ) ]
|
||||
|> withExpect Http.expectString
|
||||
|> send RemoteData.fromResult
|
||||
|> Cmd.map Load
|
||||
|
||||
|
||||
init : Bool -> Model
|
||||
init serverStatus =
|
||||
{ totem = RemoteData.NotAsked
|
||||
, name = ""
|
||||
, serverStatus = serverStatus
|
||||
}
|
||||
|
||||
|
||||
|
||||
-- UPDATE
|
||||
|
||||
|
||||
type Msg
|
||||
= Load (RemoteData.WebData String)
|
||||
| InputName String
|
||||
| SubmitName
|
||||
|
||||
|
||||
updateStatus : Bool -> Model -> Model
|
||||
updateStatus isUp model =
|
||||
{ model | serverStatus = isUp }
|
||||
|
||||
|
||||
update : Msg -> Model -> ( Model, Cmd Msg )
|
||||
update msg model =
|
||||
case msg of
|
||||
Load webData ->
|
||||
let
|
||||
_ =
|
||||
Debug.log "TOTEM" (RemoteData.withDefault "Network Error" webData)
|
||||
in
|
||||
{ model | totem = webData } ! []
|
||||
|
||||
InputName name ->
|
||||
{ model | name = name } ! []
|
||||
|
||||
SubmitName ->
|
||||
model ! [ getTotem model.name ]
|
||||
|
||||
|
||||
qrCode : String -> Html msg
|
||||
qrCode s =
|
||||
let
|
||||
resultQRCode =
|
||||
QRCode.toSvgWithECLevel s ECLevel.L
|
||||
in
|
||||
case resultQRCode of
|
||||
Result.Ok view ->
|
||||
view
|
||||
|
||||
Result.Err err ->
|
||||
Html.text (toString err)
|
||||
|
||||
|
||||
view : Model -> Html Msg
|
||||
view model =
|
||||
if model.serverStatus then
|
||||
case model.totem of
|
||||
NotAsked ->
|
||||
div []
|
||||
[ h1 [] [ text "Pair a new Lamassu cryptomat" ]
|
||||
, div []
|
||||
[ label []
|
||||
[ text "Cryptomat name"
|
||||
, input
|
||||
[ onInput InputName
|
||||
, placeholder "Coffee shop, 43 Elm St."
|
||||
, size 50
|
||||
, style [ ( "margin-left", "1em" ) ]
|
||||
]
|
||||
[]
|
||||
, button
|
||||
[ onClick SubmitName, disabled (String.isEmpty model.name) ]
|
||||
[ text "Pair" ]
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
Loading ->
|
||||
div []
|
||||
[ div [] [ text "..." ] ]
|
||||
|
||||
Failure err ->
|
||||
div [] [ text (toString err) ]
|
||||
|
||||
Success totem ->
|
||||
div
|
||||
[]
|
||||
[ div
|
||||
[ class [ C.QrCode ] ]
|
||||
[ qrCode totem ]
|
||||
, div []
|
||||
[ span [] [ text "Scan this QR Code to pair " ]
|
||||
, strong [] [ text model.name ]
|
||||
]
|
||||
]
|
||||
else
|
||||
div [] [ text "Make sure lamassu-server is up before pairing" ]
|
||||
Loading…
Add table
Add a link
Reference in a new issue