@react-hookz/web
Version:
React hooks done right, for browser and SSR.
37 lines (36 loc) • 1.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useValidator = void 0;
var react_1 = require("react");
var __1 = require("..");
/**
* Performs validation when any of provided dependencies has changed.
*
* @param validator Function that performs validation.
* @param deps Dependencies list that passed straight to underlying `useEffect`.
* @param initialValidity Initial validity state.
*/
function useValidator(validator, deps, initialValidity) {
if (initialValidity === void 0) { initialValidity = { isValid: undefined }; }
var _a = (0, __1.useSafeState)(initialValidity), validity = _a[0], setValidity = _a[1];
var validatorRef = (0, __1.useSyncedRef)(function () {
if (validator.length) {
validator(setValidity);
}
else {
setValidity(validator());
}
});
(0, react_1.useEffect)(function () {
validatorRef.current();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, deps);
return [
validity,
(0, react_1.useCallback)(function () {
validatorRef.current();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []),
];
}
exports.useValidator = useValidator;