UNPKG

@sendbird/uikit-react

Version:

Sendbird UIKit for React: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.

890 lines (884 loc) 41 kB
'use strict'; var _tslib = require('./bundle-Conb-pOy.js'); var groupChannel = require('@sendbird/chat/groupChannel'); var utils_message_getOutgoingMessageState = require('../utils/message/getOutgoingMessageState.js'); var browser = require('./bundle-DAdgL6r8.js'); var index$1 = require('./bundle-Dobj18FB.js'); var index = require('./bundle-CVJwHwWn.js'); var consts = require('./bundle-Cfh78Xnm.js'); /** * @name startOfSecond * @category Second Helpers * @summary Return the start of a second for the given date. * * @description * Return the start of a second for the given date. * The result will be in the local timezone. * * @param {Date|Number} date - the original date * @returns {Date} the start of a second * @throws {TypeError} 1 argument required * * @example * // The start of a second for 1 December 2014 22:15:45.400: * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400)) * //=> Mon Dec 01 2014 22:15:45.000 */ function startOfSecond(dirtyDate) { index.requiredArgs(1, arguments); var date = index.toDate(dirtyDate); date.setMilliseconds(0); return date; } /** * @name isSameSecond * @category Second Helpers * @summary Are the given dates in the same second (and hour and day)? * * @description * Are the given dates in the same second (and hour and day)? * * @param {Date|Number} dateLeft - the first date to check * @param {Date|Number} dateRight - the second date to check * @returns {Boolean} the dates are in the same second (and hour and day) * @throws {TypeError} 2 arguments required * * @example * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500 in the same second? * const result = isSameSecond( * new Date(2014, 8, 4, 6, 30, 15), * new Date(2014, 8, 4, 6, 30, 15, 500) * ) * //=> true * * @example * // Are 4 September 2014 06:00:15.000 and 4 September 2014 06:01.15.000 in the same second? * const result = isSameSecond( * new Date(2014, 8, 4, 6, 0, 15), * new Date(2014, 8, 4, 6, 1, 15) * ) * //=> false * * @example * // Are 4 September 2014 06:00:15.000 and 5 September 2014 06:00.15.000 in the same second? * const result = isSameSecond( * new Date(2014, 8, 4, 6, 0, 15), * new Date(2014, 8, 5, 6, 0, 15) * ) * //=> false */ function isSameSecond(dirtyDateLeft, dirtyDateRight) { index.requiredArgs(2, arguments); var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft); var dateRightStartOfSecond = startOfSecond(dirtyDateRight); return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime(); } var _a; // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types var SUPPORTED_MIMES = { IMAGE: [ 'image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/svg+xml', 'image/webp', // not supported in IE 'image/bmp', ], VIDEO: [ 'video/mpeg', 'video/ogg', 'video/webm', 'video/mp4', // 'video/quicktime', // NOTE: Do not support ThumbnailMessage for the .mov video ], AUDIO: [ 'audio/aac', 'audio/midi', 'audio/x-midi', 'audio/mpeg', 'audio/ogg', 'audio/opus', 'audio/wav', 'audio/webm', 'audio/3gpp', 'audio/3gpp2', 'audio/mp3', ], DOCUMENT: [ 'text/plain', 'text/css', 'text/csv', 'text/html', 'text/calendar', 'text/javascript', 'text/xml', 'text/x-log', 'video/quicktime', // NOTE: Assume this video is a normal file, not video ], APPLICATION: [ 'application/x-abiword', 'application/x-freearc', 'application/vnd.amazon.ebook', 'application/octet-stream', 'application/x-bzip', 'application/x-bzip2', 'application/x-cdf', 'application/x-csh', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.ms-fontobject', 'application/epub+zip', 'application/gzip', 'application/java-archive', 'application/json', 'application/ld+json', 'application/vnd.apple.installer+xml', 'application/vnd.oasis.opendocument.presentation', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.text', 'application/ogg', 'application/pdf', 'application/x-httpd-php', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.rar', 'application/rtf', 'application/x-sh', 'application/x-tar', 'application/vnd.visio', 'application/xhtml+xml', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/xml', 'application/vnd.mozilla.xul+xml', 'application/zip', 'application/x-7z-compressed', ], ARCHIVE: [ 'application/zip', 'application/x-rar-compressed', 'application/x-7z-compressed', 'application/x-tar', 'application/gzip', 'application/x-bzip', 'application/x-bzip2', 'application/x-xz', 'application/x-iso9660-image', ], }; var SUPPORTED_FILE_EXTENSIONS = { IMAGE: ['.apng', '.avif', '.gif', '.jpg', '.jpeg', '.jfif', '.pjpeg', '.pjp', '.png', '.svg', '.webp', '.bmp', '.ico', '.cur', '.tif', '.tiff', '.heic', '.heif'], VIDEO: ['.mp4', '.webm', '.ogv', '.3gp', '.3g2', '.avi', '.mov', '.wmv', '.mpg', '.mpeg', '.m4v', '.mkv'], AUDIO: ['.aac', '.midi', '.mp3', '.oga', '.opus', '.wav', '.weba', '.3gp', '.3g2'], DOCUMENT: ['.txt', '.log', '.csv', '.rtf', '.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx'], ARCHIVE: ['.zip', '.rar', '.7z', '.tar', '.gz', '.bz2', '.xz', '.iso'], }; var getMimeTypesUIKitAccepts = function (acceptableTypes) { if (Array.isArray(acceptableTypes) && acceptableTypes.length > 0) { var uniqueTypes = acceptableTypes .reduce(function (prev, curr) { var lowerCurr = curr.toLowerCase(); switch (lowerCurr) { case 'image': { prev.push.apply(prev, _tslib.__spreadArray(_tslib.__spreadArray([], SUPPORTED_MIMES.IMAGE, false), SUPPORTED_FILE_EXTENSIONS.IMAGE, false)); break; } case 'video': { prev.push.apply(prev, _tslib.__spreadArray(_tslib.__spreadArray([], SUPPORTED_MIMES.VIDEO, false), SUPPORTED_FILE_EXTENSIONS.VIDEO, false)); break; } case 'audio': { prev.push.apply(prev, _tslib.__spreadArray(_tslib.__spreadArray([], SUPPORTED_MIMES.AUDIO, false), SUPPORTED_FILE_EXTENSIONS.AUDIO, false)); break; } case 'archive': { prev.push.apply(prev, _tslib.__spreadArray(_tslib.__spreadArray([], SUPPORTED_MIMES.ARCHIVE, false), SUPPORTED_FILE_EXTENSIONS.ARCHIVE, false)); break; } default: { prev.push(curr); break; } } return prev; }, []); // To remove duplicates return Array.from(new Set(uniqueTypes)).join(','); } return _tslib.__spreadArray(_tslib.__spreadArray([], Object.values(SUPPORTED_MIMES).flat(), true), Object.values(SUPPORTED_FILE_EXTENSIONS).flat(), true).join(','); }; var UIKitMessageTypes = { ADMIN: 'ADMIN', TEXT: 'TEXT', FILE: 'FILE', MULTIPLE_FILES: 'MULTIPLE_FILES', THUMBNAIL: 'THUMBNAIL', OG: 'OG', UNKNOWN: 'UNKNOWN', }; var UIKitFileTypes = { IMAGE: 'IMAGE', AUDIO: 'AUDIO', VIDEO: 'VIDEO', GIF: 'GIF', VOICE: 'VOICE', OTHERS: 'OTHERS', }; var isMOVType = function (type) { return type === 'video/quicktime'; }; /** * @link: https://sendbird.atlassian.net/browse/SBISSUE-16031?focusedCommentId=270601 * We limitedly support .mov file type for ThumbnailMessage only in Safari browser. * */ var isSupportedVideoFileTypeInSafari = function (type) { return browser.isSafari(navigator.userAgent) && isMOVType(type); }; var isImage = function (type) { return SUPPORTED_MIMES.IMAGE.indexOf(type) >= 0; }; var isVideo = function (type) { return SUPPORTED_MIMES.VIDEO.indexOf(type) >= 0 || isSupportedVideoFileTypeInSafari(type); }; var isGif = function (type) { return type === 'image/gif'; }; var isSupportedFileView = function (type) { return isImage(type) || isVideo(type); }; var isAudio = function (type) { return SUPPORTED_MIMES.AUDIO.indexOf(type) >= 0; }; var getUIKitFileTypes = function () { return (_tslib.__assign({}, UIKitFileTypes)); }; var getUIKitFileType = function (type) { if (isGif(type)) return UIKitFileTypes.GIF; if (isImage(type)) return UIKitFileTypes.IMAGE; if (isVideo(type)) return UIKitFileTypes.VIDEO; if (isAudio(type)) return UIKitFileTypes.AUDIO; return UIKitFileTypes.OTHERS; }; var isSentMessage = function (message) { return (message.sendingStatus === 'succeeded'); }; var isReadMessage = function (channel, message) { return (utils_message_getOutgoingMessageState.getOutgoingMessageState(channel, message) === utils_message_getOutgoingMessageState.OutgoingMessageStates.READ); }; // TODO: Remove channel from the params, it seems unnecessary var isFailedMessage = function (message) { return ((message === null || message === void 0 ? void 0 : message.sendingStatus) === 'failed'); }; var isPendingMessage = function (message) { return ((message === null || message === void 0 ? void 0 : message.sendingStatus) === 'pending'); }; var isSentStatus = function (state) { return (state === utils_message_getOutgoingMessageState.OutgoingMessageStates.SENT || state === utils_message_getOutgoingMessageState.OutgoingMessageStates.DELIVERED || state === utils_message_getOutgoingMessageState.OutgoingMessageStates.READ); }; var isAdminMessage = function (message) { return (message && (message['isAdminMessage'] && typeof message.isAdminMessage === 'function' ? message.isAdminMessage() : (message === null || message === void 0 ? void 0 : message.messageType) === 'admin')); }; var isUserMessage = function (message) { return (message && (message['isUserMessage'] && typeof message.isUserMessage === 'function' ? message.isUserMessage() : (message === null || message === void 0 ? void 0 : message.messageType) === 'user')); }; var isFileMessage = function (message) { return (!!message && (message['isFileMessage'] && typeof message.isFileMessage === 'function' ? message.isFileMessage() : (message === null || message === void 0 ? void 0 : message.messageType) === 'file')); }; var isMultipleFilesMessage = function (message) { return (message && (message['isMultipleFilesMessage'] && typeof message.isMultipleFilesMessage === 'function' ? message.isMultipleFilesMessage() : (message.messageType === 'file' && Object.prototype.hasOwnProperty.call(message, 'fileInfoList')))); }; var isThreadMessage = function (message) { return (!!message.parentMessageId && !!message.parentMessage); }; var isFormMessage = function (message) { return !!(message.messageForm); }; var isTemplateMessage = function (message) { var _a; return !!(message && ((_a = message.extendedMessagePayload) === null || _a === void 0 ? void 0 : _a[consts.MESSAGE_TEMPLATE_KEY])); }; var isValidTemplateMessageType = function (templatePayload) { var type = templatePayload['type']; return !(type && !MessageTemplateTypes[type]); }; var MessageTemplateTypes = { default: 'default', }; var uiContainerType = (_a = {}, _a[MessageTemplateTypes.default] = 'ui_container_type__default', _a); var isOGMessage = function (message) { if (!message || !isUserMessage(message)) return false; return (!!message.ogMetaData && !!(message.ogMetaData.url || message.ogMetaData.title || message.ogMetaData.description || message.ogMetaData.defaultImage)); }; var isTextMessage = function (message) { return isUserMessage(message); }; var isThumbnailMessage = function (message) { if (!message || !isFileMessage(message)) return false; return isSupportedFileView(message.type); }; var isImageMessage = function (message) { if (!message || !isFileMessage(message)) return false; return isThumbnailMessage(message) && isImage(message.type); }; var isVideoMessage = function (message) { if (!message || !isFileMessage(message)) return false; return isThumbnailMessage(message) && isVideo(message.type); }; var isGifMessage = function (message) { if (!message || !isFileMessage(message)) return false; return isThumbnailMessage(message) && isGif(message.type); }; var isAudioMessage = function (message) { if (!message || !isFileMessage(message)) return false; return isAudio(message.type); }; var isImageFileInfo = function (fileInfo) { if (!fileInfo) return false; return !!fileInfo.mimeType && (isImage(fileInfo.mimeType) || isGif(fileInfo.mimeType)); }; var isAudioMessageMimeType = function (type) { return (/^audio\//.test(type)); }; var isVoiceMessageMimeType = function (type) { return (/^voice\//.test(type)); }; var isVoiceMessage = function (message) { var _a, _b, _c, _d; if (!message || !isFileMessage(message) || !message.type) return false; // ex) audio/m4a OR audio/m4a;sbu_type=voice var _e = message.type.split(';'), mimeType = _e[0], typeParameter = _e[1]; if (!isAudioMessageMimeType(mimeType)) { return false; } if (typeParameter) { var _f = typeParameter.split('='), key = _f[0], value = _f[1]; return key === 'sbu_type' && value === 'voice'; } // ex) message.metaArrays = [{ key: 'KEY_INTERNAL_MESSAGE_TYPE', value: ['voice/m4a'] }] return isVoiceMessageMimeType((_d = (_c = (_b = (_a = message === null || message === void 0 ? void 0 : message.metaArrays) === null || _a === void 0 ? void 0 : _a.find(function (metaArray) { return metaArray.key === 'KEY_INTERNAL_MESSAGE_TYPE'; })) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c[0]) !== null && _d !== void 0 ? _d : ''); }; var isEditedMessage = function (message) { return isUserMessage(message) && ((message === null || message === void 0 ? void 0 : message.updatedAt) > 0); }; var getUIKitMessageTypes = function () { return (_tslib.__assign({}, UIKitMessageTypes)); }; /** * Do not use this for MultipleFilesMessage. Use isMultipleFilesMessage() instead. */ var getUIKitMessageType = function (message) { if (isAdminMessage(message)) return UIKitMessageTypes.ADMIN; if (isUserMessage(message)) { return isOGMessage(message) ? UIKitMessageTypes.OG : UIKitMessageTypes.TEXT; } // This is only a safeguard to not return UNKNOWN for MFM. if (isMultipleFilesMessage(message)) { return UIKitMessageTypes.MULTIPLE_FILES; } if (isFileMessage(message)) { if (isThumbnailMessage(message)) { return UIKitMessageTypes.THUMBNAIL; } if (isVoiceMessage(message)) { return UIKitFileTypes.VOICE; } return UIKitMessageTypes.FILE; } return UIKitMessageTypes.UNKNOWN; }; var reducer = function (accumulator, currentValue) { if (Array.isArray(currentValue)) { return _tslib.__spreadArray(_tslib.__spreadArray([], accumulator, true), currentValue, true); } else { accumulator.push(currentValue); return accumulator; } }; var getClassName = function (classNames) { return (Array.isArray(classNames) ? classNames.reduce(reducer, []).join(' ') : classNames); }; var isReactedBy = function (userId, reaction) { return (reaction.userIds.some(function (reactorUserId) { return reactorUserId === userId; })); }; var getEmojiTooltipString = function (reaction, userId, memberNicknamesMap, stringSet) { var you = ''; if (isReactedBy(userId, reaction)) { you = reaction.userIds.length === 1 ? stringSet.TOOLTIP__YOU : stringSet.TOOLTIP__AND_YOU; } return ("".concat(reaction.userIds .filter(function (reactorUserId) { return reactorUserId !== userId; }) .map(function (reactorUserId) { return (memberNicknamesMap.get(reactorUserId) || stringSet.TOOLTIP__UNKNOWN_USER); }) .join(', ')).concat(you)); }; function getSuggestedReplies(message) { var _a; if ((message === null || message === void 0 ? void 0 : message.extendedMessagePayload) && Array.isArray((_a = message === null || message === void 0 ? void 0 : message.extendedMessagePayload) === null || _a === void 0 ? void 0 : _a.suggested_replies)) { return message.extendedMessagePayload.suggested_replies; } else { return []; } } var URL_REG = /^((http|https):\/\/)?([a-z\d-]+\.)+[a-z]{2,}(\:[0-9]{1,5})?(\/[-a-zA-Z\d%_.~+&=]*)*(\?[;&a-zA-Z\d%_.~+=-]*)?(#\S*)?$/; /** @deprecated * URL detection in a message text will be handled in utils/tokens/tokenize.ts */ var isUrl = function (text) { return URL_REG.test(text); }; var truncateString = function (fullStr, strLen) { if (!strLen) strLen = 40; if (fullStr === null || fullStr === undefined) return ''; if (fullStr.length <= strLen) return fullStr; var separator = '...'; var sepLen = separator.length; var charsToShow = strLen - sepLen; var frontChars = Math.ceil(charsToShow / 2); var backChars = Math.floor(charsToShow / 2); return fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars); }; var copyToClipboard = function (text) { // @ts-ignore: Unreachable code error if (window.clipboardData && window.clipboardData.setData) { // Internet Explorer-specific code path to prevent textarea being shown while dialog is visible. // @ts-ignore: Unreachable code error return window.clipboardData.setData('Text', text); } if (document.queryCommandSupported && document.queryCommandSupported('copy')) { var textarea = document.createElement('textarea'); textarea.textContent = text; textarea.style.position = 'fixed'; // Prevent scrolling to bottom of page in Microsoft Edge. document.body.appendChild(textarea); textarea.select(); try { return document.execCommand('copy'); // Security exception may be thrown by some browsers. } catch (ex) { return false; } finally { document.body.removeChild(textarea); } } return false; }; var getEmojiListAll = function (emojiContainer) { var _a; return ((_a = emojiContainer === null || emojiContainer === void 0 ? void 0 : emojiContainer.emojiCategories) === null || _a === void 0 ? void 0 : _a.map(function (emojiCategory) { return emojiCategory.emojis; }).reduce(function (prevArr, currArr) { return prevArr.concat(currArr); }, [])); }; var getEmojiMapAll = function (emojiContainer) { var _a; var emojiMap = new Map(); (_a = emojiContainer === null || emojiContainer === void 0 ? void 0 : emojiContainer.emojiCategories) === null || _a === void 0 ? void 0 : _a.forEach(function (category) { var _a; (_a = category === null || category === void 0 ? void 0 : category.emojis) === null || _a === void 0 ? void 0 : _a.forEach(function (emoji) { if (emoji && emoji.key) { emojiMap.set(emoji.key, emoji); } }); }); return emojiMap; }; var getEmojiListByCategoryIds = function (emojiContainer, categoryIds) { var _a; if (!categoryIds) return getEmojiListAll(emojiContainer) || []; return ((_a = emojiContainer === null || emojiContainer === void 0 ? void 0 : emojiContainer.emojiCategories) === null || _a === void 0 ? void 0 : _a.filter(function (emojiCategory) { return categoryIds.includes(emojiCategory.id); }).flatMap(function (emojiCategory) { return emojiCategory.emojis; })) || []; }; var findEmojiUrl = function (targetKey) { return function (_a) { var key = _a.key; return key === targetKey; }; }; var getEmojiUrl = function (emojiContainer, emojiKey) { var _a, _b; var isFindingKey = findEmojiUrl(emojiKey !== null && emojiKey !== void 0 ? emojiKey : ''); return ((_b = (_a = emojiContainer === null || emojiContainer === void 0 ? void 0 : emojiContainer.emojiCategories.find(function (category) { return category.emojis.some(isFindingKey); })) === null || _a === void 0 ? void 0 : _a.emojis.find(isFindingKey)) === null || _b === void 0 ? void 0 : _b.url) || ''; }; var getUserName = function (user) { return ((user === null || user === void 0 ? void 0 : user.friendName) || (user === null || user === void 0 ? void 0 : user.nickname) || (user === null || user === void 0 ? void 0 : user.userId)); }; var getSenderName = function (message) { return ((message === null || message === void 0 ? void 0 : message.sender) && getUserName(message === null || message === void 0 ? void 0 : message.sender)); }; var hasSameMembers = function (a, b) { if (a === b) { return true; } if (a == null || b == null) { return false; } if (a.length !== b.length) { return false; } var sortedA = _tslib.__spreadArray([], a, true).sort(); var sortedB = _tslib.__spreadArray([], b, true).sort(); for (var i = 0; i < sortedA.length; ++i) { if (sortedA[i] !== sortedB[i]) { return false; } } return true; }; var isFriend = function (user) { if (!user) return false; return !!(user.friendDiscoveryKey || user.friendName); }; var filterMessageListParams = function (params, message) { var _a, _b, _c, _d; var _e = params.customTypesFilter, customTypesFilter = _e === void 0 ? [] : _e; // @ts-ignore if ((params === null || params === void 0 ? void 0 : params.messageTypeFilter) && params.messageTypeFilter !== message.messageType) { return false; } if ((customTypesFilter === null || customTypesFilter === void 0 ? void 0 : customTypesFilter.length) > 0) { var customTypes = customTypesFilter.filter(function (item) { return item !== '*'; }); // Because Chat SDK inserts '*' when customTypes is empty if (customTypes.length > 0 && !customTypes.includes(message.customType)) { return false; } } if ((params === null || params === void 0 ? void 0 : params.senderUserIdsFilter) && ((_a = params === null || params === void 0 ? void 0 : params.senderUserIdsFilter) === null || _a === void 0 ? void 0 : _a.length) > 0) { if (((_b = message === null || message === void 0 ? void 0 : message.isUserMessage) === null || _b === void 0 ? void 0 : _b.call(message)) || ((_c = message === null || message === void 0 ? void 0 : message.isFileMessage) === null || _c === void 0 ? void 0 : _c.call(message))) { var messageSender = message.sender || message['_sender']; if (!((_d = params === null || params === void 0 ? void 0 : params.senderUserIdsFilter) === null || _d === void 0 ? void 0 : _d.includes(messageSender === null || messageSender === void 0 ? void 0 : messageSender.userId))) { return false; } } else { return false; } } if (!(params === null || params === void 0 ? void 0 : params.includeParentMessageInfo) && ((message === null || message === void 0 ? void 0 : message.parentMessageId) || (message === null || message === void 0 ? void 0 : message.parentMessage))) { return false; } return true; }; var filterChannelListParams = function (params, channel, currentUserId) { var _a, _b, _c, _d, _e, _f, _g; var includeEmpty = params.includeEmpty, includeFrozen = params.includeFrozen, searchFilter = params.searchFilter, userIdsFilter = params.userIdsFilter, customTypesFilter = params.customTypesFilter, channelUrlsFilter = params.channelUrlsFilter, customTypeStartsWithFilter = params.customTypeStartsWithFilter, channelNameContainsFilter = params.channelNameContainsFilter, nicknameContainsFilter = params.nicknameContainsFilter, myMemberStateFilter = params.myMemberStateFilter, hiddenChannelFilter = params.hiddenChannelFilter, unreadChannelFilter = params.unreadChannelFilter, publicChannelFilter = params.publicChannelFilter, superChannelFilter = params.superChannelFilter, _h = params.metadataKey, metadataKey = _h === void 0 ? '' : _h, _j = params.metadataValues, metadataValues = _j === void 0 ? ['a', 'b'] : _j, metadataValueStartsWith = params.metadataValueStartsWith; if (!includeEmpty && (channel === null || channel === void 0 ? void 0 : channel.lastMessage) === null) { return false; } if ((searchFilter === null || searchFilter === void 0 ? void 0 : searchFilter.query) && ((_b = (_a = searchFilter === null || searchFilter === void 0 ? void 0 : searchFilter.fields) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0) { var searchQuery_1 = searchFilter.query; var searchFields = searchFilter.fields; if (searchQuery_1 && searchFields && searchFields.length > 0) { if (!searchFields.some(function (searchField) { var _a, _b; switch (searchField) { case 'channel_name': { return (_a = channel === null || channel === void 0 ? void 0 : channel.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(searchQuery_1.toLowerCase()); } case 'member_nickname': { return (_b = channel === null || channel === void 0 ? void 0 : channel.members) === null || _b === void 0 ? void 0 : _b.some(function (member) { return member.nickname.toLowerCase().includes(searchQuery_1.toLowerCase()); }); } default: { return true; } } })) { return false; } } } if (((_c = userIdsFilter === null || userIdsFilter === void 0 ? void 0 : userIdsFilter.userIds) === null || _c === void 0 ? void 0 : _c.length) > 0) { var includeMode = userIdsFilter.includeMode, queryType = userIdsFilter.queryType; var userIds = userIdsFilter.userIds; var memberIds_1 = (_d = channel === null || channel === void 0 ? void 0 : channel.members) === null || _d === void 0 ? void 0 : _d.map(function (member) { return member.userId; }); if (!includeMode) { // exact match if (!userIds.includes(currentUserId)) { userIds.push(currentUserId); // add the caller's userId if not added already. } if (((_e = channel === null || channel === void 0 ? void 0 : channel.members) === null || _e === void 0 ? void 0 : _e.length) > userIds.length) { return false; // userIds may contain one or more non-member(s). } if (!hasSameMembers(userIds, memberIds_1)) { return false; } } else if (userIds.length > 0) { // inclusive switch (queryType) { case 'AND': { if (userIds.some(function (userId) { return !memberIds_1.includes(userId); })) { return false; } break; } case 'OR': { if (userIds.every(function (userId) { return !memberIds_1.includes(userId); })) { return false; } break; } } } } if (includeEmpty === false && (channel === null || channel === void 0 ? void 0 : channel.lastMessage) === null) { return false; } if (includeFrozen === false && (channel === null || channel === void 0 ? void 0 : channel.isFrozen) === true) { return false; } if (customTypesFilter && !customTypesFilter.includes(channel === null || channel === void 0 ? void 0 : channel.customType)) { return false; } if (customTypeStartsWithFilter && !new RegExp("^".concat(customTypeStartsWithFilter)).test(channel === null || channel === void 0 ? void 0 : channel.customType)) { return false; } if (channelNameContainsFilter && !((_f = channel === null || channel === void 0 ? void 0 : channel.name) === null || _f === void 0 ? void 0 : _f.toLowerCase().includes(channelNameContainsFilter.toLowerCase()))) { return false; } if (nicknameContainsFilter) { var lowerCasedSubString_1 = nicknameContainsFilter.toLowerCase(); if ((_g = channel === null || channel === void 0 ? void 0 : channel.members) === null || _g === void 0 ? void 0 : _g.every(function (member) { return !member.nickname.toLowerCase().includes(lowerCasedSubString_1); })) { return false; } } if (channelUrlsFilter && !channelUrlsFilter.includes(channel === null || channel === void 0 ? void 0 : channel.url)) { return false; } if (myMemberStateFilter) { switch (myMemberStateFilter) { case 'joined_only': if ((channel === null || channel === void 0 ? void 0 : channel.myMemberState) !== 'joined') { return false; } break; case 'invited_only': if ((channel === null || channel === void 0 ? void 0 : channel.myMemberState) !== 'invited') { return false; } break; case 'invited_by_friend': if ((channel === null || channel === void 0 ? void 0 : channel.myMemberState) !== 'invited' || !isFriend(channel === null || channel === void 0 ? void 0 : channel.inviter)) { return false; } break; case 'invited_by_non_friend': if ((channel === null || channel === void 0 ? void 0 : channel.myMemberState) !== 'invited' || isFriend(channel === null || channel === void 0 ? void 0 : channel.inviter)) { return false; } break; } } if (hiddenChannelFilter) { switch (hiddenChannelFilter) { case 'unhidden_only': if ((channel === null || channel === void 0 ? void 0 : channel.isHidden) || (channel === null || channel === void 0 ? void 0 : channel.hiddenState) !== 'unhidden') { return false; } break; case 'hidden_only': if (!(channel === null || channel === void 0 ? void 0 : channel.isHidden)) { return false; } break; case 'hidden_allow_auto_unhide': if (!(channel === null || channel === void 0 ? void 0 : channel.isHidden) || (channel === null || channel === void 0 ? void 0 : channel.hiddenState) !== 'hidden_allow_auto_unhide') { return false; } break; case 'hidden_prevent_auto_unhide': if (!(channel === null || channel === void 0 ? void 0 : channel.isHidden) || (channel === null || channel === void 0 ? void 0 : channel.hiddenState) !== 'hidden_prevent_auto_unhide') { return false; } break; } } if (unreadChannelFilter) { switch (unreadChannelFilter) { case 'unread_message': if ((channel === null || channel === void 0 ? void 0 : channel.unreadMessageCount) === 0) { return false; } break; } } if (publicChannelFilter) { switch (publicChannelFilter) { case 'public': if (!(channel === null || channel === void 0 ? void 0 : channel.isPublic)) { return false; } break; case 'private': if (channel === null || channel === void 0 ? void 0 : channel.isPublic) { return false; } break; } } if (superChannelFilter) { switch (superChannelFilter) { case 'super': if (!(channel === null || channel === void 0 ? void 0 : channel.isSuper)) { return false; } break; case 'nonsuper': if (channel === null || channel === void 0 ? void 0 : channel.isSuper) { return false; } break; } } var _k = channel.cachedMetaData, cachedMetaData = _k === void 0 ? {} : _k; if (metadataKey && (metadataValues || metadataValueStartsWith)) { var metadataValue_1 = cachedMetaData[metadataKey]; if (!metadataValue_1) { return false; } if (metadataValues && !metadataValues.every(function (value) { return metadataValue_1.includes(value); })) { return false; } if (metadataValueStartsWith && !metadataValue_1.startsWith(metadataValueStartsWith)) { return false; } } return true; }; var sortChannelList = function (channels, order) { var compareFunc = index$1.K(order) .with(groupChannel.GroupChannelListOrder.CHANNEL_NAME_ALPHABETICAL, function () { return (function (a, b) { return a.name.localeCompare(b.name); }); }) .with(groupChannel.GroupChannelListOrder.CHRONOLOGICAL, function () { return (function (a, b) { return b.createdAt - a.createdAt; }); }) .otherwise(function () { return (function (a, b) { var _a, _b, _c, _d; return ((_b = (_a = b.lastMessage) === null || _a === void 0 ? void 0 : _a.createdAt) !== null && _b !== void 0 ? _b : Number.MIN_SAFE_INTEGER) - ((_d = (_c = a.lastMessage) === null || _c === void 0 ? void 0 : _c.createdAt) !== null && _d !== void 0 ? _d : Number.MIN_SAFE_INTEGER); }); }); return channels.sort(compareFunc); }; /** * Upserts given channel to the channel list and then returns the sorted channel list. */ var getChannelsWithUpsertedChannel = function (_channels, channel, order) { var channels = _tslib.__spreadArray([], _channels, true); var findingIndex = channels.findIndex(function (ch) { return ch.url === channel.url; }); if (findingIndex !== -1) { channels[findingIndex] = channel; } else { channels.push(channel); } return sortChannelList(channels, order !== null && order !== void 0 ? order : groupChannel.GroupChannelListOrder.LATEST_LAST_MESSAGE); }; exports.StringObjType = void 0; (function (StringObjType) { StringObjType["normal"] = "normal"; StringObjType["mention"] = "mention"; StringObjType["url"] = "url"; })(exports.StringObjType || (exports.StringObjType = {})); /** * @deprecated * use modules/message/utils/tokenize instead */ var convertWordToStringObj = function (word, _users, _template) { var users = _users || []; var template = '@'; // Use global variable var resultArray = []; var regex = RegExp("".concat(template, "{(").concat(users.map(function (user) { return user === null || user === void 0 ? void 0 : user.userId; }).join('|'), ")}"), 'g'); var excutionResult; var lastIndex = 0; var _loop_1 = function () { var template_1 = excutionResult[0], userId = excutionResult[1]; var endIndex = regex.lastIndex; var startIndex = endIndex - template_1.length; // Normal text var normalText = word.slice(lastIndex, startIndex); resultArray.push({ type: isUrl(normalText) ? exports.StringObjType.url : exports.StringObjType.normal, value: normalText, }); // Mention template var mentionedUser = users.find(function (user) { return (user === null || user === void 0 ? void 0 : user.userId) === userId; }); if (!mentionedUser) { resultArray.push({ type: exports.StringObjType.normal, value: template_1, // because template is the origin text }); } else { resultArray.push({ type: exports.StringObjType.mention, value: (mentionedUser === null || mentionedUser === void 0 ? void 0 : mentionedUser.nickname) || '(No name)', userId: userId, }); } lastIndex = endIndex; }; while ((excutionResult = regex.exec(word)) !== null) { _loop_1(); } if (lastIndex < word.length) { // Normal text var normalText = word.slice(lastIndex); resultArray.push({ type: isUrl(normalText) ? exports.StringObjType.url : exports.StringObjType.normal, value: normalText, }); } return resultArray; }; var arrayEqual = function (array1, array2) { if (Array.isArray(array1) && Array.isArray(array2) && array1.length === array2.length) { for (var i = 0; i < array1.length; i++) { if (array1[i] !== array2[i]) { return false; } } return true; } return false; }; var isSendableMessage = function (message) { return Boolean(message) && 'sender' in message; }; /** * If the channel is just created, the channel's createdAt and currentUser's invitedAt are the same. */ var isChannelJustCreated = function (channel) { return isSameSecond(channel.createdAt, channel.invitedAt) && !channel.lastMessage; }; var getHTMLTextDirection = function (direction, forceLeftToRightMessageLayout) { return forceLeftToRightMessageLayout ? 'ltr' : direction; }; var DEFAULT_GROUP_CHANNEL_NAME = 'Group Channel'; var DEFAULT_AI_CHATBOT_CHANNEL_NAME = 'AI Chatbot Widget Channel'; var isDefaultChannelName = function (channel) { return (!(channel === null || channel === void 0 ? void 0 : channel.name) || channel.name === DEFAULT_GROUP_CHANNEL_NAME || channel.name === DEFAULT_AI_CHATBOT_CHANNEL_NAME); }; exports.UIKitMessageTypes = UIKitMessageTypes; exports.arrayEqual = arrayEqual; exports.convertWordToStringObj = convertWordToStringObj; exports.copyToClipboard = copyToClipboard; exports.filterChannelListParams = filterChannelListParams; exports.filterMessageListParams = filterMessageListParams; exports.getChannelsWithUpsertedChannel = getChannelsWithUpsertedChannel; exports.getClassName = getClassName; exports.getEmojiListAll = getEmojiListAll; exports.getEmojiListByCategoryIds = getEmojiListByCategoryIds; exports.getEmojiMapAll = getEmojiMapAll; exports.getEmojiTooltipString = getEmojiTooltipString; exports.getEmojiUrl = getEmojiUrl; exports.getHTMLTextDirection = getHTMLTextDirection; exports.getMimeTypesUIKitAccepts = getMimeTypesUIKitAccepts; exports.getSenderName = getSenderName; exports.getSuggestedReplies = getSuggestedReplies; exports.getUIKitFileType = getUIKitFileType; exports.getUIKitFileTypes = getUIKitFileTypes; exports.getUIKitMessageType = getUIKitMessageType; exports.getUIKitMessageTypes = getUIKitMessageTypes; exports.isAdminMessage = isAdminMessage; exports.isAudio = isAudio; exports.isAudioMessage = isAudioMessage; exports.isChannelJustCreated = isChannelJustCreated; exports.isDefaultChannelName = isDefaultChannelName; exports.isEditedMessage = isEditedMessage; exports.isFailedMessage = isFailedMessage; exports.isFileMessage = isFileMessage; exports.isFormMessage = isFormMessage; exports.isGif = isGif; exports.isGifMessage = isGifMessage; exports.isImage = isImage; exports.isImageFileInfo = isImageFileInfo; exports.isImageMessage = isImageMessage; exports.isMultipleFilesMessage = isMultipleFilesMessage; exports.isOGMessage = isOGMessage; exports.isPendingMessage = isPendingMessage; exports.isReactedBy = isReactedBy; exports.isReadMessage = isReadMessage; exports.isSendableMessage = isSendableMessage; exports.isSentMessage = isSentMessage; exports.isSentStatus = isSentStatus; exports.isSupportedFileView = isSupportedFileView; exports.isTemplateMessage = isTemplateMessage; exports.isTextMessage = isTextMessage; exports.isThreadMessage = isThreadMessage; exports.isThumbnailMessage = isThumbnailMessage; exports.isUserMessage = isUserMessage; exports.isValidTemplateMessageType = isValidTemplateMessageType; exports.isVideo = isVideo; exports.isVideoMessage = isVideoMessage; exports.isVoiceMessage = isVoiceMessage; exports.isVoiceMessageMimeType = isVoiceMessageMimeType; exports.truncateString = truncateString; exports.uiContainerType = uiContainerType; //# sourceMappingURL=bundle-fYxs1lss.js.map