import { Check, GitMerge, Shield } from 'lucide-react' import { useState } from 'react' import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, Popover, PopoverContent, PopoverTrigger, ScrollArea, } from 'ui' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { Branch } from '@/data/branches/branches-query' interface BranchSelectorProps { branches: Branch[] onBranchSelected?: (branch: Branch) => void disabled?: boolean isUpdating?: boolean type?: 'primary' | 'outline' align?: 'end' | 'center' } export const BranchSelector = ({ branches, onBranchSelected, disabled = false, isUpdating = false, type = 'primary', align = 'end', }: BranchSelectorProps) => { const [open, setOpen] = useState(false) const [selectedBranch, setSelectedBranch] = useState(null) const availableBranches = branches.filter((branch) => !branch.is_default) const handleBranchSelect = (branch: Branch) => { setSelectedBranch(branch) setOpen(false) onBranchSelected?.(branch) } return ( } type={type} disabled={ disabled || isUpdating || branches.length === 0 || availableBranches.length === 0 } tooltip={{ content: { side: 'bottom', align, text: branches.length === 0 || availableBranches.length === 0 ? 'Create a branch first to start a merge request' : undefined, }, }} > {isUpdating ? 'Creating...' : 'New merge request'} No available branches found {availableBranches.map((branch) => ( handleBranchSelect(branch)} disabled={isUpdating || !!branch.git_branch || !!branch.review_requested_at} >
{branch.is_default && } {branch.name}
{selectedBranch?.id === branch.id && ( )} {branch.git_branch && Synced to a Git branch} {branch.review_requested_at && Merge request opened}
))}
) }