@react-form-fields/core
Version:
Material UI Form Fields
63 lines • 3.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var React = require("react");
var uuidV4 = require("uuid/v4");
var context_1 = require("../ConfigProvider/context");
var CustomMessage_1 = require("../CustomMessage");
var validator_1 = require("../validator");
var context_2 = require("../validator/context");
var useValidation = function (_a) {
var name = _a.name, value = _a.value, validation = _a.validation, validationContext = _a.validationContext, validationAttributeNames = _a.validationAttributeNames, errorProp = _a.errorMessage, children = _a.children;
var uuid = React.useState(uuidV4())[0];
var config = React.useContext(context_1.default);
var fieldContext = React.useContext(context_2.FieldValidationContext);
if (!config)
throw new Error('You must provide a valid FieldValidationConfigContext');
var _b = React.useState(false), dirty = _b[0], setDirty = _b[1];
var _c = React.useState(false), submitted = _c[0], setSubmitted = _c[1];
var _d = React.useState(''), errorMessage = _d[0], setErrorMessage = _d[1];
var _e = React.useState(Promise.resolve(true)), isValid = _e[0], setIsValid = _e[1];
var customMessages = React.useMemo(function () {
return React.Children
.toArray(children)
.filter(function (child) { return child.type === CustomMessage_1.default; })
.reduce(function (acc, child) {
child.props.rules.split(',').forEach(function (rule) { return acc[rule] = child.props.children; });
return acc;
}, tslib_1.__assign({}, (config.validation || { customMessages: {} }).customMessages));
}, [children, config]);
React.useEffect(function () {
if (errorProp) {
setIsValid(Promise.resolve(false));
setErrorMessage(errorProp);
return function () { };
}
var isValidPromise;
setIsValid(new Promise(function (r) { return isValidPromise = r; }));
var timeout = setTimeout(function () {
var errorMessage = validator_1.validate(name, value, validation, validationContext, validationAttributeNames, customMessages).message;
isValidPromise(!errorMessage);
setErrorMessage(errorMessage);
}, config.validationDelay === undefined ? 500 : config.validationDelay);
return function () { return clearTimeout(timeout); };
}, [name, value, validation, validationContext, validationAttributeNames, customMessages, errorProp, setIsValid]);
React.useEffect(function () {
fieldContext && fieldContext.register(uuid, {
isValid: isValid,
onSubmitChange: function (submitted) { return setSubmitted(submitted); },
onResetRequested: function () { setSubmitted(false); setDirty(false); }
});
return function () { return fieldContext && fieldContext.unregister(uuid); };
}, [fieldContext, errorMessage, setSubmitted, setDirty]);
return {
isValid: !errorMessage,
errorMessage: errorMessage,
showError: submitted || dirty || !!errorProp,
dirty: dirty,
setDirty: setDirty,
submitted: submitted
};
};
exports.default = useValidation;
//# sourceMappingURL=useValidation.js.map