updates
This commit is contained in:
parent
a257b77501
commit
d709f53c47
|
@ -28,7 +28,7 @@ import { FaUserPlus, FaMinusCircle, FaPlus, FaUpload } from 'react-icons/fa';
|
||||||
import { useDropzone } from 'react-dropzone';
|
import { useDropzone } from 'react-dropzone';
|
||||||
import { escape } from 'lodash';
|
import { escape } from 'lodash';
|
||||||
import { validateEmail, validateURI } from '../utils';
|
import { validateEmail, validateURI } from '../utils';
|
||||||
import { UpdateUser } from '../graphql/mutation';
|
import { InviteMembers } from '../graphql/mutation';
|
||||||
import { ArrayInputOperations, csvDemoData } from '../constants';
|
import { ArrayInputOperations, csvDemoData } from '../constants';
|
||||||
import parseCSV from '../utils/parseCSV';
|
import parseCSV from '../utils/parseCSV';
|
||||||
|
|
||||||
|
@ -37,22 +37,33 @@ interface stateDataTypes {
|
||||||
isInvalid: boolean;
|
isInvalid: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const InviteMembersModal = ({ disabled = true }: { disabled: boolean }) => {
|
interface requestParamTypes {
|
||||||
|
emails: string[];
|
||||||
|
redirect_uri?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const initData: stateDataTypes = {
|
||||||
|
value: '',
|
||||||
|
isInvalid: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
const InviteMembersModal = ({
|
||||||
|
updateUserList,
|
||||||
|
disabled = true,
|
||||||
|
}: {
|
||||||
|
updateUserList: Function;
|
||||||
|
disabled: boolean;
|
||||||
|
}) => {
|
||||||
const client = useClient();
|
const client = useClient();
|
||||||
const toast = useToast();
|
const toast = useToast();
|
||||||
const { isOpen, onOpen, onClose } = useDisclosure();
|
const { isOpen, onOpen, onClose } = useDisclosure();
|
||||||
const [tabIndex, setTabIndex] = useState<number>(0);
|
const [tabIndex, setTabIndex] = useState<number>(0);
|
||||||
const [redirectURI, setRedirectURI] = useState<stateDataTypes>({
|
const [redirectURI, setRedirectURI] = useState<stateDataTypes>({
|
||||||
value: '',
|
...initData,
|
||||||
isInvalid: false,
|
|
||||||
});
|
});
|
||||||
const [emails, setEmails] = useState<stateDataTypes[]>([
|
const [emails, setEmails] = useState<stateDataTypes[]>([{ ...initData }]);
|
||||||
{
|
|
||||||
value: '',
|
|
||||||
isInvalid: false,
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
const [disableSendButton, setDisableSendButton] = useState<boolean>(false);
|
const [disableSendButton, setDisableSendButton] = useState<boolean>(false);
|
||||||
|
const [loading, setLoading] = React.useState<boolean>(false);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (redirectURI.isInvalid) {
|
if (redirectURI.isInvalid) {
|
||||||
setDisableSendButton(true);
|
setDisableSendButton(true);
|
||||||
|
@ -64,31 +75,58 @@ const InviteMembersModal = ({ disabled = true }: { disabled: boolean }) => {
|
||||||
}, [redirectURI, emails]);
|
}, [redirectURI, emails]);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
return () => {
|
return () => {
|
||||||
setRedirectURI({
|
setRedirectURI({ ...initData });
|
||||||
value: '',
|
setEmails([{ ...initData }]);
|
||||||
isInvalid: false,
|
|
||||||
});
|
|
||||||
setEmails([
|
|
||||||
{
|
|
||||||
value: '',
|
|
||||||
isInvalid: false,
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
const sendInviteHandler = async () => {
|
const sendInviteHandler = async () => {
|
||||||
|
setLoading(true);
|
||||||
|
try {
|
||||||
|
const emailList = emails
|
||||||
|
.filter((emailData) => !emailData.isInvalid)
|
||||||
|
.map((emailData) => emailData.value);
|
||||||
|
const params: requestParamTypes = {
|
||||||
|
emails: emailList,
|
||||||
|
};
|
||||||
|
if (redirectURI.value !== '' && !redirectURI.isInvalid) {
|
||||||
|
params.redirect_uri = redirectURI.value;
|
||||||
|
}
|
||||||
|
if (emailList.length > 1) {
|
||||||
|
const res = await client
|
||||||
|
.mutation(InviteMembers, {
|
||||||
|
params,
|
||||||
|
})
|
||||||
|
.toPromise();
|
||||||
|
if (res.error) {
|
||||||
|
throw new Error('Internal server error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
toast({
|
||||||
|
title: 'Invites sent successfully!',
|
||||||
|
isClosable: true,
|
||||||
|
status: 'success',
|
||||||
|
position: 'bottom-right',
|
||||||
|
});
|
||||||
|
setLoading(false);
|
||||||
|
updateUserList();
|
||||||
|
} else {
|
||||||
|
throw new Error('Please add emails');
|
||||||
|
}
|
||||||
|
} catch (error: any) {
|
||||||
|
toast({
|
||||||
|
title: error?.message || 'Error occurred, try again!',
|
||||||
|
isClosable: true,
|
||||||
|
status: 'error',
|
||||||
|
position: 'bottom-right',
|
||||||
|
});
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
closeModalHandler();
|
closeModalHandler();
|
||||||
};
|
};
|
||||||
const updateEmailListHandler = (operation: string, index: number = 0) => {
|
const updateEmailListHandler = (operation: string, index: number = 0) => {
|
||||||
switch (operation) {
|
switch (operation) {
|
||||||
case ArrayInputOperations.APPEND:
|
case ArrayInputOperations.APPEND:
|
||||||
setEmails([
|
setEmails([...emails, { ...initData }]);
|
||||||
...emails,
|
|
||||||
{
|
|
||||||
value: '',
|
|
||||||
isInvalid: false,
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
break;
|
break;
|
||||||
case ArrayInputOperations.REMOVE:
|
case ArrayInputOperations.REMOVE:
|
||||||
const updatedEmailList = [...emails];
|
const updatedEmailList = [...emails];
|
||||||
|
@ -318,7 +356,7 @@ const InviteMembersModal = ({ disabled = true }: { disabled: boolean }) => {
|
||||||
colorScheme="blue"
|
colorScheme="blue"
|
||||||
variant="solid"
|
variant="solid"
|
||||||
onClick={sendInviteHandler}
|
onClick={sendInviteHandler}
|
||||||
isDisabled={disableSendButton}
|
isDisabled={disableSendButton || loading}
|
||||||
>
|
>
|
||||||
<Center h="100%" pt="5%">
|
<Center h="100%" pt="5%">
|
||||||
Send
|
Send
|
||||||
|
|
|
@ -45,3 +45,11 @@ export const DeleteUser = `
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
export const InviteMembers = `
|
||||||
|
mutation inviteMembers($params: InviteMemberInput!) {
|
||||||
|
_invite_members(params: $params) {
|
||||||
|
message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
|
@ -190,7 +190,10 @@ export default function Users() {
|
||||||
<Text fontSize="md" fontWeight="bold">
|
<Text fontSize="md" fontWeight="bold">
|
||||||
Users
|
Users
|
||||||
</Text>
|
</Text>
|
||||||
<InviteMembersModal disabled={disableInviteMembers} />
|
<InviteMembersModal
|
||||||
|
disabled={disableInviteMembers}
|
||||||
|
updateUserList={updateUserList}
|
||||||
|
/>
|
||||||
</Flex>
|
</Flex>
|
||||||
{!loading ? (
|
{!loading ? (
|
||||||
userList.length > 0 ? (
|
userList.length > 0 ? (
|
||||||
|
|
Loading…
Reference in New Issue
Block a user