|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
import { Icon } from 'tailchat-design';
|
|
|
|
|
import { openReconfirmModalP } from '@/components/Modal';
|
|
|
|
|
import { openReconfirmModal, openReconfirmModalP } from '@/components/Modal';
|
|
|
|
|
import { GroupUserPopover } from '@/components/popover/GroupUserPopover';
|
|
|
|
|
import { UserListItem } from '@/components/UserListItem';
|
|
|
|
|
import { Divider, Dropdown, Input, MenuProps, Skeleton } from 'antd';
|
|
|
|
@ -20,6 +20,7 @@ import {
|
|
|
|
|
useSearch,
|
|
|
|
|
useUserInfoList,
|
|
|
|
|
} from 'tailchat-shared';
|
|
|
|
|
import _compact from 'lodash/compact';
|
|
|
|
|
|
|
|
|
|
interface MembersPanelProps {
|
|
|
|
|
groupId: string;
|
|
|
|
@ -133,6 +134,22 @@ export const MembersPanel: React.FC<MembersPanelProps> = React.memo((props) => {
|
|
|
|
|
userInfoList
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 解除禁言
|
|
|
|
|
*/
|
|
|
|
|
const [, handleRemoveGroupMember] = useAsyncRequest(
|
|
|
|
|
async (memberId: string) => {
|
|
|
|
|
const confirm = await openReconfirmModalP({
|
|
|
|
|
title: t('确认要将该用户移出群组么'),
|
|
|
|
|
});
|
|
|
|
|
if (confirm) {
|
|
|
|
|
await model.group.deleteGroupMember(groupId, memberId);
|
|
|
|
|
showToasts(t('操作成功'), 'success');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
[groupId]
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (userInfoList.length === 0) {
|
|
|
|
|
return <Skeleton />;
|
|
|
|
|
}
|
|
|
|
@ -141,61 +158,71 @@ export const MembersPanel: React.FC<MembersPanelProps> = React.memo((props) => {
|
|
|
|
|
const hasMute = getMembersHasMute(members, member._id);
|
|
|
|
|
|
|
|
|
|
if (allowManageUser) {
|
|
|
|
|
const muteItems: MenuProps['items'] = hasMute
|
|
|
|
|
? [
|
|
|
|
|
{
|
|
|
|
|
key: 'unmute',
|
|
|
|
|
label: t('解除禁言'),
|
|
|
|
|
onClick: () => handleUnmuteMember(member._id),
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
: [
|
|
|
|
|
{
|
|
|
|
|
key: 'mute',
|
|
|
|
|
label: t('禁言'),
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
key: '1m',
|
|
|
|
|
label: t('1分钟'),
|
|
|
|
|
onClick: () => handleMuteMember(member._id, 1 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '5m',
|
|
|
|
|
label: t('5分钟'),
|
|
|
|
|
onClick: () => handleMuteMember(member._id, 5 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '10m',
|
|
|
|
|
label: t('10分钟'),
|
|
|
|
|
onClick: () => handleMuteMember(member._id, 10 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '30m',
|
|
|
|
|
label: t('30分钟'),
|
|
|
|
|
onClick: () => handleMuteMember(member._id, 30 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '1d',
|
|
|
|
|
label: t('1天'),
|
|
|
|
|
onClick: () =>
|
|
|
|
|
handleMuteMember(member._id, 1 * 24 * 60 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '7d',
|
|
|
|
|
label: t('7天'),
|
|
|
|
|
onClick: () =>
|
|
|
|
|
handleMuteMember(member._id, 7 * 24 * 60 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '30d',
|
|
|
|
|
label: t('30天'),
|
|
|
|
|
onClick: () =>
|
|
|
|
|
handleMuteMember(member._id, 30 * 24 * 60 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const menu: MenuProps = {
|
|
|
|
|
items: hasMute
|
|
|
|
|
? [
|
|
|
|
|
{
|
|
|
|
|
key: 'unmute',
|
|
|
|
|
label: t('解除禁言'),
|
|
|
|
|
onClick: () => handleUnmuteMember(member._id),
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
: [
|
|
|
|
|
{
|
|
|
|
|
key: 'mute',
|
|
|
|
|
label: t('禁言'),
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
key: '1m',
|
|
|
|
|
label: t('1分钟'),
|
|
|
|
|
onClick: () => handleMuteMember(member._id, 1 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '5m',
|
|
|
|
|
label: t('5分钟'),
|
|
|
|
|
onClick: () => handleMuteMember(member._id, 5 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '10m',
|
|
|
|
|
label: t('10分钟'),
|
|
|
|
|
onClick: () => handleMuteMember(member._id, 10 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '30m',
|
|
|
|
|
label: t('30分钟'),
|
|
|
|
|
onClick: () => handleMuteMember(member._id, 30 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '1d',
|
|
|
|
|
label: t('1天'),
|
|
|
|
|
onClick: () =>
|
|
|
|
|
handleMuteMember(member._id, 1 * 24 * 60 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '7d',
|
|
|
|
|
label: t('7天'),
|
|
|
|
|
onClick: () =>
|
|
|
|
|
handleMuteMember(member._id, 7 * 24 * 60 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '30d',
|
|
|
|
|
label: t('30天'),
|
|
|
|
|
onClick: () =>
|
|
|
|
|
handleMuteMember(member._id, 30 * 24 * 60 * 60 * 1000),
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
items: _compact([
|
|
|
|
|
...muteItems,
|
|
|
|
|
{
|
|
|
|
|
key: 'delete',
|
|
|
|
|
label: t('移出群组'),
|
|
|
|
|
danger: true,
|
|
|
|
|
onClick: () => handleRemoveGroupMember(member._id),
|
|
|
|
|
},
|
|
|
|
|
] as MenuProps['items']),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|