Skip to content
Brew

Example — Validated form

A contact form with live validation and submit UX.

package app.brew
import org.konaframework.brew.Component
import org.konaframework.brew.Validate
class ContactForm : Component() {
@Validate("required", "email")
var email = ""
@Validate("required", "min:10")
var message = ""
var sent = false
fun save() {
validate()
// persist…
sent = true
reset("email", "message")
}
override fun template() = """
<form wire:submit="save">
@if(sent)
<p role="status">Thanks — we got your message.</p>
@endif
<label>
Email
<input type="email" wire:model.blur="email" />
</label>
@if(errors['email'])
<em>{{ errors['email'][0] }}</em>
@endif
<label>
Message
<textarea wire:model="message"></textarea>
</label>
@if(errors['message'])
<em>{{ errors['message'][0] }}</em>
@endif
<button type="submit">
<span wire:loading.remove wire:target="save">Send</span>
<span wire:loading wire:target="save">Sending…</span>
</button>
<span wire:dirty>Unsaved changes</span>
</form>
""".trimIndent()
}
Brew.test(ContactForm::class.java)
.set("email", "not-an-email")
.call("save")
.assertHasErrors("email")

See Forms & validation for modifiers, form objects, and $wire.$errors.