0.5.0 â€Ē Published 8 months ago

vue-form-handler v0.5.0

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

Build Status version downloads MIT License PRs Welcome

ðŸ“Ķ Installation


yarn add vue-form-handler

npm i --save vue-form-handler

🚀 Features


  • 💊 Type strong: Written in TypeScript
  • ðŸ”Đ Flexible: you can wrap the form handler over native inputs or any other like the ones from material libraries or custom inputs.
  • ðŸŠķ Super light: Small package size
  • ðŸ’ŧ DX: Great development experience

ðŸĶ„ Usage


Basic usage

<template>
  <form @submit.prevent="handleSubmit(successFn)">
    <input v-bind="register('firstName')" />
    <input v-bind="register('lastName')" />
    <input v-bind="register('age')" type="number" />
    <input type="submit" />
  </form>
</template>
<script setup lang="ts">
import { useFormHandler } from 'vue-form-handler'
const { register, handleSubmit } = useFormHandler()
const successFn = (form: Record<string, any>) => {
  console.log({ form })
}
</script>

Validations

<template>
  <form @submit.prevent="handleSubmit(successFn)">
    <input
      v-bind="
        register('firstName', {
          required: 'This field is required',
        })
      "
    />
    <p>{{ formState.errors.firstName }}</p>
    <input v-bind="register('lastName')" />
    <input
      v-bind="
        register('age', {
          min: {
            value: 18,
            message: 'Your age is below the accepted range',
          },
        })
      "
      type="number"
    />
    <p>{{ formState.errors.age }}</p>
    <input type="submit" />
  </form>
</template>
<script setup lang="ts">
import { useFormHandler } from 'vue-form-handler'
const { formState, register, handleSubmit } = useFormHandler()
const successFn = (form: Record<string, any>) => {
  console.log({ form })
}
</script>

Integration with Material frameworks

<template>
  <form @submit.prevent="handleSubmit(successFn)">
    <q-input v-bind="register('name')" />
    <q-checkbox v-bind="register('married')" />
    <q-select v-bind="register('pet')" :options="['dog', 'cat', 'mouse']" />
    <input type="submit" />
  </form>
</template>
<script setup lang="ts">
import { useFormHandler } from 'vue-form-handler'
const { formState, register, handleSubmit } = useFormHandler()
const successFn = (form: Record<string, any>) => {
  console.log({ form })
}
</script>

Typescript support

<template>
  <form @submit.prevent="handleSubmit(successFn)">
    <q-input v-bind="register('name')" />
    <q-checkbox v-bind="register('married')" />
    <q-select v-bind="register('pet')" :options="['dog', 'cat', 'mouse']" />
    <input type="submit" />
  </form>
</template>
<script setup lang="ts">
import { useFormHandler } from 'vue-form-handler'
interface MyFormInterface {
  name: string
  married: boolean
  pet: string
}
const { register, handleSubmit } = useFormHandler<MyFormInterface>()
const successFn = (form: MyFormInterface) => {
  console.log({ form })
}
</script>

By doing this you will get full type support on all the interactions with any formhandler resource.

Centralized and declarative form building

<template>
  <form @submit.prevent="handleSubmit(successFn)">
    <q-input v-bind="form.name" />
    <q-checkbox v-bind="form.married" />
    <q-select v-bind="form.pet" :options="['dog', 'cat', 'mouse']" />
    <input type="submit" />
  </form>
</template>
<script setup lang="ts">
import { useFormHandler } from 'vue-form-handler'
interface MyFormInterface {
  name: string,
  married: boolean,
  pet: string,
}
const { build, handleSubmit } = useFormHandler<MyFormInterface>()
const form = build({
  name: {}
  married: {}
  pet: {}
})
const successFn = (form: MyFormInterface) => {
  console.log({ form })
}
</script>

For a more advanced usage visit the Docs

📈 Project activity


Alt

💜 Thanks


This project is heavily inspired by other awesome projects like:

📄 License


MIT License ÂĐ 2022-PRESENT Dennis Bosmans

0.5.0

8 months ago

0.4.0

9 months ago

0.0.1

1 year ago

0.0.0

1 year ago

0.3.0

12 months ago

0.2.1

1 year ago

0.0.3

1 year ago

0.2.0

1 year ago

0.0.2

1 year ago

0.2.3

1 year ago

0.2.2

1 year ago

0.0.4

1 year ago

0.2.5

1 year ago

0.2.4

1 year ago

0.1.10

5 years ago

0.1.9

5 years ago

0.1.8

5 years ago

0.1.7

5 years ago

0.1.6

5 years ago

0.1.5

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago