项目作者: KamyarLajani

项目描述 :
Svelte component library for form validation with yup
高级语言: Svelte
项目地址: git://github.com/KamyarLajani/svelte-yup.git
创建时间: 2020-11-24T19:11:34Z
项目社区:https://github.com/KamyarLajani/svelte-yup

开源协议:

下载


svelte-yup

npm NPM GitHub top language npm

Svelte component library using Yup for form validation.

Installation

  1. $ npm i svelte-yup --save-dev
  1. $ npm i yup

GIF demo

See all demos

Sample code

  1. <script>
  2. import * as yup from 'yup';
  3. import {Form, Message} from 'svelte-yup';
  4. let schema = yup.object().shape({
  5. name: yup.string().required().max(30).label("Name"),
  6. email: yup.string().required().email().label("Email address"),
  7. });
  8. let fields = {email: "", name: ""};
  9. let submitted = false;
  10. let isValid;
  11. function formSubmit(){
  12. submitted = true;
  13. isValid = schema.isValidSync(fields);
  14. if(isValid){
  15. alert('Everything is validated!');
  16. }
  17. }
  18. </script>
  19. <Form class="form" {schema} {fields} submitHandler={formSubmit} {submitted}>
  20. <input type="text" bind:value={fields.name} placeholder="Name">
  21. <Message name="name" ></Message>
  22. <input type="text" bind:value={fields.email} placeholder="Email address">
  23. <Message name="email" ></Message>
  24. <button type="submit">Submit</button>
  25. </Form>

Add isInvalid for making input border style.

Example:

  1. <script>
  2. ...
  3. import {Message, isInvalid} from 'svelte-yup';
  4. ...
  5. $: invalid = (name)=>{
  6. if(submitted){
  7. return isInvalid(schema, name, fields);
  8. }
  9. return false;
  10. }
  11. ...
  12. </script>
  1. <input type="text" class:invalid={invalid("name")} bind:value={fields.name} placeholder="Name">
  2. <style>
  3. .invalid {
  4. border-color: red !important;
  5. }
  6. </style>

All messages in one place

Example below to put all messages in one place by AllMessages component.

  1. import {AllMessages} from 'svelte-yup';
  1. <AllMessages ></AllMessages>

Custom Message color

  1. <Form ... color="#b00020">

Components

name props description
Form schema, fields, submitHandler, submitted and color
Message name Error message of a field name by name prop. name should be the schema field name (no label name)
AllMessages Puts all field messages in one place

Functions

isInvalid(schema:Object, name:String, fields:Object)

Example disable button until everything is validated

  1. ...
  2. let btnDisabled = false;
  3. $: if(submitted){
  4. btnDisabled = true;
  5. isValid = schema.isValidSync(fields);
  6. if(isValid){
  7. btnDisabled = false;
  8. }
  9. }
  10. ...
  1. <button type="submit" disabled={btnDisabled}>Submit</button>

Examples with source code

Author

Kamyar Lajani

License

MIT