import { zodResolver } from '@hookform/resolvers/zod' import { Eye, EyeOff } from 'lucide-react' import { parseAsBoolean, useQueryState } from 'nuqs' import { useState } from 'react' import { SubmitHandler, useForm } from 'react-hook-form' import { toast } from 'sonner' import { Button, Dialog, DialogContent, DialogFooter, DialogHeader, DialogSection, DialogSectionSeparator, DialogTitle, Form, FormControl, FormField, Input, Textarea, Tooltip, TooltipContent, TooltipTrigger, } from 'ui' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import * as z from 'zod' import { useVaultSecretCreateMutation } from '@/data/vault/vault-secret-create-mutation' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' const formSchema = z.object({ name: z.string().min(1, 'Please provide a name for your secret'), description: z.string().optional(), secret: z.string().min(1, 'Please enter your secret value'), }) type FormSchema = z.infer const formId = 'add-new-secret-form' export const AddNewSecretModal = () => { const { data: project } = useSelectedProjectQuery() const { mutateAsync: addSecret } = useVaultSecretCreateMutation() const [isSecretVisible, setIsSecretVisible] = useState(false) const [showAddSecretModal, setShowAddSecretModal] = useQueryState( 'new', parseAsBoolean.withDefault(false) ) const handleClose = () => { setShowAddSecretModal(null) setIsSecretVisible(false) form.reset() } const onAddNewSecret: SubmitHandler = async (values) => { if (!project) return console.error('Project is required') try { await addSecret({ projectRef: project.ref, connectionString: project?.connectionString, name: values.name, description: values.description, secret: values.secret, }) toast.success(`Successfully added new secret ${values.name}`) handleClose() } catch (error: any) { // [Joshen] No error handler required as they are all handled within the mutations already } finally { } } const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { name: '', description: '', secret: '' }, }) const { isDirty, isSubmitting } = form.formState return ( Add new secret
( )} /> ( )} /> (