UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

240 lines 12.7 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.checkQuotedMessageEquality = exports.checkMessageEquality = exports.ProgressIndicatorTypes = exports.MessageStatusTypes = exports.FileState = void 0; exports.escapeRegExp = escapeRegExp; exports.stringifyMessage = exports.reduceMessagesToString = exports.makeImageCompatibleUrl = exports.isLocalUrl = exports.isEditedMessage = exports.isBouncedMessage = exports.isBlockedMessage = exports.hashStringToNumber = exports.hasOnlyEmojis = exports.getUrlWithoutParams = exports.getInitialsFromName = exports.getIndicatorTypeForFileState = exports.getFileSizeDisplayText = exports.getFileNameFromPath = exports.getDurationLabelFromDuration = exports.generateRandomId = exports.formatMsToMinSec = exports.findInMessagesById = exports.findInMessagesByDate = void 0; var _dayjs = _interopRequireDefault(require("dayjs")); var _emojiRegex = _interopRequireDefault(require("emoji-regex")); var FileState = exports.FileState = Object.freeze({ BLOCKED: 'blocked', FAILED: 'failed', FINISHED: 'finished', PENDING: 'pending', UPLOADING: 'uploading' }); var ProgressIndicatorTypes = exports.ProgressIndicatorTypes = Object.freeze({ IN_PROGRESS: 'in_progress', INACTIVE: 'inactive', NOT_SUPPORTED: 'not_supported', PENDING: 'pending', RETRY: 'retry' }); var MessageStatusTypes = exports.MessageStatusTypes = { DELIVERED: 'delivered', FAILED: 'failed', RECEIVED: 'received', SENDING: 'sending' }; var getIndicatorTypeForFileState = (fileState, allowSendBeforeAttachmentsUpload) => { var indicatorMap = { [FileState.UPLOADING]: allowSendBeforeAttachmentsUpload ? ProgressIndicatorTypes.INACTIVE : ProgressIndicatorTypes.IN_PROGRESS, [FileState.BLOCKED]: ProgressIndicatorTypes.NOT_SUPPORTED, [FileState.FAILED]: allowSendBeforeAttachmentsUpload ? ProgressIndicatorTypes.INACTIVE : ProgressIndicatorTypes.RETRY, [FileState.PENDING]: ProgressIndicatorTypes.PENDING, [FileState.FINISHED]: ProgressIndicatorTypes.INACTIVE }; return indicatorMap[fileState]; }; exports.getIndicatorTypeForFileState = getIndicatorTypeForFileState; var isBlockedMessage = message => { var _message$moderation_d, _message$moderation; return message.type === 'error' && (((_message$moderation_d = message.moderation_details) == null ? void 0 : _message$moderation_d.action) === 'MESSAGE_RESPONSE_ACTION_REMOVE' || ((_message$moderation = message.moderation) == null ? void 0 : _message$moderation.action) === 'remove'); }; exports.isBlockedMessage = isBlockedMessage; var isBouncedMessage = message => { var _message$moderation_d2, _message$moderation2; return message.type === 'error' && ((message == null || (_message$moderation_d2 = message.moderation_details) == null ? void 0 : _message$moderation_d2.action) === 'MESSAGE_RESPONSE_ACTION_BOUNCE' || (message == null || (_message$moderation2 = message.moderation) == null ? void 0 : _message$moderation2.action) === 'bounce'); }; exports.isBouncedMessage = isBouncedMessage; var isEditedMessage = message => !!message.message_text_updated_at; exports.isEditedMessage = isEditedMessage; var makeImageCompatibleUrl = url => (url.indexOf('//') === 0 ? `https:${url}` : url).trim(); exports.makeImageCompatibleUrl = makeImageCompatibleUrl; var getUrlWithoutParams = url => { if (!url) { return url; } var indexOfQuestion = url.indexOf('?'); if (indexOfQuestion === -1) { return url; } return url.substring(0, url.indexOf('?')); }; exports.getUrlWithoutParams = getUrlWithoutParams; var isLocalUrl = url => !url.includes('http'); exports.isLocalUrl = isLocalUrl; var generateRandomId = (a = '') => a ? ((Number(a) ^ Math.random() * 16) >> Number(a) / 4).toString(16) : `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, generateRandomId); exports.generateRandomId = generateRandomId; var hasOnlyEmojis = text => { try { var emojiOnlyString = [...text.matchAll((0, _emojiRegex.default)())].join(''); var originalTextWithNoSpaces = text.replaceAll(/\s/g, ''); return emojiOnlyString.length !== 0 && emojiOnlyString.length === originalTextWithNoSpaces.length; } catch (e) { return false; } }; exports.hasOnlyEmojis = hasOnlyEmojis; var stringifyMessage = ({ message, includeReactions = true }) => { var attachments = message.attachments, deleted_at = message.deleted_at, i18n = message.i18n, latest_reactions = message.latest_reactions, reaction_groups = message.reaction_groups, reply_count = message.reply_count, status = message.status, text = message.text, type = message.type, updated_at = message.updated_at; var baseFieldsString = `${type}${deleted_at}${text}${reply_count}${status}${updated_at}${JSON.stringify(i18n)}${attachments == null ? void 0 : attachments.length}`; if (!includeReactions) { return baseFieldsString; } return `${latest_reactions ? latest_reactions.map(({ type, user }) => `${type}${user == null ? void 0 : user.id}`).join() : ''}${reaction_groups ? Object.entries(reaction_groups).flatMap(([type, { count, first_reaction_at, last_reaction_at }]) => `${type}${count}${first_reaction_at}${last_reaction_at}`).join() : ''}${baseFieldsString}`; }; exports.stringifyMessage = stringifyMessage; var reduceMessagesToString = messages => messages.map(message => message != null && message.quoted_message ? `${stringifyMessage({ message })}_${message.quoted_message.type}_${message.quoted_message.deleted_at}_${message.quoted_message.text}_${message.quoted_message.updated_at}` : stringifyMessage({ message })).join(); exports.reduceMessagesToString = reduceMessagesToString; var getFileNameFromPath = path => { var pattern = /[^/]+\.[^/]+$/; var match = path.match(pattern); return match ? match[0] : ''; }; exports.getFileNameFromPath = getFileNameFromPath; var getDurationLabelFromDuration = duration => { if (!duration) { return '00:00'; } var ONE_HOUR_IN_SECONDS = 3600; var ONE_HOUR_IN_MILLISECONDS = ONE_HOUR_IN_SECONDS * 1000; var durationLabel = '00:00'; var isDurationLongerThanHour = duration / ONE_HOUR_IN_MILLISECONDS >= 1; var formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'm:ss'; var formattedVideoDuration = _dayjs.default.duration(duration, 'milliseconds').format(formattedDurationParam); durationLabel = formattedVideoDuration; return durationLabel; }; exports.getDurationLabelFromDuration = getDurationLabelFromDuration; var formatMsToMinSec = ms => { var totalSeconds = Math.max(0, Math.floor(ms / 1000)); var totalMinutes = Math.floor(totalSeconds / 60); var totalHours = Math.floor(totalMinutes / 60); if (totalHours >= 1) { return `${totalHours}h`; } if (totalMinutes >= 1) { return `${totalMinutes}m`; } return `${totalSeconds}s`; }; exports.formatMsToMinSec = formatMsToMinSec; function escapeRegExp(text) { return text.replace(/[-[\]{}()*+?.,/\\^$|#]/g, '\\$&'); } var findInMessagesById = (messages, targetId) => { var idx = messages.findIndex(message => message.id === targetId); return idx; }; exports.findInMessagesById = findInMessagesById; var findInMessagesByDate = (messages, targetDate) => { var targetTimestamp = targetDate.getTime(); var left = 0; var right = messages.length - 1; var middle = 0; while (left <= right) { var _messages, _messages2; middle = Math.floor(left + (right - left) / 2); var middleTimestamp = new Date(messages[middle].created_at).getTime(); var middleLeftTimestamp = ((_messages = messages[middle - 1]) == null ? void 0 : _messages.created_at) && new Date(messages[middle - 1].created_at).getTime(); var middleRightTimestamp = ((_messages2 = messages[middle + 1]) == null ? void 0 : _messages2.created_at) && new Date(messages[middle + 1].created_at).getTime(); if (middleTimestamp === targetTimestamp || middleLeftTimestamp && middleRightTimestamp && middleLeftTimestamp < targetTimestamp && middleRightTimestamp > targetTimestamp) { return { index: middle, message: messages[middle] }; } else if (middleTimestamp < targetTimestamp) { left = middle + 1; } else { right = middle - 1; } } return { index: -1 }; }; exports.findInMessagesByDate = findInMessagesByDate; var checkMessageEquality = (prevMessage, nextMessage) => { var _prevMessage$updated_, _nextMessage$updated_, _prevMessage$deleted_, _nextMessage$deleted_; var prevMessageExists = !!prevMessage; var nextMessageExists = !!nextMessage; if (!prevMessageExists && !nextMessageExists) { return true; } if (prevMessageExists !== nextMessageExists) { return false; } var messageEqual = (prevMessage == null ? void 0 : prevMessage.status) === (nextMessage == null ? void 0 : nextMessage.status) && (prevMessage == null ? void 0 : prevMessage.type) === (nextMessage == null ? void 0 : nextMessage.type) && (prevMessage == null ? void 0 : prevMessage.text) === (nextMessage == null ? void 0 : nextMessage.text) && (prevMessage == null ? void 0 : prevMessage.pinned) === (nextMessage == null ? void 0 : nextMessage.pinned) && (prevMessage == null ? void 0 : prevMessage.i18n) === (nextMessage == null ? void 0 : nextMessage.i18n) && (prevMessage == null ? void 0 : prevMessage.reply_count) === (nextMessage == null ? void 0 : nextMessage.reply_count) && (prevMessage == null || (_prevMessage$updated_ = prevMessage.updated_at) == null || _prevMessage$updated_.getTime == null ? void 0 : _prevMessage$updated_.getTime()) === (nextMessage == null || (_nextMessage$updated_ = nextMessage.updated_at) == null || _nextMessage$updated_.getTime == null ? void 0 : _nextMessage$updated_.getTime()) && (prevMessage == null || (_prevMessage$deleted_ = prevMessage.deleted_at) == null || _prevMessage$deleted_.getTime == null ? void 0 : _prevMessage$deleted_.getTime()) === (nextMessage == null || (_nextMessage$deleted_ = nextMessage.deleted_at) == null || _nextMessage$deleted_.getTime == null ? void 0 : _nextMessage$deleted_.getTime()); return messageEqual; }; exports.checkMessageEquality = checkMessageEquality; var checkQuotedMessageEquality = (prevQuotedMessage, nextQuotedMessage) => { var _prevQuotedMessage$up, _nextQuotedMessage$up, _prevQuotedMessage$de, _nextQuotedMessage$de; var prevQuotedMessageExists = !!prevQuotedMessage; var nextQuotedMessageExists = !!nextQuotedMessage; if (!prevQuotedMessageExists && !nextQuotedMessageExists) { return true; } if (prevQuotedMessageExists !== nextQuotedMessageExists) { return false; } var quotedMessageEqual = (prevQuotedMessage == null ? void 0 : prevQuotedMessage.type) === (nextQuotedMessage == null ? void 0 : nextQuotedMessage.type) && (prevQuotedMessage == null ? void 0 : prevQuotedMessage.text) === (nextQuotedMessage == null ? void 0 : nextQuotedMessage.text) && (prevQuotedMessage == null || (_prevQuotedMessage$up = prevQuotedMessage.updated_at) == null || _prevQuotedMessage$up.getTime == null ? void 0 : _prevQuotedMessage$up.getTime()) === (nextQuotedMessage == null || (_nextQuotedMessage$up = nextQuotedMessage.updated_at) == null || _nextQuotedMessage$up.getTime == null ? void 0 : _nextQuotedMessage$up.getTime()) && (prevQuotedMessage == null || (_prevQuotedMessage$de = prevQuotedMessage.deleted_at) == null || _prevQuotedMessage$de.getTime == null ? void 0 : _prevQuotedMessage$de.getTime()) === (nextQuotedMessage == null || (_nextQuotedMessage$de = nextQuotedMessage.deleted_at) == null || _nextQuotedMessage$de.getTime == null ? void 0 : _nextQuotedMessage$de.getTime()); return quotedMessageEqual; }; exports.checkQuotedMessageEquality = checkQuotedMessageEquality; var getInitialsFromName = (name, numberOfInitials = 2) => { if (!name) return ''; var trimmed = name.trim(); if (!trimmed) return ''; return trimmed.split(/\s+/).slice(0, numberOfInitials).map(n => n.charAt(0).toUpperCase()).join(''); }; exports.getInitialsFromName = getInitialsFromName; var hashStringToNumber = str => { var _Math$abs; var hash = 0; for (var i = 0; i < str.length; i++) { hash = (hash << 5) - hash + str.charCodeAt(i); hash |= 0; } return (_Math$abs = Math.abs(hash)) != null ? _Math$abs : 0; }; exports.hashStringToNumber = hashStringToNumber; var getFileSizeDisplayText = size => { if (!size) { return; } if (typeof size === 'string') { size = parseFloat(size); } if (size < 1000 * 1000) { return `${Math.floor(Math.floor(size / 10) / 100)} KB`; } return `${Math.floor(Math.floor(size / 10000) / 100)} MB`; }; exports.getFileSizeDisplayText = getFileSizeDisplayText; //# sourceMappingURL=utils.js.map