From 5a3f42682b2f2ea08c6df6a717f1e7ead8f0175a Mon Sep 17 00:00:00 2001 From: "a.bouhuolia" Date: Mon, 13 Sep 2021 16:49:43 +0200 Subject: [PATCH] BIG-59: Refactoring mutli-select component. --- client/src/components/AccountsMultiSelect.js | 94 ++++----------- client/src/components/ContactsMultiSelect.js | 83 +++---------- .../src/components/Items/ItemsMultiSelect.js | 113 ++++-------------- .../components/MultiSelectTaggable/index.js | 81 +++++++++++++ client/src/components/index.js | 2 +- .../APAgingSummaryHeaderGeneralContent.js | 9 +- .../ARAgingSummaryHeaderGeneralContent.js | 10 +- ...tomersBalanceSummaryGeneralPanelContent.js | 10 +- ...CustomersTransactionsHeaderGeneralPanel.js | 18 ++- .../GeneralLedgerHeaderGeneralPane.js | 2 +- .../InventoryItemDetailsHeaderGeneralPanel.js | 26 +++- .../InventoryValuationHeaderGeneralPanel.js | 24 ++-- .../PurchasesByItemsGeneralPanel.js | 24 ++-- .../SalesByItems/SalesByItemsHeader.js | 6 +- .../SalesByItemsHeaderGeneralPanel.js | 12 +- ...ndorsBalanceSummaryHeaderGeneralContent.js | 24 ++-- .../VendorsTransactionsHeaderGeneralPanel.js | 10 +- 17 files changed, 249 insertions(+), 299 deletions(-) create mode 100644 client/src/components/MultiSelectTaggable/index.js diff --git a/client/src/components/AccountsMultiSelect.js b/client/src/components/AccountsMultiSelect.js index 726bd7f18..e852fad7b 100644 --- a/client/src/components/AccountsMultiSelect.js +++ b/client/src/components/AccountsMultiSelect.js @@ -1,76 +1,30 @@ -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 'components'; - -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], - ); +import React from 'react'; +import { MenuItem } from '@blueprintjs/core'; +import { MultiSelect } from './MultiSelectTaggable'; +export default function AccountsMultiSelect({ ...multiSelectProps }) { return ( } />} - itemRenderer={accountItem} + itemRenderer={( + item, + { active, selected, handleClick, modifiers, query }, + ) => { + return ( + + ); + }} popoverProps={{ minimal: true }} - filterable={true} - onItemSelect={onAccountSelect} - > -