mirror of
https://github.com/supabase/supabase.git
synced 2026-10-08 19:05:06 +03:00
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import { Check } from 'lucide-react'
|
|
import { ReactNode } from 'react'
|
|
import { cn, CommandItem_Shadcn_ } from 'ui'
|
|
|
|
import type { OrgProject } from '@/data/projects/org-projects-infinite-query'
|
|
|
|
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_>
|
|
)
|
|
}
|