mirror of https://github.com/msgbyte/tailchat
feat: add invite code usage limit for every invite code
parent
518d12bb3e
commit
738eb75003
@ -0,0 +1,117 @@
|
|||||||
|
import { MetaFormFieldMeta, WebMetaForm } from 'tailchat-design';
|
||||||
|
import React from 'react';
|
||||||
|
import { model, t, useEvent } from 'tailchat-shared';
|
||||||
|
import { ModalWrapper } from '../../Modal';
|
||||||
|
|
||||||
|
interface MetaFormValues {
|
||||||
|
expiredAt: number;
|
||||||
|
usageLimit: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fields: MetaFormFieldMeta[] = [
|
||||||
|
{
|
||||||
|
type: 'select',
|
||||||
|
name: 'expiredAt',
|
||||||
|
label: t('过期时间'),
|
||||||
|
defaultValue: -1,
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
label: t('30分钟'),
|
||||||
|
value: 30 * 60,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('1小时'),
|
||||||
|
value: 60 * 60,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('6小时'),
|
||||||
|
value: 6 * 60 * 60,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('12小时'),
|
||||||
|
value: 12 * 60 * 60,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('1天'),
|
||||||
|
value: 24 * 60 * 60,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('7天'),
|
||||||
|
value: 7 * 24 * 60 * 60,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('永不'),
|
||||||
|
value: -1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'select',
|
||||||
|
name: 'usageLimit',
|
||||||
|
label: t('最大使用次数'),
|
||||||
|
defaultValue: -1,
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
label: t('无限制'),
|
||||||
|
value: -1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('1次使用'),
|
||||||
|
value: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('5次使用'),
|
||||||
|
value: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('10次使用'),
|
||||||
|
value: 10,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('25次使用'),
|
||||||
|
value: 25,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('50次使用'),
|
||||||
|
value: 50,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('100次使用'),
|
||||||
|
value: 100,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 群组邀请
|
||||||
|
*/
|
||||||
|
|
||||||
|
interface EditGroupInviteProps {
|
||||||
|
groupId: string;
|
||||||
|
code: string;
|
||||||
|
onEditSuccess: () => void;
|
||||||
|
}
|
||||||
|
export const EditGroupInvite: React.FC<EditGroupInviteProps> = React.memo(
|
||||||
|
(props) => {
|
||||||
|
const handleEditGroupInvite = useEvent(async (values: MetaFormValues) => {
|
||||||
|
await model.group.editGroupInvite(
|
||||||
|
props.groupId,
|
||||||
|
props.code,
|
||||||
|
values.expiredAt === -1
|
||||||
|
? undefined
|
||||||
|
: Date.now() + values.expiredAt * 1000,
|
||||||
|
values.usageLimit === -1 ? undefined : values.usageLimit
|
||||||
|
);
|
||||||
|
|
||||||
|
props.onEditSuccess();
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ModalWrapper title={t('编辑邀请链接')}>
|
||||||
|
<WebMetaForm fields={fields} onSubmit={handleEditGroupInvite} />
|
||||||
|
</ModalWrapper>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
EditGroupInvite.displayName = 'EditGroupInvite';
|
Loading…
Reference in New Issue