UNPKG

@uimkit/uikit-react

Version:

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

66 lines (61 loc) 3 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); require('../../../types/models.js'); require('../../../types/events.js'); require('../../../context/TranslationContext.js'); var UIKitContext = require('../../../context/UIKitContext.js'); require('../../../context/ComponentContext.js'); require('../../../context/ChatActionContext.js'); require('../../../context/MessageInputContext.js'); require('../../../context/UIMessageContext.js'); require('../../../context/ChatStateContext.js'); function useMessageListScrollManager(params) { var onScrollBy = params.onScrollBy, scrollContainerMeasures = params.scrollContainerMeasures, scrolledUpThreshold = params.scrolledUpThreshold, scrollToBottom = params.scrollToBottom, showNewMessages = params.showNewMessages; var activeProfile = UIKitContext.useUIKit('useMessageListScrollManager').activeProfile; var measures = React.useRef({ offsetHeight: 0, scrollHeight: 0, }); var messages = React.useRef(); var scrollTop = React.useRef(0); React.useEffect(function () { var _a; var prevMeasures = measures.current; var prevMessages = messages.current; var newMessages = params.messages; var lastNewMessage = (_a = newMessages[newMessages.length - 1]) !== null && _a !== void 0 ? _a : {}; var lastPrevMessage = prevMessages === null || prevMessages === void 0 ? void 0 : prevMessages[prevMessages.length - 1]; var newMeasures = scrollContainerMeasures(); var wasAtBottom = prevMeasures.scrollHeight - prevMeasures.offsetHeight - scrollTop.current < scrolledUpThreshold; if (typeof prevMessages !== 'undefined') { if (prevMessages.length < newMessages.length) { // messages added to the top if ((lastPrevMessage === null || lastPrevMessage === void 0 ? void 0 : lastPrevMessage.id) === lastNewMessage.id) { var listHeightDelta = newMeasures.scrollHeight - prevMeasures.scrollHeight; if (scrollTop.current === 0) { onScrollBy(listHeightDelta); } } // messages added to the bottom else { var lastMessageIsFromCurrentUser = lastNewMessage.from === activeProfile.id; if (lastMessageIsFromCurrentUser || wasAtBottom) { scrollToBottom(); } else { showNewMessages(); } } } } messages.current = newMessages; measures.current = newMeasures; }, [measures, messages, params.messages]); return function (scrollTopValue) { scrollTop.current = scrollTopValue; }; } exports.useMessageListScrollManager = useMessageListScrollManager; //# sourceMappingURL=useMessageListScrollManager.js.map