import { Box, Boxes, GitBranch } from 'lucide-react' import { cn, SheetHeader, SheetTitle, Tabs_Shadcn_, TabsContent_Shadcn_, TabsList_Shadcn_, } from 'ui' import MobileSheetNav from 'ui-patterns/MobileSheetNav/MobileSheetNav' import { ProjectBranchSelectorSheetTabTrigger } from './ProjectBranchSelectorSheetTabTrigger' import { BranchDropdown } from '@/components/layouts/AppLayout/BranchDropdown' import { OrganizationDropdown } from '@/components/layouts/AppLayout/OrganizationDropdown' import { ProjectDropdown } from '@/components/layouts/AppLayout/ProjectDropdown' import type { Branch } from '@/data/branches/branches-query' import type { ProjectDetail } from '@/data/projects/project-detail-query' import type { Organization } from '@/types' const EMBEDDED_CLASSNAME = 'bg-transparent border-0 shadow-none min-h-0 flex-1 flex flex-col overflow-hidden rounded-none' export interface ProjectBranchSelectorSheetProps { open: boolean onOpenChange: (open: boolean) => void selectedRef: string | undefined onClose: () => void selectedOrganization?: Organization | null displayProject?: ProjectDetail | null selectedBranch?: Branch | null selectedOrganizationName?: string | null selectedProjectName?: string | null selectedBranchName?: string | null isMainBranch?: boolean } export function ProjectBranchSelectorSheet({ open, onOpenChange, selectedRef, onClose, selectedOrganization, displayProject, selectedBranch, selectedOrganizationName, selectedProjectName, selectedBranchName, isMainBranch, }: ProjectBranchSelectorSheetProps) { const orgLabel = selectedOrganizationName ?? selectedOrganization?.name const projectLabel = selectedProjectName ?? displayProject?.name const branchLabel = selectedBranchName ?? selectedBranch?.name ?? 'main' const tabs = [ orgLabel && { value: 'organization' as const, label: orgLabel, icon: Boxes, }, projectLabel && { value: 'project' as const, label: projectLabel, icon: Box, }, branchLabel && { value: 'branch' as const, label: branchLabel, icon: GitBranch, }, ].filter(Boolean) as Array<{ value: 'organization' | 'project' | 'branch' label: string icon: typeof Boxes }> const defaultTab = (selectedRef && tabs.some((t) => t.value === 'project') ? 'project' : tabs[0]?.value) ?? 'organization' if (tabs.length === 0) { return null } return ( Switch organization, project or branch {tabs.map(({ value, label, icon }, index) => ( ))} {tabs.some((t) => t.value === 'organization') && ( )} {tabs.some((t) => t.value === 'project') && ( )} {tabs.some((t) => t.value === 'branch') && ( )} ) }