Skip to content

Commit 663a1f4

Browse files
committed
feat(FilterItem): add FilterType MultiSelect
1 parent f75b30e commit 663a1f4

File tree

3 files changed

+37
-12
lines changed

3 files changed

+37
-12
lines changed

packages/main/src/components/FilterBar/demo.stories.tsx

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { PlacementType } from '../../lib/PlacementType';
99
import { Switch } from '../../lib/Switch';
1010
import { TitleLevel } from '../../lib/TitleLevel';
1111
import { VariantManagement } from '../../lib/VariantManagement';
12+
import { action } from '@storybook/addon-actions';
1213

1314
const flavours = [];
1415
for (let i = 1; i <= 9; i++) {
@@ -57,17 +58,17 @@ function renderStory() {
5758
>
5859
<Switch />
5960
</FilterItem>
60-
{/*<FilterItem*/}
61-
{/*key={'filter2'}*/}
62-
{/*type={FilterType.Custom}*/}
63-
{/*label={'Custom Filter 2'}*/}
64-
{/*changeEventName={'onSelect'}*/}
65-
{/*valueParamName={'state'}*/}
66-
{/*>*/}
67-
{/*<RadioButton text={"Custom Radio Button filter"} onSelect={(e) => {*/}
68-
{/*alert(e.parameters.selectedItem);*/}
69-
{/*}}/>*/}
70-
{/*</FilterItem>*/}
61+
<FilterItem
62+
onChange={action('onChange')}
63+
filterItems={filterItems}
64+
style={{
65+
maxWidth: '200px'
66+
}}
67+
label="Multi"
68+
key="Multi"
69+
type={FilterType.MultiSelect}
70+
loading={boolean('loading', false)}
71+
/>
7172
</FilterBar>
7273
);
7374
}

packages/main/src/components/FilterItem/index.tsx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { Event, StyleClassHelper } from '@ui5/webcomponents-react-base';
2-
import React, { forwardRef, ReactNode, RefObject, useMemo, FC } from 'react';
2+
import React, { FC, forwardRef, ReactNode, RefObject, useMemo } from 'react';
33
import { CommonProps } from '../../interfaces/CommonProps';
44
import { BusyIndicator } from '../../lib/BusyIndicator';
55
import { FilterType } from '../../lib/FilterType';
66
import { Input } from '../../lib/Input';
77
import { Label } from '../../lib/Label';
88
import { createUseStyles } from 'react-jss';
99
import { Select } from '../../lib/Select';
10+
import { MultiComboBox } from '../../lib/MultiComboBox';
11+
import { StandardListItem } from '../../lib/StandardListItem';
1012
import { Option } from '../../lib/Option';
1113
import styles from './FilterItem.jss';
1214
import { BusyIndicatorType } from '../../lib/BusyIndicatorType';
@@ -52,6 +54,17 @@ const FilterItem: FC<FilterItemPropTypes> = forwardRef((props: FilterItemPropTyp
5254
onChange(Event.of(null, e.getOriginalEvent(), { selectedItem: item }));
5355
}
5456

57+
function onMultiCbChange(e) {
58+
const selectedItems = e.getParameter('items');
59+
onChange(
60+
Event.of(null, e.getOriginalEvent(), {
61+
selectedItems: selectedItems.map((item) => {
62+
return getItemByKey(item.getAttribute('data-key'));
63+
})
64+
})
65+
);
66+
}
67+
5568
const filterComponent = useMemo(() => {
5669
if (loading) {
5770
return (
@@ -68,6 +81,16 @@ const FilterItem: FC<FilterItemPropTypes> = forwardRef((props: FilterItemPropTyp
6881
switch (type) {
6982
case FilterType.Default:
7083
return <Input placeholder={placeholder} onChange={onSelect} style={{ width: '100%' }} />;
84+
case FilterType.MultiSelect:
85+
return (
86+
<MultiComboBox onSelectionChange={onMultiCbChange}>
87+
{filterItems.map((item) => (
88+
<StandardListItem data-key={item.key} key={item.key}>
89+
{item.text}
90+
</StandardListItem>
91+
))}
92+
</MultiComboBox>
93+
);
7194
case FilterType.Select:
7295
return (
7396
<Select onChange={onSelect} style={{ width: '100%' }}>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export enum FilterType {
22
Default = 'Default',
33
Select = 'Select',
4+
MultiSelect = 'MultiSelect',
45
Custom = 'Custom'
56
}

0 commit comments

Comments
 (0)