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 (
);
}