stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
36 lines • 1.29 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useRAFCoalescedValue = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var useRAFCoalescedValue = (value, isEnabled) => {
var _useState = (0, _react.useState)(value),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
emitted = _useState2[0],
setEmitted = _useState2[1];
var pendingRef = (0, _react.useRef)(value);
var rafIdRef = (0, _react.useRef)(null);
(0, _react.useEffect)(() => {
if (value === pendingRef.current || !isEnabled) return;
pendingRef.current = value;
if (rafIdRef.current) return;
var run = () => {
rafIdRef.current = null;
setEmitted(pendingRef.current);
};
rafIdRef.current = requestAnimationFrame(run);
}, [value, isEnabled]);
(0, _react.useEffect)(() => {
return () => {
if (rafIdRef.current) {
cancelAnimationFrame(rafIdRef.current);
rafIdRef.current = null;
}
};
}, []);
return isEnabled ? emitted : value;
};
exports.useRAFCoalescedValue = useRAFCoalescedValue;
//# sourceMappingURL=useRAFCoalescedValue.js.map