import { useState } from 'react' import { useRouter } from 'next/router' import { toast } from 'sonner' import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogSection, DialogSectionSeparator, DialogTitle, Form_Shadcn_, FormControl_Shadcn_, FormField_Shadcn_, FormMessage_Shadcn_, Input_Shadcn_, Textarea, } from 'ui' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import * as z from 'zod' import { useMergeRequestCreateMutation } from 'data/merge-requests/merge-request-create-mutation' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' const mergeRequestSchema = z.object({ title: z.string().min(1, 'Title is required').max(200, 'Title must be less than 200 characters'), description: z.string().max(1000, 'Description must be less than 1000 characters').optional(), }) type MergeRequestForm = z.infer interface CreateMergeRequestModalProps { visible: boolean onClose: () => void projectRef: string headBranchName: string baseBranchName: string } export const CreateMergeRequestModal = ({ visible, onClose, projectRef, headBranchName, baseBranchName, }: CreateMergeRequestModalProps) => { const router = useRouter() const [isSubmitting, setIsSubmitting] = useState(false) const form = useForm({ resolver: zodResolver(mergeRequestSchema), defaultValues: { title: `Deploy ${headBranchName} to ${baseBranchName}`, description: '', }, }) const { mutate: createMergeRequest } = useMergeRequestCreateMutation({ onSuccess: (data) => { toast.success('Deploy request created successfully!') setIsSubmitting(false) onClose() form.reset() // Redirect to the deploy request page router.push(`/project/${projectRef}/merge-requests/${data.id}`) }, onError: (error) => { setIsSubmitting(false) toast.error(`Failed to create deploy request: ${error.message}`) }, }) const onSubmit = (values: MergeRequestForm) => { setIsSubmitting(true) createMergeRequest({ projectRef, title: values.title, description: values.description || undefined, head: headBranchName, base: baseBranchName, }) } const handleClose = () => { if (!isSubmitting) { onClose() form.reset() } } return ( !open && handleClose()}>
Create Deploy Request Create a deploy request to merge changes from {headBranchName} into{' '} {baseBranchName}. ( )} /> (