| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import { Check } from 'lucide-react'
- import { ReactNode } from 'react'
- import { cn, CommandItem } 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
- 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>
- )
- }
|