form

@casthub/form provides Vue 3 Hooks for consuming, validating and managing Forms.

Inspired by vue-hooks-form.

  • Asynchronous validation via async-validator
  • No forced HTML structure/format
  • Error handling
  • TypeScript

Installation

This package is available via NPM:

yarn add @casthub/form

# or

npm install @casthub/form

Usage

A full example App is provided in the example folder.

<template>
    <form @submit.prevent="submit">
        <label for="email">Email Address</label>
        <input
            type="email"
            name="email"
            id="email"
            placeholder="Email Address"
            :disabled="loading"
            @focus="email.clearError"
            v-model="email.value"
        />
        <p class="err" v-if="email.error">{{ email.error.message }}</p>
        <label for="email">Password</label>
        <input
            type="password"
            name="password"
            id="password"
            placeholder="Password"
            :disabled="loading"
            @focus="password.clearError"
            v-model="password.value"
        />
        <p class="err" v-if="password.error">{{ password.error.message }}</p>
        <button
            type="submit"
            :disabled="loading"
        >Login</button>
    </form>
</template>

<script lang="ts" setup>
    import { useForm } from '@casthub/form';

    const { useField, handle, loading } = useForm<{
        email: string;
        password: string;
    }>({
        defaults: {
            email: '[email protected]',
        },
    });

    const email = useField('email', {
        type: 'email',
        required: true,
    });
    const password = useField('password', {
        required: true,
    });

    const submit = handle(async ({ email, password }) => {
        alert(`Email: ${email} Password: ${password}`);
    });
</script>

API

useForm

Options

Option Default Type Description
defaults {} Record<string, any> Optionally provide defaults for the various fields in this object by key -> value pairs.
validationMode submit 'change'\|'submit' NOT IMPLEMENTED YET. Whether to validate input once submitted

Response

Option Type Description
useField Field<unknown> Documented below.
handle (run: values => Promise<void>) => async (e?: Event) => Promise<void> Registers the asynchronous handler that runs once a form is submitted and successfully validated.
reset () => void Reset the Form to tis default state.
validate () => Promise<boolean> Manually trigger validation and error handling.
clearErrors () => void Clear all errors for all fields.
loading Ref<boolean> Whether the form is currently executing.
destroy () => void Destroy and clean-up the Form handler. Happens automatically during onBeforeUnmount.

useField

Options

Currently the options object provided to useField is inheritted from async-validator and all options are forwarded as a validation field.

Response

Option Type Description
errors ValidateError[] An array of all Errors set against this Field.
error ValidateError\|null Optimistically picks one, if any, of the Errors against the field.
hasError ComputedRef<boolean> Whether or not the Field has 1 or more errors.
setError (text: string) => void Manually set the error on this field.
clearError () => void Clears all Errors currently set against this Field.
value WritableComputedRef<unknown> The value for the field, compatible with v-model.

GitHub

https://github.com/casthub/form