UNPKG

@uimkit/uikit-react

Version:

<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>

49 lines (44 loc) 2.17 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); require('../../../types/models.js'); require('../../../types/events.js'); function usePrependedMessagesCount(messages) { var firstRealMessageIndex = 0; var firstMessageId = React.useRef(); var earliestMessageId = React.useRef(); var previousNumItemsPrepended = React.useRef(0); var numItemsPrepended = React.useMemo(function () { var _a; if (!messages || !messages.length) { previousNumItemsPrepended.current = 0; return 0; } var currentFirstMessageId = (_a = messages === null || messages === void 0 ? void 0 : messages[firstRealMessageIndex]) === null || _a === void 0 ? void 0 : _a.id; // if no new messages were prepended, return early (same amount as before) if (currentFirstMessageId === earliestMessageId.current) { return previousNumItemsPrepended.current; } if (!firstMessageId.current) { firstMessageId.current = currentFirstMessageId; } earliestMessageId.current = currentFirstMessageId; // if new messages were prepended, find out how many // start with this number because there cannot be fewer prepended items than before for (var i = previousNumItemsPrepended.current; i < messages.length; i += 1) { if (messages[i].id === firstMessageId.current) { previousNumItemsPrepended.current = i; return i; } } // if no match has found, we have jumped - reset the prepend item count. firstMessageId.current = currentFirstMessageId; previousNumItemsPrepended.current = 0; return 0; // TODO: there's a bug here, the messages prop is the same array instance (something mutates it) // that's why the second dependency is necessary }, [messages, messages === null || messages === void 0 ? void 0 : messages.length]); return numItemsPrepended; } exports.usePrependedMessagesCount = usePrependedMessagesCount; //# sourceMappingURL=usePrependedMessagesCount.js.map