You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.6 KiB
59 lines
1.6 KiB
"use strict";
|
|
|
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports["default"] = useCacheErrors;
|
|
|
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
|
|
var React = _interopRequireWildcard(require("react"));
|
|
|
|
/**
|
|
* Always debounce error to avoid [error -> null -> error] blink
|
|
*/
|
|
function useCacheErrors(errors, changeTrigger, directly) {
|
|
var cacheRef = React.useRef({
|
|
errors: errors,
|
|
visible: !!errors.length
|
|
});
|
|
|
|
var _React$useState = React.useState({}),
|
|
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
|
|
forceUpdate = _React$useState2[1];
|
|
|
|
var update = function update() {
|
|
var prevVisible = cacheRef.current.visible;
|
|
var newVisible = !!errors.length;
|
|
var prevErrors = cacheRef.current.errors;
|
|
cacheRef.current.errors = errors;
|
|
cacheRef.current.visible = newVisible;
|
|
|
|
if (prevVisible !== newVisible) {
|
|
changeTrigger(newVisible);
|
|
} else if (prevErrors.length !== errors.length || prevErrors.some(function (prevErr, index) {
|
|
return prevErr !== errors[index];
|
|
})) {
|
|
forceUpdate({});
|
|
}
|
|
};
|
|
|
|
React.useEffect(function () {
|
|
if (!directly) {
|
|
var timeout = setTimeout(update, 10);
|
|
return function () {
|
|
return clearTimeout(timeout);
|
|
};
|
|
}
|
|
}, [errors]);
|
|
|
|
if (directly) {
|
|
update();
|
|
}
|
|
|
|
return [cacheRef.current.visible, cacheRef.current.errors];
|
|
} |