import { useRef } from 'react'; import { useTheme } from '@emotion/react'; import { DropdownMenu } from '@/ui/dropdown/components/DropdownMenu'; import { DropdownMenuItem } from '@/ui/dropdown/components/DropdownMenuItem'; import { DropdownMenuItemsContainer } from '@/ui/dropdown/components/DropdownMenuItemsContainer'; import { DropdownMenuSearch } from '@/ui/dropdown/components/DropdownMenuSearch'; import { DropdownMenuSeparator } from '@/ui/dropdown/components/DropdownMenuSeparator'; import { IconPlus } from '@/ui/icon'; import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside'; import { isDefined } from '~/utils/isDefined'; import { useEntitySelectSearch } from '../hooks/useEntitySelectSearch'; import { EntityForSelect } from '../types/EntityForSelect'; import { SingleEntitySelectBase } from './SingleEntitySelectBase'; export type EntitiesForSingleEntitySelect< CustomEntityForSelect extends EntityForSelect, > = { loading: boolean; selectedEntity: CustomEntityForSelect; entitiesToSelect: CustomEntityForSelect[]; }; export function SingleEntitySelect< CustomEntityForSelect extends EntityForSelect, >({ entities, onEntitySelected, onCreate, onCancel, disableBackgroundBlur = false, }: { onCancel?: () => void; onCreate?: () => void; entities: EntitiesForSingleEntitySelect; onEntitySelected: (entity: CustomEntityForSelect | null | undefined) => void; disableBackgroundBlur?: boolean; }) { const containerRef = useRef(null); const theme = useTheme(); const { searchFilter, handleSearchFilterChange } = useEntitySelectSearch(); const showCreateButton = isDefined(onCreate) && searchFilter !== ''; useListenClickOutside({ refs: [containerRef], callback: (event) => { event.stopImmediatePropagation(); event.stopPropagation(); event.preventDefault(); onCancel?.(); }, }); return ( {showCreateButton && ( <> Create new )} ); }