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 init () = { AnimalName = validateAnimal "Emu" }
let update msg model =
match msg with
| UpdateAnimal animalName -> { model with AnimalName = validateAnimal animalName }
let view (model: Model) : ViewElement =
let makeEntryCell text =
Entry(text, UpdateAnimal)
ContentPage(
"Animal",
VStack() {
match model.AnimalName with
| ValidAnimal validName ->
Entry(validName, UpdateAnimal)
| InvalidAnimal invalidName ->
Entry(invalidName, UpdateAnimal)
Label($"{invalidName} is not a valid animal name. Try %A{validAnimalNames}") ]
}
)Last updated