import { useContext, useState } from 'react' import { observer } from 'mobx-react-lite' import * as Tooltip from '@radix-ui/react-tooltip' import { Button, Modal, Input, IconPlus, IconMail, Form } from '@supabase/ui' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useStore, checkPermissions } from 'hooks' import { post } from 'lib/common/fetch' import { API_URL } from 'lib/constants' import { PageContext } from 'pages/project/[ref]/auth/users' const InviteUserModal = () => { const { ui } = useStore() const PageState: any = useContext(PageContext) const [visible, setVisible] = useState(false) const handleToggle = () => setVisible(!visible) const canInviteUsers = checkPermissions(PermissionAction.AUTH_EXECUTE, 'invite_user') const validate = (values: any) => { const errors: any = {} const emailValidateRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/ if (values.email.length === 0) { errors.email = 'Please enter a valid email' } else if (!emailValidateRegex.test(values.email)) { errors.email = `${values.email} is an invalid email` } return errors } const onInviteuser = async (values: any, { setSubmitting }: any) => { setSubmitting(true) const response = await post(`${API_URL}/auth/${PageState.projectRef}/invite`, { email: values.email, }) if (response.error) { ui.setNotification({ category: 'error', message: `Failed to invite user: ${response.error.message}`, }) } else { PageState.fetchData(1) ui.setNotification({ category: 'success', message: `Sent invite email to ${values.email}`, }) setVisible(false) } setSubmitting(false) } return (
{!canInviteUsers && (
You need additional permissions to invite users
)}
{({ isSubmitting }: { isSubmitting: boolean }) => (
} type="email" name="email" placeholder="User email" />
)}
) } export default observer(InviteUserModal)