mirror of
https://github.com/supabase/supabase.git
synced 2026-09-09 19:42:46 +08:00
## What kind of change does this PR introduce? UI improvement for self-debugging efforts. ## What is the current behavior? https://github.com/supabase/supabase/pull/40937 removed our gating on the feedback form (plus some related affordances) in an effort to concentrate support entry into the Help dropdown instead: | Before | After | | --- | --- | | <img width="1090" height="579" alt="Inventory Nuts Bolts Supabase" src="https://github.com/user-attachments/assets/c7dacf40-5ae8-401c-a167-5e56c4c0635d" /> | _Not applicable. This step is skipped in the new version._ | | <img width="1090" height="579" alt="Inventory Nuts Bolts Supabase" src="https://github.com/user-attachments/assets/9bd2489d-7e87-49e5-99af-13eb5f387f60" /> | <img width="1090" height="579" alt="Inventory Nuts Bolts Supabase" src="https://github.com/user-attachments/assets/fa499a40-6d70-4674-9eb6-c7bd96019b27" /> | | <img width="1090" height="579" alt="Inventory Nuts Bolts Supabase" src="https://github.com/user-attachments/assets/e253381b-e8ba-476c-bd36-9dd522209498" /> | <img width="1090" height="579" alt="Inventory Nuts Bolts Supabase" src="https://github.com/user-attachments/assets/b5cf614b-329c-4517-90e9-c4d1b49bd139" /> | Despite putting other measures in place such as client-side form detection, the result is that people are increasingly writing in to support via the Feedback form. ## What is the new behavior? - Restores the gating - But also reuses the same self-debugging help options from the Help dropdown Other: - Renames `HelpPopover` to `HelpDropdown` to match others - Adjusts font size of `CommandMenu` _Search..._ | Before | After | | --- | --- | | <img width="1024" height="756" alt="Spinner Toolshed Supabase" src="https://github.com/user-attachments/assets/12e3be32-743d-488a-a13d-bf400fd0fd8d" /> | <img width="1024" height="756" alt="Spinner Toolshed Supabase" src="https://github.com/user-attachments/assets/bb064ef1-a771-416d-9b5b-dbdd774efed3" /> | | _Not applicable. This step is skipped in the old version._ | <img width="1024" height="756" alt="Spinner Toolshed Supabase" src="https://github.com/user-attachments/assets/3bc0b1c2-7003-4973-8e9c-2c7ee93fb0b4" /> | | <img width="1024" height="756" alt="Spinner Toolshed Supabase" src="https://github.com/user-attachments/assets/0bb18df4-d093-4440-8379-680f6c5e3cf9" /> | <img width="1024" height="756" alt="Spinner Toolshed Supabase" src="https://github.com/user-attachments/assets/1ef801d3-9cd7-4005-9082-8d229b7cdd19" /> | | <img width="1090" height="579" alt="Inventory Nuts Bolts Supabase" src="https://github.com/user-attachments/assets/e253381b-e8ba-476c-bd36-9dd522209498" /> | <img width="1024" height="794" alt="Spinner Toolshed Supabase" src="https://github.com/user-attachments/assets/b80de142-2199-420f-9018-8622b6d24312" /> | ## To test To test the “thanks” end state, add something like the following to `feedback-send.ts`: ```ts if (MOCK_FEEDBACK_SUCCESS) { return {} as Awaited<ReturnType<typeof sendFeedback>> } ``` Where `MOCK_FEEDBACK_SUCCESS` is `true`. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes * **New Features** * Introduced multi-stage feedback dropdown with Issue and Idea selection paths. * Added AI assistant integration in help menu for quick support access. * Enhanced help dropdown with expanded options: documentation, troubleshooting, Discord community, system status, and support links. * Added Community Support section featuring Discord community promotion. * **Style** * Refined command menu placeholder text sizing for improved visual hierarchy. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
93 lines
2.9 KiB
TypeScript
93 lines
2.9 KiB
TypeScript
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'
|
|
import { GitMerge } from 'lucide-react'
|
|
import { useRouter } from 'next/router'
|
|
import { toast } from 'sonner'
|
|
|
|
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 (
|
|
<ButtonTooltip
|
|
type="default"
|
|
className="rounded-full w-[26px] h-[26px]"
|
|
onClick={handleClick}
|
|
loading={isUpdating}
|
|
tooltip={{
|
|
content: {
|
|
text: buttonLabel,
|
|
side: 'bottom',
|
|
align: 'center',
|
|
},
|
|
}}
|
|
icon={
|
|
<div className="relative">
|
|
{hasReviewRequested && (
|
|
<span className="w-1 h-1 absolute top-0 right-0 rounded-full bg-brand" />
|
|
)}
|
|
<GitMerge size={16} strokeWidth={1.5} />
|
|
</div>
|
|
}
|
|
/>
|
|
)
|
|
}
|