invite email modal updated
This commit is contained in:
parent
ab01ff249d
commit
e126bfddad
|
@ -27,11 +27,11 @@ import { useClient } from 'urql';
|
||||||
import { FaUserPlus, FaMinusCircle, FaPlus, FaUpload } from 'react-icons/fa';
|
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 } from '../utils';
|
import { validateEmail, validateURI } from '../utils';
|
||||||
import { UpdateUser } from '../graphql/mutation';
|
import { UpdateUser } from '../graphql/mutation';
|
||||||
import { ArrayInputOperations, csvDemoData } from '../constants';
|
import { ArrayInputOperations, csvDemoData } from '../constants';
|
||||||
|
|
||||||
interface emailDataTypes {
|
interface stateDataTypes {
|
||||||
value: string;
|
value: string;
|
||||||
isInvalid: boolean;
|
isInvalid: boolean;
|
||||||
}
|
}
|
||||||
|
@ -40,19 +40,12 @@ const InviteEmailModal = () => {
|
||||||
const client = useClient();
|
const client = useClient();
|
||||||
const toast = useToast();
|
const toast = useToast();
|
||||||
const { isOpen, onOpen, onClose } = useDisclosure();
|
const { isOpen, onOpen, onClose } = useDisclosure();
|
||||||
const [emails, setEmails] = useState<emailDataTypes[]>([
|
const [tabIndex, setTabIndex] = useState<number>(0);
|
||||||
{
|
const [redirectURI, setRedirectURI] = useState<stateDataTypes>({
|
||||||
value: '',
|
value: '',
|
||||||
isInvalid: false,
|
isInvalid: false,
|
||||||
},
|
});
|
||||||
{
|
const [emails, setEmails] = useState<stateDataTypes[]>([
|
||||||
value: '',
|
|
||||||
isInvalid: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '',
|
|
||||||
isInvalid: false,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
value: '',
|
value: '',
|
||||||
isInvalid: false,
|
isInvalid: false,
|
||||||
|
@ -90,6 +83,18 @@ const InviteEmailModal = () => {
|
||||||
const onDrop = useCallback((acceptedFiles) => {
|
const onDrop = useCallback((acceptedFiles) => {
|
||||||
console.log(acceptedFiles);
|
console.log(acceptedFiles);
|
||||||
}, []);
|
}, []);
|
||||||
|
const handleTabsChange = (index: number) => {
|
||||||
|
setTabIndex(index);
|
||||||
|
};
|
||||||
|
const setRedirectURIHandler = (value: string) => {
|
||||||
|
const updatedRedirectURI: stateDataTypes = {
|
||||||
|
value: '',
|
||||||
|
isInvalid: false,
|
||||||
|
};
|
||||||
|
updatedRedirectURI.value = value;
|
||||||
|
updatedRedirectURI.isInvalid = !validateURI(value);
|
||||||
|
setRedirectURI(updatedRedirectURI);
|
||||||
|
};
|
||||||
const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop });
|
const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop });
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
@ -111,7 +116,12 @@ const InviteEmailModal = () => {
|
||||||
<ModalHeader>Invite Email</ModalHeader>
|
<ModalHeader>Invite Email</ModalHeader>
|
||||||
<ModalCloseButton />
|
<ModalCloseButton />
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<Tabs isFitted variant="enclosed">
|
<Tabs
|
||||||
|
isFitted
|
||||||
|
variant="enclosed"
|
||||||
|
index={tabIndex}
|
||||||
|
onChange={handleTabsChange}
|
||||||
|
>
|
||||||
<TabList>
|
<TabList>
|
||||||
<Tab>Enter emails</Tab>
|
<Tab>Enter emails</Tab>
|
||||||
<Tab>Upload CSV</Tab>
|
<Tab>Upload CSV</Tab>
|
||||||
|
@ -124,6 +134,33 @@ const InviteEmailModal = () => {
|
||||||
>
|
>
|
||||||
<TabPanel>
|
<TabPanel>
|
||||||
<Flex flexDirection="column">
|
<Flex flexDirection="column">
|
||||||
|
<Flex
|
||||||
|
width="100%"
|
||||||
|
justifyContent="start"
|
||||||
|
alignItems="center"
|
||||||
|
marginBottom="2%"
|
||||||
|
>
|
||||||
|
<Flex marginLeft="2.5%">Redirect URI</Flex>
|
||||||
|
</Flex>
|
||||||
|
<Flex
|
||||||
|
width="100%"
|
||||||
|
justifyContent="space-between"
|
||||||
|
alignItems="center"
|
||||||
|
marginBottom="2%"
|
||||||
|
>
|
||||||
|
<InputGroup size="md" marginBottom="2.5%">
|
||||||
|
<Input
|
||||||
|
pr="4.5rem"
|
||||||
|
type="text"
|
||||||
|
placeholder="https://domain.com/sign-up"
|
||||||
|
value={redirectURI.value}
|
||||||
|
isInvalid={redirectURI.isInvalid}
|
||||||
|
onChange={(e) =>
|
||||||
|
setRedirectURIHandler(e.currentTarget.value)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</InputGroup>
|
||||||
|
</Flex>
|
||||||
<Flex
|
<Flex
|
||||||
width="100%"
|
width="100%"
|
||||||
justifyContent="space-between"
|
justifyContent="space-between"
|
||||||
|
|
|
@ -75,3 +75,14 @@ export const validateEmail = (email: string) => {
|
||||||
? true
|
? true
|
||||||
: false;
|
: false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const validateURI = (uri: string) => {
|
||||||
|
if (!uri || uri === '') return true;
|
||||||
|
return uri
|
||||||
|
.toLowerCase()
|
||||||
|
.match(
|
||||||
|
/(?:^|\s)((https?:\/\/)?(?:localhost|[\w-]+(?:\.[\w-]+)+)(:\d+)?(\/\S*)?)/
|
||||||
|
)
|
||||||
|
? true
|
||||||
|
: false;
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user