From 4a0bd842e9eabbdf6b893abfc896beb4bc11110a Mon Sep 17 00:00:00 2001 From: "a.bouhuolia" Date: Tue, 3 Aug 2021 08:26:13 +0200 Subject: [PATCH] feat: add filter field to suggest select field. --- client/src/components/ContactsMultiSelect.js | 26 +++++++-- .../src/components/Items/ItemsMultiSelect.js | 17 ++++++ client/src/components/ItemsSuggestField.js | 2 +- client/src/components/MultiSelect.js | 53 +++++++++++++++---- .../InventoryItemDetailsProvider.js | 7 ++- .../InventoryValuationProvider.js | 9 +++- .../PurchasesByItemsProvider.js | 8 ++- .../SalesByItems/SalesByItemProvider.js | 9 +++- .../Bills/BillsLanding/components.js | 9 +--- .../Invoices/InvoicesLanding/components.js | 6 +-- client/src/style/pages/Bills/List.scss | 3 -- client/src/style/pages/SaleInvoice/List.scss | 6 --- 12 files changed, 113 insertions(+), 42 deletions(-) diff --git a/client/src/components/ContactsMultiSelect.js b/client/src/components/ContactsMultiSelect.js index 75755ab9a..af9bccce8 100644 --- a/client/src/components/ContactsMultiSelect.js +++ b/client/src/components/ContactsMultiSelect.js @@ -17,11 +17,11 @@ export default function ContactsMultiSelect({ contactsSelected = [], ...multiSelectProps }) { - const [localSelected, setLocalSelected] = useState([ ...contactsSelected]); + const [localSelected, setLocalSelected] = useState([...contactsSelected]); // Detarmines the given id is selected. const isItemSelected = useCallback( - (id) => localSelected.some(s => s === id), + (id) => localSelected.some((s) => s === id), [localSelected], ); @@ -45,15 +45,30 @@ export default function ContactsMultiSelect({ const handleItemSelect = useCallback( ({ id }) => { const selected = isItemSelected(id) - ? localSelected.filter(s => s !== id) + ? localSelected.filter((s) => s !== id) : [...localSelected, id]; - - setLocalSelected([ ...selected ]); + + setLocalSelected([...selected]); safeInvoke(onContactSelect, selected); }, [setLocalSelected, localSelected, isItemSelected, onContactSelect], ); + // Filters accounts items. + const filterContactsPredicater = useCallback( + (query, contact, _index, exactMatch) => { + const normalizedTitle = contact.display_name.toLowerCase(); + const normalizedQuery = query.toLowerCase(); + + if (exactMatch) { + return normalizedTitle === normalizedQuery; + } else { + return normalizedTitle.indexOf(normalizedQuery) >= 0; + } + }, + [], + ); + return (