diff --git a/client/src/components/DataTableCells/ItemsListCell.js b/client/src/components/DataTableCells/ItemsListCell.js index 5a64203bd..ba77db9c3 100644 --- a/client/src/components/DataTableCells/ItemsListCell.js +++ b/client/src/components/DataTableCells/ItemsListCell.js @@ -1,9 +1,9 @@ -import React, { useCallback, useMemo } from 'react'; -import ItemsListField from 'components/ItemsListField'; +import React, { useCallback } from 'react'; +// import ItemsListField from 'components/ItemsListField'; +import ItemsSuggestField from 'components/ItemsSuggestField'; import classNames from 'classnames'; import { FormGroup, Classes, Intent } from '@blueprintjs/core'; - export default function ItemsListCell({ column: { id, filterSellable, filterPurchasable }, row: { index }, @@ -24,7 +24,7 @@ export default function ItemsListCell({ intent={error ? Intent.DANGER : null} className={classNames('form-group--select-list', Classes.FILL)} > - { + let filteredItems = [...items]; + + if (sellable) { + filteredItems = filteredItems.filter((item) => item.sellable); + } + if (purchasable) { + filteredItems = filteredItems.filter((item) => item.purchasable); + } + return filteredItems; + }, [items, sellable, purchasable]); + + // Find initial item object. + const initialItem = useMemo( + () => filteredItems.some((a) => a.id === initialItemId), + [initialItemId], + ); + + const [selectedItem, setSelectedItem] = useState(initialItem || null); + + const onItemSelect = useCallback( + (item) => { + setSelectedItem({ ...item }); + onItemSelected && onItemSelected(item); + }, + [setSelectedItem, onItemSelected], + ); + + const itemRenderer = useCallback((item, { modifiers, handleClick }) => ( + + )); + + useEffect(() => { + if (typeof selectedItemId !== 'undefined') { + const item = selectedItemId + ? filteredItems.find((a) => a.id === selectedItemId) + : null; + setSelectedItem(item); + } + }, [selectedItemId, filteredItems, setSelectedItem]); + + const handleInputValueRenderer = (inputValue) => { + if (inputValue) { + return inputValue.name.toString(); + } + return ''; + }; + + // Filters items. + const filterItemsPredicater = useCallback( + (query, item, _index, exactMatch) => { + const normalizedTitle = item.name.toLowerCase(); + const normalizedQuery = query.toLowerCase(); + + if (exactMatch) { + return normalizedTitle === normalizedQuery; + } else { + return normalizedTitle.indexOf(normalizedQuery) >= 0; + } + }, + [], + ); + return ( + } />} + itemRenderer={itemRenderer} + itemPredicate={filterItemsPredicater} + inputValueRenderer={handleInputValueRenderer} + selectedItem={selectedItem} + onItemSelect={onItemSelect} + inputProps={{ placeholder: defautlSelectText }} + resetOnClose={true} + fill={true} + {...suggestProps} + popoverProps={{ minimal: true }} + className={classNames(CLASSES.FORM_GROUP_LIST_SELECT, { + [CLASSES.SELECT_LIST_FILL_POPOVER]: popoverFill, + })} + /> + ); +} diff --git a/client/src/lang/en/index.js b/client/src/lang/en/index.js index 757673bac..936b3ce89 100644 --- a/client/src/lang/en/index.js +++ b/client/src/lang/en/index.js @@ -934,4 +934,5 @@ export default { opening_average_cost: 'Opening average cost', opening_cost_: 'Opening cost ', opening_date_: 'Opening date ', + no_results:'No results.' };