vue3-form-validation
Advanced tools
Comparing version 1.0.5 to 1.0.6
@@ -1,16 +0,10 @@ | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.provideBaseForm = exports.useBaseForm = exports.isKeyedRule = exports.isSimpleRule = void 0; | ||
const vue_1 = require("vue"); | ||
const useUid_1 = __importDefault(require("./useUid")); | ||
const Form_1 = __importDefault(require("../Form")); | ||
exports.isSimpleRule = (rule) => typeof rule === 'function'; | ||
exports.isKeyedRule = (rule) => 'key' in rule && 'rule' in rule; | ||
import { inject, onBeforeUnmount, provide, watch } from 'vue'; | ||
import useUid from './useUid'; | ||
import Form from '../Form'; | ||
export const isSimpleRule = (rule) => typeof rule === 'function'; | ||
export const isKeyedRule = (rule) => 'key' in rule && 'rule' in rule; | ||
let registerFieldKey; | ||
function useBaseForm(modelValue, rules) { | ||
const uid = useUid_1.default(); | ||
const registerField = vue_1.inject(registerFieldKey); | ||
export function useBaseForm(modelValue, rules) { | ||
const uid = useUid(); | ||
const registerField = inject(registerFieldKey); | ||
if (!registerField) { | ||
@@ -30,10 +24,9 @@ throw Error('This component can only be used inside of the base form component'); | ||
} | ||
exports.useBaseForm = useBaseForm; | ||
function provideBaseForm() { | ||
const form = new Form_1.default(); | ||
export function provideBaseForm() { | ||
const form = new Form(); | ||
registerFieldKey = Symbol(); | ||
vue_1.provide(registerFieldKey, (uid, { modelValue, rules }) => { | ||
provide(registerFieldKey, (uid, { modelValue, rules }) => { | ||
const formField = form.registerField(uid, rules.value); | ||
formField.modelValue = modelValue.value; | ||
vue_1.watch(modelValue, async (modelValue) => { | ||
watch(modelValue, async (modelValue) => { | ||
formField.modelValue = modelValue; | ||
@@ -44,3 +37,3 @@ if (formField.touched) { | ||
}); | ||
vue_1.onBeforeUnmount(() => { | ||
onBeforeUnmount(() => { | ||
form.onDelete(uid); | ||
@@ -63,2 +56,1 @@ }); | ||
} | ||
exports.provideBaseForm = provideBaseForm; |
@@ -1,7 +0,4 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
let uid = 1; | ||
function useUid() { | ||
export default function useUid() { | ||
return uid++; | ||
} | ||
exports.default = useUid; |
@@ -1,10 +0,5 @@ | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const useForm_1 = require("./composable/useForm"); | ||
const FormField_1 = __importDefault(require("./FormField")); | ||
const utils_1 = require("./utils"); | ||
class Form { | ||
import { isSimpleRule } from './composable/useForm'; | ||
import FormField from './FormField'; | ||
import { tryGet, trySet } from './utils'; | ||
export default class Form { | ||
constructor() { | ||
@@ -15,6 +10,6 @@ this.simpleValidators = new Map(); | ||
registerField(uid, rules) { | ||
const formField = new FormField_1.default(rules); | ||
const formField = new FormField(rules); | ||
const simple = rules.reduce((acc, rule, index) => { | ||
const validate = this.makeValidate(formField, rule, index); | ||
if (useForm_1.isSimpleRule(rule)) { | ||
if (isSimpleRule(rule)) { | ||
acc.validators.push(validate); | ||
@@ -25,3 +20,3 @@ } | ||
acc.keys.push(rule.key); | ||
utils_1.trySet(this.keyedValidators)({ | ||
trySet(this.keyedValidators)({ | ||
failure: validators => { | ||
@@ -32,3 +27,3 @@ validators.add(entry); | ||
acc.rollback.push(() => { | ||
utils_1.tryGet(this.keyedValidators)({ | ||
tryGet(this.keyedValidators)({ | ||
success: validators => { | ||
@@ -70,3 +65,3 @@ validators.delete(entry); | ||
let promise = Promise.allSettled([]); | ||
utils_1.tryGet(this.simpleValidators)({ | ||
tryGet(this.simpleValidators)({ | ||
success: ({ formField, keys, validators }) => { | ||
@@ -84,3 +79,3 @@ if (formField.touched) { | ||
onDelete(uid) { | ||
utils_1.tryGet(this.simpleValidators)({ | ||
tryGet(this.simpleValidators)({ | ||
success({ rollback }) { | ||
@@ -94,3 +89,3 @@ rollback.forEach(r => r()); | ||
return keys.reduce((promises, key) => { | ||
utils_1.tryGet(this.keyedValidators)({ | ||
tryGet(this.keyedValidators)({ | ||
success(validators) { | ||
@@ -134,5 +129,4 @@ let everyFormFieldIsTouched = true; | ||
}; | ||
return validator(formField)(index, useForm_1.isSimpleRule(rule) ? rule : rule.rule); | ||
return validator(formField)(index, isSimpleRule(rule) ? rule : rule.rule); | ||
} | ||
} | ||
exports.default = Form; |
@@ -1,11 +0,9 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const vue_1 = require("vue"); | ||
import { computed, ref } from 'vue'; | ||
const notNull = (value) => value !== null; | ||
class FormField { | ||
export default class FormField { | ||
constructor(rules) { | ||
this.totalWaiting = vue_1.ref(0); | ||
this.totalWaiting = ref(0); | ||
this.errorCount = 0; | ||
this.touched = false; | ||
this.errors = vue_1.ref(rules.map(() => null)); | ||
this.errors = ref(rules.map(() => null)); | ||
this.waiting = rules.map(() => 0); | ||
@@ -38,8 +36,7 @@ } | ||
getErrors() { | ||
return vue_1.computed(() => this.errors.value.filter(notNull)); | ||
return computed(() => this.errors.value.filter(notNull)); | ||
} | ||
validating() { | ||
return vue_1.computed(() => this.totalWaiting.value > 0); | ||
return computed(() => this.totalWaiting.value > 0); | ||
} | ||
} | ||
exports.default = FormField; |
@@ -1,13 +0,1 @@ | ||
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __exportStar = (this && this.__exportStar) || function(m, exports) { | ||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
__exportStar(require("./composable/useForm"), exports); | ||
export * from './composable/useForm'; |
@@ -1,7 +0,2 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.tryGet = exports.trySet = void 0; | ||
var trySet_1 = require("./map/trySet"); | ||
Object.defineProperty(exports, "trySet", { enumerable: true, get: function () { return trySet_1.trySet; } }); | ||
var tryGet_1 = require("./map/tryGet"); | ||
Object.defineProperty(exports, "tryGet", { enumerable: true, get: function () { return tryGet_1.tryGet; } }); | ||
export { trySet } from './map/trySet'; | ||
export { tryGet } from './map/tryGet'; |
@@ -1,5 +0,2 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.tryGet = void 0; | ||
exports.tryGet = (map) => ({ success, failure }) => (key) => { | ||
export const tryGet = (map) => ({ success, failure }) => (key) => { | ||
const value = map.get(key); | ||
@@ -6,0 +3,0 @@ if (value) { |
@@ -1,5 +0,2 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.trySet = void 0; | ||
exports.trySet = (map) => ({ success, failure }) => (key, value) => { | ||
export const trySet = (map) => ({ success, failure }) => (key, value) => { | ||
const _value = map.get(key); | ||
@@ -6,0 +3,0 @@ if (_value) { |
{ | ||
"name": "vue3-form-validation", | ||
"version": "1.0.5", | ||
"description": "Vue 3 form validation", | ||
"version": "1.0.6", | ||
"description": "Form validation for Vue 3", | ||
"author": { | ||
"name": "jens", | ||
"email": "jens@doellmann.com" | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/JensD98/vue3-form-validation.git" | ||
}, | ||
"main": "dist/index.js", | ||
"types": "dist/index.d.ts", | ||
"scripts": { | ||
"test": "jest", | ||
"docs:dev": "cd docs && npx vitepress" | ||
}, | ||
"files": [ | ||
@@ -15,11 +19,9 @@ "dist/**/*.js", | ||
], | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/JensD98/vue-form-validation.git" | ||
"license": "ISC", | ||
"scripts": { | ||
"lint": "npx prettier --write .", | ||
"test": "jest", | ||
"dev": "vite", | ||
"build": "vite build" | ||
}, | ||
"author": { | ||
"name": "jens", | ||
"email": "jens@doellmann.com" | ||
}, | ||
"license": "ISC", | ||
"devDependencies": { | ||
@@ -29,8 +31,10 @@ "@types/jest": "^26.0.15", | ||
"@typescript-eslint/parser": "^4.6.0", | ||
"@vue/compiler-sfc": "^3.0.2", | ||
"eslint": "^7.12.1", | ||
"jest": "^26.6.1", | ||
"prettier": "2.1.2", | ||
"prettier": "^2.1.2", | ||
"ts-jest": "^26.4.3", | ||
"typescript": "^4.0.5", | ||
"vitepress": "^0.7.1" | ||
"vite": "^1.0.0-rc.8", | ||
"vue": "^3.0.2" | ||
}, | ||
@@ -37,0 +41,0 @@ "prettier": { |
# WIP | ||
> Easy to use Form Validation for Vue 3 | ||
@@ -6,6 +7,7 @@ | ||
``` bash | ||
```bash | ||
npm i vue3-form-validation | ||
``` | ||
Validation is async and is utilising `Promise.allSettled()`, which has not yet reached cross-browser stability ([see](https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled)). | ||
Example usage can be found in this [Code Sandbox](https://codesandbox.io/s/vue-3-form-validation-demo-busd9). |
13
11861
11
304