State validation
Messages and Validation
type Animal =
| ValidAnimal of string
| InvalidAnimal of string
type Model = { AnimalName : Animal }
type Msg = UpdateAnimal of string
let validAnimalNames = [ "Emu"; "Kangaroo"; "Platypus"; "Wombat" ]
let validateAnimal (animalName : string) =
if List.contains animalName validAnimalNames
then ValidAnimal animalName
else InvalidAnimal animalName
let update msg model =
match msg with
| UpdateAnimal animalName -> { model with AnimalName = validateAnimal animalName }
let view (model: Model) dispatch : ViewElement =
let makeEntryCell text =
View.Entry(
text = text,
textChanged = fun textArgs -> UpdateAnimal textArgs.NewTextValue |> dispatch
)
View.ContentPage(
View.StackLayout(
match model.AnimalName with
| ValidAnimal validName -> [ makeEntryCell validName ]
| InvalidAnimal invalidName ->
[ makeEntryCell invalidName
View.Label(sprintf "%s is not a valid animal name. Try %A" invalidName validAnimalNames) ]
)
)
let init () = { AnimalName = validateAnimal "Emu" }Last updated