@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.
Files changed (238) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
  3. package/components/ClipboardCopy/ClipboardCopyButton.js +3 -2
  4. package/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
  5. package/components/ContextSelector/ContextSelector.d.ts.map +1 -1
  6. package/components/ContextSelector/ContextSelector.js +1 -1
  7. package/components/ContextSelector/ContextSelector.js.map +1 -1
  8. package/components/DatePicker/DatePicker.d.ts.map +1 -1
  9. package/components/DatePicker/DatePicker.js +6 -5
  10. package/components/DatePicker/DatePicker.js.map +1 -1
  11. package/components/Dropdown/DropdownWithContext.d.ts.map +1 -1
  12. package/components/Dropdown/DropdownWithContext.js +4 -3
  13. package/components/Dropdown/DropdownWithContext.js.map +1 -1
  14. package/components/DualListSelector/DualListSelectorControl.js +1 -1
  15. package/components/DualListSelector/DualListSelectorControl.js.map +1 -1
  16. package/components/InputGroup/InputGroup.d.ts +3 -2
  17. package/components/InputGroup/InputGroup.d.ts.map +1 -1
  18. package/components/InputGroup/InputGroup.js +3 -2
  19. package/components/InputGroup/InputGroup.js.map +1 -1
  20. package/components/Label/Label.js +1 -1
  21. package/components/Label/Label.js.map +1 -1
  22. package/components/Nav/NavItem.d.ts.map +1 -1
  23. package/components/Nav/NavItem.js +3 -3
  24. package/components/Nav/NavItem.js.map +1 -1
  25. package/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
  26. package/components/Pagination/PaginationOptionsMenu.js +4 -4
  27. package/components/Pagination/PaginationOptionsMenu.js.map +1 -1
  28. package/components/Popover/Popover.d.ts +9 -8
  29. package/components/Popover/Popover.d.ts.map +1 -1
  30. package/components/Popover/Popover.js +4 -3
  31. package/components/Popover/Popover.js.map +1 -1
  32. package/components/SearchInput/SearchInput.d.ts.map +1 -1
  33. package/components/SearchInput/SearchInput.js +5 -3
  34. package/components/SearchInput/SearchInput.js.map +1 -1
  35. package/components/Select/Select.d.ts.map +1 -1
  36. package/components/Select/Select.js +3 -2
  37. package/components/Select/Select.js.map +1 -1
  38. package/components/Slider/Slider.js +5 -5
  39. package/components/Slider/Slider.js.map +1 -1
  40. package/components/Tabs/OverflowTab.js +5 -5
  41. package/components/Tabs/OverflowTab.js.map +1 -1
  42. package/components/TimePicker/TimePicker.d.ts.map +1 -1
  43. package/components/TimePicker/TimePicker.js +1 -1
  44. package/components/TimePicker/TimePicker.js.map +1 -1
  45. package/components/Tooltip/Tooltip.d.ts +8 -7
  46. package/components/Tooltip/Tooltip.d.ts.map +1 -1
  47. package/components/Tooltip/Tooltip.js +5 -4
  48. package/components/Tooltip/Tooltip.js.map +1 -1
  49. package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
  50. package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js +3 -2
  51. package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
  52. package/dist/esm/components/ContextSelector/ContextSelector.d.ts.map +1 -1
  53. package/dist/esm/components/ContextSelector/ContextSelector.js +1 -1
  54. package/dist/esm/components/ContextSelector/ContextSelector.js.map +1 -1
  55. package/dist/esm/components/DatePicker/DatePicker.d.ts.map +1 -1
  56. package/dist/esm/components/DatePicker/DatePicker.js +6 -5
  57. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  58. package/dist/esm/components/Dropdown/DropdownWithContext.d.ts.map +1 -1
  59. package/dist/esm/components/Dropdown/DropdownWithContext.js +4 -3
  60. package/dist/esm/components/Dropdown/DropdownWithContext.js.map +1 -1
  61. package/dist/esm/components/DualListSelector/DualListSelectorControl.js +1 -1
  62. package/dist/esm/components/DualListSelector/DualListSelectorControl.js.map +1 -1
  63. package/dist/esm/components/InputGroup/InputGroup.d.ts +3 -2
  64. package/dist/esm/components/InputGroup/InputGroup.d.ts.map +1 -1
  65. package/dist/esm/components/InputGroup/InputGroup.js +3 -2
  66. package/dist/esm/components/InputGroup/InputGroup.js.map +1 -1
  67. package/dist/esm/components/Label/Label.js +1 -1
  68. package/dist/esm/components/Label/Label.js.map +1 -1
  69. package/dist/esm/components/Nav/NavItem.d.ts.map +1 -1
  70. package/dist/esm/components/Nav/NavItem.js +3 -3
  71. package/dist/esm/components/Nav/NavItem.js.map +1 -1
  72. package/dist/esm/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
  73. package/dist/esm/components/Pagination/PaginationOptionsMenu.js +4 -4
  74. package/dist/esm/components/Pagination/PaginationOptionsMenu.js.map +1 -1
  75. package/dist/esm/components/Popover/Popover.d.ts +9 -8
  76. package/dist/esm/components/Popover/Popover.d.ts.map +1 -1
  77. package/dist/esm/components/Popover/Popover.js +4 -3
  78. package/dist/esm/components/Popover/Popover.js.map +1 -1
  79. package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
  80. package/dist/esm/components/SearchInput/SearchInput.js +5 -3
  81. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  82. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  83. package/dist/esm/components/Select/Select.js +3 -2
  84. package/dist/esm/components/Select/Select.js.map +1 -1
  85. package/dist/esm/components/Slider/Slider.js +5 -5
  86. package/dist/esm/components/Slider/Slider.js.map +1 -1
  87. package/dist/esm/components/Tabs/OverflowTab.js +5 -5
  88. package/dist/esm/components/Tabs/OverflowTab.js.map +1 -1
  89. package/dist/esm/components/TimePicker/TimePicker.d.ts.map +1 -1
  90. package/dist/esm/components/TimePicker/TimePicker.js +1 -1
  91. package/dist/esm/components/TimePicker/TimePicker.js.map +1 -1
  92. package/dist/esm/components/Tooltip/Tooltip.d.ts +8 -7
  93. package/dist/esm/components/Tooltip/Tooltip.d.ts.map +1 -1
  94. package/dist/esm/components/Tooltip/Tooltip.js +5 -4
  95. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  96. package/dist/esm/helpers/Popper/Popper.d.ts +10 -7
  97. package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
  98. package/dist/esm/helpers/Popper/Popper.js +11 -14
  99. package/dist/esm/helpers/Popper/Popper.js.map +1 -1
  100. package/dist/esm/next/components/Dropdown/Dropdown.d.ts.map +1 -1
  101. package/dist/esm/next/components/Dropdown/Dropdown.js +1 -1
  102. package/dist/esm/next/components/Dropdown/Dropdown.js.map +1 -1
  103. package/dist/esm/next/components/Select/Select.d.ts.map +1 -1
  104. package/dist/esm/next/components/Select/Select.js +1 -1
  105. package/dist/esm/next/components/Select/Select.js.map +1 -1
  106. package/dist/js/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
  107. package/dist/js/components/ClipboardCopy/ClipboardCopyButton.js +3 -2
  108. package/dist/js/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
  109. package/dist/js/components/ContextSelector/ContextSelector.d.ts.map +1 -1
  110. package/dist/js/components/ContextSelector/ContextSelector.js +1 -1
  111. package/dist/js/components/ContextSelector/ContextSelector.js.map +1 -1
  112. package/dist/js/components/DatePicker/DatePicker.d.ts.map +1 -1
  113. package/dist/js/components/DatePicker/DatePicker.js +6 -5
  114. package/dist/js/components/DatePicker/DatePicker.js.map +1 -1
  115. package/dist/js/components/Dropdown/DropdownWithContext.d.ts.map +1 -1
  116. package/dist/js/components/Dropdown/DropdownWithContext.js +4 -3
  117. package/dist/js/components/Dropdown/DropdownWithContext.js.map +1 -1
  118. package/dist/js/components/DualListSelector/DualListSelectorControl.js +1 -1
  119. package/dist/js/components/DualListSelector/DualListSelectorControl.js.map +1 -1
  120. package/dist/js/components/InputGroup/InputGroup.d.ts +3 -2
  121. package/dist/js/components/InputGroup/InputGroup.d.ts.map +1 -1
  122. package/dist/js/components/InputGroup/InputGroup.js +5 -4
  123. package/dist/js/components/InputGroup/InputGroup.js.map +1 -1
  124. package/dist/js/components/Label/Label.js +1 -1
  125. package/dist/js/components/Label/Label.js.map +1 -1
  126. package/dist/js/components/Nav/NavItem.d.ts.map +1 -1
  127. package/dist/js/components/Nav/NavItem.js +3 -3
  128. package/dist/js/components/Nav/NavItem.js.map +1 -1
  129. package/dist/js/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
  130. package/dist/js/components/Pagination/PaginationOptionsMenu.js +4 -4
  131. package/dist/js/components/Pagination/PaginationOptionsMenu.js.map +1 -1
  132. package/dist/js/components/Popover/Popover.d.ts +9 -8
  133. package/dist/js/components/Popover/Popover.d.ts.map +1 -1
  134. package/dist/js/components/Popover/Popover.js +4 -3
  135. package/dist/js/components/Popover/Popover.js.map +1 -1
  136. package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
  137. package/dist/js/components/SearchInput/SearchInput.js +5 -3
  138. package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
  139. package/dist/js/components/Select/Select.d.ts.map +1 -1
  140. package/dist/js/components/Select/Select.js +3 -2
  141. package/dist/js/components/Select/Select.js.map +1 -1
  142. package/dist/js/components/Slider/Slider.js +5 -5
  143. package/dist/js/components/Slider/Slider.js.map +1 -1
  144. package/dist/js/components/Tabs/OverflowTab.js +5 -5
  145. package/dist/js/components/Tabs/OverflowTab.js.map +1 -1
  146. package/dist/js/components/TimePicker/TimePicker.d.ts.map +1 -1
  147. package/dist/js/components/TimePicker/TimePicker.js +1 -1
  148. package/dist/js/components/TimePicker/TimePicker.js.map +1 -1
  149. package/dist/js/components/Tooltip/Tooltip.d.ts +8 -7
  150. package/dist/js/components/Tooltip/Tooltip.d.ts.map +1 -1
  151. package/dist/js/components/Tooltip/Tooltip.js +5 -4
  152. package/dist/js/components/Tooltip/Tooltip.js.map +1 -1
  153. package/dist/js/helpers/Popper/Popper.d.ts +10 -7
  154. package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
  155. package/dist/js/helpers/Popper/Popper.js +11 -14
  156. package/dist/js/helpers/Popper/Popper.js.map +1 -1
  157. package/dist/js/next/components/Dropdown/Dropdown.d.ts.map +1 -1
  158. package/dist/js/next/components/Dropdown/Dropdown.js +1 -1
  159. package/dist/js/next/components/Dropdown/Dropdown.js.map +1 -1
  160. package/dist/js/next/components/Select/Select.d.ts.map +1 -1
  161. package/dist/js/next/components/Select/Select.js +1 -1
  162. package/dist/js/next/components/Select/Select.js.map +1 -1
  163. package/dist/umd/react-core.min.js +3 -3
  164. package/helpers/Popper/Popper.d.ts +10 -7
  165. package/helpers/Popper/Popper.d.ts.map +1 -1
  166. package/helpers/Popper/Popper.js +11 -14
  167. package/helpers/Popper/Popper.js.map +1 -1
  168. package/next/components/Dropdown/Dropdown.d.ts.map +1 -1
  169. package/next/components/Dropdown/Dropdown.js +1 -1
  170. package/next/components/Dropdown/Dropdown.js.map +1 -1
  171. package/next/components/Select/Select.d.ts.map +1 -1
  172. package/next/components/Select/Select.js +1 -1
  173. package/next/components/Select/Select.js.map +1 -1
  174. package/package.json +2 -2
  175. package/src/components/ClipboardCopy/ClipboardCopyButton.tsx +30 -24
  176. package/src/components/ClipboardCopy/__tests__/Generated/__snapshots__/ClipboardCopy.test.tsx.snap +23 -27
  177. package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyButton.test.tsx.snap +23 -27
  178. package/src/components/ContextSelector/ContextSelector.tsx +2 -0
  179. package/src/components/DatePicker/DatePicker.tsx +7 -5
  180. package/src/components/DatePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap +732 -744
  181. package/src/components/Dropdown/DropdownWithContext.tsx +6 -1
  182. package/src/components/DualListSelector/DualListSelectorControl.tsx +1 -1
  183. package/src/components/InputGroup/InputGroup.tsx +7 -3
  184. package/src/components/Label/Label.tsx +1 -1
  185. package/src/components/LabelGroup/examples/LabelGroupEditableAddDropdown.tsx +10 -1
  186. package/src/components/LabelGroup/examples/LabelGroupEditableAddModal.tsx +4 -0
  187. package/src/components/Nav/NavItem.tsx +4 -3
  188. package/src/components/Nav/__tests__/__snapshots__/Nav.test.tsx.snap +7 -11
  189. package/src/components/Pagination/PaginationOptionsMenu.tsx +5 -3
  190. package/src/components/Pagination/__tests__/Generated/__snapshots__/PaginationOptionsMenu.test.tsx.snap +35 -39
  191. package/src/components/Pagination/__tests__/__snapshots__/Pagination.test.tsx.snap +694 -774
  192. package/src/components/Popover/Popover.tsx +14 -10
  193. package/src/components/Popover/examples/PopoverReactRef.tsx +1 -1
  194. package/src/components/Popover/examples/PopoverSelectorRef.tsx +1 -1
  195. package/src/components/ProgressStepper/examples/ProgressStepperHelpPopover.tsx +6 -6
  196. package/src/components/SearchInput/SearchInput.tsx +6 -2
  197. package/src/components/SearchInput/__tests__/__snapshots__/SearchInput.test.tsx.snap +411 -427
  198. package/src/components/Select/Select.tsx +4 -0
  199. package/src/components/Slider/Slider.tsx +5 -5
  200. package/src/components/Slider/_tests_/__snapshots__/Slider.test.tsx.snap +10 -14
  201. package/src/components/Tabs/OverflowTab.tsx +5 -5
  202. package/src/components/Tabs/examples/TabsHelp.tsx +1 -1
  203. package/src/components/Tabs/examples/TabsHelpAndClose.tsx +6 -2
  204. package/src/components/Tabs/examples/TabsTooltipReactRef.tsx +1 -1
  205. package/src/components/TimePicker/TimePicker.tsx +2 -0
  206. package/src/components/Tooltip/Tooltip.tsx +15 -11
  207. package/src/components/Tooltip/__tests__/Tooltip.test.tsx +6 -2
  208. package/src/components/Tooltip/__tests__/__snapshots__/Tooltip.test.tsx.snap +4 -12
  209. package/src/components/Tooltip/examples/TooltipReactRef.tsx +1 -1
  210. package/src/components/Tooltip/examples/TooltipSelectorRef.tsx +1 -1
  211. package/src/demos/ComposableMenu/examples/ComposableActionsMenu.tsx +11 -2
  212. package/src/demos/ComposableMenu/examples/ComposableApplicationLauncher.tsx +23 -14
  213. package/src/demos/ComposableMenu/examples/ComposableContextSelector.tsx +11 -2
  214. package/src/demos/ComposableMenu/examples/ComposableDateSelect.tsx +10 -1
  215. package/src/demos/ComposableMenu/examples/ComposableDrilldownMenu.tsx +10 -1
  216. package/src/demos/ComposableMenu/examples/ComposableDropdwnVariants.tsx +7 -5
  217. package/src/demos/ComposableMenu/examples/ComposableFlyout.tsx +11 -2
  218. package/src/demos/ComposableMenu/examples/ComposableMultipleTypeaheadSelect.tsx +12 -10
  219. package/src/demos/ComposableMenu/examples/ComposableOptionsMenuVariants.tsx +1 -1
  220. package/src/demos/ComposableMenu/examples/ComposableSimpleCheckboxSelect.tsx +4 -4
  221. package/src/demos/ComposableMenu/examples/ComposableSimpleDropdown.tsx +2 -2
  222. package/src/demos/ComposableMenu/examples/ComposableSimpleSelect.tsx +1 -1
  223. package/src/demos/ComposableMenu/examples/ComposableTreeViewMenu.tsx +22 -11
  224. package/src/demos/ComposableMenu/examples/ComposableTypeaheadSelect.tsx +11 -9
  225. package/src/demos/Filters/examples/FilterAttributeSearch.tsx +13 -5
  226. package/src/demos/Filters/examples/FilterCheckboxSelect.tsx +16 -7
  227. package/src/demos/Filters/examples/FilterFaceted.tsx +18 -9
  228. package/src/demos/Filters/examples/FilterMixedSelectGroup.tsx +11 -5
  229. package/src/demos/Filters/examples/FilterSameSelectGroup.tsx +10 -4
  230. package/src/demos/Filters/examples/FilterSearchInput.tsx +6 -4
  231. package/src/demos/Filters/examples/FilterSingleSelect.tsx +14 -5
  232. package/src/demos/PasswordGenerator.md +6 -2
  233. package/src/demos/SearchInput/SearchInput.md +5 -1
  234. package/src/demos/examples/TextInputGroup/AttributeValueFiltering.tsx +13 -4
  235. package/src/demos/examples/TextInputGroup/AutoCompleteSearch.tsx +5 -3
  236. package/src/helpers/Popper/Popper.tsx +31 -23
  237. package/src/next/components/Dropdown/Dropdown.tsx +2 -0
  238. 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.map(opt => Object.assign({}, opt)).filter(item => filterItems(item, treeViewItem));
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 <Popper trigger={toggle} popper={menu} isVisible={isOpen} popperMatchesTriggerWidth={false} />;
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 trigger={toggle} popper={menu} appendTo={containerRef.current || undefined} isVisible={isOpen} />
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 trigger={toggle} popper={menu} appendTo={containerRef.current || undefined} isVisible={isOpen} />
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
  />