mirror of https://github.com/msgbyte/tailchat
feat: 角色组成员管理
parent
31fbd35cdc
commit
1556eed93f
@ -0,0 +1,59 @@
|
|||||||
|
import { Button } from 'antd';
|
||||||
|
import React, { useMemo, useState } from 'react';
|
||||||
|
import { t, useAsyncFn, useGroupMemberIds } from 'tailchat-shared';
|
||||||
|
import { ModalWrapper } from '../Modal';
|
||||||
|
import { UserPicker } from '../UserPicker/UserPicker';
|
||||||
|
import _without from 'lodash/without';
|
||||||
|
|
||||||
|
interface SelectGroupMemberProps {
|
||||||
|
/**
|
||||||
|
* 群组id
|
||||||
|
*/
|
||||||
|
groupId: string;
|
||||||
|
/**
|
||||||
|
* 排除的用户id
|
||||||
|
* 在选择好友时会进行过滤
|
||||||
|
*/
|
||||||
|
withoutMemberIds?: string[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点击确认按钮的回调
|
||||||
|
*/
|
||||||
|
onConfirm: (selectedUserIds: string[]) => void | Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 选择群组成员
|
||||||
|
*/
|
||||||
|
export const SelectGroupMember: React.FC<SelectGroupMemberProps> = React.memo(
|
||||||
|
(props) => {
|
||||||
|
const { groupId, withoutMemberIds = [], onConfirm } = props;
|
||||||
|
const [selectedUserIds, setSelectedUserIds] = useState<string[]>([]);
|
||||||
|
const groupMemberIds = useGroupMemberIds(groupId);
|
||||||
|
const filterMemberIds = useMemo(
|
||||||
|
() => _without(groupMemberIds, ...withoutMemberIds),
|
||||||
|
[groupMemberIds, withoutMemberIds]
|
||||||
|
);
|
||||||
|
|
||||||
|
const [{ loading }, handleConfirm] = useAsyncFn(async () => {
|
||||||
|
await onConfirm(selectedUserIds);
|
||||||
|
}, [onConfirm, selectedUserIds]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ModalWrapper title={t('选择群组成员')}>
|
||||||
|
<UserPicker
|
||||||
|
allUserIds={filterMemberIds}
|
||||||
|
selectedIds={selectedUserIds}
|
||||||
|
onChange={setSelectedUserIds}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div className="text-right">
|
||||||
|
<Button type="primary" loading={loading} onClick={handleConfirm}>
|
||||||
|
{t('确认')}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</ModalWrapper>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
SelectGroupMember.displayName = 'SelectGroupMember';
|
Loading…
Reference in New Issue