feat: invite member

This commit is contained in:
DiamondThree
2022-12-21 11:19:58 +08:00
parent 8a0aca7478
commit 0727ea772f
2 changed files with 28 additions and 16 deletions
@@ -5,11 +5,12 @@ import { Button } from '@/ui/button';
import Input from '@/ui/input';
import { useState } from 'react';
import { inviteMember, getUserByEmail } from '@pathfinder/data-services';
import { useAppState } from '@/providers/app-state-provider';
import { Avatar } from '@mui/material';
interface LoginModalProps {
open: boolean;
onClose: () => void;
workSpaceId: string;
}
export const debounce = <T extends (...args: any) => any>(
fn: T,
@@ -37,12 +38,16 @@ export const debounce = <T extends (...args: any) => any>(
};
const gmailReg = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@gmail\.com$/;
export const InviteMembers = ({ open, onClose }: LoginModalProps) => {
export const InviteMembers = ({
open,
onClose,
workSpaceId,
}: LoginModalProps) => {
const [canInvite, setCanInvite] = useState<boolean>(true);
const [email, setEmail] = useState<string>('');
const [showMember, setShowMember] = useState<boolean>(true);
const [showMember, setShowMember] = useState<boolean>(false);
const [showTip, setShowTip] = useState<boolean>(false);
const { currentWorkspaceId } = useAppState();
const [userData, setUserData] = useState<any>({});
const inputChange = (value: string) => {
setEmail(value);
setShowMember(true);
@@ -51,9 +56,9 @@ export const InviteMembers = ({ open, onClose }: LoginModalProps) => {
debounce(
() => {
getUserByEmail({ email: value }).then(data => {
console.log('data: ', data);
if (data) {
setCanInvite(false);
if (data?.name) {
setUserData(data);
setShowTip(false);
}
});
},
@@ -61,6 +66,7 @@ export const InviteMembers = ({ open, onClose }: LoginModalProps) => {
true
)();
} else {
setShowTip(true);
}
};
return (
@@ -94,11 +100,15 @@ export const InviteMembers = ({ open, onClose }: LoginModalProps) => {
<NoFind>Non-Gmail is not supported</NoFind>
) : (
<Member>
<MemberIcon>
<EmailIcon></EmailIcon>
</MemberIcon>
<Email>huojoe@gmail.com</Email>
<div>invited</div>
{userData?.avatar_url ? (
<Avatar src={userData?.avatar_url}></Avatar>
) : (
<MemberIcon>
<EmailIcon></EmailIcon>
</MemberIcon>
)}
<Email>{email}</Email>
{/* <div>invited</div> */}
</Member>
)}
</Members>
@@ -112,7 +122,7 @@ export const InviteMembers = ({ open, onClose }: LoginModalProps) => {
shape="circle"
type="primary"
onClick={() => {
inviteMember({ id: currentWorkspaceId, email: email })
inviteMember({ id: workSpaceId, email: email })
.then(res => {
console.log(res);
})
@@ -134,7 +134,9 @@ export const WorkspaceSetting = ({
{activeTab === ActiveTab.general && (
<GeneralPage workspace={workspace} />
)}
{activeTab === ActiveTab.members && <MembersPage />}
{activeTab === ActiveTab.members && workspace && (
<MembersPage workspace={workspace} />
)}
{activeTab === ActiveTab.publish && <PublishPage />}
</StyledSettingContent>
</StyledSettingContainer>
@@ -168,7 +170,7 @@ const GeneralPage = ({ workspace }: { workspace?: Workspace }) => {
);
};
const MembersPage = () => {
const MembersPage = ({ workspace }: { workspace: Workspace }) => {
const [isInviteModalShow, setIsInviteModalShow] = useState(false);
return (
<div>
@@ -205,10 +207,10 @@ const MembersPage = () => {
onClose={() => {
setIsInviteModalShow(false);
}}
workSpaceId={workspace.id}
open={isInviteModalShow}
></InviteMembers>
</StyledMemberButtonContainer>
Inv
</div>
);
};