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 }) .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('atLeastOneSpecialCharater', { validate(value) { return !!value.match(/[^a-zA-Z0-9 \t\n\r]/) }, message: (_, values) => i18nCallback.t('site.signup.special-char', values), }) extend('noWhitespaceCharacters', { validate(value) { return !value.match(/[ \t\n\r]+/) }, message: (_, values) => i18nCallback.t('site.signup.no-whitespace', values), }) extend('samePassword', { validate(value, [pwd]) { return value === pwd }, message: (_, values) => i18nCallback.t('site.signup.dont_match', values), }) }