-
Notifications
You must be signed in to change notification settings - Fork 381
Expand file tree
/
Copy pathSelectCheckbox.tsx
More file actions
66 lines (60 loc) · 2.06 KB
/
SelectCheckbox.tsx
File metadata and controls
66 lines (60 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import { useState } from 'react';
import { Select, SelectOption, SelectList, MenuToggle, MenuToggleElement, Badge } from '@patternfly/react-core';
export const SelectCheckbox: React.FunctionComponent = () => {
const [isOpen, setIsOpen] = useState(false);
const [selectedItems, setSelectedItems] = useState<number[]>([]);
const onToggleClick = () => {
setIsOpen(!isOpen);
};
const onSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, value: string | number | undefined) => {
// eslint-disable-next-line no-console
console.log('selected', value);
if (selectedItems.includes(value as number)) {
setSelectedItems(selectedItems.filter((id) => id !== value));
} else {
setSelectedItems([...selectedItems, value as number]);
}
};
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
<MenuToggle
ref={toggleRef}
onClick={onToggleClick}
isExpanded={isOpen}
style={
{
width: '200px'
} as React.CSSProperties
}
>
Filter by status
{selectedItems.length > 0 && <Badge isRead>{selectedItems.length}</Badge>}
</MenuToggle>
);
return (
<Select
role="menu"
id="checkbox-select"
isOpen={isOpen}
selected={selectedItems}
onSelect={onSelect}
onOpenChange={(nextOpen: boolean) => setIsOpen(nextOpen)}
toggle={toggle}
useFloatingUI // FloatingUI is recommended for better positioning. Will become the default in future breaking change.
>
<SelectList>
<SelectOption hasCheckbox value={0} isSelected={selectedItems.includes(0)}>
Debug
</SelectOption>
<SelectOption hasCheckbox value={1} isSelected={selectedItems.includes(1)}>
Info
</SelectOption>
<SelectOption hasCheckbox value={2} isSelected={selectedItems.includes(2)}>
Warn
</SelectOption>
<SelectOption hasCheckbox isDisabled value={4} isSelected={selectedItems.includes(4)}>
Error
</SelectOption>
</SelectList>
</Select>
);
};