Code Monkey home page Code Monkey logo

vue-form-handler's Introduction

vue-form-handler

The easy way of handling your vue forms

Build Status version downloads MIT License PRs Welcome

Buy Me A Coffee

๐Ÿ“ฆ 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

vue-form-handler's People

Contributors

dbssman avatar minai621 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

minai621

vue-form-handler's Issues

add support for vue 2

Add support for vue2/nuxt2 projects that use vue-demi, vue composition api or nuxt-bridge

Code improvements and cleanup

To improve:

  • Remove reference assignments and parameter mutations
  • Improve code readability
  • Remove internal ref complexity
  • Fix type guards
  • Improve native support

useFormContext cannot be used because register is of undefined union type

The current useFormContext function has an issue where the returned value from the inject function can be undefined, causing a need to validate the stability of register. However, since defaultInjectionKey is provided, there is no actual scenario where undefined would be returned.

Solution
Updated the useFormContext function to cast the injected value to FormHandlerReturn directly, ensuring it is always a valid context.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.