import { useRef } from 'react'; import { useHotkeys } from 'react-hotkeys-hook'; import { EntityForSelect } from '@/relation-picker/types/EntityForSelect'; import { DropdownMenuItem } from '@/ui/components/menu/DropdownMenuItem'; import { DropdownMenuItemContainer } from '@/ui/components/menu/DropdownMenuItemContainer'; import { DropdownMenuSelectableItem } from '@/ui/components/menu/DropdownMenuSelectableItem'; import { Avatar } from '@/users/components/Avatar'; import { isDefined } from '@/utils/type-guards/isDefined'; import { useEntitySelectScroll } from '../hooks/useEntitySelectScroll'; import { CompanyPickerSkeleton } from './skeletons/CompanyPickerSkeleton'; import { DropdownMenuItemContainerSkeleton } from './skeletons/DropdownMenuItemContainerSkeleton'; export type EntitiesForSingleEntitySelect< CustomEntityForSelect extends EntityForSelect, > = { selectedEntity: CustomEntityForSelect; entitiesToSelect: CustomEntityForSelect[]; }; export function SingleEntitySelectBase< CustomEntityForSelect extends EntityForSelect, >({ entities, onEntitySelected, }: { entities: EntitiesForSingleEntitySelect; onEntitySelected: (entity: CustomEntityForSelect) => void; }) { const containerRef = useRef(null); const entitiesInDropdown = isDefined(entities.selectedEntity) ? [entities.selectedEntity, ...(entities.entitiesToSelect ?? [])] : entities.entitiesToSelect ?? []; const { hoveredIndex } = useEntitySelectScroll({ entities: entitiesInDropdown, containerRef, }); useHotkeys( 'enter', () => { onEntitySelected(entitiesInDropdown[hoveredIndex]); }, { enableOnContentEditable: true, enableOnFormTags: true, }, [entitiesInDropdown, hoveredIndex, onEntitySelected], ); return ( {entities.loading ? ( ) : entitiesInDropdown.length === 0 ? ( No result ) : ( entitiesInDropdown?.map((entity, index) => ( onEntitySelected(entity)} > {entity.name} )) )} ); }