@patternfly/react-core 5.0.0-alpha.15 → 5.0.0-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
- package/components/ClipboardCopy/ClipboardCopyButton.js +3 -2
- package/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
- package/components/ContextSelector/ContextSelector.d.ts.map +1 -1
- package/components/ContextSelector/ContextSelector.js +1 -1
- package/components/ContextSelector/ContextSelector.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts.map +1 -1
- package/components/DatePicker/DatePicker.js +6 -5
- package/components/DatePicker/DatePicker.js.map +1 -1
- package/components/Dropdown/DropdownWithContext.d.ts.map +1 -1
- package/components/Dropdown/DropdownWithContext.js +4 -3
- package/components/Dropdown/DropdownWithContext.js.map +1 -1
- package/components/DualListSelector/DualListSelectorControl.js +1 -1
- package/components/DualListSelector/DualListSelectorControl.js.map +1 -1
- package/components/InputGroup/InputGroup.d.ts +3 -2
- package/components/InputGroup/InputGroup.d.ts.map +1 -1
- package/components/InputGroup/InputGroup.js +3 -2
- package/components/InputGroup/InputGroup.js.map +1 -1
- package/components/Label/Label.js +1 -1
- package/components/Label/Label.js.map +1 -1
- package/components/Nav/NavItem.d.ts.map +1 -1
- package/components/Nav/NavItem.js +3 -3
- package/components/Nav/NavItem.js.map +1 -1
- package/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
- package/components/Pagination/PaginationOptionsMenu.js +4 -4
- package/components/Pagination/PaginationOptionsMenu.js.map +1 -1
- package/components/Popover/Popover.d.ts +9 -8
- package/components/Popover/Popover.d.ts.map +1 -1
- package/components/Popover/Popover.js +4 -3
- package/components/Popover/Popover.js.map +1 -1
- package/components/SearchInput/SearchInput.d.ts.map +1 -1
- package/components/SearchInput/SearchInput.js +5 -3
- package/components/SearchInput/SearchInput.js.map +1 -1
- package/components/Select/Select.d.ts.map +1 -1
- package/components/Select/Select.js +3 -2
- package/components/Select/Select.js.map +1 -1
- package/components/Slider/Slider.js +5 -5
- package/components/Slider/Slider.js.map +1 -1
- package/components/Tabs/OverflowTab.js +5 -5
- package/components/Tabs/OverflowTab.js.map +1 -1
- package/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/components/TimePicker/TimePicker.js +1 -1
- package/components/TimePicker/TimePicker.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +8 -7
- package/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/components/Tooltip/Tooltip.js +5 -4
- package/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js +3 -2
- package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
- package/dist/esm/components/ContextSelector/ContextSelector.d.ts.map +1 -1
- package/dist/esm/components/ContextSelector/ContextSelector.js +1 -1
- package/dist/esm/components/ContextSelector/ContextSelector.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js +6 -5
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/Dropdown/DropdownWithContext.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/DropdownWithContext.js +4 -3
- package/dist/esm/components/Dropdown/DropdownWithContext.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorControl.js +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorControl.js.map +1 -1
- package/dist/esm/components/InputGroup/InputGroup.d.ts +3 -2
- package/dist/esm/components/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/esm/components/InputGroup/InputGroup.js +3 -2
- package/dist/esm/components/InputGroup/InputGroup.js.map +1 -1
- package/dist/esm/components/Label/Label.js +1 -1
- package/dist/esm/components/Label/Label.js.map +1 -1
- package/dist/esm/components/Nav/NavItem.d.ts.map +1 -1
- package/dist/esm/components/Nav/NavItem.js +3 -3
- package/dist/esm/components/Nav/NavItem.js.map +1 -1
- package/dist/esm/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
- package/dist/esm/components/Pagination/PaginationOptionsMenu.js +4 -4
- package/dist/esm/components/Pagination/PaginationOptionsMenu.js.map +1 -1
- package/dist/esm/components/Popover/Popover.d.ts +9 -8
- package/dist/esm/components/Popover/Popover.d.ts.map +1 -1
- package/dist/esm/components/Popover/Popover.js +4 -3
- package/dist/esm/components/Popover/Popover.js.map +1 -1
- package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/esm/components/SearchInput/SearchInput.js +5 -3
- package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/esm/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/components/Select/Select.js +3 -2
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Slider/Slider.js +5 -5
- package/dist/esm/components/Slider/Slider.js.map +1 -1
- package/dist/esm/components/Tabs/OverflowTab.js +5 -5
- package/dist/esm/components/Tabs/OverflowTab.js.map +1 -1
- package/dist/esm/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/esm/components/TimePicker/TimePicker.js +1 -1
- package/dist/esm/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.d.ts +8 -7
- package/dist/esm/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +5 -4
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/helpers/Popper/Popper.d.ts +10 -7
- package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
- package/dist/esm/helpers/Popper/Popper.js +11 -14
- package/dist/esm/helpers/Popper/Popper.js.map +1 -1
- package/dist/esm/next/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/next/components/Dropdown/Dropdown.js +1 -1
- package/dist/esm/next/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/next/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/next/components/Select/Select.js +1 -1
- package/dist/esm/next/components/Select/Select.js.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyButton.js +3 -2
- package/dist/js/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelector.d.ts.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelector.js +1 -1
- package/dist/js/components/ContextSelector/ContextSelector.js.map +1 -1
- package/dist/js/components/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/js/components/DatePicker/DatePicker.js +6 -5
- package/dist/js/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/js/components/Dropdown/DropdownWithContext.d.ts.map +1 -1
- package/dist/js/components/Dropdown/DropdownWithContext.js +4 -3
- package/dist/js/components/Dropdown/DropdownWithContext.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorControl.js +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorControl.js.map +1 -1
- package/dist/js/components/InputGroup/InputGroup.d.ts +3 -2
- package/dist/js/components/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/js/components/InputGroup/InputGroup.js +5 -4
- package/dist/js/components/InputGroup/InputGroup.js.map +1 -1
- package/dist/js/components/Label/Label.js +1 -1
- package/dist/js/components/Label/Label.js.map +1 -1
- package/dist/js/components/Nav/NavItem.d.ts.map +1 -1
- package/dist/js/components/Nav/NavItem.js +3 -3
- package/dist/js/components/Nav/NavItem.js.map +1 -1
- package/dist/js/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
- package/dist/js/components/Pagination/PaginationOptionsMenu.js +4 -4
- package/dist/js/components/Pagination/PaginationOptionsMenu.js.map +1 -1
- package/dist/js/components/Popover/Popover.d.ts +9 -8
- package/dist/js/components/Popover/Popover.d.ts.map +1 -1
- package/dist/js/components/Popover/Popover.js +4 -3
- package/dist/js/components/Popover/Popover.js.map +1 -1
- package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/js/components/SearchInput/SearchInput.js +5 -3
- package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/js/components/Select/Select.d.ts.map +1 -1
- package/dist/js/components/Select/Select.js +3 -2
- package/dist/js/components/Select/Select.js.map +1 -1
- package/dist/js/components/Slider/Slider.js +5 -5
- package/dist/js/components/Slider/Slider.js.map +1 -1
- package/dist/js/components/Tabs/OverflowTab.js +5 -5
- package/dist/js/components/Tabs/OverflowTab.js.map +1 -1
- package/dist/js/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/js/components/TimePicker/TimePicker.js +1 -1
- package/dist/js/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/js/components/Tooltip/Tooltip.d.ts +8 -7
- package/dist/js/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/js/components/Tooltip/Tooltip.js +5 -4
- package/dist/js/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/js/helpers/Popper/Popper.d.ts +10 -7
- package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
- package/dist/js/helpers/Popper/Popper.js +11 -14
- package/dist/js/helpers/Popper/Popper.js.map +1 -1
- package/dist/js/next/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/js/next/components/Dropdown/Dropdown.js +1 -1
- package/dist/js/next/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/next/components/Select/Select.d.ts.map +1 -1
- package/dist/js/next/components/Select/Select.js +1 -1
- package/dist/js/next/components/Select/Select.js.map +1 -1
- package/dist/umd/react-core.min.js +3 -3
- package/helpers/Popper/Popper.d.ts +10 -7
- package/helpers/Popper/Popper.d.ts.map +1 -1
- package/helpers/Popper/Popper.js +11 -14
- package/helpers/Popper/Popper.js.map +1 -1
- package/next/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/next/components/Dropdown/Dropdown.js +1 -1
- package/next/components/Dropdown/Dropdown.js.map +1 -1
- package/next/components/Select/Select.d.ts.map +1 -1
- package/next/components/Select/Select.js +1 -1
- package/next/components/Select/Select.js.map +1 -1
- package/package.json +2 -2
- package/src/components/ClipboardCopy/ClipboardCopyButton.tsx +30 -24
- package/src/components/ClipboardCopy/__tests__/Generated/__snapshots__/ClipboardCopy.test.tsx.snap +23 -27
- package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyButton.test.tsx.snap +23 -27
- package/src/components/ContextSelector/ContextSelector.tsx +2 -0
- package/src/components/DatePicker/DatePicker.tsx +7 -5
- package/src/components/DatePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap +732 -744
- package/src/components/Dropdown/DropdownWithContext.tsx +6 -1
- package/src/components/DualListSelector/DualListSelectorControl.tsx +1 -1
- package/src/components/InputGroup/InputGroup.tsx +7 -3
- package/src/components/Label/Label.tsx +1 -1
- package/src/components/LabelGroup/examples/LabelGroupEditableAddDropdown.tsx +10 -1
- package/src/components/LabelGroup/examples/LabelGroupEditableAddModal.tsx +4 -0
- package/src/components/Nav/NavItem.tsx +4 -3
- package/src/components/Nav/__tests__/__snapshots__/Nav.test.tsx.snap +7 -11
- package/src/components/Pagination/PaginationOptionsMenu.tsx +5 -3
- package/src/components/Pagination/__tests__/Generated/__snapshots__/PaginationOptionsMenu.test.tsx.snap +35 -39
- package/src/components/Pagination/__tests__/__snapshots__/Pagination.test.tsx.snap +694 -774
- package/src/components/Popover/Popover.tsx +14 -10
- package/src/components/Popover/examples/PopoverReactRef.tsx +1 -1
- package/src/components/Popover/examples/PopoverSelectorRef.tsx +1 -1
- package/src/components/ProgressStepper/examples/ProgressStepperHelpPopover.tsx +6 -6
- package/src/components/SearchInput/SearchInput.tsx +6 -2
- package/src/components/SearchInput/__tests__/__snapshots__/SearchInput.test.tsx.snap +411 -427
- package/src/components/Select/Select.tsx +4 -0
- package/src/components/Slider/Slider.tsx +5 -5
- package/src/components/Slider/_tests_/__snapshots__/Slider.test.tsx.snap +10 -14
- package/src/components/Tabs/OverflowTab.tsx +5 -5
- package/src/components/Tabs/examples/TabsHelp.tsx +1 -1
- package/src/components/Tabs/examples/TabsHelpAndClose.tsx +6 -2
- package/src/components/Tabs/examples/TabsTooltipReactRef.tsx +1 -1
- package/src/components/TimePicker/TimePicker.tsx +2 -0
- package/src/components/Tooltip/Tooltip.tsx +15 -11
- package/src/components/Tooltip/__tests__/Tooltip.test.tsx +6 -2
- package/src/components/Tooltip/__tests__/__snapshots__/Tooltip.test.tsx.snap +4 -12
- package/src/components/Tooltip/examples/TooltipReactRef.tsx +1 -1
- package/src/components/Tooltip/examples/TooltipSelectorRef.tsx +1 -1
- package/src/demos/ComposableMenu/examples/ComposableActionsMenu.tsx +11 -2
- package/src/demos/ComposableMenu/examples/ComposableApplicationLauncher.tsx +23 -14
- package/src/demos/ComposableMenu/examples/ComposableContextSelector.tsx +11 -2
- package/src/demos/ComposableMenu/examples/ComposableDateSelect.tsx +10 -1
- package/src/demos/ComposableMenu/examples/ComposableDrilldownMenu.tsx +10 -1
- package/src/demos/ComposableMenu/examples/ComposableDropdwnVariants.tsx +7 -5
- package/src/demos/ComposableMenu/examples/ComposableFlyout.tsx +11 -2
- package/src/demos/ComposableMenu/examples/ComposableMultipleTypeaheadSelect.tsx +12 -10
- package/src/demos/ComposableMenu/examples/ComposableOptionsMenuVariants.tsx +1 -1
- package/src/demos/ComposableMenu/examples/ComposableSimpleCheckboxSelect.tsx +4 -4
- package/src/demos/ComposableMenu/examples/ComposableSimpleDropdown.tsx +2 -2
- package/src/demos/ComposableMenu/examples/ComposableSimpleSelect.tsx +1 -1
- package/src/demos/ComposableMenu/examples/ComposableTreeViewMenu.tsx +22 -11
- package/src/demos/ComposableMenu/examples/ComposableTypeaheadSelect.tsx +11 -9
- package/src/demos/Filters/examples/FilterAttributeSearch.tsx +13 -5
- package/src/demos/Filters/examples/FilterCheckboxSelect.tsx +16 -7
- package/src/demos/Filters/examples/FilterFaceted.tsx +18 -9
- package/src/demos/Filters/examples/FilterMixedSelectGroup.tsx +11 -5
- package/src/demos/Filters/examples/FilterSameSelectGroup.tsx +10 -4
- package/src/demos/Filters/examples/FilterSearchInput.tsx +6 -4
- package/src/demos/Filters/examples/FilterSingleSelect.tsx +14 -5
- package/src/demos/PasswordGenerator.md +6 -2
- package/src/demos/SearchInput/SearchInput.md +5 -1
- package/src/demos/examples/TextInputGroup/AttributeValueFiltering.tsx +13 -4
- package/src/demos/examples/TextInputGroup/AutoCompleteSearch.tsx +5 -3
- package/src/helpers/Popper/Popper.tsx +31 -23
- package/src/next/components/Dropdown/Dropdown.tsx +2 -0
- package/src/next/components/Select/Select.tsx +2 -0
|
@@ -33,16 +33,15 @@ export const ComposableMultipleTypeaheadSelect: React.FunctionComponent = () =>
|
|
|
33
33
|
const menuToggleRef = React.useRef<MenuToggleElement>({} as MenuToggleElement);
|
|
34
34
|
const textInputRef = React.useRef<HTMLInputElement>();
|
|
35
35
|
const menuRef = React.useRef<HTMLDivElement>();
|
|
36
|
+
const toggleRef = React.useRef<MenuToggleElement>(null);
|
|
36
37
|
|
|
37
38
|
React.useEffect(() => {
|
|
38
39
|
let newMenuItems: MenuItemProps[] = intitalMenuItems;
|
|
39
40
|
|
|
40
41
|
// Filter menu items based on the text input value when one exists
|
|
41
42
|
if (inputValue) {
|
|
42
|
-
newMenuItems = intitalMenuItems.filter(menuItem =>
|
|
43
|
-
String(menuItem.children)
|
|
44
|
-
.toLowerCase()
|
|
45
|
-
.includes(inputValue.toLowerCase())
|
|
43
|
+
newMenuItems = intitalMenuItems.filter((menuItem) =>
|
|
44
|
+
String(menuItem.children).toLowerCase().includes(inputValue.toLowerCase())
|
|
46
45
|
);
|
|
47
46
|
|
|
48
47
|
// When no options are found after filtering, display 'No results found'.
|
|
@@ -86,13 +85,13 @@ export const ComposableMultipleTypeaheadSelect: React.FunctionComponent = () =>
|
|
|
86
85
|
}
|
|
87
86
|
|
|
88
87
|
setFocusedItemIndex(indexToFocus);
|
|
89
|
-
const focusedItem = menuItems.filter(item => !item.isDisabled)[indexToFocus];
|
|
88
|
+
const focusedItem = menuItems.filter((item) => !item.isDisabled)[indexToFocus];
|
|
90
89
|
setActiveItem(`composable-multi-typeahead-${focusedItem.itemId.replace(' ', '-')}`);
|
|
91
90
|
}
|
|
92
91
|
};
|
|
93
92
|
|
|
94
93
|
const onInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
|
|
95
|
-
const enabledMenuItems = menuItems.filter(menuItem => !menuItem.isDisabled);
|
|
94
|
+
const enabledMenuItems = menuItems.filter((menuItem) => !menuItem.isDisabled);
|
|
96
95
|
const [firstMenuItem] = enabledMenuItems;
|
|
97
96
|
const focusedItem = focusedItemIndex ? enabledMenuItems[focusedItemIndex] : firstMenuItem;
|
|
98
97
|
|
|
@@ -100,7 +99,7 @@ export const ComposableMultipleTypeaheadSelect: React.FunctionComponent = () =>
|
|
|
100
99
|
// Select the first available option
|
|
101
100
|
case 'Enter':
|
|
102
101
|
if (!isMenuOpen) {
|
|
103
|
-
setIsMenuOpen(prevIsOpen => !prevIsOpen);
|
|
102
|
+
setIsMenuOpen((prevIsOpen) => !prevIsOpen);
|
|
104
103
|
// Only allow selection if the first item is a valid, selectable option
|
|
105
104
|
} else if (isMenuOpen && focusedItem.itemId !== 'no results') {
|
|
106
105
|
onMenuSelect(focusedItem.itemId as string);
|
|
@@ -121,7 +120,7 @@ export const ComposableMultipleTypeaheadSelect: React.FunctionComponent = () =>
|
|
|
121
120
|
|
|
122
121
|
// Close the menu when a click occurs outside of the menu, toggle, or input.
|
|
123
122
|
const onDocumentClick = (event: MouseEvent | undefined) => {
|
|
124
|
-
const isValidClick = [menuRef, menuToggleRef, textInputRef].some(ref =>
|
|
123
|
+
const isValidClick = [menuRef, menuToggleRef, textInputRef].some((ref) =>
|
|
125
124
|
ref?.current?.contains(event?.target as HTMLElement)
|
|
126
125
|
);
|
|
127
126
|
if (isMenuOpen && !isValidClick) {
|
|
@@ -155,7 +154,7 @@ export const ComposableMultipleTypeaheadSelect: React.FunctionComponent = () =>
|
|
|
155
154
|
// Only allow selection if the item is a valid, selectable option
|
|
156
155
|
if (itemId && itemId !== 'no results') {
|
|
157
156
|
setSelected(
|
|
158
|
-
selected.includes(itemId) ? selected.filter(selection => selection !== itemId) : [...selected, itemId]
|
|
157
|
+
selected.includes(itemId) ? selected.filter((selection) => selection !== itemId) : [...selected, itemId]
|
|
159
158
|
);
|
|
160
159
|
}
|
|
161
160
|
|
|
@@ -164,6 +163,7 @@ export const ComposableMultipleTypeaheadSelect: React.FunctionComponent = () =>
|
|
|
164
163
|
|
|
165
164
|
const toggle = (
|
|
166
165
|
<MenuToggle
|
|
166
|
+
ref={toggleRef}
|
|
167
167
|
variant="typeahead"
|
|
168
168
|
onClick={toggleMenuOpen}
|
|
169
169
|
innerRef={menuToggleRef}
|
|
@@ -188,7 +188,7 @@ export const ComposableMultipleTypeaheadSelect: React.FunctionComponent = () =>
|
|
|
188
188
|
{selected.map((selection, index) => (
|
|
189
189
|
<Chip
|
|
190
190
|
key={index}
|
|
191
|
-
onClick={ev => {
|
|
191
|
+
onClick={(ev) => {
|
|
192
192
|
ev.stopPropagation();
|
|
193
193
|
onMenuSelect(selection);
|
|
194
194
|
}}
|
|
@@ -242,7 +242,9 @@ export const ComposableMultipleTypeaheadSelect: React.FunctionComponent = () =>
|
|
|
242
242
|
return (
|
|
243
243
|
<Popper
|
|
244
244
|
trigger={toggle}
|
|
245
|
+
triggerRef={toggleRef}
|
|
245
246
|
popper={menu}
|
|
247
|
+
popperRef={menuRef}
|
|
246
248
|
isVisible={isMenuOpen}
|
|
247
249
|
onDocumentClick={onDocumentClick}
|
|
248
250
|
onDocumentKeyDown={onDocumentKeydown}
|
|
@@ -92,5 +92,5 @@ export const ComposableOptionsMenuVariants: React.FunctionComponent = () => {
|
|
|
92
92
|
</MenuContent>
|
|
93
93
|
</Menu>
|
|
94
94
|
);
|
|
95
|
-
return <Popper trigger={toggle} popper={menu} isVisible={isOpen} />;
|
|
95
|
+
return <Popper trigger={toggle} triggerRef={toggleRef} popper={menu} popperRef={menuRef} isVisible={isOpen} />;
|
|
96
96
|
};
|
|
@@ -8,7 +8,7 @@ export const ComposableSimpleCheckboxSelect: React.FunctionComponent = () => {
|
|
|
8
8
|
const menuRef = React.useRef<HTMLDivElement>(null);
|
|
9
9
|
|
|
10
10
|
const handleMenuKeys = React.useCallback(
|
|
11
|
-
event => {
|
|
11
|
+
(event) => {
|
|
12
12
|
if (menuRef.current) {
|
|
13
13
|
if (isOpen && menuRef.current.contains(event.target as Node)) {
|
|
14
14
|
if (event.key === 'Escape' || event.key === 'Tab') {
|
|
@@ -22,7 +22,7 @@ export const ComposableSimpleCheckboxSelect: React.FunctionComponent = () => {
|
|
|
22
22
|
);
|
|
23
23
|
|
|
24
24
|
const handleClickOutside = React.useCallback(
|
|
25
|
-
event => {
|
|
25
|
+
(event) => {
|
|
26
26
|
if (isOpen && !menuRef?.current?.contains(event.target as Node)) {
|
|
27
27
|
setIsOpen(false);
|
|
28
28
|
}
|
|
@@ -56,7 +56,7 @@ export const ComposableSimpleCheckboxSelect: React.FunctionComponent = () => {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
if (selectedItems.includes(itemId)) {
|
|
59
|
-
setSelectedItems(selectedItems.filter(id => id !== itemId));
|
|
59
|
+
setSelectedItems(selectedItems.filter((id) => id !== itemId));
|
|
60
60
|
} else {
|
|
61
61
|
setSelectedItems([...selectedItems, itemId]);
|
|
62
62
|
}
|
|
@@ -97,5 +97,5 @@ export const ComposableSimpleCheckboxSelect: React.FunctionComponent = () => {
|
|
|
97
97
|
</MenuContent>
|
|
98
98
|
</Menu>
|
|
99
99
|
);
|
|
100
|
-
return <Popper trigger={toggle} popper={menu} isVisible={isOpen} />;
|
|
100
|
+
return <Popper trigger={toggle} triggerRef={toggleRef} popper={menu} popperRef={menuRef} isVisible={isOpen} />;
|
|
101
101
|
};
|
|
@@ -55,7 +55,7 @@ export const ComposableSimpleDropdown: React.FunctionComponent = () => {
|
|
|
55
55
|
<MenuContent>
|
|
56
56
|
<MenuList>
|
|
57
57
|
<MenuItem itemId={0}>Action</MenuItem>
|
|
58
|
-
<MenuItem itemId={1} to="#default-link2" onClick={ev => ev.preventDefault()}>
|
|
58
|
+
<MenuItem itemId={1} to="#default-link2" onClick={(ev) => ev.preventDefault()}>
|
|
59
59
|
Link
|
|
60
60
|
</MenuItem>
|
|
61
61
|
<MenuItem isDisabled>Disabled Action</MenuItem>
|
|
@@ -66,5 +66,5 @@ export const ComposableSimpleDropdown: React.FunctionComponent = () => {
|
|
|
66
66
|
</MenuContent>
|
|
67
67
|
</Menu>
|
|
68
68
|
);
|
|
69
|
-
return <Popper trigger={toggle} popper={menu} isVisible={isOpen} />;
|
|
69
|
+
return <Popper trigger={toggle} triggerRef={toggleRef} popper={menu} popperRef={menuRef} isVisible={isOpen} />;
|
|
70
70
|
};
|
|
@@ -79,5 +79,5 @@ export const ComposableSimpleSelect: React.FunctionComponent = () => {
|
|
|
79
79
|
</MenuContent>
|
|
80
80
|
</Menu>
|
|
81
81
|
);
|
|
82
|
-
return <Popper trigger={toggle} popper={menu} isVisible={isOpen} />;
|
|
82
|
+
return <Popper trigger={toggle} triggerRef={toggleRef} popper={menu} popperRef={menuRef} isVisible={isOpen} />;
|
|
83
83
|
};
|
|
@@ -86,14 +86,14 @@ export const ComposableTreeViewMenu: React.FunctionComponent = () => {
|
|
|
86
86
|
}
|
|
87
87
|
];
|
|
88
88
|
// Helper functions for tree
|
|
89
|
-
const isChecked = (dataItem: TreeViewDataItem) => checkedItems.some(item => item.id === dataItem.id);
|
|
89
|
+
const isChecked = (dataItem: TreeViewDataItem) => checkedItems.some((item) => item.id === dataItem.id);
|
|
90
90
|
const areAllDescendantsChecked = (dataItem: TreeViewDataItem) =>
|
|
91
|
-
dataItem.children ? dataItem.children.every(child => areAllDescendantsChecked(child)) : isChecked(dataItem);
|
|
91
|
+
dataItem.children ? dataItem.children.every((child) => areAllDescendantsChecked(child)) : isChecked(dataItem);
|
|
92
92
|
const areSomeDescendantsChecked = (dataItem: TreeViewDataItem) =>
|
|
93
|
-
dataItem.children ? dataItem.children.some(child => areSomeDescendantsChecked(child)) : isChecked(dataItem);
|
|
93
|
+
dataItem.children ? dataItem.children.some((child) => areSomeDescendantsChecked(child)) : isChecked(dataItem);
|
|
94
94
|
const flattenTree = (tree: TreeViewDataItem[]) => {
|
|
95
95
|
let result: TreeViewDataItem[] = [];
|
|
96
|
-
tree.forEach(item => {
|
|
96
|
+
tree.forEach((item) => {
|
|
97
97
|
result.push(item);
|
|
98
98
|
if (item.children) {
|
|
99
99
|
result = result.concat(flattenTree(item.children));
|
|
@@ -134,8 +134,8 @@ export const ComposableTreeViewMenu: React.FunctionComponent = () => {
|
|
|
134
134
|
if (item.children) {
|
|
135
135
|
return (
|
|
136
136
|
(item.children = item.children
|
|
137
|
-
.map(opt => Object.assign({}, opt))
|
|
138
|
-
.filter(child => filterItems(child, checkedItem))).length > 0
|
|
137
|
+
.map((opt) => Object.assign({}, opt))
|
|
138
|
+
.filter((child) => filterItems(child, checkedItem))).length > 0
|
|
139
139
|
);
|
|
140
140
|
}
|
|
141
141
|
};
|
|
@@ -155,12 +155,14 @@ export const ComposableTreeViewMenu: React.FunctionComponent = () => {
|
|
|
155
155
|
break;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
const checkedItemTree = options
|
|
158
|
+
const checkedItemTree = options
|
|
159
|
+
.map((opt) => Object.assign({}, opt))
|
|
160
|
+
.filter((item) => filterItems(item, treeViewItem));
|
|
159
161
|
const flatCheckedItems = flattenTree(checkedItemTree);
|
|
160
|
-
setCheckedItems(prevCheckedItems =>
|
|
162
|
+
setCheckedItems((prevCheckedItems) =>
|
|
161
163
|
checked
|
|
162
|
-
? prevCheckedItems.concat(flatCheckedItems.filter(item => !prevCheckedItems.some(i => i.id === item.id)))
|
|
163
|
-
: prevCheckedItems.filter(item => !flatCheckedItems.some(i => i.id === item.id))
|
|
164
|
+
? prevCheckedItems.concat(flatCheckedItems.filter((item) => !prevCheckedItems.some((i) => i.id === item.id)))
|
|
165
|
+
: prevCheckedItems.filter((item) => !flatCheckedItems.some((i) => i.id === item.id))
|
|
164
166
|
);
|
|
165
167
|
};
|
|
166
168
|
|
|
@@ -265,5 +267,14 @@ export const ComposableTreeViewMenu: React.FunctionComponent = () => {
|
|
|
265
267
|
</PanelMain>
|
|
266
268
|
</Panel>
|
|
267
269
|
);
|
|
268
|
-
return
|
|
270
|
+
return (
|
|
271
|
+
<Popper
|
|
272
|
+
trigger={toggle}
|
|
273
|
+
triggerRef={toggleRef}
|
|
274
|
+
popper={menu}
|
|
275
|
+
popperRef={menuRef}
|
|
276
|
+
isVisible={isOpen}
|
|
277
|
+
popperMatchesTriggerWidth={false}
|
|
278
|
+
/>
|
|
279
|
+
);
|
|
269
280
|
};
|
|
@@ -34,16 +34,15 @@ export const ComposableTypeaheadSelect: React.FunctionComponent = () => {
|
|
|
34
34
|
const menuToggleRef = React.useRef<MenuToggleElement>({} as MenuToggleElement);
|
|
35
35
|
const textInputRef = React.useRef<HTMLInputElement>();
|
|
36
36
|
const menuRef = React.useRef<HTMLDivElement>(null);
|
|
37
|
+
const triggerRef = React.useRef<MenuToggleElement>(null);
|
|
37
38
|
|
|
38
39
|
React.useEffect(() => {
|
|
39
40
|
let newMenuItems: MenuItemProps[] = intitalMenuItems;
|
|
40
41
|
|
|
41
42
|
// Filter menu items based on the text input value when one exists
|
|
42
43
|
if (inputValue) {
|
|
43
|
-
newMenuItems = intitalMenuItems.filter(menuItem =>
|
|
44
|
-
String(menuItem.children)
|
|
45
|
-
.toLowerCase()
|
|
46
|
-
.includes(inputValue.toLowerCase())
|
|
44
|
+
newMenuItems = intitalMenuItems.filter((menuItem) =>
|
|
45
|
+
String(menuItem.children).toLowerCase().includes(inputValue.toLowerCase())
|
|
47
46
|
);
|
|
48
47
|
|
|
49
48
|
// When no options are found after filtering, display 'No results found'
|
|
@@ -100,13 +99,13 @@ export const ComposableTypeaheadSelect: React.FunctionComponent = () => {
|
|
|
100
99
|
}
|
|
101
100
|
|
|
102
101
|
setFocusedItemIndex(indexToFocus);
|
|
103
|
-
const focusedItem = menuItems.filter(item => !item.isDisabled)[indexToFocus];
|
|
102
|
+
const focusedItem = menuItems.filter((item) => !item.isDisabled)[indexToFocus];
|
|
104
103
|
setActiveItem(`composable-typeahead-${focusedItem.itemId.replace(' ', '-')}`);
|
|
105
104
|
}
|
|
106
105
|
};
|
|
107
106
|
|
|
108
107
|
const onInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
|
|
109
|
-
const enabledMenuItems = menuItems.filter(menuItem => !menuItem.isDisabled);
|
|
108
|
+
const enabledMenuItems = menuItems.filter((menuItem) => !menuItem.isDisabled);
|
|
110
109
|
const [firstMenuItem] = enabledMenuItems;
|
|
111
110
|
const focusedItem = focusedItemIndex ? enabledMenuItems[focusedItemIndex] : firstMenuItem;
|
|
112
111
|
|
|
@@ -119,7 +118,7 @@ export const ComposableTypeaheadSelect: React.FunctionComponent = () => {
|
|
|
119
118
|
setIsSelected(true);
|
|
120
119
|
}
|
|
121
120
|
|
|
122
|
-
setIsMenuOpen(prevIsOpen => !prevIsOpen);
|
|
121
|
+
setIsMenuOpen((prevIsOpen) => !prevIsOpen);
|
|
123
122
|
setFocusedItemIndex(null);
|
|
124
123
|
setActiveItem(null);
|
|
125
124
|
focusOnInput();
|
|
@@ -140,7 +139,7 @@ export const ComposableTypeaheadSelect: React.FunctionComponent = () => {
|
|
|
140
139
|
|
|
141
140
|
// Close the menu when a click occurs outside of the menu, toggle, or input
|
|
142
141
|
const onDocumentClick = (event: MouseEvent | undefined) => {
|
|
143
|
-
const isValidClick = [menuRef, menuToggleRef, textInputRef].some(ref =>
|
|
142
|
+
const isValidClick = [menuRef, menuToggleRef, textInputRef].some((ref) =>
|
|
144
143
|
ref?.current?.contains(event?.target as HTMLElement)
|
|
145
144
|
);
|
|
146
145
|
if (isMenuOpen && !isValidClick) {
|
|
@@ -162,7 +161,7 @@ export const ComposableTypeaheadSelect: React.FunctionComponent = () => {
|
|
|
162
161
|
};
|
|
163
162
|
|
|
164
163
|
const toggleMenuOpen = () => {
|
|
165
|
-
setIsMenuOpen(prevIsOpen => !prevIsOpen);
|
|
164
|
+
setIsMenuOpen((prevIsOpen) => !prevIsOpen);
|
|
166
165
|
textInputRef.current?.focus();
|
|
167
166
|
};
|
|
168
167
|
|
|
@@ -175,6 +174,7 @@ export const ComposableTypeaheadSelect: React.FunctionComponent = () => {
|
|
|
175
174
|
<Popper
|
|
176
175
|
trigger={
|
|
177
176
|
<MenuToggle
|
|
177
|
+
ref={triggerRef}
|
|
178
178
|
variant="typeahead"
|
|
179
179
|
onClick={toggleMenuOpen}
|
|
180
180
|
innerRef={menuToggleRef}
|
|
@@ -206,6 +206,7 @@ export const ComposableTypeaheadSelect: React.FunctionComponent = () => {
|
|
|
206
206
|
</TextInputGroup>
|
|
207
207
|
</MenuToggle>
|
|
208
208
|
}
|
|
209
|
+
triggerRef={triggerRef}
|
|
209
210
|
popper={
|
|
210
211
|
<Menu role="listbox" ref={menuRef} id="select-menu" onSelect={onMenuSelect} selected={isSelected && inputValue}>
|
|
211
212
|
<MenuContent>
|
|
@@ -224,6 +225,7 @@ export const ComposableTypeaheadSelect: React.FunctionComponent = () => {
|
|
|
224
225
|
</MenuContent>
|
|
225
226
|
</Menu>
|
|
226
227
|
}
|
|
228
|
+
popperRef={menuRef}
|
|
227
229
|
isVisible={isMenuOpen}
|
|
228
230
|
onDocumentClick={onDocumentClick}
|
|
229
231
|
onDocumentKeyDown={onDocumentKeydown}
|
|
@@ -101,12 +101,12 @@ export const FilterAttributeSearch: React.FunctionComponent = () => {
|
|
|
101
101
|
const isRepoSelectable = (repo: Repository) => repo.name !== 'a'; // Arbitrary logic for this example
|
|
102
102
|
const [selectedRepoNames, setSelectedRepoNames] = React.useState<string[]>([]);
|
|
103
103
|
const setRepoSelected = (repo: Repository, isSelecting = true) =>
|
|
104
|
-
setSelectedRepoNames(prevSelected => {
|
|
105
|
-
const otherSelectedRepoNames = prevSelected.filter(r => r !== repo.name);
|
|
104
|
+
setSelectedRepoNames((prevSelected) => {
|
|
105
|
+
const otherSelectedRepoNames = prevSelected.filter((r) => r !== repo.name);
|
|
106
106
|
return isSelecting && isRepoSelectable(repo) ? [...otherSelectedRepoNames, repo.name] : otherSelectedRepoNames;
|
|
107
107
|
});
|
|
108
108
|
const selectAllRepos = (isSelecting = true) =>
|
|
109
|
-
setSelectedRepoNames(isSelecting ? filteredRepos.map(r => r.name) : []); // Selecting all should only select all currently filtered rows
|
|
109
|
+
setSelectedRepoNames(isSelecting ? filteredRepos.map((r) => r.name) : []); // Selecting all should only select all currently filtered rows
|
|
110
110
|
const areAllReposSelected = selectedRepoNames.length === filteredRepos.length && filteredRepos.length > 0;
|
|
111
111
|
const areSomeReposSelected = selectedRepoNames.length > 0;
|
|
112
112
|
const isRepoSelected = (repo: Repository) => selectedRepoNames.includes(repo.name);
|
|
@@ -123,7 +123,7 @@ export const FilterAttributeSearch: React.FunctionComponent = () => {
|
|
|
123
123
|
numberSelected > 0
|
|
124
124
|
? Array.from(new Array(numberSelected + 1), (_x, i) => i + recentSelectedRowIndex)
|
|
125
125
|
: Array.from(new Array(Math.abs(numberSelected) + 1), (_x, i) => i + rowIndex);
|
|
126
|
-
intermediateIndexes.forEach(index => setRepoSelected(repositories[index], isSelecting));
|
|
126
|
+
intermediateIndexes.forEach((index) => setRepoSelected(repositories[index], isSelecting));
|
|
127
127
|
} else {
|
|
128
128
|
setRepoSelected(repo, isSelecting);
|
|
129
129
|
}
|
|
@@ -250,7 +250,9 @@ export const FilterAttributeSearch: React.FunctionComponent = () => {
|
|
|
250
250
|
<div ref={bulkSelectContainerRef}>
|
|
251
251
|
<Popper
|
|
252
252
|
trigger={bulkSelectToggle}
|
|
253
|
+
triggerRef={bulkSelectToggleRef}
|
|
253
254
|
popper={bulkSelectMenu}
|
|
255
|
+
popperRef={bulkSelectMenuRef}
|
|
254
256
|
appendTo={bulkSelectContainerRef.current || undefined}
|
|
255
257
|
isVisible={isBulkSelectOpen}
|
|
256
258
|
popperMatchesTriggerWidth={false}
|
|
@@ -351,7 +353,9 @@ export const FilterAttributeSearch: React.FunctionComponent = () => {
|
|
|
351
353
|
<div ref={statusContainerRef}>
|
|
352
354
|
<Popper
|
|
353
355
|
trigger={statusToggle}
|
|
356
|
+
triggerRef={statusToggleRef}
|
|
354
357
|
popper={statusMenu}
|
|
358
|
+
popperRef={statusMenuRef}
|
|
355
359
|
appendTo={statusContainerRef.current || undefined}
|
|
356
360
|
isVisible={isStatusMenuOpen}
|
|
357
361
|
/>
|
|
@@ -408,7 +412,7 @@ export const FilterAttributeSearch: React.FunctionComponent = () => {
|
|
|
408
412
|
|
|
409
413
|
setLocationSelections(
|
|
410
414
|
locationSelections.includes(itemStr)
|
|
411
|
-
? locationSelections.filter(selection => selection !== itemStr)
|
|
415
|
+
? locationSelections.filter((selection) => selection !== itemStr)
|
|
412
416
|
: [itemStr, ...locationSelections]
|
|
413
417
|
);
|
|
414
418
|
}
|
|
@@ -462,7 +466,9 @@ export const FilterAttributeSearch: React.FunctionComponent = () => {
|
|
|
462
466
|
<div ref={locationContainerRef}>
|
|
463
467
|
<Popper
|
|
464
468
|
trigger={locationToggle}
|
|
469
|
+
triggerRef={locationToggleRef}
|
|
465
470
|
popper={locationMenu}
|
|
471
|
+
popperRef={locationMenuRef}
|
|
466
472
|
appendTo={locationContainerRef.current || undefined}
|
|
467
473
|
isVisible={isLocationMenuOpen}
|
|
468
474
|
/>
|
|
@@ -550,7 +556,9 @@ export const FilterAttributeSearch: React.FunctionComponent = () => {
|
|
|
550
556
|
<div ref={attributeContainerRef}>
|
|
551
557
|
<Popper
|
|
552
558
|
trigger={attributeToggle}
|
|
559
|
+
triggerRef={attributeToggleRef}
|
|
553
560
|
popper={attributeMenu}
|
|
561
|
+
popperRef={attributeMenuRef}
|
|
554
562
|
appendTo={attributeContainerRef.current || undefined}
|
|
555
563
|
isVisible={isAttributeMenuOpen}
|
|
556
564
|
/>
|
|
@@ -59,7 +59,7 @@ export const FilterCheckboxSelect: React.FunctionComponent = () => {
|
|
|
59
59
|
return true;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
return selections.some(searchValue => {
|
|
62
|
+
return selections.some((searchValue) => {
|
|
63
63
|
let input: RegExp;
|
|
64
64
|
try {
|
|
65
65
|
input = new RegExp(searchValue, 'i');
|
|
@@ -78,12 +78,12 @@ export const FilterCheckboxSelect: React.FunctionComponent = () => {
|
|
|
78
78
|
const isRepoSelectable = (repo: Repository) => repo.name !== 'a'; // Arbitrary logic for this example
|
|
79
79
|
const [selectedRepoNames, setSelectedRepoNames] = React.useState<string[]>([]);
|
|
80
80
|
const setRepoSelected = (repo: Repository, isSelecting = true) =>
|
|
81
|
-
setSelectedRepoNames(prevSelected => {
|
|
82
|
-
const otherSelectedRepoNames = prevSelected.filter(r => r !== repo.name);
|
|
81
|
+
setSelectedRepoNames((prevSelected) => {
|
|
82
|
+
const otherSelectedRepoNames = prevSelected.filter((r) => r !== repo.name);
|
|
83
83
|
return isSelecting && isRepoSelectable(repo) ? [...otherSelectedRepoNames, repo.name] : otherSelectedRepoNames;
|
|
84
84
|
});
|
|
85
85
|
const selectAllRepos = (isSelecting = true) =>
|
|
86
|
-
setSelectedRepoNames(isSelecting ? filteredRepos.map(r => r.name) : []);
|
|
86
|
+
setSelectedRepoNames(isSelecting ? filteredRepos.map((r) => r.name) : []);
|
|
87
87
|
const areAllReposSelected = selectedRepoNames.length === filteredRepos.length && filteredRepos.length > 0;
|
|
88
88
|
const areSomeReposSelected = selectedRepoNames.length > 0;
|
|
89
89
|
const isRepoSelected = (repo: Repository) => selectedRepoNames.includes(repo.name);
|
|
@@ -100,7 +100,7 @@ export const FilterCheckboxSelect: React.FunctionComponent = () => {
|
|
|
100
100
|
numberSelected > 0
|
|
101
101
|
? Array.from(new Array(numberSelected + 1), (_x, i) => i + recentSelectedRowIndex)
|
|
102
102
|
: Array.from(new Array(Math.abs(numberSelected) + 1), (_x, i) => i + rowIndex);
|
|
103
|
-
intermediateIndexes.forEach(index => setRepoSelected(repositories[index], isSelecting));
|
|
103
|
+
intermediateIndexes.forEach((index) => setRepoSelected(repositories[index], isSelecting));
|
|
104
104
|
} else {
|
|
105
105
|
setRepoSelected(repo, isSelecting);
|
|
106
106
|
}
|
|
@@ -226,7 +226,9 @@ export const FilterCheckboxSelect: React.FunctionComponent = () => {
|
|
|
226
226
|
<div ref={bulkSelectContainerRef}>
|
|
227
227
|
<Popper
|
|
228
228
|
trigger={bulkSelectToggle}
|
|
229
|
+
triggerRef={bulkSelectToggleRef}
|
|
229
230
|
popper={bulkSelectMenu}
|
|
231
|
+
popperRef={bulkSelectMenuRef}
|
|
230
232
|
appendTo={bulkSelectContainerRef.current || undefined}
|
|
231
233
|
isVisible={isBulkSelectOpen}
|
|
232
234
|
popperMatchesTriggerWidth={false}
|
|
@@ -282,7 +284,7 @@ export const FilterCheckboxSelect: React.FunctionComponent = () => {
|
|
|
282
284
|
|
|
283
285
|
const itemStr = itemId.toString();
|
|
284
286
|
setSelections(
|
|
285
|
-
selections.includes(itemStr) ? selections.filter(selection => selection !== itemStr) : [itemStr, ...selections]
|
|
287
|
+
selections.includes(itemStr) ? selections.filter((selection) => selection !== itemStr) : [itemStr, ...selections]
|
|
286
288
|
);
|
|
287
289
|
}
|
|
288
290
|
|
|
@@ -329,7 +331,14 @@ export const FilterCheckboxSelect: React.FunctionComponent = () => {
|
|
|
329
331
|
|
|
330
332
|
const select = (
|
|
331
333
|
<div ref={containerRef}>
|
|
332
|
-
<Popper
|
|
334
|
+
<Popper
|
|
335
|
+
trigger={toggle}
|
|
336
|
+
triggerRef={toggleRef}
|
|
337
|
+
popper={menu}
|
|
338
|
+
popperRef={menuRef}
|
|
339
|
+
appendTo={containerRef.current || undefined}
|
|
340
|
+
isVisible={isOpen}
|
|
341
|
+
/>
|
|
333
342
|
</div>
|
|
334
343
|
);
|
|
335
344
|
|
|
@@ -84,12 +84,12 @@ export const FilterFaceted: React.FunctionComponent = () => {
|
|
|
84
84
|
const isRepoSelectable = (repo: Repository) => repo.name !== 'a'; // Arbitrary logic for this example
|
|
85
85
|
const [selectedRepoNames, setSelectedRepoNames] = React.useState<string[]>([]);
|
|
86
86
|
const setRepoSelected = (repo: Repository, isSelecting = true) =>
|
|
87
|
-
setSelectedRepoNames(prevSelected => {
|
|
88
|
-
const otherSelectedRepoNames = prevSelected.filter(r => r !== repo.name);
|
|
87
|
+
setSelectedRepoNames((prevSelected) => {
|
|
88
|
+
const otherSelectedRepoNames = prevSelected.filter((r) => r !== repo.name);
|
|
89
89
|
return isSelecting && isRepoSelectable(repo) ? [...otherSelectedRepoNames, repo.name] : otherSelectedRepoNames;
|
|
90
90
|
});
|
|
91
91
|
const selectAllRepos = (isSelecting = true) =>
|
|
92
|
-
setSelectedRepoNames(isSelecting ? filteredRepos.map(r => r.name) : []); // Selecting all should only select all currently filtered rows
|
|
92
|
+
setSelectedRepoNames(isSelecting ? filteredRepos.map((r) => r.name) : []); // Selecting all should only select all currently filtered rows
|
|
93
93
|
const areAllReposSelected = selectedRepoNames.length === filteredRepos.length && filteredRepos.length > 0;
|
|
94
94
|
const areSomeReposSelected = selectedRepoNames.length > 0;
|
|
95
95
|
const isRepoSelected = (repo: Repository) => selectedRepoNames.includes(repo.name);
|
|
@@ -106,7 +106,7 @@ export const FilterFaceted: React.FunctionComponent = () => {
|
|
|
106
106
|
numberSelected > 0
|
|
107
107
|
? Array.from(new Array(numberSelected + 1), (_x, i) => i + recentSelectedRowIndex)
|
|
108
108
|
: Array.from(new Array(Math.abs(numberSelected) + 1), (_x, i) => i + rowIndex);
|
|
109
|
-
intermediateIndexes.forEach(index => setRepoSelected(repositories[index], isSelecting));
|
|
109
|
+
intermediateIndexes.forEach((index) => setRepoSelected(repositories[index], isSelecting));
|
|
110
110
|
} else {
|
|
111
111
|
setRepoSelected(repo, isSelecting);
|
|
112
112
|
}
|
|
@@ -233,7 +233,9 @@ export const FilterFaceted: React.FunctionComponent = () => {
|
|
|
233
233
|
<div ref={bulkSelectContainerRef}>
|
|
234
234
|
<Popper
|
|
235
235
|
trigger={bulkSelectToggle}
|
|
236
|
+
triggerRef={bulkSelectToggleRef}
|
|
236
237
|
popper={bulkSelectMenu}
|
|
238
|
+
popperRef={bulkSelectMenuRef}
|
|
237
239
|
appendTo={bulkSelectContainerRef.current || undefined}
|
|
238
240
|
isVisible={isBulkSelectOpen}
|
|
239
241
|
popperMatchesTriggerWidth={false}
|
|
@@ -293,13 +295,13 @@ export const FilterFaceted: React.FunctionComponent = () => {
|
|
|
293
295
|
if (category === 'status') {
|
|
294
296
|
setStatusSelections(
|
|
295
297
|
statusSelections.includes(itemStr)
|
|
296
|
-
? statusSelections.filter(selection => selection !== itemStr)
|
|
298
|
+
? statusSelections.filter((selection) => selection !== itemStr)
|
|
297
299
|
: [itemStr, ...statusSelections]
|
|
298
300
|
);
|
|
299
301
|
} else {
|
|
300
302
|
setLocationSelections(
|
|
301
303
|
locationSelections.includes(itemStr)
|
|
302
|
-
? locationSelections.filter(selection => selection !== itemStr)
|
|
304
|
+
? locationSelections.filter((selection) => selection !== itemStr)
|
|
303
305
|
: [itemStr, ...locationSelections]
|
|
304
306
|
);
|
|
305
307
|
}
|
|
@@ -307,9 +309,9 @@ export const FilterFaceted: React.FunctionComponent = () => {
|
|
|
307
309
|
|
|
308
310
|
const onChipDelete = (category: string, chip: string) => {
|
|
309
311
|
if (category === 'status') {
|
|
310
|
-
setStatusSelections(statusSelections.filter(selection => selection !== chip));
|
|
312
|
+
setStatusSelections(statusSelections.filter((selection) => selection !== chip));
|
|
311
313
|
} else {
|
|
312
|
-
setLocationSelections(locationSelections.filter(selection => selection !== chip));
|
|
314
|
+
setLocationSelections(locationSelections.filter((selection) => selection !== chip));
|
|
313
315
|
}
|
|
314
316
|
};
|
|
315
317
|
|
|
@@ -383,7 +385,14 @@ export const FilterFaceted: React.FunctionComponent = () => {
|
|
|
383
385
|
|
|
384
386
|
const select = (
|
|
385
387
|
<div ref={containerRef}>
|
|
386
|
-
<Popper
|
|
388
|
+
<Popper
|
|
389
|
+
trigger={toggle}
|
|
390
|
+
triggerRef={toggleRef}
|
|
391
|
+
popper={menu}
|
|
392
|
+
popperRef={menuRef}
|
|
393
|
+
appendTo={containerRef.current || undefined}
|
|
394
|
+
isVisible={isOpen}
|
|
395
|
+
/>
|
|
387
396
|
</div>
|
|
388
397
|
);
|
|
389
398
|
|
|
@@ -81,12 +81,12 @@ export const FilterMixedSelectGroup: React.FunctionComponent = () => {
|
|
|
81
81
|
const isRepoSelectable = (repo: Repository) => repo.name !== 'a'; // Arbitrary logic for this example
|
|
82
82
|
const [selectedRepoNames, setSelectedRepoNames] = React.useState<string[]>([]);
|
|
83
83
|
const setRepoSelected = (repo: Repository, isSelecting = true) =>
|
|
84
|
-
setSelectedRepoNames(prevSelected => {
|
|
85
|
-
const otherSelectedRepoNames = prevSelected.filter(r => r !== repo.name);
|
|
84
|
+
setSelectedRepoNames((prevSelected) => {
|
|
85
|
+
const otherSelectedRepoNames = prevSelected.filter((r) => r !== repo.name);
|
|
86
86
|
return isSelecting && isRepoSelectable(repo) ? [...otherSelectedRepoNames, repo.name] : otherSelectedRepoNames;
|
|
87
87
|
});
|
|
88
88
|
const selectAllRepos = (isSelecting = true) =>
|
|
89
|
-
setSelectedRepoNames(isSelecting ? filteredRepos.map(r => r.name) : []); // Selecting all should only select all currently filtered rows
|
|
89
|
+
setSelectedRepoNames(isSelecting ? filteredRepos.map((r) => r.name) : []); // Selecting all should only select all currently filtered rows
|
|
90
90
|
const areAllReposSelected = selectedRepoNames.length === filteredRepos.length && filteredRepos.length > 0;
|
|
91
91
|
const areSomeReposSelected = selectedRepoNames.length > 0;
|
|
92
92
|
const isRepoSelected = (repo: Repository) => selectedRepoNames.includes(repo.name);
|
|
@@ -103,7 +103,7 @@ export const FilterMixedSelectGroup: React.FunctionComponent = () => {
|
|
|
103
103
|
numberSelected > 0
|
|
104
104
|
? Array.from(new Array(numberSelected + 1), (_x, i) => i + recentSelectedRowIndex)
|
|
105
105
|
: Array.from(new Array(Math.abs(numberSelected) + 1), (_x, i) => i + rowIndex);
|
|
106
|
-
intermediateIndexes.forEach(index => setRepoSelected(repositories[index], isSelecting));
|
|
106
|
+
intermediateIndexes.forEach((index) => setRepoSelected(repositories[index], isSelecting));
|
|
107
107
|
} else {
|
|
108
108
|
setRepoSelected(repo, isSelecting);
|
|
109
109
|
}
|
|
@@ -230,7 +230,9 @@ export const FilterMixedSelectGroup: React.FunctionComponent = () => {
|
|
|
230
230
|
<div ref={bulkSelectContainerRef}>
|
|
231
231
|
<Popper
|
|
232
232
|
trigger={bulkSelectToggle}
|
|
233
|
+
triggerRef={bulkSelectToggleRef}
|
|
233
234
|
popper={bulkSelectMenu}
|
|
235
|
+
popperRef={bulkSelectMenuRef}
|
|
234
236
|
appendTo={bulkSelectContainerRef.current || undefined}
|
|
235
237
|
isVisible={isBulkSelectOpen}
|
|
236
238
|
popperMatchesTriggerWidth={false}
|
|
@@ -322,7 +324,9 @@ export const FilterMixedSelectGroup: React.FunctionComponent = () => {
|
|
|
322
324
|
<div ref={statusContainerRef}>
|
|
323
325
|
<Popper
|
|
324
326
|
trigger={statusToggle}
|
|
327
|
+
triggerRef={statusToggleRef}
|
|
325
328
|
popper={statusMenu}
|
|
329
|
+
popperRef={statusMenuRef}
|
|
326
330
|
appendTo={statusContainerRef.current || undefined}
|
|
327
331
|
isVisible={isStatusMenuOpen}
|
|
328
332
|
/>
|
|
@@ -379,7 +383,7 @@ export const FilterMixedSelectGroup: React.FunctionComponent = () => {
|
|
|
379
383
|
|
|
380
384
|
setLocationSelections(
|
|
381
385
|
locationSelections.includes(itemStr)
|
|
382
|
-
? locationSelections.filter(selection => selection !== itemStr)
|
|
386
|
+
? locationSelections.filter((selection) => selection !== itemStr)
|
|
383
387
|
: [itemStr, ...locationSelections]
|
|
384
388
|
);
|
|
385
389
|
}
|
|
@@ -434,7 +438,9 @@ export const FilterMixedSelectGroup: React.FunctionComponent = () => {
|
|
|
434
438
|
<div ref={locationContainerRef}>
|
|
435
439
|
<Popper
|
|
436
440
|
trigger={locationToggle}
|
|
441
|
+
triggerRef={locationToggleRef}
|
|
437
442
|
popper={locationMenu}
|
|
443
|
+
popperRef={locationMenuRef}
|
|
438
444
|
appendTo={locationContainerRef.current || undefined}
|
|
439
445
|
isVisible={isLocationMenuOpen}
|
|
440
446
|
/>
|
|
@@ -82,12 +82,12 @@ export const FilterSameSelectGroup: React.FunctionComponent = () => {
|
|
|
82
82
|
const isRepoSelectable = (repo: Repository) => repo.name !== 'a'; // Arbitrary logic for this example
|
|
83
83
|
const [selectedRepoNames, setSelectedRepoNames] = React.useState<string[]>([]);
|
|
84
84
|
const setRepoSelected = (repo: Repository, isSelecting = true) =>
|
|
85
|
-
setSelectedRepoNames(prevSelected => {
|
|
86
|
-
const otherSelectedRepoNames = prevSelected.filter(r => r !== repo.name);
|
|
85
|
+
setSelectedRepoNames((prevSelected) => {
|
|
86
|
+
const otherSelectedRepoNames = prevSelected.filter((r) => r !== repo.name);
|
|
87
87
|
return isSelecting && isRepoSelectable(repo) ? [...otherSelectedRepoNames, repo.name] : otherSelectedRepoNames;
|
|
88
88
|
});
|
|
89
89
|
const selectAllRepos = (isSelecting = true) =>
|
|
90
|
-
setSelectedRepoNames(isSelecting ? filteredRepos.map(r => r.name) : []); // Selecting all should only select all currently filtered rows
|
|
90
|
+
setSelectedRepoNames(isSelecting ? filteredRepos.map((r) => r.name) : []); // Selecting all should only select all currently filtered rows
|
|
91
91
|
const areAllReposSelected = selectedRepoNames.length === filteredRepos.length && filteredRepos.length > 0;
|
|
92
92
|
const areSomeReposSelected = selectedRepoNames.length > 0;
|
|
93
93
|
const isRepoSelected = (repo: Repository) => selectedRepoNames.includes(repo.name);
|
|
@@ -104,7 +104,7 @@ export const FilterSameSelectGroup: React.FunctionComponent = () => {
|
|
|
104
104
|
numberSelected > 0
|
|
105
105
|
? Array.from(new Array(numberSelected + 1), (_x, i) => i + recentSelectedRowIndex)
|
|
106
106
|
: Array.from(new Array(Math.abs(numberSelected) + 1), (_x, i) => i + rowIndex);
|
|
107
|
-
intermediateIndexes.forEach(index => setRepoSelected(repositories[index], isSelecting));
|
|
107
|
+
intermediateIndexes.forEach((index) => setRepoSelected(repositories[index], isSelecting));
|
|
108
108
|
} else {
|
|
109
109
|
setRepoSelected(repo, isSelecting);
|
|
110
110
|
}
|
|
@@ -231,7 +231,9 @@ export const FilterSameSelectGroup: React.FunctionComponent = () => {
|
|
|
231
231
|
<div ref={bulkSelectContainerRef}>
|
|
232
232
|
<Popper
|
|
233
233
|
trigger={bulkSelectToggle}
|
|
234
|
+
triggerRef={bulkSelectToggleRef}
|
|
234
235
|
popper={bulkSelectMenu}
|
|
236
|
+
popperRef={bulkSelectMenuRef}
|
|
235
237
|
appendTo={bulkSelectContainerRef.current || undefined}
|
|
236
238
|
isVisible={isBulkSelectOpen}
|
|
237
239
|
popperMatchesTriggerWidth={false}
|
|
@@ -324,7 +326,9 @@ export const FilterSameSelectGroup: React.FunctionComponent = () => {
|
|
|
324
326
|
<div ref={statusContainerRef}>
|
|
325
327
|
<Popper
|
|
326
328
|
trigger={statusToggle}
|
|
329
|
+
triggerRef={statusToggleRef}
|
|
327
330
|
popper={statusMenu}
|
|
331
|
+
popperRef={statusMenuRef}
|
|
328
332
|
appendTo={statusContainerRef.current || undefined}
|
|
329
333
|
isVisible={isStatusMenuOpen}
|
|
330
334
|
/>
|
|
@@ -421,7 +425,9 @@ export const FilterSameSelectGroup: React.FunctionComponent = () => {
|
|
|
421
425
|
<div ref={locationContainerRef}>
|
|
422
426
|
<Popper
|
|
423
427
|
trigger={locationToggle}
|
|
428
|
+
triggerRef={locationToggleRef}
|
|
424
429
|
popper={locationMenu}
|
|
430
|
+
popperRef={locationMenuRef}
|
|
425
431
|
appendTo={locationContainerRef.current || undefined}
|
|
426
432
|
isVisible={isLocationMenuOpen}
|
|
427
433
|
/>
|