mirror of https://github.com/msgbyte/tailchat
feat(admin): add operate which can add group member
parent
cd7770e722
commit
8df7b47c07
@ -0,0 +1,98 @@
|
||||
import React, { useState } from 'react';
|
||||
import {
|
||||
createTextField,
|
||||
Identifier,
|
||||
ListTable,
|
||||
Message,
|
||||
Modal,
|
||||
ReferenceFieldEdit,
|
||||
useEvent,
|
||||
useTranslation,
|
||||
} from 'tushan';
|
||||
import { groupFields } from '../fields';
|
||||
import { callAction } from '../request';
|
||||
|
||||
export const GroupList: React.FC = React.memo(() => {
|
||||
const { t } = useTranslation();
|
||||
const [modal, contextHolder] = Modal.useModal();
|
||||
return (
|
||||
<>
|
||||
{contextHolder}
|
||||
<ListTable
|
||||
filter={[
|
||||
createTextField('q', {
|
||||
label: 'Search',
|
||||
}),
|
||||
]}
|
||||
fields={groupFields}
|
||||
action={{
|
||||
detail: true,
|
||||
edit: true,
|
||||
delete: true,
|
||||
export: true,
|
||||
custom: (record) => [
|
||||
{
|
||||
key: 'addGroupMember',
|
||||
label: t('custom.action.addGroupMember'),
|
||||
onClick: () => {
|
||||
let userId: Identifier;
|
||||
const { close } = modal.confirm({
|
||||
title: t('custom.action.addGroupMemberTitle'),
|
||||
content: (
|
||||
<div>
|
||||
<div>{t('custom.action.selectUser')}:</div>
|
||||
<UserSelector onChange={(val) => (userId = val)} />
|
||||
</div>
|
||||
),
|
||||
onOk: async () => {
|
||||
if (!userId) {
|
||||
Message.error(
|
||||
t('custom.action.addGroupMemberRequiredTip')
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await callAction('group.addMember', {
|
||||
groupId: record.id,
|
||||
userId,
|
||||
});
|
||||
Message.success(t('tushan.common.success'));
|
||||
close();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
Message.error(String(err));
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
},
|
||||
],
|
||||
}}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
});
|
||||
GroupList.displayName = 'GroupList';
|
||||
|
||||
export const UserSelector: React.FC<{ onChange: (val: Identifier) => void }> =
|
||||
React.memo((props) => {
|
||||
const [userId, setUserId] = useState<Identifier>('');
|
||||
|
||||
const handleChange = useEvent((val: Identifier) => {
|
||||
setUserId(val);
|
||||
props.onChange(val);
|
||||
});
|
||||
|
||||
return (
|
||||
<ReferenceFieldEdit
|
||||
value={userId}
|
||||
onChange={handleChange}
|
||||
options={{
|
||||
displayField: 'nickname',
|
||||
reference: 'users',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
});
|
||||
UserSelector.displayName = 'UserSelector';
|
Loading…
Reference in New Issue