Я использую React-admin, который использует примитивы для проверки своих форм.Я использую asyncValidation
и asyncBlurFields
для выполнения проверки на стороне сервера перед тем, как пользователь отправит что-либо.
Проверка работает, когда фокус покидает проверенное поле.Однако, если пользователь вводит неправильное значение в поле, а затем нажимает кнопку отправки (до изменения фокуса), форма отправляется до того, как сработает ошибка.
Здесь форма:
<SimpleForm
basePath={basePath}
redirect="list"
resource={resource}
record={record}
save={save}
asyncValidate={asyncValidate}
asyncBlurFields={["price"]}
>
<DisabledInput source="id" />
<TextInput source="flavor" />
<ReferenceInput
source="categoryId"
reference="categories"
validate={[required()]}
>
<SelectInput optionText="name" {...props} />
</ReferenceInput>
<NumberInput source="price" validate={[number(), minValue(0)]} />
</SimpleForm>
А вот функция asyncValidate:
const asyncValidate = async (values, dispatch, props, field) => {
return new Promise(async (resolve, reject) => {
if (field === "price") {
const res = await dataProviderFactory(GET_ONE, "categories", {
id: values.categoryId
});
const data = await res.data;
if (values.price && data.price_by_size)
return reject({ price: "price do not allowed" });
return resolve();
}
});
};
Есть ли какое-либо свойство (вact-admin или redux-формах), которое могло бы предотвратить отправку формы до ответа от asyncValidation?