UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

63 lines 1.85 kB
Object.defineProperty(exports, "__esModule", { value: true }); exports.usePrunableMessageList = usePrunableMessageList; var _react = require("react"); var _useStableCallback = require("./useStableCallback"); var calculateSafeGap = maximumMessages => 0.2 * maximumMessages; var isNearEnd = ({ rangeConfig, maximumMessageLimit }) => { var first = rangeConfig.first, last = rangeConfig.last, inverted = rangeConfig.inverted; var safeGap = calculateSafeGap(maximumMessageLimit); if (!inverted) return first <= safeGap; return last >= maximumMessageLimit - 1 - safeGap; }; function usePrunableMessageList({ setMessages: rawSetMessages, maximumMessageLimit }) { var visibleRangeConfigRef = (0, _react.useRef)({ first: 0, inverted: true, last: -1 }); var viewabilityChangedCallback = (0, _useStableCallback.useStableCallback)(({ viewableItems, inverted = true }) => { if (!viewableItems?.length || maximumMessageLimit == null) return; var first = Infinity; var last = -1; for (var v of viewableItems) { if (v.index == null) continue; if (v.index < first) first = v.index; if (v.index > last) last = v.index; } if (first !== Infinity) visibleRangeConfigRef.current = { first, inverted, last }; }); var setMessages = (0, _useStableCallback.useStableCallback)(channel => { var rangeConfig = visibleRangeConfigRef.current; if (maximumMessageLimit == null || channel.state.messages.length <= maximumMessageLimit || isNearEnd({ maximumMessageLimit, rangeConfig })) { rawSetMessages(channel); return; } channel.state.pruneOldest(maximumMessageLimit); rawSetMessages(channel); }); return { setMessages, viewabilityChangedCallback }; } //# sourceMappingURL=usePrunableMessageList.js.map