diff --git a/apps/meteor/app/discussion/client/createDiscussionMessageAction.ts b/apps/meteor/app/discussion/client/createDiscussionMessageAction.ts deleted file mode 100644 index 14cf16fbe8fd8..0000000000000 --- a/apps/meteor/app/discussion/client/createDiscussionMessageAction.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { Tracker } from 'meteor/tracker'; - -import CreateDiscussion from '../../../client/components/CreateDiscussion/CreateDiscussion'; -import { imperativeModal } from '../../../client/lib/imperativeModal'; -import { roomCoordinator } from '../../../client/lib/rooms/roomCoordinator'; -import { hasPermission } from '../../authorization/client'; -import { settings } from '../../settings/client'; -import { MessageAction } from '../../ui-utils/client'; - -Meteor.startup(() => { - Tracker.autorun(() => { - if (!settings.get('Discussion_enabled')) { - return MessageAction.removeButton('start-discussion'); - } - - MessageAction.addButton({ - id: 'start-discussion', - icon: 'discussion', - label: 'Discussion_start', - type: 'communication', - context: ['message', 'message-mobile', 'videoconf'], - async action(_, { message, room }) { - imperativeModal.open({ - component: CreateDiscussion, - props: { - defaultParentRoom: room?.prid || room?._id, - onClose: imperativeModal.close, - parentMessageId: message._id, - nameSuggestion: message?.msg?.substr(0, 140), - }, - }); - }, - condition({ - message: { - u: { _id: uid }, - drid, - dcount, - }, - room, - subscription, - user, - }) { - if (drid || !Number.isNaN(Number(dcount))) { - return false; - } - if (!subscription) { - return false; - } - const isLivechatRoom = roomCoordinator.isLivechatRoom(room.t); - if (isLivechatRoom) { - return false; - } - - if (!user) { - return false; - } - - return uid !== user._id ? hasPermission('start-discussion-other-user', room._id) : hasPermission('start-discussion', room._id); - }, - order: 1, - group: 'menu', - }); - }); -}); diff --git a/apps/meteor/app/discussion/client/index.ts b/apps/meteor/app/discussion/client/index.ts deleted file mode 100644 index 7c0a6f72e6cc0..0000000000000 --- a/apps/meteor/app/discussion/client/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Other UI extensions -import './createDiscussionMessageAction'; diff --git a/apps/meteor/client/components/message/toolbar/MessageToolbar.tsx b/apps/meteor/client/components/message/toolbar/MessageToolbar.tsx index 6ba7e1b434d6c..2f52ebe42fa90 100644 --- a/apps/meteor/client/components/message/toolbar/MessageToolbar.tsx +++ b/apps/meteor/client/components/message/toolbar/MessageToolbar.tsx @@ -10,6 +10,7 @@ import React, { memo, useMemo, useRef } from 'react'; import MessageActionMenu from './MessageActionMenu'; import MessageToolbarStarsActionMenu from './MessageToolbarStarsActionMenu'; +import { useNewDiscussionMessageAction } from './useNewDiscussionMessageAction'; import { useWebDAVMessageAction } from './useWebDAVMessageAction'; import type { MessageActionContext } from '../../../../app/ui-utils/client/lib/MessageAction'; import { MessageAction } from '../../../../app/ui-utils/client/lib/MessageAction'; @@ -85,6 +86,7 @@ const MessageToolbar = ({ // TODO: move this to another place useWebDAVMessageAction(); + useNewDiscussionMessageAction(); const actionsQueryResult = useQuery(['rooms', room._id, 'messages', message._id, 'actions'] as const, async () => { const props = { message, room, user, subscription, settings: mapSettings, chat }; diff --git a/apps/meteor/client/components/message/toolbar/useNewDiscussionMessageAction.tsx b/apps/meteor/client/components/message/toolbar/useNewDiscussionMessageAction.tsx new file mode 100644 index 0000000000000..2812e1c06ba85 --- /dev/null +++ b/apps/meteor/client/components/message/toolbar/useNewDiscussionMessageAction.tsx @@ -0,0 +1,68 @@ +import { useSetModal, useSetting } from '@rocket.chat/ui-contexts'; +import React, { useEffect } from 'react'; + +import { hasPermission } from '../../../../app/authorization/client'; +import { MessageAction } from '../../../../app/ui-utils/client/lib/MessageAction'; +import { roomCoordinator } from '../../../lib/rooms/roomCoordinator'; +import CreateDiscussion from '../../CreateDiscussion'; + +export const useNewDiscussionMessageAction = () => { + const enabled = useSetting('Discussion_enabled', false); + + const setModal = useSetModal(); + + useEffect(() => { + if (!enabled) { + return MessageAction.removeButton('start-discussion'); + } + MessageAction.addButton({ + id: 'start-discussion', + icon: 'discussion', + label: 'Discussion_start', + type: 'communication', + context: ['message', 'message-mobile', 'videoconf'], + async action(_, { message, room }) { + setModal( + setModal(undefined)} + parentMessageId={message._id} + nameSuggestion={message?.msg?.substr(0, 140)} + />, + ); + }, + condition({ + message: { + u: { _id: uid }, + drid, + dcount, + }, + room, + subscription, + user, + }) { + if (drid || !Number.isNaN(Number(dcount))) { + return false; + } + if (!subscription) { + return false; + } + const isLivechatRoom = roomCoordinator.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } + + if (!user) { + return false; + } + + return uid !== user._id ? hasPermission('start-discussion-other-user', room._id) : hasPermission('start-discussion', room._id); + }, + order: 1, + group: 'menu', + }); + return () => { + MessageAction.removeButton('start-discussion'); + }; + }, [enabled, setModal]); +}; diff --git a/apps/meteor/client/importPackages.ts b/apps/meteor/client/importPackages.ts index d0f89f407e6d3..e08260b53032c 100644 --- a/apps/meteor/client/importPackages.ts +++ b/apps/meteor/client/importPackages.ts @@ -36,7 +36,6 @@ import '../app/tokenpass/client'; import '../app/webrtc/client'; import '../app/wordpress/client'; import '../app/e2e/client'; -import '../app/discussion/client'; import '../app/threads/client'; import '../app/utils/client'; import '../app/settings/client';