@patternfly/react-core 5.0.0-alpha.87 → 5.0.0-alpha.88

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 (299) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/esm/components/AboutModal/package.json +1 -1
  3. package/dist/esm/components/Accordion/package.json +1 -1
  4. package/dist/esm/components/ActionList/package.json +1 -1
  5. package/dist/esm/components/Alert/package.json +1 -1
  6. package/dist/esm/components/Avatar/package.json +1 -1
  7. package/dist/esm/components/BackToTop/package.json +1 -1
  8. package/dist/esm/components/Backdrop/package.json +1 -1
  9. package/dist/esm/components/BackgroundImage/package.json +1 -1
  10. package/dist/esm/components/Badge/package.json +1 -1
  11. package/dist/esm/components/Banner/package.json +1 -1
  12. package/dist/esm/components/Brand/package.json +1 -1
  13. package/dist/esm/components/Breadcrumb/package.json +1 -1
  14. package/dist/esm/components/Button/package.json +1 -1
  15. package/dist/esm/components/CalendarMonth/package.json +1 -1
  16. package/dist/esm/components/Card/package.json +1 -1
  17. package/dist/esm/components/Checkbox/package.json +1 -1
  18. package/dist/esm/components/Chip/package.json +1 -1
  19. package/dist/esm/components/ClipboardCopy/package.json +1 -1
  20. package/dist/esm/components/CodeBlock/package.json +1 -1
  21. package/dist/esm/components/DataList/package.json +1 -1
  22. package/dist/esm/components/DatePicker/package.json +1 -1
  23. package/dist/esm/components/DescriptionList/package.json +1 -1
  24. package/dist/esm/components/Divider/package.json +1 -1
  25. package/dist/esm/components/DragDrop/package.json +1 -1
  26. package/dist/esm/components/Drawer/package.json +1 -1
  27. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  28. package/dist/esm/components/Dropdown/Dropdown.js +2 -4
  29. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  30. package/dist/esm/components/Dropdown/package.json +1 -1
  31. package/dist/esm/components/DualListSelector/package.json +1 -1
  32. package/dist/esm/components/EmptyState/package.json +1 -1
  33. package/dist/esm/components/ExpandableSection/package.json +1 -1
  34. package/dist/esm/components/FileUpload/package.json +1 -1
  35. package/dist/esm/components/Form/package.json +1 -1
  36. package/dist/esm/components/FormSelect/package.json +1 -1
  37. package/dist/esm/components/HelperText/package.json +1 -1
  38. package/dist/esm/components/Hint/package.json +1 -1
  39. package/dist/esm/components/Icon/package.json +1 -1
  40. package/dist/esm/components/InputGroup/package.json +1 -1
  41. package/dist/esm/components/JumpLinks/package.json +1 -1
  42. package/dist/esm/components/Label/package.json +1 -1
  43. package/dist/esm/components/LabelGroup/package.json +1 -1
  44. package/dist/esm/components/List/package.json +1 -1
  45. package/dist/esm/components/LoginPage/package.json +1 -1
  46. package/dist/esm/components/Masthead/package.json +1 -1
  47. package/dist/esm/components/Menu/package.json +1 -1
  48. package/dist/esm/components/MenuToggle/MenuToggle.d.ts +3 -1
  49. package/dist/esm/components/MenuToggle/MenuToggle.d.ts.map +1 -1
  50. package/dist/esm/components/MenuToggle/MenuToggle.js +1 -3
  51. package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
  52. package/dist/esm/components/MenuToggle/package.json +1 -1
  53. package/dist/esm/components/Modal/package.json +1 -1
  54. package/dist/esm/components/MultipleFileUpload/package.json +1 -1
  55. package/dist/esm/components/Nav/package.json +1 -1
  56. package/dist/esm/components/NotificationBadge/package.json +1 -1
  57. package/dist/esm/components/NotificationDrawer/package.json +1 -1
  58. package/dist/esm/components/NumberInput/package.json +1 -1
  59. package/dist/esm/components/OverflowMenu/package.json +1 -1
  60. package/dist/esm/components/Page/package.json +1 -1
  61. package/dist/esm/components/Pagination/package.json +1 -1
  62. package/dist/esm/components/Panel/package.json +1 -1
  63. package/dist/esm/components/Popover/package.json +1 -1
  64. package/dist/esm/components/Progress/package.json +1 -1
  65. package/dist/esm/components/ProgressStepper/package.json +1 -1
  66. package/dist/esm/components/Radio/package.json +1 -1
  67. package/dist/esm/components/SearchInput/package.json +1 -1
  68. package/dist/esm/components/Select/package.json +1 -1
  69. package/dist/esm/components/Sidebar/package.json +1 -1
  70. package/dist/esm/components/SimpleList/package.json +1 -1
  71. package/dist/esm/components/Skeleton/package.json +1 -1
  72. package/dist/esm/components/SkipToContent/package.json +1 -1
  73. package/dist/esm/components/Slider/package.json +1 -1
  74. package/dist/esm/components/Spinner/package.json +1 -1
  75. package/dist/esm/components/Switch/package.json +1 -1
  76. package/dist/esm/components/Tabs/package.json +1 -1
  77. package/dist/esm/components/Text/package.json +1 -1
  78. package/dist/esm/components/TextArea/package.json +1 -1
  79. package/dist/esm/components/TextInput/package.json +1 -1
  80. package/dist/esm/components/TextInputGroup/package.json +1 -1
  81. package/dist/esm/components/Tile/package.json +1 -1
  82. package/dist/esm/components/TimePicker/package.json +1 -1
  83. package/dist/esm/components/Timestamp/package.json +1 -1
  84. package/dist/esm/components/Title/package.json +1 -1
  85. package/dist/esm/components/ToggleGroup/package.json +1 -1
  86. package/dist/esm/components/Toolbar/package.json +1 -1
  87. package/dist/esm/components/Tooltip/package.json +1 -1
  88. package/dist/esm/components/TreeView/package.json +1 -1
  89. package/dist/esm/components/Truncate/package.json +1 -1
  90. package/dist/esm/components/Wizard/hooks/package.json +1 -1
  91. package/dist/esm/components/Wizard/package.json +1 -1
  92. package/dist/esm/components/package.json +1 -1
  93. package/dist/esm/deprecated/components/ApplicationLauncher/package.json +1 -1
  94. package/dist/esm/deprecated/components/ContextSelector/package.json +1 -1
  95. package/dist/esm/deprecated/components/Dropdown/package.json +1 -1
  96. package/dist/esm/deprecated/components/OptionsMenu/package.json +1 -1
  97. package/dist/esm/deprecated/components/PageHeader/package.json +1 -1
  98. package/dist/esm/deprecated/components/Select/package.json +1 -1
  99. package/dist/esm/deprecated/components/Wizard/package.json +1 -1
  100. package/dist/esm/deprecated/components/package.json +1 -1
  101. package/dist/esm/deprecated/package.json +1 -1
  102. package/dist/esm/helpers/Popper/thirdparty/popper-core/package.json +1 -1
  103. package/dist/esm/helpers/package.json +1 -1
  104. package/dist/esm/layouts/Bullseye/package.json +1 -1
  105. package/dist/esm/layouts/Flex/package.json +1 -1
  106. package/dist/esm/layouts/Gallery/package.json +1 -1
  107. package/dist/esm/layouts/Grid/package.json +1 -1
  108. package/dist/esm/layouts/Level/package.json +1 -1
  109. package/dist/esm/layouts/Split/package.json +1 -1
  110. package/dist/esm/layouts/Stack/package.json +1 -1
  111. package/dist/esm/layouts/package.json +1 -1
  112. package/dist/esm/next/components/package.json +1 -1
  113. package/dist/esm/next/package.json +1 -1
  114. package/dist/esm/package.json +1 -1
  115. package/dist/js/components/AboutModal/package.json +1 -1
  116. package/dist/js/components/Accordion/package.json +1 -1
  117. package/dist/js/components/ActionList/package.json +1 -1
  118. package/dist/js/components/Alert/package.json +1 -1
  119. package/dist/js/components/Avatar/package.json +1 -1
  120. package/dist/js/components/BackToTop/package.json +1 -1
  121. package/dist/js/components/Backdrop/package.json +1 -1
  122. package/dist/js/components/BackgroundImage/package.json +1 -1
  123. package/dist/js/components/Badge/package.json +1 -1
  124. package/dist/js/components/Banner/package.json +1 -1
  125. package/dist/js/components/Brand/package.json +1 -1
  126. package/dist/js/components/Breadcrumb/package.json +1 -1
  127. package/dist/js/components/Button/package.json +1 -1
  128. package/dist/js/components/CalendarMonth/package.json +1 -1
  129. package/dist/js/components/Card/package.json +1 -1
  130. package/dist/js/components/Checkbox/package.json +1 -1
  131. package/dist/js/components/Chip/package.json +1 -1
  132. package/dist/js/components/ClipboardCopy/package.json +1 -1
  133. package/dist/js/components/CodeBlock/package.json +1 -1
  134. package/dist/js/components/DataList/package.json +1 -1
  135. package/dist/js/components/DatePicker/package.json +1 -1
  136. package/dist/js/components/DescriptionList/package.json +1 -1
  137. package/dist/js/components/Divider/package.json +1 -1
  138. package/dist/js/components/DragDrop/package.json +1 -1
  139. package/dist/js/components/Drawer/package.json +1 -1
  140. package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
  141. package/dist/js/components/Dropdown/Dropdown.js +2 -4
  142. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  143. package/dist/js/components/Dropdown/package.json +1 -1
  144. package/dist/js/components/DualListSelector/package.json +1 -1
  145. package/dist/js/components/EmptyState/package.json +1 -1
  146. package/dist/js/components/ExpandableSection/package.json +1 -1
  147. package/dist/js/components/FileUpload/package.json +1 -1
  148. package/dist/js/components/Form/package.json +1 -1
  149. package/dist/js/components/FormSelect/package.json +1 -1
  150. package/dist/js/components/HelperText/package.json +1 -1
  151. package/dist/js/components/Hint/package.json +1 -1
  152. package/dist/js/components/Icon/package.json +1 -1
  153. package/dist/js/components/InputGroup/package.json +1 -1
  154. package/dist/js/components/JumpLinks/package.json +1 -1
  155. package/dist/js/components/Label/package.json +1 -1
  156. package/dist/js/components/LabelGroup/package.json +1 -1
  157. package/dist/js/components/List/package.json +1 -1
  158. package/dist/js/components/LoginPage/package.json +1 -1
  159. package/dist/js/components/Masthead/package.json +1 -1
  160. package/dist/js/components/Menu/package.json +1 -1
  161. package/dist/js/components/MenuToggle/MenuToggle.d.ts +3 -1
  162. package/dist/js/components/MenuToggle/MenuToggle.d.ts.map +1 -1
  163. package/dist/js/components/MenuToggle/MenuToggle.js +1 -3
  164. package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
  165. package/dist/js/components/MenuToggle/package.json +1 -1
  166. package/dist/js/components/Modal/package.json +1 -1
  167. package/dist/js/components/MultipleFileUpload/package.json +1 -1
  168. package/dist/js/components/Nav/package.json +1 -1
  169. package/dist/js/components/NotificationBadge/package.json +1 -1
  170. package/dist/js/components/NotificationDrawer/package.json +1 -1
  171. package/dist/js/components/NumberInput/package.json +1 -1
  172. package/dist/js/components/OverflowMenu/package.json +1 -1
  173. package/dist/js/components/Page/package.json +1 -1
  174. package/dist/js/components/Pagination/package.json +1 -1
  175. package/dist/js/components/Panel/package.json +1 -1
  176. package/dist/js/components/Popover/package.json +1 -1
  177. package/dist/js/components/Progress/package.json +1 -1
  178. package/dist/js/components/ProgressStepper/package.json +1 -1
  179. package/dist/js/components/Radio/package.json +1 -1
  180. package/dist/js/components/SearchInput/package.json +1 -1
  181. package/dist/js/components/Select/package.json +1 -1
  182. package/dist/js/components/Sidebar/package.json +1 -1
  183. package/dist/js/components/SimpleList/package.json +1 -1
  184. package/dist/js/components/Skeleton/package.json +1 -1
  185. package/dist/js/components/SkipToContent/package.json +1 -1
  186. package/dist/js/components/Slider/package.json +1 -1
  187. package/dist/js/components/Spinner/package.json +1 -1
  188. package/dist/js/components/Switch/package.json +1 -1
  189. package/dist/js/components/Tabs/package.json +1 -1
  190. package/dist/js/components/Text/package.json +1 -1
  191. package/dist/js/components/TextArea/package.json +1 -1
  192. package/dist/js/components/TextInput/package.json +1 -1
  193. package/dist/js/components/TextInputGroup/package.json +1 -1
  194. package/dist/js/components/Tile/package.json +1 -1
  195. package/dist/js/components/TimePicker/package.json +1 -1
  196. package/dist/js/components/Timestamp/package.json +1 -1
  197. package/dist/js/components/Title/package.json +1 -1
  198. package/dist/js/components/ToggleGroup/package.json +1 -1
  199. package/dist/js/components/Toolbar/package.json +1 -1
  200. package/dist/js/components/Tooltip/package.json +1 -1
  201. package/dist/js/components/TreeView/package.json +1 -1
  202. package/dist/js/components/Truncate/package.json +1 -1
  203. package/dist/js/components/Wizard/hooks/package.json +1 -1
  204. package/dist/js/components/Wizard/package.json +1 -1
  205. package/dist/js/components/package.json +1 -1
  206. package/dist/js/deprecated/components/ApplicationLauncher/package.json +1 -1
  207. package/dist/js/deprecated/components/ContextSelector/package.json +1 -1
  208. package/dist/js/deprecated/components/Dropdown/package.json +1 -1
  209. package/dist/js/deprecated/components/OptionsMenu/package.json +1 -1
  210. package/dist/js/deprecated/components/PageHeader/package.json +1 -1
  211. package/dist/js/deprecated/components/Select/package.json +1 -1
  212. package/dist/js/deprecated/components/Wizard/package.json +1 -1
  213. package/dist/js/deprecated/components/package.json +1 -1
  214. package/dist/js/deprecated/package.json +1 -1
  215. package/dist/js/helpers/Popper/thirdparty/popper-core/package.json +1 -1
  216. package/dist/js/helpers/package.json +1 -1
  217. package/dist/js/layouts/Bullseye/package.json +1 -1
  218. package/dist/js/layouts/Flex/package.json +1 -1
  219. package/dist/js/layouts/Gallery/package.json +1 -1
  220. package/dist/js/layouts/Grid/package.json +1 -1
  221. package/dist/js/layouts/Level/package.json +1 -1
  222. package/dist/js/layouts/Split/package.json +1 -1
  223. package/dist/js/layouts/Stack/package.json +1 -1
  224. package/dist/js/layouts/package.json +1 -1
  225. package/dist/js/next/components/package.json +1 -1
  226. package/dist/js/next/package.json +1 -1
  227. package/dist/js/package.json +1 -1
  228. package/dist/umd/react-core.min.js +1 -1
  229. package/package.json +2 -2
  230. package/src/components/ActionList/examples/ActionList.md +1 -6
  231. package/src/components/ActionList/examples/ActionListSingleGroup.tsx +50 -38
  232. package/src/components/Breadcrumb/examples/Breadcrumb.md +1 -5
  233. package/src/components/Breadcrumb/examples/BreadcrumbDropdown.tsx +34 -21
  234. package/src/components/Card/examples/Card.md +9 -14
  235. package/src/components/Card/examples/CardExpandable.tsx +44 -31
  236. package/src/components/Card/examples/CardExpandableWithIcon.tsx +50 -29
  237. package/src/components/Card/examples/CardHeaderInCardHead.tsx +50 -29
  238. package/src/components/Card/examples/CardLegacySelectable.tsx +52 -33
  239. package/src/components/Card/examples/CardOnlyActionsInCardHead.tsx +48 -29
  240. package/src/components/Card/examples/CardSelectable.tsx +52 -36
  241. package/src/components/Card/examples/CardWithImageAndActions.tsx +51 -29
  242. package/src/components/DataList/__tests__/DataList.test.tsx +10 -11
  243. package/src/components/DataList/__tests__/__snapshots__/DataList.test.tsx.snap +86 -19
  244. package/src/components/DataList/examples/DataList.md +1 -6
  245. package/src/components/DataList/examples/DataListActions.tsx +39 -23
  246. package/src/components/DataList/examples/DataListCheckboxes.tsx +106 -61
  247. package/src/components/DataList/examples/DataListExpandable.tsx +103 -55
  248. package/src/components/DataList/examples/DataListMixedExpandable.tsx +105 -57
  249. package/src/components/DataList/examples/DataListSelectableRows.tsx +71 -39
  250. package/src/components/DataList/examples/DataListWidthModifiers.tsx +81 -39
  251. package/src/components/Dropdown/Dropdown.tsx +10 -13
  252. package/src/components/Dropdown/__tests__/__snapshots__/Dropdown.test.tsx.snap +29 -32
  253. package/src/components/Dropdown/examples/Dropdown.md +0 -1
  254. package/src/components/Dropdown/examples/DropdownBasic.tsx +22 -16
  255. package/src/components/Dropdown/examples/DropdownWithDescriptions.tsx +13 -18
  256. package/src/components/Dropdown/examples/DropdownWithGroups.tsx +30 -16
  257. package/src/components/Dropdown/examples/DropdownWithKebabToggle.tsx +22 -16
  258. package/src/components/DualListSelector/examples/DualListSelector.md +1 -5
  259. package/src/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +60 -36
  260. package/src/components/Hint/examples/Hint.md +1 -6
  261. package/src/components/Hint/examples/HintBasicWithTitle.tsx +58 -32
  262. package/src/components/Hint/examples/HintBasicWithoutTitle.tsx +57 -32
  263. package/src/components/InputGroup/examples/InputGroup.md +0 -5
  264. package/src/components/InputGroup/examples/InputGroupWithDropdown.tsx +32 -24
  265. package/src/components/Menu/examples/Menu.md +1 -5
  266. package/src/components/Menu/examples/MenuWithDrilldownBreadcrumbs.tsx +120 -89
  267. package/src/components/MenuToggle/MenuToggle.tsx +4 -3
  268. package/src/components/MenuToggle/__tests__/__snapshots__/MenuToggle.test.tsx.snap +10 -18
  269. package/src/components/MenuToggle/examples/MenuToggle.md +35 -5
  270. package/src/components/Modal/examples/Modal.md +0 -5
  271. package/src/components/Modal/examples/ModalWithDropdown.tsx +40 -34
  272. package/src/components/NotificationDrawer/examples/NotificationDrawer.md +1 -8
  273. package/src/components/NotificationDrawer/examples/NotificationDrawerBasic.tsx +145 -72
  274. package/src/components/NotificationDrawer/examples/NotificationDrawerGroups.tsx +187 -131
  275. package/src/components/Toolbar/examples/Toolbar.md +0 -9
  276. package/src/components/Toolbar/examples/ToolbarStacked.tsx +75 -58
  277. package/src/components/Toolbar/examples/ToolbarWithFilters.tsx +57 -88
  278. package/src/components/TreeView/examples/TreeView.md +42 -30
  279. package/src/demos/AlertGroup.md +1 -6
  280. package/src/demos/Card/Card.md +75 -80
  281. package/src/demos/CardDemos.md +40 -34
  282. package/src/demos/DataListDemo.md +130 -70
  283. package/src/demos/DatePicker/DatePicker.md +1 -89
  284. package/src/demos/DateTimePicker.md +90 -5
  285. package/src/demos/Masthead.md +1 -7
  286. package/src/demos/Nav.md +213 -155
  287. package/src/demos/NotificationDrawer/NotificationDrawer.md +485 -355
  288. package/src/demos/Page.md +1 -7
  289. package/src/demos/PrimaryDetail.md +193 -211
  290. package/src/demos/Tabs.md +0 -1
  291. package/src/demos/Toolbar.md +169 -190
  292. package/src/demos/examples/AlertGroup/AlertGroupToastWithNotificationDrawer.tsx +61 -49
  293. package/src/demos/examples/DashboardHeader.js +96 -81
  294. package/src/demos/examples/DateTimePicker/DateTimePicker.tsx +29 -26
  295. package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +84 -69
  296. package/src/demos/examples/Page/PageStickySectionBreadcrumb.tsx +90 -74
  297. package/src/demos/examples/Page/PageStickySectionGroup.tsx +90 -74
  298. package/src/demos/examples/Page/PageStickySectionGroupAlternate.tsx +90 -74
  299. package/src/demos/examples/Tabs/TabsAndTable.tsx +12 -6
