import { GitMerge } from 'lucide-react' import { useRouter } from 'next/router' import { toast } from 'sonner' import { useParams } from 'common' import { ButtonTooltip } from 'components/ui/ButtonTooltip' import { useBranchUpdateMutation } from 'data/branches/branch-update-mutation' import { useBranchesQuery } from 'data/branches/branches-query' import { useSendEventMutation } from 'data/telemetry/send-event-mutation' import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' export const MergeRequestButton = () => { const { ref } = useParams() const router = useRouter() const { data: projectDetails } = useSelectedProjectQuery() const { data: selectedOrg } = useSelectedOrganizationQuery() const projectRef = projectDetails?.parent_project_ref || ref const { data: branches } = useBranchesQuery({ projectRef }, { enabled: Boolean(projectDetails) }) const { mutate: sendEvent } = useSendEventMutation() 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 = () => { 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`) sendEvent({ action: 'branch_create_merge_request_button_clicked', properties: { branchType: selectedBranch.persistent ? 'persistent' : 'preview', origin: 'header', }, groups: { project: projectRef ?? 'Unknown', organization: selectedOrg?.slug ?? 'Unknown', }, }) }, } ) } } return ( {hasReviewRequested && ( )} } /> ) } export default MergeRequestButton