gradido/frontend/src/validation-rules.js

122 lines
3.3 KiB
JavaScript

import { configure, extend } from 'vee-validate'
// eslint-disable-next-line camelcase
import { required, email, min, max, is_not } from 'vee-validate/dist/rules'
import { checkUsername } from './graphql/queries'
export const loadAllRules = (i18nCallback) => {
configure({
defaultMessage: (field, values) => {
values._field_ = i18nCallback.t(`fields.${field}`)
return i18nCallback.t(`validations.messages.${values._rule_}`, values)
},
classes: {
valid: 'is-valid',
invalid: 'is-invalid',
dirty: ['is-dirty', 'is-dirty'], // multiple classes per flag!
},
})
extend('email', {
...email,
message: (_, values) => i18nCallback.t('validations.messages.email', values),
})
extend('required', {
...required,
message: (_, values) => i18nCallback.t('validations.messages.required', values),
})
extend('min', {
...min,
message: (_, values) => i18nCallback.t('validations.messages.min', values),
})
extend('max', {
...max,
message: (_, values) => i18nCallback.t('validations.messages.max', values),
})
extend('gddSendAmount', {
validate(value, { min, max }) {
value = value.replace(',', '.')
return value.match(/^[0-9]+(\.[0-9]{0,2})?$/) && Number(value) >= min && Number(value) <= max
},
params: ['min', 'max'],
message: (_, values) => {
values.min = i18nCallback.n(values.min, 'ungroupedDecimal')
values.max = i18nCallback.n(values.max, 'ungroupedDecimal')
return i18nCallback.t('form.validation.gddSendAmount', values)
},
})
extend('gddUsernameUnique', {
async validate(value) {
this.$apollo
.query({
query: checkUsername,
variables: {
username: value,
},
})
.then((result) => {
return result.data.checkUsername.state === 'success'
})
.catch(() => {
return false
})
},
message: (_, values) => i18nCallback.t('form.validation.usernmae-unique', values),
})
extend('gddUsernameRgex', {
validate(value) {
return !!value.match(/^[a-zA-Z][-_a-zA-Z0-9]{2,}$/)
},
message: (_, values) => i18nCallback.t('form.validation.usernmae-regex', values),
})
// eslint-disable-next-line camelcase
extend('is_not', {
// eslint-disable-next-line camelcase
...is_not,
message: (_, values) => i18nCallback.t('form.validation.is-not', values),
})
// Password validation
extend('containsLowercaseCharacter', {
validate(value) {
return !!value.match(/[a-z]+/)
},
message: (_, values) => i18nCallback.t('site.signup.lowercase', values),
})
extend('containsUppercaseCharacter', {
validate(value) {
return !!value.match(/[A-Z]+/)
},
message: (_, values) => i18nCallback.t('site.signup.uppercase', values),
})
extend('containsNumericCharacter', {
validate(value) {
return !!value.match(/[0-9]+/)
},
message: (_, values) => i18nCallback.t('site.signup.one_number', values),
})
extend('atLeastEightCharactera', {
validate(value) {
return !!value.match(/.{8,}/)
},
message: (_, values) => i18nCallback.t('site.signup.minimum', values),
})
extend('samePassword', {
validate(value, [pwd]) {
return value === pwd
},
message: (_, values) => i18nCallback.t('site.signup.dont_match', values),
})
}