UNPKG

@react-form-fields/core

Version:

Material UI Form Fields

63 lines 3.31 kB
"use strict"; 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