@@ -11,16 +11,7 @@ import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-
11
11
  import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
12
12
  import imgBrand from '@patternfly/react-core/src/components/Brand/examples/pfLogo.svg';
13
13
  import imgAvatar from '@patternfly/react-core/src/components/Avatar/examples/avatarImg.svg';
14
- import {
15
- Dropdown as DropdownDeprecated,
16
- DropdownGroup as DropdownGroupDeprecated,
17
- DropdownPosition,
18
- DropdownDirection,
19
- DropdownToggle,
20
- DropdownItem as DropdownItemDeprecated,
21
- DropdownSeparator,
22
- KebabToggle
23
- } from '@patternfly/react-core/deprecated';
14
+ import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
24
15
 
25
16
  ## Demos
26
17
 
@@ -40,6 +31,10 @@ import {
40
31
  BreadcrumbItem,
41
32
  Button,
42
33
  ButtonVariant,
34
+ Divider,
35
+ Dropdown,
36
+ DropdownItem,
37
+ DropdownList,
43
38
  EmptyState,
44
39
  EmptyStateActions,
45
40
  EmptyStateBody,
@@ -47,6 +42,7 @@ import {
47
42
  EmptyStateHeader,
48
43
  EmptyStateFooter,
49
44
  EmptyStateVariant,
45
+ MenuToggle,
50
46
  Nav,
51
47
  NavItem,
52
48
  NavList,
@@ -78,20 +74,11 @@ import {
78
74
  ToolbarGroup,
79
75
  ToolbarContent
80
76
  } from '@patternfly/react-core';
81
- import {
82
- Dropdown as DropdownDeprecated,
83
- DropdownGroup as DropdownGroupDeprecated,
84
- DropdownPosition,
85
- DropdownDirection,
86
- DropdownToggle,
87
- DropdownItem as DropdownItemDeprecated,
88
- DropdownSeparator,
89
- KebabToggle
90
- } from '@patternfly/react-core/deprecated';
91
77
  import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
92
78
  import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
93
79
  import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
94
80
  import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
81
+ import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
95
82
  import BarsIcon from '@patternfly/react-icons/dist/js/icons/bars-icon';
96
83
  import imgBrand from '@patternfly/react-core/src/components/Brand/examples/pfLogo.svg';
97
84
  import imgAvatar from '@patternfly/react-core/src/components/Avatar/examples/avatarImg.svg';
@@ -111,29 +98,29 @@ class BasicNotificationDrawer extends React.Component {
111
98
  'notification-2': true
112
99
  },
113
100
  showNotifications: true,
114
- isActionsMenuOpen: null
101
+ isActionsMenuOpen: {}
115
102
  };
116
- this.onDropdownToggle = (_event, isDropdownOpen) => {
117
- this.setState({
118
- isDropdownOpen
119
- });
103
+ this.onDropdownToggle = () => {
104
+ this.setState((prevState) => ({
105
+ isDropdownOpen: !prevState.isDropdownOpen
106
+ }));
120
107
  };
121
108
 
122
- this.onDropdownSelect = (event) => {
109
+ this.onDropdownSelect = () => {
123
110
  this.setState({
124
- isDropdownOpen: !this.state.isDropdownOpen
111
+ isDropdownOpen: false
125
112
  });
126
113
  };
127
114
 
128
- this.onKebabDropdownToggle = (_event, isKebabDropdownOpen) => {
129
- this.setState({
130
- isKebabDropdownOpen
131
- });
115
+ this.onKebabDropdownToggle = () => {
116
+ this.setState((prevState) => ({
117
+ isKebabDropdownOpen: !prevState.isKebabDropdownOpen
118
+ }));
132
119
  };
133
120
 
134
- this.onKebabDropdownSelect = (event) => {
121
+ this.onKebabDropdownSelect = () => {
135
122
  this.setState({
136
- isKebabDropdownOpen: !this.state.isKebabDropdownOpen
123
+ isKebabDropdownOpen: false
137
124
  });
138
125
  };
139
126
 
@@ -151,15 +138,15 @@ class BasicNotificationDrawer extends React.Component {
151
138
  });
152
139
  };
153
140
 
154
- this.onToggle = (id, isOpen) => {
155
- this.setState({
156
- isActionsMenuOpen: { [id]: isOpen }
157
- });
141
+ this.onToggle = (id) => {
142
+ this.setState((prevState) => ({
143
+ isActionsMenuOpen: { [id]: !prevState.isActionsMenuOpen[id] }
144
+ }));
158
145
  };
159
146
 
160
- this.onSelect = (event) => {
147
+ this.onSelect = () => {
161
148
  this.setState({
162
- isActionsMenuOpen: null
149
+ isActionsMenuOpen: {}
163
150
  });
164
151
  };
165
152
 
@@ -233,23 +220,23 @@ class BasicNotificationDrawer extends React.Component {
233
220
  </NavList>
234
221
  </Nav>
235
222
  );
236
- const kebabDropdownItems = [
237
- <DropdownItemDeprecated>
238
- <CogIcon /> Settings
239
- </DropdownItemDeprecated>,
240
- <DropdownItemDeprecated>
241
- <HelpIcon /> Help
242
- </DropdownItemDeprecated>
243
- ];
244
- const userDropdownItems = [
245
- <DropdownGroupDeprecated key="group 2">
246
- <DropdownItemDeprecated key="group 2 profile">My profile</DropdownItemDeprecated>
247
- <DropdownItemDeprecated key="group 2 user" component="button">
248
- User management
249
- </DropdownItemDeprecated>
250
- <DropdownItemDeprecated key="group 2 logout">Logout</DropdownItemDeprecated>
251
- </DropdownGroupDeprecated>
252
- ];
223
+ const kebabDropdownItems = (
224
+ <>
225
+ <DropdownItem>
226
+ <CogIcon /> Settings
227
+ </DropdownItem>
228
+ <DropdownItem>
229
+ <HelpIcon /> Help
230
+ </DropdownItem>
231
+ </>
232
+ );
233
+ const userDropdownItems = (
234
+ <>
235
+ <DropdownItem key="group 2 profile">My profile</DropdownItem>
236
+ <DropdownItem key="group 2 user">User management</DropdownItem>
237
+ <DropdownItem key="group 2 logout">Logout</DropdownItem>
238
+ </>
239
+ );
253
240
  const headerToolbar = (
254
241
  <Toolbar isFullHeight>
255
242
  <ToolbarContent>
@@ -290,30 +277,48 @@ class BasicNotificationDrawer extends React.Component {
290
277
  lg: 'hidden'
291
278
  }} /** this kebab dropdown replaces the icon buttons and is hidden for desktop sizes */
292
279
  >
293
- <DropdownDeprecated
294
- isPlain
295
- position="right"
296
- onSelect={this.onKebabDropdownSelect}
297
- toggle={<KebabToggle onToggle={this.onKebabDropdownToggle} />}
280
+ <Dropdown
298
281
  isOpen={isKebabDropdownOpen}
299
- dropdownItems={kebabDropdownItems}
300
- />
282
+ onSelect={this.onKebabDropdownSelect}
283
+ onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
284
+ popperProps={{ position: 'right' }}
285
+ toggle={(toggleRef) => (
286
+ <MenuToggle
287
+ ref={toggleRef}
288
+ isExpanded={isKebabDropdownOpen}
289
+ onClick={this.onKebabDropdownToggle}
290
+ variant="plain"
291
+ aria-label="Settings and help"
292
+ >
293
+ <EllipsisVIcon aria-hidden="true" />
294
+ </MenuToggle>
295
+ )}
296
+ >
297
+ <DropdownList>{kebabDropdownItems}</DropdownList>
298
+ </Dropdown>
301
299
  </ToolbarItem>
302
300
  <ToolbarItem
303
301
  visibility={{ default: 'hidden', md: 'visible' }} /** this user dropdown is hidden on mobile sizes */
304
302
  >
305
- <DropdownDeprecated
306
- position="right"
307
- onSelect={this.onDropdownSelect}
303
+ <Dropdown
308
304
  isOpen={isDropdownOpen}
309
- isFullHeight
310
- toggle={
311
- <DropdownToggle icon={<Avatar src={imgAvatar} alt="Avatar" />} onToggle={this.onDropdownToggle}>
305
+ onSelect={this.onDropdownSelect}
306
+ onOpenChange={(isOpen) => this.setState({ isDropdownOpen: isOpen })}
307
+ popperProps={{ position: 'right' }}
308
+ toggle={(toggleRef) => (
309
+ <MenuToggle
310
+ ref={toggleRef}
311
+ isExpanded={isDropdownOpen}
312
+ onClick={this.onDropdownToggle}
313
+ icon={<Avatar src={imgAvatar} alt="" />}
314
+ isFullHeight
315
+ >
312
316
  John Smith
313
- </DropdownToggle>
314
- }
315
- dropdownItems={userDropdownItems}
316
- />
317
+ </MenuToggle>
318
+ )}
319
+ >
320
+ <DropdownList>{userDropdownItems}</DropdownList>
321
+ </Dropdown>
317
322
  </ToolbarItem>
318
323
  </ToolbarGroup>
319
324
  </ToolbarGroup>
@@ -357,46 +362,61 @@ class BasicNotificationDrawer extends React.Component {
357
362
 
358
363
  const drawerContent = 'Panel content';
359
364
 
360
- const notificationDrawerActions = [
361
- <DropdownItemDeprecated key="markAllRead" onClick={this.markAllRead} component="button">
362
- Mark all read
363
- </DropdownItemDeprecated>,
364
- <DropdownItemDeprecated key="clearAll" onClick={() => this.showNotifications(false)} component="button">
365
- Clear all
366
- </DropdownItemDeprecated>,
367
- <DropdownItemDeprecated key="unclearLast" onClick={() => this.showNotifications(true)} component="button">
368
- Unclear last
369
- </DropdownItemDeprecated>,
370
- <DropdownItemDeprecated key="settings" component="button">
371
- Settings
372
- </DropdownItemDeprecated>
373
- ];
374
-
375
- const notificationDrawerDropdownItems = [
376
- <DropdownItemDeprecated key="link">Link</DropdownItemDeprecated>,
377
- <DropdownItemDeprecated key="action" component="button">
378
- Action
379
- </DropdownItemDeprecated>,
380
- <DropdownSeparator key="separator" />,
381
- <DropdownItemDeprecated key="disabled link" isDisabled>
382
- Disabled Link
383
- </DropdownItemDeprecated>
384
- ];
385
-
365
+ const notificationDrawerActions = (
366
+ <>
367
+ <DropdownItem key="markAllRead" onClick={this.markAllRead}>
368
+ Mark all read
369
+ </DropdownItem>
370
+ <DropdownItem key="clearAll" onClick={() => this.showNotifications(false)}>
371
+ Clear all
372
+ </DropdownItem>
373
+ <DropdownItem key="unclearLast" onClick={() => this.showNotifications(true)}>
374
+ Unclear last
375
+ </DropdownItem>
376
+ <DropdownItem key="settings">Settings</DropdownItem>
377
+ </>
378
+ );
379
+ const notificationDrawerDropdownItems = (
380
+ <>
381
+ <DropdownItem
382
+ key="link"
383
+ to="#"
384
+ // Prevent default onClick behavior for demo purposes
385
+ onClick={(ev) => ev.preventDefault()}
386
+ >
387
+ Link
388
+ </DropdownItem>
389
+ <DropdownItem key="action">Action</DropdownItem>
390
+ <Divider component="li" key="separator" />
391
+ <DropdownItem key="disabled link" isDisabled>
392
+ Disabled Link
393
+ </DropdownItem>
394
+ </>
395
+ );
386
396
  const notificationDrawer = (
387
397
  <NotificationDrawer ref={this.drawerRef}>
388
- <NotificationDrawerHeader count={this.getNumberUnread()} onClose={(event) => this.onCloseNotificationDrawer(event)}>
389
- <DropdownDeprecated
398
+ <NotificationDrawerHeader count={this.getNumberUnread()} onClose={this.onCloseNotificationDrawer}>
399
+ <Dropdown
390
400
  onSelect={this.onSelect}
391
- toggle={
392
- <KebabToggle onToggle={(_event, isOpen) => this.onToggle('toggle-id-0', isOpen)} id="toggle-id-0" />
393
- }
394
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-0']}
395
- isPlain
396
- dropdownItems={notificationDrawerActions}
401
+ isOpen={isActionsMenuOpen['toggle-id-0'] || false}
397
402
  id="notification-0"
398
- position={DropdownPosition.right}
399
- />
403
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
404
+ popperProps={{ position: 'right' }}
405
+ toggle={(toggleRef) => (
406
+ <MenuToggle
407
+ ref={toggleRef}
408
+ id="toggle-id-0"
409
+ aria-label="Notification drawer actions"
410
+ variant="plain"
411
+ onClick={() => this.onToggle('toggle-id-0')}
412
+ isExpanded={isActionsMenuOpen['toggle-id-0'] || false}
413
+ >
414
+ <EllipsisVIcon aria-hidden="true" />
415
+ </MenuToggle>
416
+ )}
417
+ >
418
+ <DropdownList>{notificationDrawerActions}</DropdownList>
419
+ </Dropdown>
400
420
  </NotificationDrawerHeader>
401
421
  <NotificationDrawerBody>
402
422
  {showNotifications && (
@@ -411,20 +431,27 @@ class BasicNotificationDrawer extends React.Component {
411
431
  title="Unread info notification title"
412
432
  srTitle="Info notification:"
413
433
  >
414
- <DropdownDeprecated
415
- position={DropdownPosition.right}
434
+ <Dropdown
416
435
  onSelect={this.onSelect}
417
- toggle={
418
- <KebabToggle
419
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-1', isOpen)}
420
- id="toggle-id-1"
421
- />
422
- }
423
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-1']}
424
- isPlain
425
- dropdownItems={notificationDrawerDropdownItems}
436
+ isOpen={isActionsMenuOpen['toggle-id-1'] || false}
426
437
  id="notification-1"
427
- />
438
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
439
+ popperProps={{ position: 'right' }}
440
+ toggle={(toggleRef) => (
441
+ <MenuToggle
442
+ ref={toggleRef}
443
+ id="toggle-id-1"
444
+ aria-label="Notification drawer actions"
445
+ variant="plain"
446
+ onClick={() => this.onToggle('toggle-id-1')}
447
+ isExpanded={isActionsMenuOpen['toggle-id-1'] || false}
448
+ >
449
+ <EllipsisVIcon aria-hidden="true" />
450
+ </MenuToggle>
451
+ )}
452
+ >
453
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
454
+ </Dropdown>
428
455
  </NotificationDrawerListItemHeader>
429
456
  <NotificationDrawerListItemBody timestamp="5 minutes ago">
430
457
  This is an info notification description.
@@ -440,20 +467,27 @@ class BasicNotificationDrawer extends React.Component {
440
467
  title="Unread danger notification title. This is a long title to show how the title will wrap if it is long and wraps to multiple lines."
441
468
  srTitle="Danger notification:"
442
469
  >
443
- <DropdownDeprecated
444
- position={DropdownPosition.right}
470
+ <Dropdown
445
471
  onSelect={this.onSelect}
446
- toggle={
447
- <KebabToggle
448
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-2', isOpen)}
449
- id="toggle-id-2"
450
- />
451
- }
452
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-2']}
453
- isPlain
454
- dropdownItems={notificationDrawerDropdownItems}
472
+ isOpen={isActionsMenuOpen['toggle-id-2'] || false}
455
473
  id="notification-2"
456
- />
474
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
475
+ popperProps={{ position: 'right' }}
476
+ toggle={(toggleRef) => (
477
+ <MenuToggle
478
+ ref={toggleRef}
479
+ id="toggle-id-2"
480
+ aria-label="Notification drawer actions"
481
+ variant="plain"
482
+ onClick={() => this.onToggle('toggle-id-2')}
483
+ isExpanded={isActionsMenuOpen['toggle-id-2'] || false}
484
+ >
485
+ <EllipsisVIcon aria-hidden="true" />
486
+ </MenuToggle>
487
+ )}
488
+ >
489
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
490
+ </Dropdown>
457
491
  </NotificationDrawerListItemHeader>
458
492
  <NotificationDrawerListItemBody timestamp="10 minutes ago">
459
493
  This is a danger notification description. This is a long description to show how the title will wrap
@@ -470,20 +504,27 @@ class BasicNotificationDrawer extends React.Component {
470
504
  title="Read warning notification title"
471
505
  srTitle="Warning notification:"
472
506
  >
473
- <DropdownDeprecated
474
- position={DropdownPosition.right}
507
+ <Dropdown
475
508
  onSelect={this.onSelect}
476
- toggle={
477
- <KebabToggle
478
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-3', isOpen)}
479
- id="toggle-id-3"
480
- />
481
- }
482
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-3']}
483
- isPlain
484
- dropdownItems={notificationDrawerDropdownItems}
509
+ isOpen={isActionsMenuOpen['toggle-id-3'] || false}
485
510
  id="notification-3"
486
- />
511
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
512
+ popperProps={{ position: 'right' }}
513
+ toggle={(toggleRef) => (
514
+ <MenuToggle
515
+ ref={toggleRef}
516
+ id="toggle-id-3"
517
+ aria-label="Notification drawer actions"
518
+ variant="plain"
519
+ onClick={() => this.onToggle('toggle-id-3')}
520
+ isExpanded={isActionsMenuOpen['toggle-id-3'] || false}
521
+ >
522
+ <EllipsisVIcon aria-hidden="true" />
523
+ </MenuToggle>
524
+ )}
525
+ >
526
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
527
+ </Dropdown>
487
528
  </NotificationDrawerListItemHeader>
488
529
  <NotificationDrawerListItemBody timestamp="20 minutes ago">
489
530
  This is a warning notification description.
@@ -499,21 +540,27 @@ class BasicNotificationDrawer extends React.Component {
499
540
  title="Read success notification title"
500
541
  srTitle="Success notification:"
501
542
  >
502
- <DropdownDeprecated
503
- position={DropdownPosition.right}
504
- direction={DropdownDirection.up}
543
+ <Dropdown
505
544
  onSelect={this.onSelect}
506
- toggle={
507
- <KebabToggle
508
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-4', isOpen)}
509
- id="toggle-id-4"
510
- />
511
- }
512
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-4']}
513
- isPlain
514
- dropdownItems={notificationDrawerDropdownItems}
545
+ isOpen={isActionsMenuOpen['toggle-id-4'] || false}
515
546
  id="notification-4"
516
- />
547
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
548
+ popperProps={{ position: 'right' }}
549
+ toggle={(toggleRef) => (
550
+ <MenuToggle
551
+ ref={toggleRef}
552
+ id="toggle-id-4"
553
+ aria-label="Notification drawer actions"
554
+ variant="plain"
555
+ onClick={() => this.onToggle('toggle-id-4')}
556
+ isExpanded={isActionsMenuOpen['toggle-id-4'] || false}
557
+ >
558
+ <EllipsisVIcon aria-hidden="true" />
559
+ </MenuToggle>
560
+ )}
561
+ >
562
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
563
+ </Dropdown>
517
564
  </NotificationDrawerListItemHeader>
518
565
  <NotificationDrawerListItemBody timestamp="30 minutes ago">
519
566
  This is a success notification description.
@@ -587,6 +634,10 @@ import {
587
634
  BreadcrumbItem,
588
635
  Button,
589
636
  ButtonVariant,
637
+ Divider,
638
+ Dropdown,
639
+ DropdownItem,
640
+ DropdownList,
590
641
  EmptyState,
591
642
  EmptyStateActions,
592
643
  EmptyStateBody,
@@ -594,6 +645,7 @@ import {
594
645
  EmptyStateHeader,
595
646
  EmptyStateFooter,
596
647
  EmptyStateVariant,
648
+ MenuToggle,
597
649
  Nav,
598
650
  NavItem,
599
651
  NavList,
@@ -627,22 +679,13 @@ import {
627
679
  ToolbarGroup,
628
680
  ToolbarContent
629
681
  } from '@patternfly/react-core';
630
- import {
631
- Dropdown as DropdownDeprecated,
632
- DropdownGroup as DropdownGroupDeprecated,
633
- DropdownPosition,
634
- DropdownDirection,
635
- DropdownToggle,
636
- DropdownItem as DropdownItemDeprecated,
637
- DropdownSeparator,
638
- KebabToggle
639
- } from '@patternfly/react-core/deprecated';
640
682
  import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
641
683
  import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
642
684
  import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
643
685
  import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
644
686
  import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
645
687
  import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
688
+ import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
646
689
  import imgBrand from '@patternfly/react-core/src/components/Brand/examples/pfLogo.svg';
647
690
  import imgAvatar from '@patternfly/react-core/src/components/Avatar/examples/avatarImg.svg';
648
691
 
@@ -658,7 +701,7 @@ class GroupedNotificationDrawer extends React.Component {
658
701
  firstDrawerGroupExpanded: false,
659
702
  secondDrawerGroupExpanded: true,
660
703
  thirdDrawerGroupExpanded: false,
661
- isActionsMenuOpen: null,
704
+ isActionsMenuOpen: {},
662
705
  showNotifications: true,
663
706
  isUnreadMap: {
664
707
  'group-1': {
@@ -672,27 +715,27 @@ class GroupedNotificationDrawer extends React.Component {
672
715
  'group-3': null
673
716
  }
674
717
  };
675
- this.onDropdownToggle = (_event, isDropdownOpen) => {
676
- this.setState({
677
- isDropdownOpen
678
- });
718
+ this.onDropdownToggle = () => {
719
+ this.setState((prevState) => ({
720
+ isDropdownOpen: !prevState.isDropdownOpen
721
+ }));
679
722
  };
680
723
 
681
- this.onDropdownSelect = (event) => {
724
+ this.onDropdownSelect = () => {
682
725
  this.setState({
683
- isDropdownOpen: !this.state.isDropdownOpen
726
+ isDropdownOpen: false
684
727
  });
685
728
  };
686
729
 
687
- this.onKebabDropdownToggle = (_event, isKebabDropdownOpen) => {
688
- this.setState({
689
- isKebabDropdownOpen
690
- });
730
+ this.onKebabDropdownToggle = () => {
731
+ this.setState((prevState) => ({
732
+ isKebabDropdownOpen: !prevState.isKebabDropdownOpen
733
+ }));
691
734
  };
692
735
 
693
- this.onKebabDropdownSelect = (event) => {
736
+ this.onKebabDropdownSelect = () => {
694
737
  this.setState({
695
- isKebabDropdownOpen: !this.state.isKebabDropdownOpen
738
+ isKebabDropdownOpen: false
696
739
  });
697
740
  };
698
741
 
@@ -710,15 +753,15 @@ class GroupedNotificationDrawer extends React.Component {
710
753
  });
711
754
  };
712
755
 
713
- this.onToggle = (id, isOpen) => {
714
- this.setState({
715
- isActionsMenuOpen: { [id]: isOpen }
716
- });
756
+ this.onToggle = (id) => {
757
+ this.setState((prevState) => ({
758
+ isActionsMenuOpen: { [id]: !prevState.isActionsMenuOpen[id] }
759
+ }));
717
760
  };
718
761
 
719
- this.onSelect = (event) => {
762
+ this.onSelect = () => {
720
763
  this.setState({
721
- isActionsMenuOpen: null
764
+ isActionsMenuOpen: {}
722
765
  });
723
766
  };
724
767
 
@@ -835,23 +878,23 @@ class GroupedNotificationDrawer extends React.Component {
835
878
  </NavList>
836
879
  </Nav>
837
880
  );
838
- const kebabDropdownItems = [
839
- <DropdownItemDeprecated>
840
- <CogIcon /> Settings
841
- </DropdownItemDeprecated>,
842
- <DropdownItemDeprecated>
843
- <HelpIcon /> Help
844
- </DropdownItemDeprecated>
845
- ];
846
- const userDropdownItems = [
847
- <DropdownGroupDeprecated key="group 2">
848
- <DropdownItemDeprecated key="group 2 profile">My profile</DropdownItemDeprecated>
849
- <DropdownItemDeprecated key="group 2 user" component="button">
850
- User management
851
- </DropdownItemDeprecated>
852
- <DropdownItemDeprecated key="group 2 logout">Logout</DropdownItemDeprecated>
853
- </DropdownGroupDeprecated>
854
- ];
881
+ const kebabDropdownItems = (
882
+ <>
883
+ <DropdownItem>
884
+ <CogIcon /> Settings
885
+ </DropdownItem>
886
+ <DropdownItem>
887
+ <HelpIcon /> Help
888
+ </DropdownItem>
889
+ </>
890
+ );
891
+ const userDropdownItems = (
892
+ <>
893
+ <DropdownItem key="group 2 profile">My profile</DropdownItem>
894
+ <DropdownItem key="group 2 user">User management</DropdownItem>
895
+ <DropdownItem key="group 2 logout">Logout</DropdownItem>
896
+ </>
897
+ );
855
898
  const headerToolbar = (
856
899
  <Toolbar isFullHeight>
857
900
  <ToolbarContent>
@@ -892,30 +935,48 @@ class GroupedNotificationDrawer extends React.Component {
892
935
  lg: 'hidden'
893
936
  }} /** this kebab dropdown replaces the icon buttons and is hidden for desktop sizes */
894
937
  >
895
- <DropdownDeprecated
896
- isPlain
897
- position="right"
898
- onSelect={this.onKebabDropdownSelect}
899
- toggle={<KebabToggle onToggle={this.onKebabDropdownToggle} />}
938
+ <Dropdown
900
939
  isOpen={isKebabDropdownOpen}
901
- dropdownItems={kebabDropdownItems}
902
- />
940
+ onSelect={this.onKebabDropdownSelect}
941
+ onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
942
+ popperProps={{ position: 'right' }}
943
+ toggle={(toggleRef) => (
944
+ <MenuToggle
945
+ ref={toggleRef}
946
+ isExpanded={isKebabDropdownOpen}
947
+ onClick={this.onKebabDropdownToggle}
948
+ variant="plain"
949
+ aria-label="Settings and help"
950
+ >
951
+ <EllipsisVIcon aria-hidden="true" />
952
+ </MenuToggle>
953
+ )}
954
+ >
955
+ <DropdownList>{kebabDropdownItems}</DropdownList>
956
+ </Dropdown>
903
957
  </ToolbarItem>
904
958
  <ToolbarItem
905
959
  visibility={{ default: 'hidden', md: 'visible' }} /** this user dropdown is hidden on mobile sizes */
906
960
  >
907
- <DropdownDeprecated
908
- position="right"
909
- onSelect={this.onDropdownSelect}
961
+ <Dropdown
910
962
  isOpen={isDropdownOpen}
911
- isFullHeight
912
- toggle={
913
- <DropdownToggle icon={<Avatar src={imgAvatar} alt="Avatar" />} onToggle={this.onDropdownToggle}>
963
+ onSelect={this.onDropdownSelect}
964
+ onOpenChange={(isOpen) => this.setState({ isDropdownOpen: isOpen })}
965
+ popperProps={{ position: 'right' }}
966
+ toggle={(toggleRef) => (
967
+ <MenuToggle
968
+ ref={toggleRef}
969
+ isExpanded={isDropdownOpen}
970
+ onClick={this.onDropdownToggle}
971
+ icon={<Avatar src={imgAvatar} alt="" />}
972
+ isFullHeight
973
+ >
914
974
  John Smith
915
- </DropdownToggle>
916
- }
917
- dropdownItems={userDropdownItems}
918
- />
975
+ </MenuToggle>
976
+ )}
977
+ >
978
+ <DropdownList>{userDropdownItems}</DropdownList>
979
+ </Dropdown>
919
980
  </ToolbarItem>
920
981
  </ToolbarGroup>
921
982
  </ToolbarGroup>
@@ -958,47 +1019,62 @@ class GroupedNotificationDrawer extends React.Component {
958
1019
  );
959
1020
 
960
1021
  const drawerContent = 'Panel content';
961
-
962
- const notificationDrawerDropdownItems = [
963
- <DropdownItemDeprecated key="link">Link</DropdownItemDeprecated>,
964
- <DropdownItemDeprecated key="action" component="button">
965
- Action
966
- </DropdownItemDeprecated>,
967
- <DropdownSeparator key="separator" />,
968
- <DropdownItemDeprecated key="disabled link" isDisabled>
969
- Disabled Link
970
- </DropdownItemDeprecated>
971
- ];
972
-
973
- const notificationDrawerActions = [
974
- <DropdownItemDeprecated key="markAllRead" onClick={this.markAllRead} component="button">
975
- Mark all read
976
- </DropdownItemDeprecated>,
977
- <DropdownItemDeprecated key="clearAll" onClick={() => this.showNotifications(false)} component="button">
978
- Clear all
979
- </DropdownItemDeprecated>,
980
- <DropdownItemDeprecated key="unclearLast" onClick={() => this.showNotifications(true)} component="button">
981
- Unclear last
982
- </DropdownItemDeprecated>,
983
- <DropdownItemDeprecated key="settings" component="button">
984
- Settings
985
- </DropdownItemDeprecated>
986
- ];
1022
+ const notificationDrawerActions = (
1023
+ <>
1024
+ <DropdownItem key="markAllRead" onClick={this.markAllRead}>
1025
+ Mark all read
1026
+ </DropdownItem>
1027
+ <DropdownItem key="clearAll" onClick={() => this.showNotifications(false)}>
1028
+ Clear all
1029
+ </DropdownItem>
1030
+ <DropdownItem key="unclearLast" onClick={() => this.showNotifications(true)}>
1031
+ Unclear last
1032
+ </DropdownItem>
1033
+ <DropdownItem key="settings">Settings</DropdownItem>
1034
+ </>
1035
+ );
1036
+ const notificationDrawerDropdownItems = (
1037
+ <>
1038
+ <DropdownItem
1039
+ key="link"
1040
+ to="#"
1041
+ // Prevent default onClick behavior for demo purposes
1042
+ onClick={(ev) => ev.preventDefault()}
1043
+ >
1044
+ Link
1045
+ </DropdownItem>
1046
+ <DropdownItem key="action">Action</DropdownItem>
1047
+ <Divider component="li" key="separator" />
1048
+ <DropdownItem key="disabled link" isDisabled>
1049
+ Disabled Link
1050
+ </DropdownItem>
1051
+ </>
1052
+ );
987
1053
 
988
1054
  const notificationDrawer = (
989
1055
  <NotificationDrawer ref={this.drawerRef}>
990
- <NotificationDrawerHeader count={this.getNumberUnread()} onClose={(event) => this.onCloseNotificationDrawer(event)}>
991
- <DropdownDeprecated
1056
+ <NotificationDrawerHeader count={this.getNumberUnread()} onClose={this.onCloseNotificationDrawer}>
1057
+ <Dropdown
992
1058
  onSelect={this.onSelect}
993
- toggle={
994
- <KebabToggle onToggle={(_event, isOpen) => this.onToggle('toggle-id-0', isOpen)} id="toggle-id-0" />
995
- }
996
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-0']}
997
- isPlain
998
- dropdownItems={notificationDrawerActions}
1059
+ isOpen={isActionsMenuOpen['toggle-id-0'] || false}
999
1060
  id="notification-0"
1000
- position={DropdownPosition.right}
1001
- />
1061
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
1062
+ popperProps={{ position: 'right' }}
1063
+ toggle={(toggleRef) => (
1064
+ <MenuToggle
1065
+ ref={toggleRef}
1066
+ id="toggle-id-0"
1067
+ aria-label="Notification drawer actions"
1068
+ variant="plain"
1069
+ onClick={() => this.onToggle('toggle-id-0')}
1070
+ isExpanded={isActionsMenuOpen['toggle-id-0'] || false}
1071
+ >
1072
+ <EllipsisVIcon aria-hidden="true" />
1073
+ </MenuToggle>
1074
+ )}
1075
+ >
1076
+ <DropdownList>{notificationDrawerActions}</DropdownList>
1077
+ </Dropdown>
1002
1078
  </NotificationDrawerHeader>
1003
1079
  <NotificationDrawerBody>
1004
1080
  {showNotifications && (
@@ -1020,20 +1096,27 @@ class GroupedNotificationDrawer extends React.Component {
1020
1096
  title="Unread info notification title"
1021
1097
  srTitle="Info notification:"
1022
1098
  >
1023
- <DropdownDeprecated
1024
- position={DropdownPosition.right}
1099
+ <Dropdown
1025
1100
  onSelect={this.onSelect}
1026
- toggle={
1027
- <KebabToggle
1028
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-5', isOpen)}
1029
- id="toggle-id-5"
1030
- />
1031
- }
1032
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-5']}
1033
- isPlain
1034
- dropdownItems={notificationDrawerDropdownItems}
1101
+ isOpen={isActionsMenuOpen['toggle-id-5'] || false}
1035
1102
  id="notification-5"
1036
- />
1103
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
1104
+ popperProps={{ position: 'right' }}
1105
+ toggle={(toggleRef) => (
1106
+ <MenuToggle
1107
+ ref={toggleRef}
1108
+ id="toggle-id-5"
1109
+ aria-label="Notification drawer actions"
1110
+ variant="plain"
1111
+ onClick={() => this.onToggle('toggle-id-5')}
1112
+ isExpanded={isActionsMenuOpen['toggle-id-5'] || false}
1113
+ >
1114
+ <EllipsisVIcon aria-hidden="true" />
1115
+ </MenuToggle>
1116
+ )}
1117
+ >
1118
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
1119
+ </Dropdown>
1037
1120
  </NotificationDrawerListItemHeader>
1038
1121
  <NotificationDrawerListItemBody timestamp="5 minutes ago">
1039
1122
  This is an info notification description.
@@ -1049,20 +1132,27 @@ class GroupedNotificationDrawer extends React.Component {
1049
1132
  title="Unread danger notification title. This is a long title to show how the title will wrap if it is long and wraps to multiple lines."
1050
1133
  srTitle="Danger notification:"
1051
1134
  >
1052
- <DropdownDeprecated
1053
- position={DropdownPosition.right}
1135
+ <Dropdown
1054
1136
  onSelect={this.onSelect}
1055
- toggle={
1056
- <KebabToggle
1057
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-6', isOpen)}
1058
- id="toggle-id-6"
1059
- />
1060
- }
1061
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-6']}
1062
- isPlain
1063
- dropdownItems={notificationDrawerDropdownItems}
1137
+ isOpen={isActionsMenuOpen['toggle-id-6'] || false}
1064
1138
  id="notification-6"
1065
- />
1139
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
1140
+ popperProps={{ position: 'right' }}
1141
+ toggle={(toggleRef) => (
1142
+ <MenuToggle
1143
+ ref={toggleRef}
1144
+ id="toggle-id-6"
1145
+ aria-label="Notification drawer actions"
1146
+ variant="plain"
1147
+ onClick={() => this.onToggle('toggle-id-6')}
1148
+ isExpanded={isActionsMenuOpen['toggle-id-6'] || false}
1149
+ >
1150
+ <EllipsisVIcon aria-hidden="true" />
1151
+ </MenuToggle>
1152
+ )}
1153
+ >
1154
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
1155
+ </Dropdown>
1066
1156
  </NotificationDrawerListItemHeader>
1067
1157
  <NotificationDrawerListItemBody timestamp="10 minutes ago">
1068
1158
  This is a danger notification description. This is a long description to show how the title will
@@ -1079,20 +1169,27 @@ class GroupedNotificationDrawer extends React.Component {
1079
1169
  title="Read warning notification title"
1080
1170
  srTitle="Warning notification:"
1081
1171
  >
1082
- <DropdownDeprecated
1083
- position={DropdownPosition.right}
1172
+ <Dropdown
1084
1173
  onSelect={this.onSelect}
1085
- toggle={
1086
- <KebabToggle
1087
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-7', isOpen)}
1088
- id="toggle-id-7"
1089
- />
1090
- }
1091
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-7']}
1092
- isPlain
1093
- dropdownItems={notificationDrawerDropdownItems}
1174
+ isOpen={isActionsMenuOpen['toggle-id-7'] || false}
1094
1175
  id="notification-7"
1095
- />
1176
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
1177
+ popperProps={{ position: 'right' }}
1178
+ toggle={(toggleRef) => (
1179
+ <MenuToggle
1180
+ ref={toggleRef}
1181
+ id="toggle-id-7"
1182
+ aria-label="Notification drawer actions"
1183
+ variant="plain"
1184
+ onClick={() => this.onToggle('toggle-id-7')}
1185
+ isExpanded={isActionsMenuOpen['toggle-id-7'] || false}
1186
+ >
1187
+ <EllipsisVIcon aria-hidden="true" />
1188
+ </MenuToggle>
1189
+ )}
1190
+ >
1191
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
1192
+ </Dropdown>
1096
1193
  </NotificationDrawerListItemHeader>
1097
1194
  <NotificationDrawerListItemBody timestamp="20 minutes ago">
1098
1195
  This is a warning notification description.
@@ -1108,21 +1205,27 @@ class GroupedNotificationDrawer extends React.Component {
1108
1205
  title="Read success notification title"
1109
1206
  srTitle="Success notification:"
1110
1207
  >
1111
- <DropdownDeprecated
1112
- position={DropdownPosition.right}
1113
- direction={DropdownDirection.up}
1208
+ <Dropdown
1114
1209
  onSelect={this.onSelect}
1115
- toggle={
1116
- <KebabToggle
1117
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-8', isOpen)}
1118
- id="toggle-id-8"
1119
- />
1120
- }
1121
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-8']}
1122
- isPlain
1123
- dropdownItems={notificationDrawerDropdownItems}
1210
+ isOpen={isActionsMenuOpen['toggle-id-8'] || false}
1124
1211
  id="notification-8"
1125
- />
1212
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
1213
+ popperProps={{ position: 'right' }}
1214
+ toggle={(toggleRef) => (
1215
+ <MenuToggle
1216
+ ref={toggleRef}
1217
+ id="toggle-id-8"
1218
+ aria-label="Notification drawer actions"
1219
+ variant="plain"
1220
+ onClick={() => this.onToggle('toggle-id-8')}
1221
+ isExpanded={isActionsMenuOpen['toggle-id-8'] || false}
1222
+ >
1223
+ <EllipsisVIcon aria-hidden="true" />
1224
+ </MenuToggle>
1225
+ )}
1226
+ >
1227
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
1228
+ </Dropdown>
1126
1229
  </NotificationDrawerListItemHeader>
1127
1230
  <NotificationDrawerListItemBody timestamp="30 minutes ago">
1128
1231
  This is a success notification description.
@@ -1147,20 +1250,27 @@ class GroupedNotificationDrawer extends React.Component {
1147
1250
  title="Unread info notification title"
1148
1251
  srTitle="Info notification:"
1149
1252
  >
1150
- <DropdownDeprecated
1151
- position={DropdownPosition.right}
1253
+ <Dropdown
1152
1254
  onSelect={this.onSelect}
1153
- toggle={
1154
- <KebabToggle
1155
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-9', isOpen)}
1156
- id="toggle-id-9"
1157
- />
1158
- }
1159
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-9']}
1160
- isPlain
1161
- dropdownItems={notificationDrawerDropdownItems}
1255
+ isOpen={isActionsMenuOpen['toggle-id-9'] || false}
1162
1256
  id="notification-9"
1163
- />
1257
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
1258
+ popperProps={{ position: 'right' }}
1259
+ toggle={(toggleRef) => (
1260
+ <MenuToggle
1261
+ ref={toggleRef}
1262
+ id="toggle-id-9"
1263
+ aria-label="Notification drawer actions"
1264
+ variant="plain"
1265
+ onClick={() => this.onToggle('toggle-id-9')}
1266
+ isExpanded={isActionsMenuOpen['toggle-id-9'] || false}
1267
+ >
1268
+ <EllipsisVIcon aria-hidden="true" />
1269
+ </MenuToggle>
1270
+ )}
1271
+ >
1272
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
1273
+ </Dropdown>
1164
1274
  </NotificationDrawerListItemHeader>
1165
1275
  <NotificationDrawerListItemBody timestamp="5 minutes ago">
1166
1276
  This is an info notification description.
@@ -1176,20 +1286,27 @@ class GroupedNotificationDrawer extends React.Component {
1176
1286
  title="Unread danger notification title. This is a long title to show how the title will wrap if it is long and wraps to multiple lines."
1177
1287
  srTitle="Danger notification:"
1178
1288
  >
1179
- <DropdownDeprecated
1180
- position={DropdownPosition.right}
1289
+ <Dropdown
1181
1290
  onSelect={this.onSelect}
1182
- toggle={
1183
- <KebabToggle
1184
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-10', isOpen)}
1185
- id="toggle-id-10"
1186
- />
1187
- }
1188
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-10']}
1189
- isPlain
1190
- dropdownItems={notificationDrawerDropdownItems}
1291
+ isOpen={isActionsMenuOpen['toggle-id-10'] || false}
1191
1292
  id="notification-10"
1192
- />
1293
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
1294
+ popperProps={{ position: 'right' }}
1295
+ toggle={(toggleRef) => (
1296
+ <MenuToggle
1297
+ ref={toggleRef}
1298
+ id="toggle-id-10"
1299
+ aria-label="Notification drawer actions"
1300
+ variant="plain"
1301
+ onClick={() => this.onToggle('toggle-id-10')}
1302
+ isExpanded={isActionsMenuOpen['toggle-id-10'] || false}
1303
+ >
1304
+ <EllipsisVIcon aria-hidden="true" />
1305
+ </MenuToggle>
1306
+ )}
1307
+ >
1308
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
1309
+ </Dropdown>
1193
1310
  </NotificationDrawerListItemHeader>
1194
1311
  <NotificationDrawerListItemBody timestamp="10 minutes ago">
1195
1312
  This is a danger notification description. This is a long description to show how the title will
@@ -1206,20 +1323,27 @@ class GroupedNotificationDrawer extends React.Component {
1206
1323
  title="Read warning notification title"
1207
1324
  srTitle="Warning notification:"
1208
1325
  >
1209
- <DropdownDeprecated
1210
- position={DropdownPosition.right}
1326
+ <Dropdown
1211
1327
  onSelect={this.onSelect}
1212
- toggle={
1213
- <KebabToggle
1214
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-11', isOpen)}
1215
- id="toggle-id-11"
1216
- />
1217
- }
1218
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-11']}
1219
- isPlain
1220
- dropdownItems={notificationDrawerDropdownItems}
1328
+ isOpen={isActionsMenuOpen['toggle-id-11'] || false}
1221
1329
  id="notification-11"
1222
- />
1330
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
1331
+ popperProps={{ position: 'right' }}
1332
+ toggle={(toggleRef) => (
1333
+ <MenuToggle
1334
+ ref={toggleRef}
1335
+ id="toggle-id-11"
1336
+ aria-label="Notification drawer actions"
1337
+ variant="plain"
1338
+ onClick={() => this.onToggle('toggle-id-11')}
1339
+ isExpanded={isActionsMenuOpen['toggle-id-11'] || false}
1340
+ >
1341
+ <EllipsisVIcon aria-hidden="true" />
1342
+ </MenuToggle>
1343
+ )}
1344
+ >
1345
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
1346
+ </Dropdown>
1223
1347
  </NotificationDrawerListItemHeader>
1224
1348
  <NotificationDrawerListItemBody timestamp="20 minutes ago">
1225
1349
  This is a warning notification description.
@@ -1235,21 +1359,27 @@ class GroupedNotificationDrawer extends React.Component {
1235
1359
  title="Read success notification title"
1236
1360
  srTitle="Success notification:"
1237
1361
  >
1238
- <DropdownDeprecated
1239
- position={DropdownPosition.right}
1240
- direction={DropdownDirection.up}
1362
+ <Dropdown
1241
1363
  onSelect={this.onSelect}
1242
- toggle={
1243
- <KebabToggle
1244
- onToggle={(_event, isOpen) => this.onToggle('toggle-id-12', isOpen)}
1245
- id="toggle-id-12"
1246
- />
1247
- }
1248
- isOpen={isActionsMenuOpen && isActionsMenuOpen['toggle-id-12']}
1249
- isPlain
1250
- dropdownItems={notificationDrawerDropdownItems}
1364
+ isOpen={isActionsMenuOpen['toggle-id-12'] || false}
1251
1365
  id="notification-12"
1252
- />
1366
+ onOpenChange={(isOpen) => !isOpen && this.setState({ isActionsMenuOpen: {} })}
1367
+ popperProps={{ position: 'right' }}
1368
+ toggle={(toggleRef) => (
1369
+ <MenuToggle
1370
+ ref={toggleRef}
1371
+ id="toggle-id-12"
1372
+ aria-label="Notification drawer actions"
1373
+ variant="plain"
1374
+ onClick={() => this.onToggle('toggle-id-12')}
1375
+ isExpanded={isActionsMenuOpen['toggle-id-12'] || false}
1376
+ >
1377
+ <EllipsisVIcon aria-hidden="true" />
1378
+ </MenuToggle>
1379
+ )}
1380
+ >
1381
+ <DropdownList>{notificationDrawerDropdownItems}</DropdownList>
1382
+ </Dropdown>
1253
1383
  </NotificationDrawerListItemHeader>
1254
1384
  <NotificationDrawerListItemBody timestamp="30 minutes ago">
1255
1385
  This is a success notification description.