import { zodResolver } from '@hookform/resolvers/zod' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import { Lock, Mail } from 'lucide-react' import { useForm } from 'react-hook-form' import toast from 'react-hot-toast' import * as z from 'zod' import { useUserCreateMutation } from 'data/auth/user-create-mutation' import { useProjectApiQuery } from 'data/config/project-api-query' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { Button, Checkbox_Shadcn_, Dialog, DialogContent, DialogHeader, DialogSectionSeparator, DialogTitle, FormControl_Shadcn_, FormField_Shadcn_, FormItem_Shadcn_, FormLabel_Shadcn_, FormMessage_Shadcn_, Form_Shadcn_, Input_Shadcn_, } from 'ui' export type CreateUserModalProps = { visible: boolean setVisible: (visible: boolean) => void } const CreateUserFormSchema = z.object({ email: z.string().min(1, 'Email is required').email('Must be a valid email address'), password: z.string().min(1, 'Password is required'), autoConfirmUser: z.boolean(), }) const CreateUserModal = ({ visible, setVisible }: CreateUserModalProps) => { const { ref: projectRef } = useParams() const { data, isLoading, isSuccess } = useProjectApiQuery({ projectRef }, { enabled: visible }) const canCreateUsers = useCheckPermissions(PermissionAction.AUTH_EXECUTE, 'create_user') const { mutate: createUser, isLoading: isCreatingUser } = useUserCreateMutation({ async onSuccess(res) { toast.success(`Successfully created user: ${res.email}`) setVisible(false) }, }) const onCreateUser = async (values: any) => { if (!isSuccess) { return toast.error(`Failed to create user: Error loading project config`) } const { protocol, endpoint, serviceApiKey } = data.autoApiService createUser({ projectRef, endpoint, protocol, serviceApiKey, user: values }) //react-hook-form does not reset field values even after submit. Reset Field data so data does not persist form.reset({ email: '', password: '', autoConfirmUser: true }) } const form = useForm>({ resolver: zodResolver(CreateUserFormSchema), defaultValues: { email: '', password: '', autoConfirmUser: true }, }) return ( Create a new user
( Email address
)} /> ( User Password
)} /> ( field.onChange(value)} /> Auto Confirm User? )} />

A confirmation email will not be sent when creating a user via this form.

) } export default CreateUserModal