perf: 优化获取群组设置的逻辑,增强代码可读性

feat/uniplus
moonrailgun 2 years ago
parent 79390d329e
commit 0f5dc6aec6

@ -132,6 +132,7 @@ export {
deleteGroupRole, deleteGroupRole,
updateGroupRoleName, updateGroupRoleName,
updateGroupRolePermission, updateGroupRolePermission,
getGroupConfigWithInfo,
} from './model/group'; } from './model/group';
export type { export type {
GroupPanel, GroupPanel,

@ -87,6 +87,23 @@ export interface GroupInvite {
expiredAt?: string; expiredAt?: string;
} }
/**
*
*/
export function getGroupConfigWithInfo(
groupInfo: GroupInfo | null | undefined
): {
hideGroupMemberDiscriminator: boolean;
[key: string]: unknown;
} {
const config = groupInfo?.config ?? {};
return {
...config,
hideGroupMemberDiscriminator: config.hideGroupMemberDiscriminator ?? false,
};
}
/** /**
* *
* @param name * @param name

@ -1,11 +1,12 @@
import { Icon } from 'tailchat-design'; import { Icon } from 'tailchat-design';
import { openReconfirmModal, openReconfirmModalP } from '@/components/Modal'; import { openReconfirmModalP } from '@/components/Modal';
import { GroupUserPopover } from '@/components/popover/GroupUserPopover'; import { GroupUserPopover } from '@/components/popover/GroupUserPopover';
import { UserListItem } from '@/components/UserListItem'; import { UserListItem } from '@/components/UserListItem';
import { Divider, Dropdown, Input, MenuProps, Skeleton } from 'antd'; import { Divider, Dropdown, Input, MenuProps, Skeleton } from 'antd';
import React, { useMemo } from 'react'; import React, { useMemo } from 'react';
import { import {
formatFullTime, formatFullTime,
getGroupConfigWithInfo,
GroupMember, GroupMember,
humanizeMsDuration, humanizeMsDuration,
model, model,
@ -101,6 +102,7 @@ export const MembersPanel: React.FC<MembersPanelProps> = React.memo((props) => {
const [allowManageUser] = useHasGroupPermission(groupId, [ const [allowManageUser] = useHasGroupPermission(groupId, [
PERMISSION.core.manageUser, PERMISSION.core.manageUser,
]); ]);
const { hideGroupMemberDiscriminator } = getGroupConfigWithInfo(groupInfo);
const { const {
searchText, searchText,
@ -151,10 +153,6 @@ export const MembersPanel: React.FC<MembersPanelProps> = React.memo((props) => {
[groupId] [groupId]
); );
const config = groupInfo?.config ?? {};
const hideGroupMemberDiscriminator =
config.hideGroupMemberDiscriminator ?? false;
if (!groupInfo) { if (!groupInfo) {
return <Problem />; return <Problem />;
} }
@ -240,11 +238,7 @@ export const MembersPanel: React.FC<MembersPanelProps> = React.memo((props) => {
<UserListItem <UserListItem
userId={member._id} userId={member._id}
popover={ popover={
<GroupUserPopover <GroupUserPopover userInfo={member} groupInfo={groupInfo} />
userInfo={member}
groupInfo={groupInfo}
hideDiscriminator={hideGroupMemberDiscriminator}
/>
} }
hideDiscriminator={hideGroupMemberDiscriminator} hideDiscriminator={hideGroupMemberDiscriminator}
/> />
@ -256,13 +250,7 @@ export const MembersPanel: React.FC<MembersPanelProps> = React.memo((props) => {
<UserListItem <UserListItem
key={member._id} key={member._id}
userId={member._id} userId={member._id}
popover={ popover={<GroupUserPopover userInfo={member} groupInfo={groupInfo} />}
<GroupUserPopover
userInfo={member}
groupInfo={groupInfo}
hideDiscriminator={hideGroupMemberDiscriminator}
/>
}
hideDiscriminator={hideGroupMemberDiscriminator} hideDiscriminator={hideGroupMemberDiscriminator}
/> />
); );

@ -3,17 +3,22 @@ import { fetchImagePrimaryColor } from '@/utils/image-helper';
import { Space, Tag } from 'antd'; import { Space, Tag } from 'antd';
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { getTextColorHex } from 'tailchat-design'; import { getTextColorHex } from 'tailchat-design';
import { GroupInfo, t, UserBaseInfo } from 'tailchat-shared'; import {
getGroupConfigWithInfo,
GroupInfo,
t,
UserBaseInfo,
} from 'tailchat-shared';
import { UserProfileContainer } from '../UserProfileContainer'; import { UserProfileContainer } from '../UserProfileContainer';
export const GroupUserPopover: React.FC<{ export const GroupUserPopover: React.FC<{
userInfo: UserBaseInfo; userInfo: UserBaseInfo;
groupInfo: GroupInfo; groupInfo: GroupInfo;
hideDiscriminator?: boolean;
}> = React.memo((props) => { }> = React.memo((props) => {
const { userInfo, groupInfo, hideDiscriminator = false } = props; const { userInfo, groupInfo } = props;
const userExtra = userInfo.extra ?? {}; const userExtra = userInfo.extra ?? {};
const roleNames = getUserRoleNames(userInfo._id, groupInfo); const roleNames = getUserRoleNames(userInfo._id, groupInfo);
const { hideGroupMemberDiscriminator } = getGroupConfigWithInfo(groupInfo);
useEffect(() => { useEffect(() => {
if (userInfo.avatar) { if (userInfo.avatar) {
@ -28,7 +33,7 @@ export const GroupUserPopover: React.FC<{
<UserProfileContainer userInfo={userInfo}> <UserProfileContainer userInfo={userInfo}>
<div className="text-xl"> <div className="text-xl">
<span className="font-semibold">{userInfo.nickname}</span> <span className="font-semibold">{userInfo.nickname}</span>
{!hideDiscriminator && ( {!hideGroupMemberDiscriminator && (
<span className="opacity-60 ml-1">#{userInfo.discriminator}</span> <span className="opacity-60 ml-1">#{userInfo.discriminator}</span>
)} )}
</div> </div>

Loading…
Cancel
Save