Skip to content

Commit 0665824

Browse files
vberschMarcusNotheis
authored andcommitted
feat(FilterItem): Add MultiSelect option to FilterTypes (#79)
1 parent 4e82857 commit 0665824

File tree

5 files changed

+70
-13
lines changed

5 files changed

+70
-13
lines changed

packages/main/__karma_snapshots__/FilterBar.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,31 @@
352352
</div>
353353
</div>
354354
</FilterItem>
355+
<FilterItem filterItems={{...}} label="Classification" type="MultiSelect" placeholder="" renderText={[Function: renderText]} onChange={[Function: onChange]} loading={false}>
356+
<div className="FilterItem--filterItem---" style={[undefined]} title={[undefined]}>
357+
<div className="FilterItem--innerFilterItemContainer---">
358+
<Label for="">
359+
<ui5-label for="" class="">
360+
Classification
361+
</ui5-label>
362+
</Label>
363+
<MultiComboBox onSelectionChange={[Function: onMultiCbChange]} value="" placeholder="" valueState="None">
364+
<ui5-multi-combobox value="" placeholder="" value-state="None" class="">
365+
<StandardListItem data-key="1" type="Active" infoState="None">
366+
<ui5-li data-key="1" type="Active" info-state="None" class="">
367+
Text 1
368+
</ui5-li>
369+
</StandardListItem>
370+
<StandardListItem data-key="2" type="Active" infoState="None">
371+
<ui5-li data-key="2" type="Active" info-state="None" class="">
372+
Text 2
373+
</ui5-li>
374+
</StandardListItem>
375+
</ui5-multi-combobox>
376+
</MultiComboBox>
377+
</div>
378+
</div>
379+
</FilterItem>
355380
</div>
356381
</div>
357382
</FilterBar>

packages/main/src/components/FilterBar/FilterBar.karma.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,19 @@ describe('FilterBar', () => {
106106
key="classification3"
107107
type={FilterType.Default}
108108
/>
109+
<FilterItem
110+
// onChange={(e) => alert(e.getParameter('selectedItem').key)}
111+
filterItems={filterItems}
112+
label="Classification"
113+
key="classification3"
114+
type={FilterType.MultiSelect}
115+
/>
109116
</FilterBar>
110117
);
111118
// console.log(wrapper.debug());
112119
// console.log(wrapper.find('Select').debug());
113120
wrapper
114-
.find('ui5-li')
121+
.find('ui5-option')
115122
.at(1)
116123
.simulate('change');
117124

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%' }}>

packages/main/src/enums/FilterType.ts

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)