From 4cf98d19b7a1745604f9ab83eb114baf771dfe53 Mon Sep 17 00:00:00 2001 From: MartinSchoeler Date: Thu, 14 Nov 2024 17:25:01 -0300 Subject: [PATCH 1/5] fix: Clicking repeatedly on 'create' button result in multiple discussions created --- apps/meteor/app/discussion/client/index.ts | 2 - .../message/toolbar/MessageToolbar.tsx | 8 ++-- .../useNewDiscussionMessageAction.tsx} | 46 +++++++++---------- apps/meteor/client/importPackages.ts | 1 - 4 files changed, 28 insertions(+), 29 deletions(-) delete mode 100644 apps/meteor/app/discussion/client/index.ts rename apps/meteor/{app/discussion/client/createDiscussionMessageAction.ts => client/components/message/toolbar/useNewDiscussionMessageAction.tsx} (50%) diff --git a/apps/meteor/app/discussion/client/index.ts b/apps/meteor/app/discussion/client/index.ts deleted file mode 100644 index 7c0a6f72e6cc..000000000000 --- 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 6ba7e1b434d6..753ea5778e8c 100644 --- a/apps/meteor/client/components/message/toolbar/MessageToolbar.tsx +++ b/apps/meteor/client/components/message/toolbar/MessageToolbar.tsx @@ -8,9 +8,6 @@ import { useQuery } from '@tanstack/react-query'; import type { ComponentProps, ReactElement } from 'react'; import React, { memo, useMemo, useRef } from 'react'; -import MessageActionMenu from './MessageActionMenu'; -import MessageToolbarStarsActionMenu from './MessageToolbarStarsActionMenu'; -import { useWebDAVMessageAction } from './useWebDAVMessageAction'; import type { MessageActionContext } from '../../../../app/ui-utils/client/lib/MessageAction'; import { MessageAction } from '../../../../app/ui-utils/client/lib/MessageAction'; import { useEmojiPickerData } from '../../../contexts/EmojiPickerContext'; @@ -21,6 +18,10 @@ import { useIsSelecting } from '../../../views/room/MessageList/contexts/Selecte import { useAutoTranslate } from '../../../views/room/MessageList/hooks/useAutoTranslate'; import { useChat } from '../../../views/room/contexts/ChatContext'; import { useRoomToolbox } from '../../../views/room/contexts/RoomToolboxContext'; +import MessageActionMenu from './MessageActionMenu'; +import MessageToolbarStarsActionMenu from './MessageToolbarStarsActionMenu'; +import { useNewDiscussionMessageAction } from './useNewDiscussionMessageAction'; +import { useWebDAVMessageAction } from './useWebDAVMessageAction'; const getMessageContext = (message: IMessage, room: IRoom, context?: MessageActionContext): MessageActionContext => { if (context) { @@ -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/app/discussion/client/createDiscussionMessageAction.ts b/apps/meteor/client/components/message/toolbar/useNewDiscussionMessageAction.tsx similarity index 50% rename from apps/meteor/app/discussion/client/createDiscussionMessageAction.ts rename to apps/meteor/client/components/message/toolbar/useNewDiscussionMessageAction.tsx index 14cf16fbe8fd..61699fa72514 100644 --- a/apps/meteor/app/discussion/client/createDiscussionMessageAction.ts +++ b/apps/meteor/client/components/message/toolbar/useNewDiscussionMessageAction.tsx @@ -1,19 +1,20 @@ -import { Meteor } from 'meteor/meteor'; -import { Tracker } from 'meteor/tracker'; +import { useSetModal, useSetting } from '@rocket.chat/ui-contexts'; +import React, { useEffect } from 'react'; -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'; +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'; -Meteor.startup(() => { - Tracker.autorun(() => { - if (!settings.get('Discussion_enabled')) { +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', @@ -21,15 +22,14 @@ Meteor.startup(() => { 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), - }, - }); + setModal( + setModal(undefined)} + parentMessageId={message._id} + nameSuggestion={message?.msg?.substr(0, 140)} + />, + ); }, condition({ message: { @@ -61,5 +61,5 @@ Meteor.startup(() => { order: 1, group: 'menu', }); - }); -}); + }, [enabled, setModal]); +}; diff --git a/apps/meteor/client/importPackages.ts b/apps/meteor/client/importPackages.ts index d0f89f407e6d..e08260b53032 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'; From 26f26c0ec567e0496c7d209ba4aca1b749afdef7 Mon Sep 17 00:00:00 2001 From: MartinSchoeler Date: Thu, 14 Nov 2024 17:45:04 -0300 Subject: [PATCH 2/5] chore: prettier --- .../client/components/message/toolbar/MessageToolbar.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/meteor/client/components/message/toolbar/MessageToolbar.tsx b/apps/meteor/client/components/message/toolbar/MessageToolbar.tsx index 753ea5778e8c..2f52ebe42fa9 100644 --- a/apps/meteor/client/components/message/toolbar/MessageToolbar.tsx +++ b/apps/meteor/client/components/message/toolbar/MessageToolbar.tsx @@ -8,6 +8,10 @@ import { useQuery } from '@tanstack/react-query'; import type { ComponentProps, ReactElement } from 'react'; 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'; import { useEmojiPickerData } from '../../../contexts/EmojiPickerContext'; @@ -18,10 +22,6 @@ import { useIsSelecting } from '../../../views/room/MessageList/contexts/Selecte import { useAutoTranslate } from '../../../views/room/MessageList/hooks/useAutoTranslate'; import { useChat } from '../../../views/room/contexts/ChatContext'; import { useRoomToolbox } from '../../../views/room/contexts/RoomToolboxContext'; -import MessageActionMenu from './MessageActionMenu'; -import MessageToolbarStarsActionMenu from './MessageToolbarStarsActionMenu'; -import { useNewDiscussionMessageAction } from './useNewDiscussionMessageAction'; -import { useWebDAVMessageAction } from './useWebDAVMessageAction'; const getMessageContext = (message: IMessage, room: IRoom, context?: MessageActionContext): MessageActionContext => { if (context) { From 30567cc6164f34d7a76470236334ec9d37f4f439 Mon Sep 17 00:00:00 2001 From: Martin Schoeler Date: Thu, 14 Nov 2024 17:55:49 -0300 Subject: [PATCH 3/5] Create pink-beers-flow.md --- .changeset/pink-beers-flow.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/pink-beers-flow.md diff --git a/.changeset/pink-beers-flow.md b/.changeset/pink-beers-flow.md new file mode 100644 index 000000000000..fba25665133a --- /dev/null +++ b/.changeset/pink-beers-flow.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +Fixes issue that could cause multiple discussions to be created when creating it from a message action From 185ed349b27727a8aafd2d8e43146ea8cef14dbe Mon Sep 17 00:00:00 2001 From: Martin Schoeler Date: Mon, 18 Nov 2024 17:29:17 -0300 Subject: [PATCH 4/5] Delete .changeset/pink-beers-flow.md --- .changeset/pink-beers-flow.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/pink-beers-flow.md diff --git a/.changeset/pink-beers-flow.md b/.changeset/pink-beers-flow.md deleted file mode 100644 index fba25665133a..000000000000 --- a/.changeset/pink-beers-flow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@rocket.chat/meteor": patch ---- - -Fixes issue that could cause multiple discussions to be created when creating it from a message action From db946dc932bc72e449096bb05137a985a1792c31 Mon Sep 17 00:00:00 2001 From: MartinSchoeler Date: Tue, 19 Nov 2024 11:28:55 -0300 Subject: [PATCH 5/5] chore: reviews --- .../message/toolbar/useNewDiscussionMessageAction.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/meteor/client/components/message/toolbar/useNewDiscussionMessageAction.tsx b/apps/meteor/client/components/message/toolbar/useNewDiscussionMessageAction.tsx index 61699fa72514..2812e1c06ba8 100644 --- a/apps/meteor/client/components/message/toolbar/useNewDiscussionMessageAction.tsx +++ b/apps/meteor/client/components/message/toolbar/useNewDiscussionMessageAction.tsx @@ -61,5 +61,8 @@ export const useNewDiscussionMessageAction = () => { order: 1, group: 'menu', }); + return () => { + MessageAction.removeButton('start-discussion'); + }; }, [enabled, setModal]); };