mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-20 14:50:32 +00:00
feat: ItemMulit Select.
This commit is contained in:
@@ -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>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ export default function SalesByItemsHeaderGeneralPanel() {
|
|||||||
onItemSelect={(itemsIds) => {
|
onItemSelect={(itemsIds) => {
|
||||||
setFieldValue('itemsIds', itemsIds);
|
setFieldValue('itemsIds', itemsIds);
|
||||||
}}
|
}}
|
||||||
|
onTagRenderer={(value) => value}
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user