UNPKG

stream-chat-react-native-core

Version:

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

84 lines 4.07 kB
Object.defineProperty(exports, "__esModule", { value: true }); exports.useProcessReactions = exports.defaultReactionsSort = void 0; var _react = require("react"); var _contexts = require("../../../contexts"); var _MessagesContext = require("../../../contexts/messagesContext/MessagesContext"); var defaultReactionsSort = (a, b) => { if (a.firstReactionAt && b.firstReactionAt) { return +a.firstReactionAt - +b.firstReactionAt; } return a.type.localeCompare(b.type, 'en'); }; exports.defaultReactionsSort = defaultReactionsSort; var isOwnReaction = (reactionType, ownReactions, latestReactions, userID) => (ownReactions ? ownReactions.some(reaction => reaction.type === reactionType) : false) || (latestReactions ? latestReactions.some(reaction => { var _reaction$user; return (reaction == null || (_reaction$user = reaction.user) == null ? void 0 : _reaction$user.id) === userID && reaction.type === reactionType; }) : false); var isSupportedReaction = (reactionType, supportedReactions) => supportedReactions ? supportedReactions.some(reactionOption => reactionOption.type === reactionType) : false; var getEmojiByReactionType = (reactionType, supportedReactions) => { var _supportedReactions$f; return supportedReactions ? (_supportedReactions$f = supportedReactions.find(({ type }) => type === reactionType)) == null ? void 0 : _supportedReactions$f.Icon : null; }; var getLatestReactedUserNames = (reactionType, latestReactions) => latestReactions ? latestReactions.flatMap(reaction => { if (reactionType && reactionType === reaction.type) { var _reaction$user2, _reaction$user3; var username = ((_reaction$user2 = reaction.user) == null ? void 0 : _reaction$user2.name) || ((_reaction$user3 = reaction.user) == null ? void 0 : _reaction$user3.id); return username ? [username] : []; } return []; }) : []; var useProcessReactions = props => { var _useMessagesContext = (0, _MessagesContext.useMessagesContext)(), contextSupportedReactions = _useMessagesContext.supportedReactions; var _useChatContext = (0, _contexts.useChatContext)(), client = _useChatContext.client; var latest_reactions = props.latest_reactions, own_reactions = props.own_reactions, reaction_groups = props.reaction_groups, _props$sortReactions = props.sortReactions, sortReactions = _props$sortReactions === void 0 ? defaultReactionsSort : _props$sortReactions, _props$supportedReact = props.supportedReactions, supportedReactions = _props$supportedReact === void 0 ? contextSupportedReactions : _props$supportedReact; return (0, _react.useMemo)(() => { if (!reaction_groups) { return { existingReactions: [], hasReactions: false, totalReactionCount: 0 }; } var unsortedReactions = Object.entries(reaction_groups).flatMap(([reactionType, { count, first_reaction_at, last_reaction_at }]) => { if (count === 0 || !isSupportedReaction(reactionType, supportedReactions)) { return []; } var latestReactedUserNames = getLatestReactedUserNames(reactionType, latest_reactions); return { count, firstReactionAt: first_reaction_at ? new Date(first_reaction_at) : null, Icon: getEmojiByReactionType(reactionType, supportedReactions), lastReactionAt: last_reaction_at ? new Date(last_reaction_at) : null, latestReactedUserNames, own: isOwnReaction(reactionType, own_reactions, latest_reactions, client.userID), type: reactionType, unlistedReactedUserCount: count - latestReactedUserNames.length }; }); return { existingReactions: unsortedReactions.sort(sortReactions), hasReactions: unsortedReactions.length > 0, totalReactionCount: unsortedReactions.reduce((total, { count }) => total + count, 0) }; }, [client.userID, reaction_groups, own_reactions, latest_reactions, supportedReactions, sortReactions]); }; exports.useProcessReactions = useProcessReactions; //# sourceMappingURL=useProcessReactions.js.map