Add lamassu-admin-elm to this repo (#185)

This commit is contained in:
Rafael Taranto 2018-10-08 16:29:06 -03:00 committed by Josh Harvey
parent 5ee7e40872
commit f4fc9d6328
134 changed files with 28171 additions and 83 deletions

View file

@ -0,0 +1,95 @@
module FieldSet.Rest exposing (..)
import Json.Decode as D
import Json.Encode as E
import FieldSet.Types exposing (..)
fieldPasswordDecoder : Bool -> FieldValue
fieldPasswordDecoder present =
if present then
FieldPassword PasswordHidden
else
FieldPassword PasswordEmpty
badInt : D.Decoder Int
badInt =
D.oneOf [ D.int ]
fieldValueDecoder : String -> D.Decoder FieldValue
fieldValueDecoder fieldType =
case fieldType of
"string" ->
D.map FieldString D.string
"password" ->
D.map fieldPasswordDecoder D.bool
"integer" ->
D.map FieldInteger badInt
_ ->
D.fail ("Unsupported field type: " ++ fieldType)
fieldDecoder : D.Decoder Field
fieldDecoder =
(D.field "fieldType" D.string)
|> D.andThen
(\fieldType ->
D.map6 Field
(D.field "code" D.string)
(D.field "display" D.string)
(D.oneOf [ D.field "placeholder" D.string, D.succeed "" ])
(D.field "required" D.bool)
(D.field "value" (fieldValueDecoder fieldType))
(D.field "value" (fieldValueDecoder fieldType))
)
encodeFieldValue : FieldValue -> E.Value
encodeFieldValue fieldValue =
case fieldValue of
FieldString value ->
E.string value
FieldPassword value ->
case value of
Password s ->
E.string s
_ ->
E.null
FieldInteger value ->
E.int value
maybeString : Maybe String -> E.Value
maybeString maybeString =
case maybeString of
Nothing ->
E.null
Just s ->
E.string s
encodeField : Field -> Maybe E.Value
encodeField field =
if isDirty field then
Just
(E.object
[ ( "code", E.string field.code )
, ( "value", encodeFieldValue field.value )
]
)
else
Nothing
isDirty : Field -> Bool
isDirty field =
field.value /= field.loadedValue

View file

@ -0,0 +1,23 @@
module FieldSet.State exposing (update)
import FieldSet.Types exposing (..)
updateField : String -> String -> Field -> Field
updateField fieldCode fieldValueString field =
if .code field == fieldCode then
{ field | value = updateFieldValue fieldValueString field.value }
else
field
updateFieldSet : String -> String -> List Field -> List Field
updateFieldSet fieldCode fieldValueString fields =
List.map (updateField fieldCode fieldValueString) fields
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
Input fieldCode valueString ->
updateFieldSet fieldCode valueString model ! []

View file

@ -0,0 +1,44 @@
module FieldSet.Types exposing (..)
type alias Model =
List Field
type Msg
= Input String String
type alias Field =
{ code : String
, display : String
, placeholder : String
, required : Bool
, value : FieldValue
, loadedValue : FieldValue
}
type FieldPasswordType
= Password String
| PasswordEmpty
| PasswordHidden
type FieldValue
= FieldString String
| FieldPassword FieldPasswordType
| FieldInteger Int
updateFieldValue : String -> FieldValue -> FieldValue
updateFieldValue stringValue oldFieldValue =
case oldFieldValue of
FieldString _ ->
FieldString stringValue
FieldPassword _ ->
FieldPassword (Password stringValue)
FieldInteger oldValue ->
FieldInteger <| Result.withDefault oldValue <| String.toInt stringValue

View file

@ -0,0 +1,52 @@
module FieldSet.View exposing (view)
import Html exposing (..)
import Html.Attributes as HA exposing (defaultValue, name, type_, placeholder)
import Html.Events exposing (..)
import FieldSet.Types exposing (..)
import List
import Css.Admin exposing (..)
import Css.Classes as C
fieldComponent : Field -> Html Msg
fieldComponent field =
let
inputEl =
case field.value of
FieldString string ->
input
[ onInput (Input field.code), placeholder field.placeholder, defaultValue string ]
[]
FieldPassword pass ->
case pass of
PasswordEmpty ->
input
[ onInput (Input field.code), name field.code, type_ "password" ]
[]
_ ->
input
[ onInput (Input field.code), name field.code, type_ "password", placeholder " Field is set " ]
[]
FieldInteger int ->
input
[ onInput (Input field.code), type_ "number", defaultValue (toString int) ]
[]
in
label []
[ div [] [ text field.display ]
, inputEl
]
fieldView : Field -> Html Msg
fieldView field =
div [ class [ C.FormRow ] ] [ fieldComponent field ]
view : Model -> Html Msg
view model =
div [ class [ C.ConfigContainer ] ] (List.map fieldView model)