11import React from 'react'
22import { useRouter } from 'next/router'
33
4- import { CheckCircleIcon , LoadingSpinner , WarningTriangleIcon } from '@gitmono/ui'
4+ import { CheckCircleIcon , LoadingSpinner , Tooltip , WarningTriangleIcon } from '@gitmono/ui'
55
66import { useScope } from '@/contexts/scope'
77import { useGetMergeQueueStatus } from '@/hooks/MergeQueue/useGetMergeQueueStatus'
@@ -15,6 +15,7 @@ interface MergeSectionProps {
1515 onApprove : ( ) => void
1616 isMerging : boolean
1717 clLink : string
18+ clStatus ?: string
1819}
1920
2021export const MergeSection = React . memo < MergeSectionProps > (
@@ -25,7 +26,8 @@ export const MergeSection = React.memo<MergeSectionProps>(
2526 onMerge,
2627 onApprove,
2728 isMerging,
28- clLink
29+ clLink,
30+ clStatus
2931 } ) => {
3032 const router = useRouter ( )
3133 const { scope } = useScope ( )
@@ -38,8 +40,16 @@ export const MergeSection = React.memo<MergeSectionProps>(
3840 let statusNode : React . ReactNode
3941
4042 const isMergeable = isAllReviewerApproved
43+ const isDraft = clStatus ?. toLowerCase ( ) === 'draft'
4144
42- if ( ! isAllReviewerApproved ) {
45+ if ( isDraft ) {
46+ statusNode = (
47+ < div className = 'flex items-center text-yellow-700' >
48+ < WarningTriangleIcon className = 'mr-3 h-5 w-5' />
49+ < span className = 'font-semibold' > CL has not yet prepared for the review</ span >
50+ </ div >
51+ )
52+ } else if ( ! isAllReviewerApproved ) {
4353 statusNode = (
4454 < div className = 'flex items-center text-yellow-700' >
4555 < WarningTriangleIcon className = 'mr-3 h-5 w-5' />
@@ -82,22 +92,43 @@ export const MergeSection = React.memo<MergeSectionProps>(
8292 ) }
8393
8494 < div className = 'ClBox-MergeSection flex items-center justify-center gap-4' style = { { marginTop : '12px' } } >
85- < button
86- onClick = { onApprove }
87- disabled = { isNowUserApprove === undefined || isNowUserApprove }
88- className = 'w-full rounded-md bg-green-600 px-4 py-2 font-bold text-white duration-500 hover:bg-green-800 disabled:cursor-not-allowed disabled:bg-gray-400'
89- >
90- Approve
91- </ button >
92-
93- { ! inQueue ? (
95+ { ! isDraft && (
9496 < button
95- onClick = { handleAddToQueue }
96- disabled = { isAddingToQueue || ! isMergeable }
97- className = 'w-full rounded-md bg-purple -600 px-4 py-2 font-bold text-white duration-500 hover:bg-purple -800 disabled:cursor-not-allowed disabled:bg-gray-400'
97+ onClick = { onApprove }
98+ disabled = { isNowUserApprove === undefined || isNowUserApprove }
99+ className = 'w-full rounded-md bg-green -600 px-4 py-2 font-bold text-white duration-500 hover:bg-green -800 disabled:cursor-not-allowed disabled:bg-gray-400'
98100 >
99- { isAddingToQueue ? < LoadingSpinner /> : 'Add to Queue' }
101+ Approve
100102 </ button >
103+ ) }
104+
105+ { ! inQueue ? (
106+ isDraft ? (
107+ < Tooltip
108+ label = {
109+ < div className = 'rounded-md bg-[#25292e] px-3 py-1 text-xs text-white' >
110+ Merging is blocked due to failing merge requirements
111+ </ div >
112+ }
113+ side = 'top'
114+ >
115+ < button
116+ onClick = { handleAddToQueue }
117+ disabled
118+ className = 'w-full rounded-md bg-purple-600 px-4 py-2 font-bold text-white duration-500 hover:bg-purple-800 disabled:cursor-not-allowed disabled:bg-gray-400'
119+ >
120+ Add to Queue
121+ </ button >
122+ </ Tooltip >
123+ ) : (
124+ < button
125+ onClick = { handleAddToQueue }
126+ disabled = { isAddingToQueue || ! isMergeable }
127+ className = 'w-full rounded-md bg-purple-600 px-4 py-2 font-bold text-white duration-500 hover:bg-purple-800 disabled:cursor-not-allowed disabled:bg-gray-400'
128+ >
129+ { isAddingToQueue ? < LoadingSpinner /> : 'Add to Queue' }
130+ </ button >
131+ )
101132 ) : (
102133 < button
103134 onClick = { onMerge }
0 commit comments