Back to results
ajaishankar/stimulus-zod-form(opens in a new tab)
Language: TypeScript
Stimulus Zod validated form
- stars
- 14
- watchers
- 1
- forks
- 0
- open issues
- 0
- Last updated
- 05/14/2024
Language: TypeScript
Stimulus Zod validated form
For the ten people on earth who want to use Zod with Stimulus for client side validation.
This package was inspired by Remix Validated Form but a whole lot simpler thanks to Stimulus!
Define your schema and register the controllers
import { Application } from "@hotwired/stimulus" import { FormController, FieldController } from "stimulus-zod-form"; import { z } from "zod"; const PersonSchema = z.object({ name: z.string().min(3), email: z.string().email("invalid_email"), addresses: z.array(z.object({ city: z.string() })) }) const PersonFormController = FormController(PersonSchema); window.Stimulus = Application.start(); Stimulus.register("form", PersonFormController); Stimulus.register("field", FieldController);
Let the controllers spring to life!
<form data-controller="form" data-form-field-outlet=".form-field" data-action="form#submit" data-form-error-map-value='{ "invalid_email": "correo inválido", ... }'> <div data-form-target="error"></div> <div data-controller="field" class="form-field"> <input name="addresses[0].city" data-field-target="input" data-action="blur->field#validate" /> <div data-field-target="error"></div> </div> </form>
In the sample code above note the following
data-form-field-outletdata-action="form#submit"data-action="blur->field#validate"data-field-target="input"data-field-target="error" data-form-target="error"data-form-error-map-value