Mobx реагирует на пользовательские правила DVR

У меня есть следующие пользовательские правила (https://foxhound87.github.io/mobx-react-form/docs/validation/modes/dvr-custom.html):

const rules: Object = {
    telephone: {
        function: (value: string) => value.match(/^\d{3}-\d{3}-\d{4}$/),
        message: 'The :attribute phone number is not in the format XXX-XXX-XXXX.'
    },

    password: {
        function: (value: string) => value.length > 7,
        getValue: value => value,
        message: 'boom boom boom'
    },

    confirmPassword: {
        function: (confirmPassword: string) => { console.log(rules.password.getValue()) },
        message: 'Passwords should be equal'
    }
};

и они используются так:

...
    {
        name: 'changePassword',
        label: 'Change your password',
        fields: [
            {
                name: 'password',
                label: t('user:New pasword'),
                rules: 'password',
                value: itemData.passowrd,
                type: 'password'
            },
            {
                name: 'confirmPassword',
                label: t('user:Confirm password'),
                rules: 'confirmPassword',
                value: itemData.confirmPassowrd,
                type: 'password'
            }
        ]
    },
...

и я пытаюсь получить значение пароля в правиле confirmPassword, но, похоже, это не работает с той работой, которую я делаю. Он возвращает неопределенное значение.


person Alessandro    schedule 19.07.2018    source источник


Ответы (1)


Если вы используете плагин DVR, вы можете просто применить правило same:attribute:

{
  name: 'confirmPassword',
  label: t('user:Confirm password'),
  rules: 'same:password',
  value: itemData.confirmPassowrd,
  type: 'password'
}

В качестве альтернативы вы можете использовать пользовательскую функцию проверки вот так:

{
  name: 'confirmPassword',
  label: t('user:Confirm password'),
  value: itemData.confirmPassowrd,
  type: 'password',
  validators: ({ field, form }) => [
    field.value === form.$('password').value,
    'Passwords do not match.',
  ],
}
person sashko    schedule 11.10.2018