import Html exposing (text, div, input, button, p, span)
import Html.App exposing (beginnerProgram)
import Html.Attributes exposing (..)
import Html.Events exposing (onInput, onClick)
main =
beginnerProgram
{ model = { state = WaitingForSubmit, inputStr = "", submittedValue = "" }
, update = update
, view = view
}
-- MODEL
type alias Model =
{ state : State
, inputStr : String
, submittedValue : String
}
type State
= WaitingForSubmit
| WaitingForConfirm
-- UPDATE
type Msg
= NewContent String
| Submit
| Cancel
| Confirm
update msg model =
case msg of
NewContent str ->
{ model | inputStr = str }
Submit ->
{ model | state = WaitingForConfirm }
Cancel ->
{ model | state = WaitingForSubmit }
Confirm ->
{ model
| state = WaitingForSubmit
, submittedValue = model.inputStr
}
-- VIEW
view { state, inputStr, submittedValue } =
div []
[ input [ onInput NewContent ] []
, case state of
WaitingForSubmit ->
span []
[ button [ disabled (inputStr == ""), onClick Submit ]
[ text "Submit" ]
]
WaitingForConfirm ->
span []
[ button [ onClick Cancel ] [ text "Cancel" ]
, button [ onClick Confirm ] [ text "Confirm" ]
]
, p [] [ text ("Submitted value: " ++ submittedValue) ]
]
A question: Is there a way to clear the input field (on confirm) without using ports?