import React, { useMemo, useCallback, useState } from 'react'; import { omit } from 'lodash'; import { MenuItem, Button } from '@blueprintjs/core'; import MultiSelect from 'components/MultiSelect'; import { FormattedMessage as T } from 'react-intl'; export default function AccountsMultiSelect({ accounts, onAccountSelected }) { const [selectedAccounts, setSelectedAccounts] = useState({}); const isAccountSelect = useCallback( (accountId) => { return 'undefined' !== typeof selectedAccounts[accountId]; }, [selectedAccounts], ); // Account item of select accounts field. const accountItem = useCallback( (item, { handleClick, modifiers, query }) => { return ( ); }, [isAccountSelect], ); const countSelectedAccounts = useMemo( () => Object.values(selectedAccounts).length, [selectedAccounts], ); const onAccountSelect = useCallback( (account) => { const selected = { ...(!isAccountSelect(account.id) ? { ...selectedAccounts, [account.id]: true, } : { ...omit(selectedAccounts, [account.id]), }), }; setSelectedAccounts({ ...selected }); onAccountSelected && onAccountSelected(selected); }, [setSelectedAccounts, selectedAccounts, isAccountSelect, onAccountSelected], ); return ( } itemRenderer={accountItem} popoverProps={{ minimal: true }} filterable={true} onItemSelect={onAccountSelect} >