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
JavaScript
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