From 1a8b94eaeda7474a7e259822f29e86effdd2f82e Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Fri, 18 Aug 2023 11:49:20 +0800 Subject: [PATCH] feat: allow create converse from group user popover --- .../popover/UserPopover/GroupUserPopover.tsx | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/client/web/src/components/popover/UserPopover/GroupUserPopover.tsx b/client/web/src/components/popover/UserPopover/GroupUserPopover.tsx index f4118101..879646d4 100644 --- a/client/web/src/components/popover/UserPopover/GroupUserPopover.tsx +++ b/client/web/src/components/popover/UserPopover/GroupUserPopover.tsx @@ -1,13 +1,18 @@ +import { IconBtn } from '@/components/IconBtn'; import { UserName } from '@/components/UserName'; import { fetchImagePrimaryColor } from '@/utils/image-helper'; -import { Space, Tag } from 'antd'; +import { Space, Tag, Tooltip } from 'antd'; import React, { useEffect } from 'react'; +import { useNavigate } from 'react-router'; import { getTextColorHex } from 'tailchat-design'; import { + createDMConverse, getGroupConfigWithInfo, GroupInfo, t, + useAsyncRequest, UserBaseInfo, + useUserId, } from 'tailchat-shared'; import { UserProfileContainer } from '../../UserProfileContainer'; import { usePluginUserExtraInfo } from './usePluginUserExtraInfo'; @@ -17,10 +22,21 @@ export const GroupUserPopover: React.FC<{ groupInfo: GroupInfo; }> = React.memo((props) => { const { userInfo, groupInfo } = props; + const userId = userInfo._id; const userExtra = userInfo.extra ?? {}; - const roleNames = getUserRoleNames(userInfo._id, groupInfo); + const roleNames = getUserRoleNames(userId, groupInfo); const { hideGroupMemberDiscriminator } = getGroupConfigWithInfo(groupInfo); const pluginUserExtraInfoEl = usePluginUserExtraInfo(userExtra); + const navigate = useNavigate(); + const currentUserId = useUserId(); + + const allowSendMessage = + !hideGroupMemberDiscriminator && currentUserId !== userId; + + const [, handleCreateConverse] = useAsyncRequest(async () => { + const converse = await createDMConverse([userId]); + navigate(`/main/personal/converse/${converse._id}`); + }, [navigate]); useEffect(() => { if (userInfo.avatar) { @@ -35,7 +51,7 @@ export const GroupUserPopover: React.FC<{
- + {!hideGroupMemberDiscriminator && ( #{userInfo.discriminator} @@ -43,9 +59,7 @@ export const GroupUserPopover: React.FC<{
- {groupInfo.owner === userInfo._id && ( - {t('创建者')} - )} + {groupInfo.owner === userId && {t('创建者')}} {userInfo.temporary && {t('游客')}} @@ -57,6 +71,17 @@ export const GroupUserPopover: React.FC<{
{pluginUserExtraInfoEl}
+ +
+ {allowSendMessage && ( + + + + )} +
);