module View.Form exposing ( textInput , radioInputs ) import Html exposing (..) import Html.Attributes exposing (..) import Form exposing (Form, FieldState) import Form.Input as Input import Form.Error as FormError exposing (Error(..)) import Msg exposing (Msg) import LoggedData exposing (LoggedData) import Model.Translations as Translations exposing (Translations) import Utils.Maybe exposing (isJust) textInput : Translations -> Form String a -> (Html Form.Msg -> Html msg) -> String -> String -> Html msg textInput translations form htmlMap formName fieldName = let field = Form.getFieldAsString fieldName form in div [ classList [ ("textInput", True) , ("error", isJust field.liveError) ] ] [ htmlMap <| Input.textInput field [ id (formName ++ fieldName) , classList [ ("filled", isJust field.value) ] ] , label [ for (formName ++ fieldName) ] [ text (Translations.getMessage (formName ++ fieldName) translations) ] , case field.liveError of Just error -> formError translations error Nothing -> text "" ] radioInputs : Translations -> Form String a -> (Html Form.Msg -> Html msg) -> String -> String -> List String -> Html msg radioInputs translations form htmlMap formName radioName fieldNames = let field = Form.getFieldAsString radioName form in div [ classList [ ("radioGroup", True) , ("error", isJust field.liveError) ] ] [ div [ class "title" ] [ text (Translations.getMessage (formName ++ radioName) translations) ] , div [ class "radioInputs" ] (List.map (radioInput translations field htmlMap formName) fieldNames) , case field.liveError of Just error -> formError translations error Nothing -> text "" ] radioInput : Translations -> FieldState String String -> (Html Form.Msg -> Html msg) -> String -> String -> Html msg radioInput translations field htmlMap formName fieldName = htmlMap <| div [ class "radioInput" ] [ Input.radioInput field.path field [ id (formName ++ fieldName) , value fieldName , checked (field.value == Just fieldName) ] , label [ for (formName ++ fieldName) ] [ text (Translations.getMessage (formName ++ fieldName) translations) ] ] formError : Translations -> FormError.Error String -> Html msg formError translations error = let errorElement error params = div [ class "errorMessage" ] [ text (Translations.getParamMessage params error translations) ] in case error of CustomError key -> errorElement key [] SmallerIntThan n -> errorElement "SmallerIntThan" [toString n] GreaterIntThan n -> errorElement "GreaterIntThan" [toString n] error -> errorElement (toString error) []