feat: ItemMulit Select.

This commit is contained in:
elforjani3
2021-08-04 22:18:19 +02:00
parent 43b33105fa
commit 0bca369113
2 changed files with 39 additions and 14 deletions

View File

@@ -1,7 +1,6 @@
import React, { useCallback, useState } from 'react'; import React, { useCallback, useState } from 'react';
import { MenuItem, Button } from '@blueprintjs/core'; import { MenuItem, Button, Intent } from '@blueprintjs/core';
import intl from 'react-intl-universal'; import { MultiSelect } from '@blueprintjs/select';
import MultiSelect from 'components/MultiSelect';
import { FormattedMessage as T } from 'components'; import { FormattedMessage as T } from 'components';
import { safeInvoke } from 'utils'; import { safeInvoke } from 'utils';
@@ -12,7 +11,7 @@ export function ItemsMultiSelect({
items, items,
defaultText = <T id={'All items'} />, defaultText = <T id={'All items'} />,
buttonProps, buttonProps,
onTagRenderer,
selectedItems = [], selectedItems = [],
onItemSelect, onItemSelect,
...multiSelectProps ...multiSelectProps
@@ -55,6 +54,14 @@ export function ItemsMultiSelect({
[setLocalSelected, localSelected, isItemSelected, onItemSelect], [setLocalSelected, localSelected, isItemSelected, onItemSelect],
); );
const itemsSelected = () => {
const results = [];
items.map(({ id, name }) => {
return isItemSelected(id) ? results.push(name) : [];
});
return results;
};
// Filters accounts items. // Filters accounts items.
const filterItemsPredicater = useCallback( const filterItemsPredicater = useCallback(
(query, item, _index, exactMatch) => { (query, item, _index, exactMatch) => {
@@ -70,25 +77,42 @@ export function ItemsMultiSelect({
[], [],
); );
// Clear Button
const clearButton =
countSelected > 0 ? (
<Button
icon="cross"
minimal={true}
onClick={() => setLocalSelected([])}
/>
) : undefined;
// handle remove tag
const handleTagRemove = (tag) => {
let tagList = localSelected.filter((s) => s !== tag);
setLocalSelected(tagList);
};
return ( return (
<MultiSelect <MultiSelect
items={items} items={items}
noResults={<MenuItem disabled={true} text={<T id={'No items'} />} />} noResults={<MenuItem disabled={true} text={<T id={'No items'} />} />}
itemRenderer={itemRenderer} itemRenderer={itemRenderer}
popoverProps={{ minimal: true }} popoverProps={{ minimal: true }}
selectedItems={itemsSelected()}
filterable={true} filterable={true}
fill={true}
onItemSelect={handleItemSelect} onItemSelect={handleItemSelect}
itemPredicate={filterItemsPredicater} itemPredicate={filterItemsPredicater}
tagRenderer={onTagRenderer}
tagInputProps={{
tagProps: { intent: Intent.NONE, minimal: false },
onRemove: handleTagRemove,
// rightElement: clearButton,
}}
resetOnSelect={true}
// openOnKeyDown={true}
{...multiSelectProps} {...multiSelectProps}
> />
<Button
text={
countSelected === 0
? defaultText
: intl.get('Selected items ({count})', { count: countSelected })
}
{...buttonProps}
/>
</MultiSelect>
); );
} }

View File

@@ -34,6 +34,7 @@ export default function SalesByItemsHeaderGeneralPanel() {
onItemSelect={(itemsIds) => { onItemSelect={(itemsIds) => {
setFieldValue('itemsIds', itemsIds); setFieldValue('itemsIds', itemsIds);
}} }}
onTagRenderer={(value) => value}
/> />
</FormGroup> </FormGroup>
)} )}