import { zodResolver } from '@hookform/resolvers/zod' import { useEffect, useRef, useState } from 'react' import { SubmitHandler, useForm } from 'react-hook-form' import { toast } from 'sonner' import z from 'zod' import { useParams } from 'common' import { useSecretsCreateMutation } from 'data/secrets/secrets-create-mutation' import { Eye, EyeOff } from 'lucide-react' import { Button, Form_Shadcn_, FormControl_Shadcn_, FormField_Shadcn_, Modal } from 'ui' import { Input } from 'ui-patterns/DataInputs/Input' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' interface AddNewSecretModalProps { visible: boolean onClose: () => void } const AddNewSecretModal = ({ visible, onClose }: AddNewSecretModalProps) => { const { ref: projectRef } = useParams() const submitRef = useRef(null) const [showSecretValue, setShowSecretValue] = useState(false) const FormSchema = z.object({ name: z .string() .min(1, 'Please provide a name for your secret') .refine((value) => !value.match(/^(SUPABASE_).*/), { message: 'Name must not start with the SUPABASE_ prefix', }), value: z.string().min(1, 'Please provider a value for your secret'), }) const defaultValues = { name: '', value: '' } const form = useForm({ resolver: zodResolver(FormSchema), defaultValues, }) const onSubmit: SubmitHandler> = async (data) => { createSecret({ projectRef, secrets: [data] }) } const { mutate: createSecret, isLoading: isCreating } = useSecretsCreateMutation({ onSuccess: (_, variables) => { toast.success(`Successfully created new secret "${variables.secrets[0].name}"`) onClose() }, }) useEffect(() => { if (visible) { form.reset(defaultValues) setShowSecretValue(false) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [visible]) return ( } >
( )} /> (