From 04a81e9182c684110d671ab1a5331d72235160f0 Mon Sep 17 00:00:00 2001 From: elforjani3 Date: Wed, 20 Jan 2021 21:48:40 +0200 Subject: [PATCH] feat: Customers Multi Select --- client/src/components/CustomersMultiSelect.js | 82 +++++++++++++++++++ client/src/components/index.js | 4 +- .../ARAgingSummaryHeaderGeneral.js | 46 +++++++++-- client/src/lang/en/index.js | 5 +- 4 files changed, 130 insertions(+), 7 deletions(-) create mode 100644 client/src/components/CustomersMultiSelect.js diff --git a/client/src/components/CustomersMultiSelect.js b/client/src/components/CustomersMultiSelect.js new file mode 100644 index 000000000..1afa5a2f2 --- /dev/null +++ b/client/src/components/CustomersMultiSelect.js @@ -0,0 +1,82 @@ +import React, { useMemo, useCallback, useState } from 'react'; +import { MenuItem, Button } from '@blueprintjs/core'; +import { omit } from 'lodash'; +import MultiSelect from 'components/MultiSelect'; +import { FormattedMessage as T } from 'react-intl'; + +export default function CustomersMultiSelect({ + customers, + defaultText = , + buttonProps, + + onCustomerSelected, + ...selectProps +}) { + const [selectedCustomers, setSelectedCustomers] = useState({}); + + const isCustomerSelect = useCallback( + (id) => typeof selectedCustomers[id] !== 'undefined', + [selectedCustomers], + ); + + const customerRenderer = useCallback( + (customer, { handleClick }) => ( + + ), + [isCustomerSelect], + ); + + const countSelected = useMemo(() => Object.values(selectedCustomers).length, [ + selectedCustomers, + ]); + + const onContactSelect = useCallback( + ({ id }) => { + const selected = { + ...(isCustomerSelect(id) + ? { + ...omit(selectedCustomers, [id]), + } + : { + ...selectedCustomers, + [id]: true, + }), + }; + setSelectedCustomers({ ...selected }); + onCustomerSelected && onCustomerSelected(selected); + }, + [ + setSelectedCustomers, + selectedCustomers, + isCustomerSelect, + onCustomerSelected, + ], + ); + + return ( + } + itemRenderer={customerRenderer} + popoverProps={{ minimal: true }} + filterable={true} + onItemSelect={onContactSelect} + > +