@sendbird/uikit-react
Version:
Sendbird UIKit for React: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.
160 lines (154 loc) • 8.51 kB
JavaScript
import { useCallback, useEffect } from 'react';
import { ReplyType } from '@sendbird/chat/message';
import { s as scrollIntoLast, d as scrollToRenderedMessage } from './bundle-DTPVMi5x.js';
import './bundle-DfThYlSD.js';
import { f as SCROLL_BOTTOM_DELAY_FOR_FETCH } from './bundle-DmYFHm_s.js';
// For legacy
// These are not used for collections(GroupChannel)
var PREV_RESULT_SIZE = 30;
var NEXT_RESULT_SIZE = 15;
var RESET_MESSAGES = 'RESET_MESSAGES';
var FETCH_INITIAL_MESSAGES_START = 'FETCH_INITIAL_MESSAGES_START';
var FETCH_INITIAL_MESSAGES_SUCCESS = 'FETCH_INITIAL_MESSAGES_SUCCESS';
var FETCH_INITIAL_MESSAGES_FAILURE = 'FETCH_INITIAL_MESSAGES_FAILURE';
var FETCH_PREV_MESSAGES_SUCCESS = 'FETCH_PREV_MESSAGES_SUCCESS';
var FETCH_PREV_MESSAGES_FAILURE = 'FETCH_PREV_MESSAGES_FAILURE';
var FETCH_NEXT_MESSAGES_SUCCESS = 'FETCH_NEXT_MESSAGES_SUCCESS';
var FETCH_NEXT_MESSAGES_FAILURE = 'FETCH_NEXT_MESSAGES_FAILURE';
var SEND_MESSAGE_START = 'SEND_MESSAGE_START';
var SEND_MESSAGE_SUCCESS = 'SEND_MESSAGE_SUCCESS';
var SEND_MESSAGE_FAILURE = 'SEND_MESSAGE_FAILURE';
var RESEND_MESSAGE_START = 'RESEND_MESSAGE_START';
var ON_MESSAGE_RECEIVED = 'ON_MESSAGE_RECEIVED';
var ON_MESSAGE_UPDATED = 'ON_MESSAGE_UPDATED';
var ON_MESSAGE_THREAD_INFO_UPDATED = 'ON_MESSAGE_THREAD_INFO_UPDATED';
var ON_MESSAGE_DELETED = 'ON_MESSAGE_DELETED';
var ON_MESSAGE_DELETED_BY_REQ_ID = 'ON_MESSAGE_DELETED_BY_REQ_ID';
var SET_CURRENT_CHANNEL = 'SET_CURRENT_CHANNEL';
var SET_CHANNEL_INVALID = 'SET_CHANNEL_INVALID';
var MARK_AS_READ = 'MARK_AS_READ';
var MARK_AS_UNREAD = 'MARK_AS_UNREAD';
var ON_REACTION_UPDATED = 'ON_REACTION_UPDATED';
var SET_EMOJI_CONTAINER = 'SET_EMOJI_CONTAINER';
var MESSAGE_LIST_PARAMS_CHANGED = 'MESSAGE_LIST_PARAMS_CHANGED';
var ON_FILE_INFO_UPLOADED = 'ON_FILE_INFO_UPLOADED';
var ON_TYPING_STATUS_UPDATED = 'ON_TYPING_STATUS_UPDATED';
var channelActions = /*#__PURE__*/Object.freeze({
__proto__: null,
FETCH_INITIAL_MESSAGES_FAILURE: FETCH_INITIAL_MESSAGES_FAILURE,
FETCH_INITIAL_MESSAGES_START: FETCH_INITIAL_MESSAGES_START,
FETCH_INITIAL_MESSAGES_SUCCESS: FETCH_INITIAL_MESSAGES_SUCCESS,
FETCH_NEXT_MESSAGES_FAILURE: FETCH_NEXT_MESSAGES_FAILURE,
FETCH_NEXT_MESSAGES_SUCCESS: FETCH_NEXT_MESSAGES_SUCCESS,
FETCH_PREV_MESSAGES_FAILURE: FETCH_PREV_MESSAGES_FAILURE,
FETCH_PREV_MESSAGES_SUCCESS: FETCH_PREV_MESSAGES_SUCCESS,
MARK_AS_READ: MARK_AS_READ,
MARK_AS_UNREAD: MARK_AS_UNREAD,
MESSAGE_LIST_PARAMS_CHANGED: MESSAGE_LIST_PARAMS_CHANGED,
ON_FILE_INFO_UPLOADED: ON_FILE_INFO_UPLOADED,
ON_MESSAGE_DELETED: ON_MESSAGE_DELETED,
ON_MESSAGE_DELETED_BY_REQ_ID: ON_MESSAGE_DELETED_BY_REQ_ID,
ON_MESSAGE_RECEIVED: ON_MESSAGE_RECEIVED,
ON_MESSAGE_THREAD_INFO_UPDATED: ON_MESSAGE_THREAD_INFO_UPDATED,
ON_MESSAGE_UPDATED: ON_MESSAGE_UPDATED,
ON_REACTION_UPDATED: ON_REACTION_UPDATED,
ON_TYPING_STATUS_UPDATED: ON_TYPING_STATUS_UPDATED,
RESEND_MESSAGE_START: RESEND_MESSAGE_START,
RESET_MESSAGES: RESET_MESSAGES,
SEND_MESSAGE_FAILURE: SEND_MESSAGE_FAILURE,
SEND_MESSAGE_START: SEND_MESSAGE_START,
SEND_MESSAGE_SUCCESS: SEND_MESSAGE_SUCCESS,
SET_CHANNEL_INVALID: SET_CHANNEL_INVALID,
SET_CURRENT_CHANNEL: SET_CURRENT_CHANNEL,
SET_EMOJI_CONTAINER: SET_EMOJI_CONTAINER
});
function useInitialMessagesFetch(_a, _b) {
var currentGroupChannel = _a.currentGroupChannel, initialTimeStamp = _a.initialTimeStamp, userFilledMessageListQuery = _a.userFilledMessageListQuery, replyType = _a.replyType, setIsScrolled = _a.setIsScrolled;
var logger = _b.logger, scrollRef = _b.scrollRef, messagesDispatcher = _b.messagesDispatcher;
var channelUrl = currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url;
/**
* useCallback(() => {}, [currentGroupChannel]) was buggy, that is why we did
* const channelUrl = currentGroupChannel && currentGroupChannel.url;
* useCallback(() => {}, [channelUrl])
* Again, this hook is supposed to execute when currentGroupChannel changes
* The 'channelUrl' here is not the same memory reference from Conversation.props
*/
var fetchMessages = useCallback(function () {
logger.info('Channel useInitialMessagesFetch: Setup started', currentGroupChannel);
setIsScrolled(false);
messagesDispatcher({
type: RESET_MESSAGES,
payload: null,
});
if (currentGroupChannel && (currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.getMessagesByTimestamp)) {
var messageListParams_1 = {
prevResultSize: PREV_RESULT_SIZE,
isInclusive: true,
includeReactions: true,
includeMetaArray: true,
};
if (initialTimeStamp) {
messageListParams_1.nextResultSize = NEXT_RESULT_SIZE;
}
if (replyType === 'QUOTE_REPLY' || replyType === 'THREAD') {
messageListParams_1.includeThreadInfo = true;
messageListParams_1.includeParentMessageInfo = true;
messageListParams_1.replyType = ReplyType.ONLY_REPLY_TO_CHANNEL;
}
if (userFilledMessageListQuery) {
Object.keys(userFilledMessageListQuery).forEach(function (key) {
// @ts-ignore
messageListParams_1[key] = userFilledMessageListQuery[key];
});
}
if ((replyType
&& (replyType === 'QUOTE_REPLY' || replyType === 'THREAD'))
|| userFilledMessageListQuery) {
logger.info('Channel useInitialMessagesFetch: Setup messageListParams', messageListParams_1);
messagesDispatcher({
type: MESSAGE_LIST_PARAMS_CHANGED,
payload: messageListParams_1,
});
}
logger.info('Channel: Fetching messages', { currentGroupChannel: currentGroupChannel, userFilledMessageListQuery: userFilledMessageListQuery });
messagesDispatcher({
type: FETCH_INITIAL_MESSAGES_START,
payload: null,
});
currentGroupChannel
.getMessagesByTimestamp(initialTimeStamp || new Date().getTime(), messageListParams_1)
.then(function (messages) {
messagesDispatcher({
type: FETCH_INITIAL_MESSAGES_SUCCESS,
payload: {
currentGroupChannel: currentGroupChannel,
messages: messages,
},
});
})
.catch(function (error) {
logger.error('Channel: Fetching messages failed', error);
messagesDispatcher({
type: FETCH_INITIAL_MESSAGES_FAILURE,
payload: { currentGroupChannel: currentGroupChannel },
});
})
.finally(function () {
if (!initialTimeStamp) {
setTimeout(function () { return scrollIntoLast(0, scrollRef, setIsScrolled); }, SCROLL_BOTTOM_DELAY_FOR_FETCH);
}
else {
setTimeout(function () {
scrollToRenderedMessage(scrollRef, initialTimeStamp, setIsScrolled);
}, 500);
}
});
}
}, [channelUrl, userFilledMessageListQuery, initialTimeStamp]);
useEffect(function () {
fetchMessages();
}, [fetchMessages]);
return fetchMessages;
}
export { FETCH_INITIAL_MESSAGES_START as F, MARK_AS_READ as M, NEXT_RESULT_SIZE as N, ON_MESSAGE_RECEIVED as O, PREV_RESULT_SIZE as P, RESET_MESSAGES as R, SEND_MESSAGE_START as S, FETCH_INITIAL_MESSAGES_SUCCESS as a, FETCH_PREV_MESSAGES_SUCCESS as b, FETCH_NEXT_MESSAGES_SUCCESS as c, FETCH_INITIAL_MESSAGES_FAILURE as d, FETCH_PREV_MESSAGES_FAILURE as e, FETCH_NEXT_MESSAGES_FAILURE as f, SEND_MESSAGE_SUCCESS as g, SEND_MESSAGE_FAILURE as h, SET_CURRENT_CHANNEL as i, SET_CHANNEL_INVALID as j, ON_MESSAGE_UPDATED as k, ON_MESSAGE_THREAD_INFO_UPDATED as l, RESEND_MESSAGE_START as m, ON_MESSAGE_DELETED as n, ON_MESSAGE_DELETED_BY_REQ_ID as o, SET_EMOJI_CONTAINER as p, ON_REACTION_UPDATED as q, MESSAGE_LIST_PARAMS_CHANGED as r, ON_FILE_INFO_UPLOADED as s, ON_TYPING_STATUS_UPDATED as t, MARK_AS_UNREAD as u, useInitialMessagesFetch as v, channelActions as w };
//# sourceMappingURL=bundle-Cxa3LJW8.js.map