|
1 | | -import type { IRoom, IUser, ISubscription } from '@rocket.chat/core-typings'; |
2 | | -import { useEffectEvent } from '@rocket.chat/fuselage-hooks'; |
3 | | -import { useTranslation, usePermission, useRoute, useUserSubscription, useUserSubscriptionByName } from '@rocket.chat/ui-contexts'; |
| 1 | +import type { IRoom, IUser } from '@rocket.chat/core-typings'; |
| 2 | +import { useGoToDirectMessage } from '@rocket.chat/ui-client'; |
4 | 3 | import { useMemo } from 'react'; |
| 4 | +import { useTranslation } from 'react-i18next'; |
5 | 5 |
|
6 | | -import type { UserInfoAction, UserInfoActionType } from '../useUserInfoActions'; |
7 | | - |
8 | | -const getShouldOpenDirectMessage = ( |
9 | | - currentSubscription?: ISubscription, |
10 | | - usernameSubscription?: ISubscription, |
11 | | - canOpenDirectMessage?: boolean, |
12 | | - username?: IUser['username'], |
13 | | -): boolean => { |
14 | | - const canOpenDm = canOpenDirectMessage || usernameSubscription; |
15 | | - const directMessageIsNotAlreadyOpen = currentSubscription && currentSubscription.name !== username; |
16 | | - return (canOpenDm && directMessageIsNotAlreadyOpen) ?? false; |
17 | | -}; |
| 6 | +import type { UserInfoAction } from '../useUserInfoActions'; |
18 | 7 |
|
19 | 8 | export const useDirectMessageAction = (user: Pick<IUser, '_id' | 'username'>, rid: IRoom['_id']): UserInfoAction | undefined => { |
20 | | - const t = useTranslation(); |
21 | | - const usernameSubscription = useUserSubscriptionByName(user.username ?? ''); |
22 | | - const currentSubscription = useUserSubscription(rid); |
23 | | - const canOpenDirectMessage = usePermission('create-d'); |
24 | | - const directRoute = useRoute('direct'); |
| 9 | + const { t } = useTranslation(); |
25 | 10 |
|
26 | | - const shouldOpenDirectMessage = getShouldOpenDirectMessage( |
27 | | - currentSubscription, |
28 | | - usernameSubscription, |
29 | | - canOpenDirectMessage, |
30 | | - user.username, |
31 | | - ); |
| 11 | + const openDirectMessage = useGoToDirectMessage(user, rid); |
32 | 12 |
|
33 | | - const openDirectMessage = useEffectEvent( |
34 | | - () => |
35 | | - user.username && |
36 | | - directRoute.push({ |
37 | | - rid: user.username, |
38 | | - }), |
39 | | - ); |
| 13 | + const openDirectMessageOption = useMemo(() => { |
| 14 | + if (!openDirectMessage) { |
| 15 | + return undefined; |
| 16 | + } |
40 | 17 |
|
41 | | - const openDirectMessageOption = useMemo( |
42 | | - () => |
43 | | - shouldOpenDirectMessage |
44 | | - ? { |
45 | | - content: t('Direct_Message'), |
46 | | - icon: 'balloon' as const, |
47 | | - onClick: openDirectMessage, |
48 | | - type: 'communication' as UserInfoActionType, |
49 | | - } |
50 | | - : undefined, |
51 | | - [openDirectMessage, shouldOpenDirectMessage, t], |
52 | | - ); |
| 18 | + return { |
| 19 | + content: t('Direct_Message'), |
| 20 | + icon: 'balloon' as const, |
| 21 | + onClick: openDirectMessage, |
| 22 | + type: 'communication', |
| 23 | + } as const; |
| 24 | + }, [openDirectMessage, t]); |
53 | 25 |
|
54 | 26 | return openDirectMessageOption; |
55 | 27 | }; |
0 commit comments