store-forms
Version:
Typescript forms for Pinia store
45 lines (32 loc) • 1.2 kB
text/typescript
import { useResetForm } from "./useResetForm";
import FieldInterface from "../Form/Field/FieldInterface";
export function useValidateForm (fields: FieldInterface[]): {[key: string]: string[]} {
const errors = {}
useResetForm(fields)
for (let i = 0; i < fields.length; i++) {
const field: FieldInterface = fields[i]
const required = field.required
if (required && (typeof field.value === "boolean" ? !field.value : !field.value.length)) {
field.errors.push(field.requiredErrorMessage)
if (typeof errors[field.name] === "undefined") {
errors[field.name] = []
}
errors[field.name].push(field.requiredErrorMessage)
continue
}
if (required || (!required && field.value.length)) {
for (let ii = 0; ii < field.rules.length; ii++) { // Validate rules
const rule = field.rules[ii]
if (!rule.test(field.value)) {
const message = rule.message(field.title, field.value)
field.errors.push(message)
if (typeof errors[field.name] === "undefined") {
errors[field.name] = []
}
errors[field.name].push(message)
}
}
}
}
return errors
}