import React, { useState, useMemo, useEffect } from 'react'; import { Button, MenuItem } from '@blueprintjs/core'; import { Select } from '@blueprintjs/select'; import { FormattedMessage as T } from './FormattedMessage'; import classNames from 'classnames'; import { CLASSES } from 'common/classes'; export default function ListSelect({ buttonProps, defaultText, noResultsText = , isLoading = false, textProp, labelProp, selectedItem, selectedItemProp = 'id', initialSelectedItem, onItemSelect, disabled = false, ...selectProps }) { const selectedItemObj = useMemo( () => selectProps.items.find((i) => i[selectedItemProp] === selectedItem), [selectProps.items, selectedItemProp, selectedItem], ); const selectedInitialItem = useMemo( () => selectProps.items.find( (i) => i[selectedItemProp] === initialSelectedItem, ), [initialSelectedItem], ); const [currentItem, setCurrentItem] = useState( (initialSelectedItem && selectedInitialItem) || null, ); useEffect(() => { if (selectedItemObj) { setCurrentItem(selectedItemObj); } }, [selectedItemObj, setCurrentItem]); const noResults = isLoading ? ( 'loading' ) : ( ); const itemRenderer = (item, { handleClick, modifiers, query }) => { return ( ); }; const handleItemSelect = (_item) => { setCurrentItem(_item); onItemSelect && onItemSelect(_item); }; // Filters accounts types items. const filterItems = (query, item, _index, exactMatch) => { const normalizedTitle = item[textProp].toLowerCase(); const normalizedQuery = query.toLowerCase(); if (exactMatch) { return normalizedTitle === normalizedQuery; } else { return normalizedTitle.indexOf(normalizedQuery) >= 0; } }; return ( ); }