import { useParams } from 'common' import { GitMerge } from 'lucide-react' import { useRouter } from 'next/router' import { toast } from 'sonner' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { useBranchUpdateMutation } from '@/data/branches/branch-update-mutation' import { useBranchesQuery } from '@/data/branches/branches-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { useTrack } from '@/lib/telemetry/track' export const MergeRequestButton = () => { const { ref } = useParams() const router = useRouter() const { data: projectDetails } = useSelectedProjectQuery() const track = useTrack() const projectRef = projectDetails?.parent_project_ref || ref const { data: branches } = useBranchesQuery({ projectRef }, { enabled: Boolean(projectDetails) }) const { mutate: updateBranch, isPending: isUpdating } = useBranchUpdateMutation({ onError: () => { toast.error(`Failed to open merge request`) }, }) const selectedBranch = branches?.find((branch) => branch.project_ref === ref) if (!projectRef || !selectedBranch || selectedBranch.is_default || selectedBranch.git_branch) return null const hasReviewRequested = !!selectedBranch.review_requested_at const buttonLabel = hasReviewRequested ? 'Review merge request' : 'Open merge request' const handleClick = () => { track('header_merge_request_button_clicked', { hasReviewRequested }) if (hasReviewRequested) { router.push(`/project/${selectedBranch.project_ref}/merge`) } else { updateBranch( { branchRef: selectedBranch.project_ref, projectRef, requestReview: true, }, { onSuccess: () => { toast.success('Merge request created') router.push(`/project/${selectedBranch.project_ref}/merge`) track('branch_create_merge_request_button_clicked', { branchType: selectedBranch.persistent ? 'persistent' : 'preview', origin: 'header', }) }, } ) } } return ( {hasReviewRequested && ( )} } /> ) }