'use client'; import clsx from 'clsx'; import { useCallback, useMemo } from 'react'; import { ILibraryItem, LibraryItemID } from '@/models/library'; import { matchLibraryItem } from '@/models/libraryAPI'; import { CProps } from '../props'; import SelectSingle from '../ui/SelectSingle'; interface SelectLibraryItemProps extends CProps.Styling { items?: ILibraryItem[]; value?: ILibraryItem; onSelectValue: (newValue?: ILibraryItem) => void; placeholder?: string; noBorder?: boolean; } function SelectLibraryItem({ className, items, value, onSelectValue, placeholder = 'Выберите схему', ...restProps }: SelectLibraryItemProps) { const options = useMemo(() => { return ( items?.map(cst => ({ value: cst.id, label: `${cst.alias}: ${cst.title}` })) ?? [] ); }, [items]); const filter = useCallback( (option: { value: LibraryItemID | undefined; label: string }, inputValue: string) => { const item = items?.find(item => item.id === option.value); return !item ? false : matchLibraryItem(item, inputValue); }, [items] ); return ( onSelectValue(items?.find(cst => cst.id === data?.value))} // @ts-expect-error: TODO: use type definitions from react-select in filter object filterOption={filter} placeholder={placeholder} {...restProps} /> ); } export default SelectLibraryItem;