stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
393 lines • 12.7 kB
JavaScript
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 _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* () {
if (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* () {
if (message.user?.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 ?? '');
var onBlockUser = (0, _hooks.useStableCallback)(() => {
if (handleBlockUser) {
handleBlockUser(message.user);
}
if (isBlocked) {
handleToggleBlockUser(message.user);
return;
}
var name = message.user?.name || message.user?.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 handleReaction = !error && !selectReaction ? onReaction : !error ? selectReaction?.(message) : undefined;
var banUser = {
action: onBanUser,
actionType: 'banUser',
icon: (0, _jsxRuntime.jsx)(icons.UserDelete, {
width: 20,
height: 20,
stroke: semantics.accentError
}),
title: message.user?.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