stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
31 lines • 1.27 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.usePortalSettledCallback = void 0;
var _react = require("react");
var _reactNative = require("react-native");
var _useStableCallback = require("./useStableCallback");
var SETTLE_FRAMES = _reactNative.Platform.OS === 'android' ? 2 : 0;
var scheduleAfterFrames = (callback, frames, rafIds) => {
if (frames <= 0) {
callback();
return;
}
var rafId = requestAnimationFrame(() => scheduleAfterFrames(callback, frames - 1, rafIds));
rafIds.push(rafId);
};
var usePortalSettledCallback = callback => {
var rafIdsRef = (0, _react.useRef)([]);
var stableCallback = (0, _useStableCallback.useStableCallback)(callback);
var clearScheduledFrames = (0, _useStableCallback.useStableCallback)(() => {
rafIdsRef.current.forEach(rafId => cancelAnimationFrame(rafId));
rafIdsRef.current = [];
});
(0, _react.useEffect)(() => clearScheduledFrames, [clearScheduledFrames]);
return (0, _useStableCallback.useStableCallback)((...args) => {
clearScheduledFrames();
scheduleAfterFrames(() => stableCallback(...args), SETTLE_FRAMES, rafIdsRef.current);
});
};
exports.usePortalSettledCallback = usePortalSettledCallback;
//# sourceMappingURL=usePortalSettledCallback.js.map