refactor: 群组邀请链接modal

pull/13/head
moonrailgun 4 years ago
parent 7372c18cfb
commit ad98c8f50c

@ -55,7 +55,11 @@ export {
denyFriendRequest,
} from './model/friend';
export type { FriendRequest } from './model/friend';
export { GroupPanelType, createGroup } from './model/group';
export {
GroupPanelType,
createGroup,
createGroupInviteCode,
} from './model/group';
export type { GroupPanel, GroupInfo } from './model/group';
export type { ChatMessage } from './model/message';
export type { UserBaseInfo, UserLoginInfo } from './model/user';

@ -27,6 +27,12 @@ export interface GroupInfo {
panels: GroupPanel[];
}
export interface GroupInvite {
code: string;
groupId: string;
expiredAt?: Date;
}
/**
*
* @param name
@ -43,3 +49,18 @@ export async function createGroup(
return data;
}
/**
*
* 7
* @param groupId id
*/
export async function createGroupInviteCode(
groupId: string
): Promise<GroupInvite> {
const { data } = await request.post('/api/group/invite/createGroupInvite', {
groupId,
});
return data;
}

@ -0,0 +1,68 @@
import { Button, Divider, Input, Typography } from 'antd';
import React, { useCallback, useState } from 'react';
import {
createGroupInviteCode,
useAsyncFn,
useGroupInfo,
} from 'tailchat-shared';
import { isValidStr } from '../../../../shared/utils/string-helper';
import { ModalWrapper } from '../Modal';
/**
*
*/
interface GroupInviteProps {
groupId: string;
}
export const GroupInvite: React.FC<GroupInviteProps> = React.memo((props) => {
const groupId = props.groupId;
const groupInfo = useGroupInfo(groupId);
// const [searchName, setSearchName] = useState('');
const [inviteLink, setInviteLink] = useState('');
// const handleSearch = useCallback(() => {
// console.log('searchName', searchName);
// }, []);
const [{ loading }, handleCreateInviteLink] = useAsyncFn(async () => {
console.log('handleCreateInviteLink');
const invite = await createGroupInviteCode(groupId);
setInviteLink(`${location.origin}/invite/${invite.code}`);
}, [groupId]);
if (!groupInfo) {
return <div></div>;
}
return (
<ModalWrapper style={{ width: '440px' }}>
{/* <div> {groupInfo.name}</div>
<div>
<Input.Search
value={searchName}
onChange={(e) => setSearchName(e.target.value)}
onSearch={handleSearch}
/>
</div>
<Divider></Divider> */}
<div></div>
<div>
{isValidStr(inviteLink) ? (
<Typography.Text copyable={true} className="select-text">
{inviteLink}
</Typography.Text>
) : (
<Button loading={loading} onClick={handleCreateInviteLink}>
</Button>
)}
</div>
</ModalWrapper>
);
});
GroupInvite.displayName = 'GroupInvite';
Loading…
Cancel
Save