Files
supabase/apps/studio/components/ui/OrganizationProjectSelector/ProjectCommandItem.tsx
T
Francesco Sansalvadore b997b7fb13 feat(studio): org project branch mobile selector (#43238)
- add new
[OrgSelector](https://github.com/supabase/supabase/pull/43238/changes#diff-214b339101a9c06864ea2755ac7246eb4c971ce74c5d3169b1385a28ee1d4227)
and
[ProjectBranchSelector](https://github.com/supabase/supabase/pull/43238/changes#diff-82d25c128c306b61bea7481026f58f670a229874f23ca3a1a1d78ddeabde21e0)
components to the mobile navigation, replacing the previous which took
up a lot of horizontal space
- org/project/branch dropdowns now open up in the bottom MobileSheetNav
for a better mobile ux
- desktop nav remains unchanged
2026-03-11 16:25:22 +01:00

58 lines
1.6 KiB
TypeScript

import type { OrgProject } from 'data/projects/org-projects-infinite-query'
import { Check } from 'lucide-react'
import { ReactNode } from 'react'
import { cn, CommandItem_Shadcn_ } from 'ui'
export interface ProjectCommandItemProps {
project: OrgProject
selectedRef: string | undefined
onSelect?: (project: OrgProject) => void
onClose: () => void
renderRow?: (project: OrgProject) => ReactNode
checkPosition?: 'right' | 'left'
isOptionDisabled?: (project: OrgProject) => boolean
}
export function ProjectCommandItem({
project,
selectedRef,
onSelect,
onClose,
renderRow,
checkPosition = 'right',
isOptionDisabled,
}: ProjectCommandItemProps) {
const handleSelect = () => {
onSelect?.(project)
onClose()
}
const disabled = isOptionDisabled?.(project) ?? false
return (
<CommandItem_Shadcn_
key={project.ref}
value={`${project.name.replaceAll('"', '')}-${project.ref}`}
className="cursor-pointer w-full"
onSelect={handleSelect}
disabled={disabled}
>
{renderRow ? (
renderRow(project)
) : (
<div
className={cn(
'w-full flex items-center',
checkPosition === 'left' ? 'gap-x-2' : 'justify-between',
project.ref !== selectedRef && checkPosition === 'left' && 'ml-6'
)}
>
{checkPosition === 'left' && project.ref === selectedRef && <Check size={16} />}
{project.name}
{checkPosition === 'right' && project.ref === selectedRef && <Check size={16} />}
</div>
)}
</CommandItem_Shadcn_>
)
}