Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 3 additions & 31 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import Ajv from 'ajv';
import JSONSchemaBridge from 'uniforms-bridge-json-schema';
import localize from 'ajv-i18n';
//import addFormats from 'ajv-formats';
Expand All @@ -7,34 +6,7 @@ export { default as DateField } from './DateField';
export { default as PhoneField } from './PhoneField';
export { default as SelectField } from './SelectField';

export const ajv = new Ajv({ allErrors: true, useDefaults: true, coerceTypes: true });
ajv.addKeyword('uniforms');
ajv.addKeyword('options');
//addFormats(ajv);

// email or empty string
ajv.addFormat(
'email',
/(^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$)|(^$)/
);

ajv.addKeyword('isNotEmpty', {
type: 'string',
errors: true,
validate: function validate(schema, data, parent, key) {
validate.errors = [
{
keyword: 'isNotEmpty',
message: 'должно иметь обязательное поле ' + key,
params: { keyword: 'isNotEmpty' }
}
];

return typeof data === 'string' && data.trim() !== '';
}
});

export function createValidator(schema, additionalValidator) {
export function createValidator(schema, ajv, additionalValidator) {
const validator = ajv.compile(schema);

return (model) => {
Expand All @@ -57,6 +29,6 @@ export function createValidator(schema, additionalValidator) {
};
}

export function createSchemaBridge(schema, additionalValidator) {
return new JSONSchemaBridge(schema, createValidator(schema, additionalValidator));
export function createSchemaBridge(schema, ajv, additionalValidator) {
return new JSONSchemaBridge(schema, createValidator(schema, ajv, additionalValidator));
}