diff --git a/client/web/src/components/Panel/group/MembersPanel.tsx b/client/web/src/components/Panel/group/MembersPanel.tsx index d99d30f9..0da25b1c 100644 --- a/client/web/src/components/Panel/group/MembersPanel.tsx +++ b/client/web/src/components/Panel/group/MembersPanel.tsx @@ -21,6 +21,7 @@ import { useUserInfoList, } from 'tailchat-shared'; import _compact from 'lodash/compact'; +import { Problem } from '@/components/Problem'; interface MembersPanelProps { groupId: string; @@ -154,6 +155,10 @@ export const MembersPanel: React.FC = React.memo((props) => { const hideGroupMemberDiscriminator = config.hideGroupMemberDiscriminator ?? false; + if (!groupInfo) { + return ; + } + if (userInfoList.length === 0) { return ; } @@ -237,6 +242,7 @@ export const MembersPanel: React.FC = React.memo((props) => { popover={ } @@ -253,6 +259,7 @@ export const MembersPanel: React.FC = React.memo((props) => { popover={ } diff --git a/client/web/src/components/popover/GroupUserPopover.tsx b/client/web/src/components/popover/GroupUserPopover.tsx index 45008f7c..300be117 100644 --- a/client/web/src/components/popover/GroupUserPopover.tsx +++ b/client/web/src/components/popover/GroupUserPopover.tsx @@ -1,16 +1,19 @@ import { pluginUserExtraInfo } from '@/plugin/common'; import { fetchImagePrimaryColor } from '@/utils/image-helper'; -import { Tag } from 'antd'; +import { Space, Tag } from 'antd'; import React, { useEffect } from 'react'; -import { t, UserBaseInfo } from 'tailchat-shared'; +import { getTextColorHex } from 'tailchat-design'; +import { GroupInfo, t, UserBaseInfo } from 'tailchat-shared'; import { UserProfileContainer } from '../UserProfileContainer'; export const GroupUserPopover: React.FC<{ userInfo: UserBaseInfo; + groupInfo: GroupInfo; hideDiscriminator?: boolean; }> = React.memo((props) => { - const { userInfo, hideDiscriminator = false } = props; + const { userInfo, groupInfo, hideDiscriminator = false } = props; const userExtra = userInfo.extra ?? {}; + const roleNames = getUserRoleNames(userInfo._id, groupInfo); useEffect(() => { if (userInfo.avatar) { @@ -30,9 +33,19 @@ export const GroupUserPopover: React.FC<{ )} -
+ + {groupInfo.owner === userInfo._id && ( + {t('创建者')} + )} + {userInfo.temporary && {t('游客')}} -
+ + {roleNames.map((name) => ( + + {name} + + ))} +
{pluginUserExtraInfo.map((item, i) => { @@ -60,3 +73,15 @@ export const GroupUserPopover: React.FC<{ ); }); GroupUserPopover.displayName = 'GroupUserPopover'; + +/** + * 获取用户的角色名列表 + */ +function getUserRoleNames(userId: string, groupInfo: GroupInfo) { + const roles = groupInfo.members.find((m) => m.userId === userId)?.roles ?? []; + const roleNames = groupInfo.roles + .filter((r) => roles.includes(r._id)) + .map((r) => r.name); + + return roleNames; +}