UNPKG

stream-chat-react-native-core

Version:

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

398 lines 13.3 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useMessageActions = void 0; var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _useMessageActionHandlers = require("./useMessageActionHandlers"); var _useUserMuteActive = require("./useUserMuteActive"); var _ComponentsContext = require("../../../contexts/componentsContext/ComponentsContext"); var _ThemeContext = require("../../../contexts/themeContext/ThemeContext"); var _hooks = require("../../../hooks"); var _removeReservedFields = require("../../../utils/removeReservedFields"); var _utils = require("../../../utils/utils"); var _jsxRuntime = require("react/jsx-runtime"); var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/Message/hooks/useMessageActions.tsx"; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } var useMessageActions = ({ channel, client, deleteMessage: deleteMessageFromContext, deleteReaction, enforceUniqueReaction, handleBan, handleCopy, handleDelete, handleDeleteForMe, handleEdit, handleFlag, handleMarkUnread, handleMute, handlePinMessage, handleQuotedReply, handleReaction: handleReactionProp, handleRetry, handleThreadReply, handleBlockUser, message, onThreadSelect, openThread, retrySendMessage, selectReaction, sendReaction, setEditingState, supportedReactions, t, setQuotedMessage }) => { var _message$user$id, _message$user3; var _useTheme = (0, _ThemeContext.useTheme)(), semantics = _useTheme.theme.semantics; var _useComponentsContext = (0, _ComponentsContext.useComponentsContext)(), icons = _useComponentsContext.icons; var _useMessageActionHand = (0, _useMessageActionHandlers.useMessageActionHandlers)({ channel, client, deleteMessage: deleteMessageFromContext, deleteReaction, enforceUniqueReaction, message, retrySendMessage, sendReaction, setEditingState, setQuotedMessage, supportedReactions }), handleCopyMessage = _useMessageActionHand.handleCopyMessage, handleDeleteMessage = _useMessageActionHand.handleDeleteMessage, handleDeleteForMeMessage = _useMessageActionHand.handleDeleteForMeMessage, handleEditMessage = _useMessageActionHand.handleEditMessage, handleFlagMessage = _useMessageActionHand.handleFlagMessage, handleMarkUnreadMessage = _useMessageActionHand.handleMarkUnreadMessage, handleQuotedReplyMessage = _useMessageActionHand.handleQuotedReplyMessage, handleResendMessage = _useMessageActionHand.handleResendMessage, handleToggleBanUser = _useMessageActionHand.handleToggleBanUser, handleToggleMuteUser = _useMessageActionHand.handleToggleMuteUser, handleTogglePinMessage = _useMessageActionHand.handleTogglePinMessage, handleToggleReaction = _useMessageActionHand.handleToggleReaction, handleToggleBlockUser = _useMessageActionHand.handleToggleBlockUser; var error = message.type === 'error' || message.status === _utils.MessageStatusTypes.FAILED; var onOpenThread = (0, _hooks.useStableCallback)(() => { if (onThreadSelect) { onThreadSelect(message); } if (openThread) { openThread(message); } }); var onBanUser = (0, _hooks.useStableCallback)((0, _asyncToGenerator2.default)(function* () { var _message$user; if ((_message$user = message.user) != null && _message$user.id) { if (handleBan) { handleBan(message); } yield handleToggleBanUser(); } })); var onCopyMessage = (0, _hooks.useStableCallback)(() => { if (handleCopy) { handleCopy(message); } handleCopyMessage(); }); var onDeleteMessage = (0, _hooks.useStableCallback)(() => { if (handleDelete) { handleDelete(message); } handleDeleteMessage(); }); var onDeleteForMeMessage = (0, _hooks.useStableCallback)(() => { if (handleDeleteForMe) { handleDeleteForMe(message); } handleDeleteForMeMessage(); }); var onEditMessage = (0, _hooks.useStableCallback)(() => { if (handleEdit) { handleEdit(message); } handleEditMessage(); }); var onFlagMessage = (0, _hooks.useStableCallback)(() => { if (handleFlag) { handleFlag(message); } handleFlagMessage(); }); var onMarkUnread = (0, _hooks.useStableCallback)(() => { if (handleMarkUnread) { handleMarkUnread(message); } handleMarkUnreadMessage(); }); var onTogglePinMessage = (0, _hooks.useStableCallback)(() => { if (handlePinMessage) { handlePinMessage(message); } handleTogglePinMessage(); }); var onReaction = (0, _hooks.useStableCallback)(function () { var _ref2 = (0, _asyncToGenerator2.default)(function* (reactionType) { if (handleReactionProp) { handleReactionProp(message, reactionType); } yield handleToggleReaction(reactionType); }); return function (_x) { return _ref2.apply(this, arguments); }; }()); var onMuteUser = (0, _hooks.useStableCallback)((0, _asyncToGenerator2.default)(function* () { var _message$user2; if ((_message$user2 = message.user) != null && _message$user2.id) { if (handleMute) { handleMute(message); } yield handleToggleMuteUser(); } })); var onQuotedReply = (0, _hooks.useStableCallback)(() => { if (handleQuotedReply) { handleQuotedReply(message); } handleQuotedReplyMessage(); }); var onRetry = (0, _hooks.useStableCallback)((0, _asyncToGenerator2.default)(function* () { var messageWithoutReservedFields = (0, _removeReservedFields.removeReservedFields)(message); if (handleRetry) { handleRetry(messageWithoutReservedFields); } yield handleResendMessage(); })); var onThreadReply = (0, _hooks.useStableCallback)(() => { if (handleThreadReply) { handleThreadReply(message); } onOpenThread(); }); var isMuted = (0, _useUserMuteActive.useUserMuteActive)(message.user); var isBlocked = new Set(client.blockedUsers.getLatestValue().userIds).has((_message$user$id = (_message$user3 = message.user) == null ? void 0 : _message$user3.id) != null ? _message$user$id : ''); var onBlockUser = (0, _hooks.useStableCallback)(() => { var _message$user4, _message$user5; if (handleBlockUser) { handleBlockUser(message.user); } if (isBlocked) { handleToggleBlockUser(message.user); return; } var name = ((_message$user4 = message.user) == null ? void 0 : _message$user4.name) || ((_message$user5 = message.user) == null ? void 0 : _message$user5.id) || ''; _reactNative.Alert.alert(t('Block {{ name }}', { name }), t("They won't be able to message or call you. You can unblock them later."), [{ style: 'cancel', text: t('Cancel') }, { onPress: () => { handleToggleBlockUser(message.user); }, style: 'destructive', text: t('Block') }]); }); return (0, _react.useMemo)(() => { var _message$user6; var handleReaction = !error && !selectReaction ? onReaction : !error ? selectReaction == null ? void 0 : selectReaction(message) : undefined; var banUser = { action: onBanUser, actionType: 'banUser', icon: (0, _jsxRuntime.jsx)(icons.UserDelete, { width: 20, height: 20, stroke: semantics.accentError }), title: (_message$user6 = message.user) != null && _message$user6.banned ? t('Unban User') : t('Ban User'), titleStyle: { color: semantics.accentError }, type: 'destructive' }; var copyMessage = { action: onCopyMessage, actionType: 'copyMessage', icon: (0, _jsxRuntime.jsx)(icons.Copy, { width: 20, height: 20, stroke: semantics.textSecondary }), title: t('Copy Message'), type: 'standard' }; var deleteMessage = { action: onDeleteMessage, actionType: 'deleteMessage', icon: (0, _jsxRuntime.jsx)(icons.Delete, { stroke: semantics.accentError, width: 20, height: 20 }), title: t('Delete Message'), titleStyle: { color: semantics.accentError }, type: 'destructive' }; var deleteForMeMessage = { action: onDeleteForMeMessage, actionType: 'deleteForMeMessage', icon: (0, _jsxRuntime.jsx)(icons.Delete, { stroke: semantics.accentError, width: 20, height: 20 }), title: t('Delete for me'), titleStyle: { color: semantics.accentError }, type: 'destructive' }; var editMessage = { action: onEditMessage, actionType: 'editMessage', icon: (0, _jsxRuntime.jsx)(icons.Edit, { width: 20, height: 20, stroke: semantics.textSecondary }), title: t('Edit Message'), type: 'standard' }; var flagMessage = { action: onFlagMessage, actionType: 'flagMessage', icon: (0, _jsxRuntime.jsx)(icons.MessageFlag, { width: 20, height: 20, stroke: semantics.textSecondary }), title: t('Flag Message'), type: 'standard' }; var markUnread = { action: onMarkUnread, actionType: 'markUnread', icon: (0, _jsxRuntime.jsx)(icons.UnreadIndicator, { width: 20, height: 20, stroke: semantics.textSecondary }), title: t('Mark as Unread'), type: 'standard' }; var pinMessage = { action: onTogglePinMessage, actionType: 'pinMessage', icon: (0, _jsxRuntime.jsx)(icons.Pin, { width: 20, height: 20, stroke: semantics.textSecondary }), title: t('Pin to Conversation'), type: 'standard' }; var unpinMessage = { action: onTogglePinMessage, actionType: 'unpinMessage', icon: (0, _jsxRuntime.jsx)(icons.Unpin, { width: 20, height: 20, stroke: semantics.textSecondary }), title: t('Unpin from Conversation'), type: 'standard' }; var muteUser = { action: onMuteUser, actionType: 'muteUser', icon: isMuted ? (0, _jsxRuntime.jsx)(icons.Sound, { height: 20, stroke: semantics.textSecondary, width: 20 }) : (0, _jsxRuntime.jsx)(icons.Mute, { fill: semantics.textSecondary, height: 20, width: 20 }), title: isMuted ? t('Unmute User') : t('Mute User'), type: 'standard' }; var quotedReply = { action: onQuotedReply, actionType: 'quotedReply', icon: (0, _jsxRuntime.jsx)(icons.CurveLineLeftUp, { stroke: semantics.textSecondary, height: 20, width: 20 }), title: t('Reply'), type: 'standard' }; var retry = { action: onRetry, actionType: 'retry', icon: (0, _jsxRuntime.jsx)(icons.Resend, { stroke: semantics.textSecondary, height: 20, width: 20 }), title: t('Resend'), type: 'standard' }; var threadReply = { action: onThreadReply, actionType: 'threadReply', icon: (0, _jsxRuntime.jsx)(icons.ThreadReply, { stroke: semantics.textSecondary, height: 20, width: 20 }), title: t('Thread Reply'), type: 'standard' }; var blockUser = { action: onBlockUser, actionType: 'blockUser', icon: (0, _jsxRuntime.jsx)(icons.BlockUser, { stroke: semantics.accentError, height: 20, width: 20 }), title: isBlocked ? t('Unblock User') : t('Block User'), titleStyle: { color: semantics.accentError }, type: 'destructive' }; return { banUser, copyMessage, deleteForMeMessage, deleteMessage, editMessage, flagMessage, handleReaction, markUnread, muteUser, pinMessage, quotedReply, retry, threadReply, unpinMessage, blockUser }; }, [error, icons, isBlocked, isMuted, message, onBanUser, onBlockUser, onCopyMessage, onDeleteForMeMessage, onDeleteMessage, onEditMessage, onFlagMessage, onMarkUnread, onMuteUser, onQuotedReply, onReaction, onRetry, onThreadReply, onTogglePinMessage, selectReaction, semantics.accentError, semantics.textSecondary, t]); }; exports.useMessageActions = useMessageActions; //# sourceMappingURL=useMessageActions.js.map