@uimkit/uikit-react
Version:
<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>
66 lines (61 loc) • 3 kB
JavaScript
;
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