mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
122 lines
3.3 KiB
JavaScript
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),
|
|
})
|
|
}
|