@reactway/forms-core
Advanced tools
Comparing version 0.0.0-canary.18e3389 to 0.0.0-canary.2efc081
@@ -24,2 +24,4 @@ import { FieldStatus, Updater, TextSelection } from "./field-state"; | ||
setFormErrors(errors: NestedDictionary<ValidationResultOrString[]>): void; | ||
setFieldValidationResults(fieldSelector: FieldSelector, errors: ValidationResultOrString[]): void; | ||
resetFieldValidationResults(fieldSelector: FieldSelector): void; | ||
} |
@@ -0,1 +1,2 @@ | ||
import { Dictionary } from "./type-helpers"; | ||
export interface Validator<TValue> { | ||
@@ -8,6 +9,6 @@ name: string; | ||
export interface ValidatorHelpers { | ||
error: (message: string, code?: string) => ValidationResult & { | ||
error: (message: string, code?: string, data?: Dictionary<any>) => ValidationResult & { | ||
type: ValidationResultType.Error; | ||
}; | ||
warning: (message: string, code?: string) => ValidationResult & { | ||
warning: (message: string, code?: string, data?: Dictionary<any>) => ValidationResult & { | ||
type: ValidationResultType.Warning; | ||
@@ -21,2 +22,3 @@ }; | ||
validatorName?: string; | ||
data?: Dictionary<any>; | ||
code?: string; | ||
@@ -23,0 +25,0 @@ } |
@@ -147,5 +147,7 @@ import { TinyEmitter } from '@reactway/tiny-emitter'; | ||
mutableValidatorsOrder.push(id); | ||
fieldState.validation.results = []; | ||
return id; | ||
}, | ||
unregisterValidator: (fieldId, validatorId) => { | ||
var _a, _b; | ||
const fieldState = helpers.selectField(fieldId); | ||
@@ -156,5 +158,7 @@ if (fieldState == null || fieldState.validation.validators[validatorId] == null) { | ||
} | ||
(_b = (_a = fieldState.validation.currentValidation) === null || _a === void 0 ? void 0 : _a.cancellationToken) === null || _b === void 0 ? void 0 : _b.cancel(); | ||
const mutableValidators = fieldState.validation.validators; | ||
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete | ||
delete mutableValidators[validatorId]; | ||
fieldState.validation.results = []; | ||
const validatorOrderIndex = fieldState.validation.validatorsOrder.findIndex(x => x === validatorId); | ||
@@ -168,3 +172,10 @@ if (validatorOrderIndex === -1) { | ||
setFormErrors: errors => { | ||
// TODO: Rename this updater. | ||
setFormErrors(state, errors); | ||
}, | ||
setFieldValidationResults: (fieldSelector, errors) => { | ||
setFieldValidationResults(helpers, fieldSelector, errors); | ||
}, | ||
resetFieldValidationResults: fieldSelector => { | ||
resetFieldValidationResults(helpers, fieldSelector); | ||
} | ||
@@ -251,2 +262,5 @@ }; | ||
}); | ||
if (validationResults.some(x => x.type === ValidationResultType.Error)) { | ||
cancellationToken.cancel(); | ||
} | ||
} | ||
@@ -260,3 +274,3 @@ updateFieldAsync(fieldSelector, store, cancellationToken, state => { | ||
return { | ||
error: (message, code) => ({ | ||
error: (message, code, data) => ({ | ||
type: ValidationResultType.Error, | ||
@@ -266,5 +280,6 @@ message: message, | ||
origin: origin, | ||
validatorName: validatorName | ||
validatorName: validatorName, | ||
data: data | ||
}), | ||
warning: (message, code) => ({ | ||
warning: (message, code, data) => ({ | ||
type: ValidationResultType.Warning, | ||
@@ -274,3 +289,4 @@ message: message, | ||
origin: origin, | ||
validatorName: validatorName | ||
validatorName: validatorName, | ||
data: data | ||
}) | ||
@@ -338,2 +354,17 @@ }; | ||
} | ||
function setFieldValidationResults(helpers, fieldSelector, errors) { | ||
const fieldState = helpers.selectField(fieldSelector); | ||
assertFieldIsDefined(fieldState); | ||
fieldState.validation.results = errors.map(result => typeof result !== "string" | ||
? result | ||
: { | ||
message: result, | ||
type: ValidationResultType.Error | ||
}); | ||
} | ||
function resetFieldValidationResults(helpers, fieldSelector) { | ||
const fieldState = helpers.selectField(fieldSelector); | ||
assertFieldIsDefined(fieldState); | ||
fieldState.validation.results = []; | ||
} | ||
@@ -354,2 +385,3 @@ const formsLogger = Debug("@reactway:forms"); | ||
} | ||
fieldState.validation.results = []; | ||
const modifiers = fieldState.data.modifiers; | ||
@@ -356,0 +388,0 @@ const modifiersKeys = Object.keys(modifiers); |
@@ -150,5 +150,7 @@ 'use strict'; | ||
mutableValidatorsOrder.push(id); | ||
fieldState.validation.results = []; | ||
return id; | ||
}, | ||
unregisterValidator: (fieldId, validatorId) => { | ||
var _a, _b; | ||
const fieldState = helpers.selectField(fieldId); | ||
@@ -159,5 +161,7 @@ if (fieldState == null || fieldState.validation.validators[validatorId] == null) { | ||
} | ||
(_b = (_a = fieldState.validation.currentValidation) === null || _a === void 0 ? void 0 : _a.cancellationToken) === null || _b === void 0 ? void 0 : _b.cancel(); | ||
const mutableValidators = fieldState.validation.validators; | ||
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete | ||
delete mutableValidators[validatorId]; | ||
fieldState.validation.results = []; | ||
const validatorOrderIndex = fieldState.validation.validatorsOrder.findIndex(x => x === validatorId); | ||
@@ -171,3 +175,10 @@ if (validatorOrderIndex === -1) { | ||
setFormErrors: errors => { | ||
// TODO: Rename this updater. | ||
setFormErrors(state, errors); | ||
}, | ||
setFieldValidationResults: (fieldSelector, errors) => { | ||
setFieldValidationResults(helpers, fieldSelector, errors); | ||
}, | ||
resetFieldValidationResults: fieldSelector => { | ||
resetFieldValidationResults(helpers, fieldSelector); | ||
} | ||
@@ -254,2 +265,5 @@ }; | ||
}); | ||
if (validationResults.some(x => x.type === exports.ValidationResultType.Error)) { | ||
cancellationToken.cancel(); | ||
} | ||
} | ||
@@ -263,3 +277,3 @@ updateFieldAsync(fieldSelector, store, cancellationToken, state => { | ||
return { | ||
error: (message, code) => ({ | ||
error: (message, code, data) => ({ | ||
type: exports.ValidationResultType.Error, | ||
@@ -269,5 +283,6 @@ message: message, | ||
origin: origin, | ||
validatorName: validatorName | ||
validatorName: validatorName, | ||
data: data | ||
}), | ||
warning: (message, code) => ({ | ||
warning: (message, code, data) => ({ | ||
type: exports.ValidationResultType.Warning, | ||
@@ -277,3 +292,4 @@ message: message, | ||
origin: origin, | ||
validatorName: validatorName | ||
validatorName: validatorName, | ||
data: data | ||
}) | ||
@@ -341,2 +357,17 @@ }; | ||
} | ||
function setFieldValidationResults(helpers, fieldSelector, errors) { | ||
const fieldState = helpers.selectField(fieldSelector); | ||
assertFieldIsDefined(fieldState); | ||
fieldState.validation.results = errors.map(result => typeof result !== "string" | ||
? result | ||
: { | ||
message: result, | ||
type: exports.ValidationResultType.Error | ||
}); | ||
} | ||
function resetFieldValidationResults(helpers, fieldSelector) { | ||
const fieldState = helpers.selectField(fieldSelector); | ||
assertFieldIsDefined(fieldState); | ||
fieldState.validation.results = []; | ||
} | ||
@@ -357,2 +388,3 @@ const formsLogger = Debug("@reactway:forms"); | ||
} | ||
fieldState.validation.results = []; | ||
const modifiers = fieldState.data.modifiers; | ||
@@ -359,0 +391,0 @@ const modifiersKeys = Object.keys(modifiers); |
{ | ||
"name": "@reactway/forms-core", | ||
"description": "React forms.", | ||
"version": "0.0.0-canary.18e3389", | ||
"version": "0.0.0-canary.2efc081", | ||
"author": "Reactway <dev@reactway.com> (https://github.com/reactway)", | ||
@@ -14,3 +14,3 @@ "dependencies": { | ||
"devDependencies": { | ||
"@reactway-tools/rollup": "^0.0.0-canary.18e3389", | ||
"@reactway-tools/rollup": "0.0.0-canary.2efc081", | ||
"@reactway/eslint-config": "^1.0.1", | ||
@@ -17,0 +17,0 @@ "@types/debug": "^4.1.5", |
95304
2222