diff --git a/apps/meteor/app/message-pin/client/actionButton.ts b/apps/meteor/app/message-pin/client/actionButton.ts index 4fd986f50d26..7cf76926263d 100644 --- a/apps/meteor/app/message-pin/client/actionButton.ts +++ b/apps/meteor/app/message-pin/client/actionButton.ts @@ -106,10 +106,14 @@ Meteor.startup(function () { // classes: 'clipboard', context: ['pinned'], async action(_, props) { - const { message = messageArgs(this).msg } = props; - const permalink = await MessageAction.getPermaLink(message._id); - navigator.clipboard.writeText(permalink); - dispatchToastMessage({ type: 'success', message: TAPi18n.__('Copied') }); + try { + const { message = messageArgs(this).msg } = props; + const permalink = await MessageAction.getPermaLink(message._id); + navigator.clipboard.writeText(permalink); + dispatchToastMessage({ type: 'success', message: TAPi18n.__('Copied') }); + } catch (e) { + dispatchToastMessage({ type: 'error', message: e }); + } }, condition({ subscription }) { return !!subscription; diff --git a/apps/meteor/app/message-star/client/actionButton.ts b/apps/meteor/app/message-star/client/actionButton.ts index f8776805a12b..03e8aa3aa3b6 100644 --- a/apps/meteor/app/message-star/client/actionButton.ts +++ b/apps/meteor/app/message-star/client/actionButton.ts @@ -110,10 +110,14 @@ Meteor.startup(function () { // classes: 'clipboard', context: ['starred', 'threads'], async action(_, props) { - const { message = messageArgs(this).msg } = props; - const permalink = await MessageAction.getPermaLink(message._id); - navigator.clipboard.writeText(permalink); - dispatchToastMessage({ type: 'success', message: TAPi18n.__('Copied') }); + try { + const { message = messageArgs(this).msg } = props; + const permalink = await MessageAction.getPermaLink(message._id); + navigator.clipboard.writeText(permalink); + dispatchToastMessage({ type: 'success', message: TAPi18n.__('Copied') }); + } catch (e) { + dispatchToastMessage({ type: 'error', message: e }); + } }, condition({ message, subscription, user }) { if (subscription == null) { diff --git a/apps/meteor/app/ui-utils/client/lib/MessageAction.ts b/apps/meteor/app/ui-utils/client/lib/MessageAction.ts index d1d6d7ae78cf..a82917008d59 100644 --- a/apps/meteor/app/ui-utils/client/lib/MessageAction.ts +++ b/apps/meteor/app/ui-utils/client/lib/MessageAction.ts @@ -5,23 +5,23 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import type { Icon } from '@rocket.chat/fuselage'; -import type { IMessage, IUser, ISubscription, IRoom, SettingValue } from '@rocket.chat/core-typings'; +import type { IMessage, IUser, ISubscription, IRoom, SettingValue, Serialized } from '@rocket.chat/core-typings'; import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { Messages, Rooms, Subscriptions } from '../../../models/client'; import { roomCoordinator } from '../../../../client/lib/rooms/roomCoordinator'; import type { ToolboxContextValue } from '../../../../client/views/room/contexts/ToolboxContext'; import type { ChatContext } from '../../../../client/views/room/contexts/ChatContext'; - -const call = (method: string, ...args: any[]): Promise => - new Promise((resolve, reject) => { - Meteor.call(method, ...args, function (err: any, data: any) { - if (err) { - return reject(err); - } - resolve(data); - }); - }); +import { APIClient } from '../../../utils/client'; + +const getMessage = async (msgId: string): Promise | null> => { + try { + const { message } = await APIClient.get('/v1/chat.getMessage', { msgId }); + return message; + } catch { + return null; + } +}; export const addMessageToList = (messagesList: IMessage[], message: IMessage): IMessage[] => { // checks if the message is not already on the list @@ -176,7 +176,7 @@ export const MessageAction = new (class { throw new Error('invalid-parameter'); } - const msg = Messages.findOne(msgId) || (await call('getSingleMessage', msgId)); + const msg = Messages.findOne(msgId) || (await getMessage(msgId)); if (!msg) { throw new Error('message-not-found'); } diff --git a/apps/meteor/app/ui-utils/client/lib/messageActionDefault.ts b/apps/meteor/app/ui-utils/client/lib/messageActionDefault.ts index 035b325117e0..453a36332721 100644 --- a/apps/meteor/app/ui-utils/client/lib/messageActionDefault.ts +++ b/apps/meteor/app/ui-utils/client/lib/messageActionDefault.ts @@ -97,10 +97,14 @@ Meteor.startup(async function () { // classes: 'clipboard', context: ['message', 'message-mobile', 'threads', 'federated'], async action(_, props) { - const { message = messageArgs(this).msg } = props; - const permalink = await MessageAction.getPermaLink(message._id); - navigator.clipboard.writeText(permalink); - dispatchToastMessage({ type: 'success', message: TAPi18n.__('Copied') }); + try { + const { message = messageArgs(this).msg } = props; + const permalink = await MessageAction.getPermaLink(message._id); + navigator.clipboard.writeText(permalink); + dispatchToastMessage({ type: 'success', message: TAPi18n.__('Copied') }); + } catch (e) { + dispatchToastMessage({ type: 'error', message: e }); + } }, condition({ subscription }) { return !!subscription;