@patternfly/react-core 5.2.0-prerelease.7 → 5.2.0-prerelease.9

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 (125) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/components/package.json +1 -1
  3. package/deprecated/package.json +1 -1
  4. package/dist/dynamic/components/AboutModal/package.json +1 -1
  5. package/dist/dynamic/components/Accordion/package.json +1 -1
  6. package/dist/dynamic/components/ActionList/package.json +1 -1
  7. package/dist/dynamic/components/Alert/package.json +1 -1
  8. package/dist/dynamic/components/Avatar/package.json +1 -1
  9. package/dist/dynamic/components/BackToTop/package.json +1 -1
  10. package/dist/dynamic/components/Backdrop/package.json +1 -1
  11. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  12. package/dist/dynamic/components/Badge/package.json +1 -1
  13. package/dist/dynamic/components/Banner/package.json +1 -1
  14. package/dist/dynamic/components/Brand/package.json +1 -1
  15. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  16. package/dist/dynamic/components/Button/package.json +1 -1
  17. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  18. package/dist/dynamic/components/Card/package.json +1 -1
  19. package/dist/dynamic/components/Checkbox/package.json +1 -1
  20. package/dist/dynamic/components/Chip/package.json +1 -1
  21. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  22. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  23. package/dist/dynamic/components/DataList/package.json +1 -1
  24. package/dist/dynamic/components/DatePicker/package.json +1 -1
  25. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  26. package/dist/dynamic/components/Divider/package.json +1 -1
  27. package/dist/dynamic/components/DragDrop/package.json +1 -1
  28. package/dist/dynamic/components/Drawer/package.json +1 -1
  29. package/dist/dynamic/components/Dropdown/package.json +1 -1
  30. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  31. package/dist/dynamic/components/EmptyState/package.json +1 -1
  32. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  33. package/dist/dynamic/components/FileUpload/package.json +1 -1
  34. package/dist/dynamic/components/Form/package.json +1 -1
  35. package/dist/dynamic/components/FormSelect/package.json +1 -1
  36. package/dist/dynamic/components/HelperText/package.json +1 -1
  37. package/dist/dynamic/components/Hint/package.json +1 -1
  38. package/dist/dynamic/components/Icon/package.json +1 -1
  39. package/dist/dynamic/components/InputGroup/package.json +1 -1
  40. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  41. package/dist/dynamic/components/Label/package.json +1 -1
  42. package/dist/dynamic/components/List/package.json +1 -1
  43. package/dist/dynamic/components/LoginPage/package.json +1 -1
  44. package/dist/dynamic/components/Masthead/package.json +1 -1
  45. package/dist/dynamic/components/Menu/package.json +1 -1
  46. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  47. package/dist/dynamic/components/Modal/package.json +1 -1
  48. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  49. package/dist/dynamic/components/Nav/package.json +1 -1
  50. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  51. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  52. package/dist/dynamic/components/NumberInput/package.json +1 -1
  53. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  54. package/dist/dynamic/components/Page/package.json +1 -1
  55. package/dist/dynamic/components/Pagination/package.json +1 -1
  56. package/dist/dynamic/components/Panel/package.json +1 -1
  57. package/dist/dynamic/components/Popover/package.json +1 -1
  58. package/dist/dynamic/components/Progress/package.json +1 -1
  59. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  60. package/dist/dynamic/components/Radio/package.json +1 -1
  61. package/dist/dynamic/components/SearchInput/package.json +1 -1
  62. package/dist/dynamic/components/Select/package.json +1 -1
  63. package/dist/dynamic/components/Sidebar/package.json +1 -1
  64. package/dist/dynamic/components/SimpleList/package.json +1 -1
  65. package/dist/dynamic/components/Skeleton/package.json +1 -1
  66. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  67. package/dist/dynamic/components/Slider/package.json +1 -1
  68. package/dist/dynamic/components/Spinner/package.json +1 -1
  69. package/dist/dynamic/components/Switch/package.json +1 -1
  70. package/dist/dynamic/components/Tabs/package.json +1 -1
  71. package/dist/dynamic/components/Text/package.json +1 -1
  72. package/dist/dynamic/components/TextArea/package.json +1 -1
  73. package/dist/dynamic/components/TextInput/package.json +1 -1
  74. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  75. package/dist/dynamic/components/Tile/package.json +1 -1
  76. package/dist/dynamic/components/TimePicker/package.json +1 -1
  77. package/dist/dynamic/components/Timestamp/package.json +1 -1
  78. package/dist/dynamic/components/Title/package.json +1 -1
  79. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  80. package/dist/dynamic/components/Toolbar/package.json +1 -1
  81. package/dist/dynamic/components/Tooltip/package.json +1 -1
  82. package/dist/dynamic/components/TreeView/package.json +1 -1
  83. package/dist/dynamic/components/Truncate/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  85. package/dist/dynamic/components/Wizard/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/Select/package.json +1 -1
  92. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  93. package/dist/dynamic/deprecated/components/package.json +1 -1
  94. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  95. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  96. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  97. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  98. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  99. package/dist/dynamic/helpers/constants/package.json +1 -1
  100. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  101. package/dist/dynamic/helpers/favorites/package.json +1 -1
  102. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  103. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  104. package/dist/dynamic/helpers/package.json +1 -1
  105. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  106. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  107. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  108. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  109. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  110. package/dist/dynamic/helpers/util/package.json +1 -1
  111. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  112. package/dist/dynamic/layouts/Flex/package.json +1 -1
  113. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  114. package/dist/dynamic/layouts/Grid/package.json +1 -1
  115. package/dist/dynamic/layouts/Level/package.json +1 -1
  116. package/dist/dynamic/layouts/Split/package.json +1 -1
  117. package/dist/dynamic/layouts/Stack/package.json +1 -1
  118. package/dist/dynamic/next/components/package.json +1 -1
  119. package/helpers/package.json +1 -1
  120. package/layouts/package.json +1 -1
  121. package/next/package.json +1 -1
  122. package/package.json +2 -2
  123. package/src/components/Button/examples/Button.md +1 -1
  124. package/src/demos/Toolbar.md +1 -551
  125. package/src/demos/examples/Toolbar/ConsoleLogViewerToolbar.tsx +35 -14
@@ -18,555 +18,5 @@ import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
18
18
 
19
19
  This is an example of toolbar usage in log viewer.
20
20
 
21
- ```js isFullscreen
22
- import React from 'react';
23
- import {
24
- Badge,
25
- Button,
26
- Checkbox,
27
- MenuToggle,
28
- SearchInput,
29
- Select,
30
- SelectList,
31
- SelectOption,
32
- PageSection,
33
- PageSectionVariants,
34
- Toolbar,
35
- ToolbarContent,
36
- ToolbarGroup,
37
- ToolbarItem,
38
- ToolbarToggleGroup,
39
- Tooltip,
40
- Dropdown,
41
- DropdownItem,
42
- DropdownList,
43
- Divider
44
- } from '@patternfly/react-core';
45
- import PauseIcon from '@patternfly/react-icons/dist/esm/icons/pause-icon';
46
- import PlayIcon from '@patternfly/react-icons/dist/esm/icons/play-icon';
47
- import ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-icon';
48
- import ExternalLinkAltIcon from '@patternfly/react-icons/dist/esm/icons/external-link-alt-icon';
49
- import DownloadIcon from '@patternfly/react-icons/dist/esm/icons/download-icon';
50
- import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
51
- import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
52
- import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
53
- import { DashboardWrapper } from '@patternfly/react-core/src/demos/DashboardWrapper';
54
-
55
- class ConsoleLogViewerToolbar extends React.Component {
56
- constructor(props) {
57
- super(props);
58
-
59
- this.firstOptions = {
60
- 'container-sample-1': { type: 'C' },
61
- 'container-sample-2': { type: 'D' },
62
- 'container-sample-3': { type: 'E' }
63
- };
64
-
65
- this.state = {
66
- containerExpanded: false,
67
- containerExpandedMobile: false,
68
- containerSelected: Object.keys(this.firstOptions)[0],
69
- optionExpanded: false,
70
- optionExpandedMobile: false,
71
- isPaused: false,
72
- firstSwitchChecked: true,
73
- secondSwitchChecked: false,
74
- searchValue: '',
75
- searchResultsCount: 3,
76
- currentSearchResult: 1,
77
- externalExpanded: false,
78
- externalExpandedMobile: false,
79
- downloadExpanded: false,
80
- downloadExpandedMobile: false,
81
- mobileView: window.innerWidth >= 1450 ? false : true
82
- };
83
-
84
- this.onContainerToggle = () => {
85
- this.setState((prevState) => {
86
- return {
87
- containerExpanded: !prevState.containerExpanded
88
- };
89
- });
90
- };
91
-
92
- this.onContainerToggleMobile = () => {
93
- this.setState((prevState) => {
94
- return {
95
- containerExpandedMobile: !prevState.containerExpandedMobile
96
- };
97
- });
98
- };
99
-
100
- this.onContainerSelect = (event, selection) => {
101
- this.setState({
102
- containerSelected: selection,
103
- containerExpanded: false
104
- });
105
- };
106
-
107
- this.onContainerSelectMobile = (event, selection) => {
108
- this.setState({
109
- containerSelected: selection,
110
- containerExpandedMobile: false
111
- });
112
- };
113
-
114
- this.onOptionToggle = () => {
115
- this.setState((prevState) => ({
116
- optionExpanded: !prevState.optionExpanded
117
- }));
118
- };
119
-
120
- this.onOptionToggleMobile = () => {
121
- this.setState((prevState) => ({
122
- optionExpandedMobile: !prevState.optionExpandedMobile
123
- }));
124
- };
125
-
126
- this.onExternalToggle = () => {
127
- this.setState((prevState) => ({
128
- externalExpanded: !prevState.externalExpanded
129
- }));
130
- };
131
-
132
- this.onExternalToggleMobile = () => {
133
- this.setState((prevState) => ({
134
- externalExpandedMobile: !prevState.externalExpandedMobile
135
- }));
136
- };
137
-
138
- this.onExternalSelect = () => {
139
- this.setState({
140
- externalExpanded: false
141
- });
142
- };
143
-
144
- this.onExternalSelectMobile = () => {
145
- this.setState({
146
- externalExpandedMobile: false
147
- });
148
- };
149
-
150
- this.onDownloadToggle = () => {
151
- this.setState((prevState) => ({
152
- downloadExpanded: !prevState.downloadExpanded
153
- }));
154
- };
155
-
156
- this.onDownloadToggleMobile = () => {
157
- this.setState((prevState) => ({
158
- downloadExpandedMobile: !prevState.downloadExpandedMobile
159
- }));
160
- };
161
-
162
- this.onDownloadSelect = () => {
163
- this.setState({
164
- downloadExpanded: false
165
- });
166
- };
167
-
168
- this.onDownloadSelectMobile = () => {
169
- this.setState({
170
- downloadExpandedMobile: false
171
- });
172
- };
173
-
174
- this.onExternalClick = (event) => {
175
- console.log('External logs opened!');
176
- };
177
-
178
- this.onDownloadClick = (event) => {
179
- console.log('Download action clicked!');
180
- };
181
-
182
- this.pauseOrStart = (event) => {
183
- this.setState({
184
- isPaused: !this.state.isPaused
185
- });
186
- };
187
-
188
- this.handleFirstSwitchChange = () => {
189
- this.setState((prevState) => ({ firstSwitchChecked: !prevState.firstSwitchChecked }));
190
- };
191
-
192
- this.handleSecondSwitchChange = () => {
193
- this.setState((prevState) => ({ secondSwitchChecked: !prevState.secondSwitchChecked }));
194
- };
195
-
196
- this.onClearLogs = () => {
197
- this.setState({
198
- optionExpanded: false
199
- });
200
- console.log('Logs cleared!');
201
- };
202
-
203
- this.onSearchChange = (event, value) => {
204
- this.setState({
205
- searchValue: value,
206
- searchResultsCount: 3
207
- });
208
- };
209
-
210
- this.onSearchClear = (event) => {
211
- this.setState({
212
- searchValue: '',
213
- searchResultsCount: 0,
214
- currentSearchResult: 1
215
- });
216
- };
217
-
218
- this.onSearchNext = (event) => {
219
- this.setState((prevState) => {
220
- const newCurrentResult = prevState.currentSearchResult + 1;
221
- return {
222
- currentSearchResult:
223
- newCurrentResult <= prevState.searchResultsCount ? newCurrentResult : prevState.searchResultsCount
224
- };
225
- });
226
- };
227
-
228
- this.onSearchPrevious = (event) => {
229
- this.setState((prevState) => {
230
- const newCurrentResult = prevState.currentSearchResult - 1;
231
- return {
232
- currentSearchResult: newCurrentResult > 0 ? newCurrentResult : 1
233
- };
234
- });
235
- };
236
-
237
- this.onPageResize = (_event, { windowSize }) => {
238
- if (windowSize >= 1450) {
239
- this.setState({
240
- mobileView: false
241
- });
242
- } else {
243
- this.setState({
244
- mobileView: true
245
- });
246
- }
247
- };
248
- }
249
-
250
- render() {
251
- const {
252
- containerExpanded,
253
- containerExpandedMobile,
254
- containerSelected,
255
- optionExpanded,
256
- optionExpandedMobile,
257
- isPaused,
258
- firstSwitchChecked,
259
- secondSwitchChecked,
260
- searchValue,
261
- searchResultsCount,
262
- currentSearchResult,
263
- externalExpanded,
264
- externalExpandedMobile,
265
- downloadExpanded,
266
- downloadExpandedMobile,
267
- kebabExpanded,
268
- mobileView
269
- } = this.state;
270
-
271
- const externalDropdownItems = (
272
- <>
273
- <DropdownItem key="action-1" onClick={this.onExternalClick}>
274
- External logs 1
275
- </DropdownItem>
276
- <DropdownItem key="action-2" onClick={this.onExternalClick}>
277
- External logs 2
278
- </DropdownItem>
279
- <DropdownItem key="action-3" onClick={this.onExternalClick}>
280
- External logs 3
281
- </DropdownItem>
282
- </>
283
- );
284
- const downloadDropdownItems = (
285
- <>
286
- <DropdownItem key="action-4" onClick={this.onDownloadClick}>
287
- Current container logs
288
- </DropdownItem>
289
- <DropdownItem key="action-5" onClick={this.onDownloadClick}>
290
- All container logs
291
- </DropdownItem>
292
- </>
293
- );
294
- const optionDropdownItems = (
295
- <>
296
- <DropdownItem key="switch-1" hasCheckbox isSelected={firstSwitchChecked} onClick={this.handleFirstSwitchChange}>
297
- Display timestamp
298
- </DropdownItem>
299
- <DropdownItem
300
- key="switch-2"
301
- hasCheckbox
302
- isSelected={secondSwitchChecked}
303
- onClick={this.handleSecondSwitchChange}
304
- >
305
- Wrap lines
306
- </DropdownItem>
307
- <Divider component="li" key="separator" />
308
- <DropdownItem key="clear-log" onClick={this.onClearLogs}>
309
- Clear logs
310
- </DropdownItem>
311
- </>
312
- );
313
- const selectDropdownContent = (
314
- <SelectList>
315
- {Object.entries(this.firstOptions).map(([value, { type }]) => (
316
- <SelectOption key={value} hasCheckbox value={value} isSelected={containerSelected === value}>
317
- <Badge key={value}>{type}</Badge>
318
- {` ${value}`}
319
- </SelectOption>
320
- ))}
321
- </SelectList>
322
- );
323
-
324
- const selectToggleContent = ({ showText }) => {
325
- if (!containerSelected) {
326
- return 'Select';
327
- }
328
- return (
329
- <React.Fragment>
330
- <Badge>{this.firstOptions[containerSelected].type}</Badge>
331
- {showText && ` ${containerSelected}`}
332
- </React.Fragment>
333
- );
334
- };
335
-
336
- const LogsSearchInput = (
337
- <ToolbarToggleGroup toggleIcon={<SearchIcon />} breakpoint="lg">
338
- <ToolbarItem>
339
- <SearchInput
340
- placeholder="Search logs"
341
- value={searchValue}
342
- onChange={this.onSearchChange}
343
- onClear={this.onSearchClear}
344
- resultsCount={`${currentSearchResult} / ${searchResultsCount}`}
345
- onNextClick={this.onSearchNext}
346
- onPreviousClick={this.onSearchPrevious}
347
- />
348
- </ToolbarItem>
349
- </ToolbarToggleGroup>
350
- );
351
-
352
- const leftAlignedItemsDesktop = (
353
- <React.Fragment>
354
- <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>
355
- <Select
356
- toggle={(toggleRef) => (
357
- <MenuToggle
358
- ref={toggleRef}
359
- onClick={this.onContainerToggle}
360
- isExpanded={containerExpanded}
361
- style={{ width: '250px' }}
362
- >
363
- {selectToggleContent({ showText: true })}
364
- </MenuToggle>
365
- )}
366
- onSelect={this.onContainerSelect}
367
- onOpenChange={(isOpen) => this.setState({ containerExpanded: isOpen })}
368
- selected={containerSelected}
369
- isOpen={containerExpanded}
370
- >
371
- {selectDropdownContent}
372
- </Select>
373
- </ToolbarItem>
374
- <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>
375
- <Dropdown
376
- isOpen={optionExpanded}
377
- onOpenChange={(isOpen) => this.setState({ optionExpanded: isOpen })}
378
- onSelect={this.onOptionSelect}
379
- toggle={(toggleRef) => (
380
- <MenuToggle ref={toggleRef} isExpanded={optionExpanded} onClick={this.onOptionToggle} icon={<CogIcon />}>
381
- Options
382
- </MenuToggle>
383
- )}
384
- >
385
- <DropdownList>{optionDropdownItems}</DropdownList>
386
- </Dropdown>
387
- </ToolbarItem>
388
- <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>
389
- <Button variant={isPaused ? 'plain' : 'link'} onClick={this.pauseOrStart}>
390
- {isPaused ? <PlayIcon /> : <PauseIcon />}
391
- {isPaused ? ` Resume Log` : ` Pause Log`}
392
- </Button>
393
- </ToolbarItem>
394
- </React.Fragment>
395
- );
396
-
397
- const leftAlignedItemsMobile = (
398
- <React.Fragment>
399
- <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>
400
- <Tooltip position="top" content={<div>Select container</div>}>
401
- <Select
402
- role="menu"
403
- toggle={(toggleRef) => (
404
- <MenuToggle ref={toggleRef} onClick={this.onContainerToggleMobile} isExpanded={containerExpandedMobile}>
405
- {selectToggleContent({ showText: false })}
406
- </MenuToggle>
407
- )}
408
- onSelect={this.onContainerSelectMobile}
409
- onOpenChange={(isOpen) => this.setState({ containerExpandedMobile: isOpen })}
410
- selected={containerSelected}
411
- isOpen={containerExpandedMobile}
412
- >
413
- {selectDropdownContent}
414
- </Select>
415
- </Tooltip>
416
- </ToolbarItem>
417
- <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>
418
- <Tooltip position="top" content={<div>Options</div>}>
419
- <Dropdown
420
- isOpen={optionExpandedMobile}
421
- onOpenChange={(isOpen) => this.setState({ optionExpandedMobile: isOpen })}
422
- onSelect={this.onOptionSelectMobile}
423
- toggle={(toggleRef) => (
424
- <MenuToggle
425
- ref={toggleRef}
426
- isExpanded={optionExpandedMobile}
427
- onClick={this.onOptionToggleMobile}
428
- icon={<CogIcon />}
429
- aria-label="Options"
430
- />
431
- )}
432
- >
433
- <DropdownList>{optionDropdownItems}</DropdownList>
434
- </Dropdown>
435
- </Tooltip>
436
- </ToolbarItem>
437
- <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>
438
- <Tooltip position="top" content={<div>{isPaused ? 'Resume log' : 'Pause log'}</div>}>
439
- <Button variant="plain" onClick={this.pauseOrStart} aria-label={isPaused ? 'Play' : 'Paused'}>
440
- {isPaused ? <PlayIcon /> : <PauseIcon />}
441
- </Button>
442
- </Tooltip>
443
- </ToolbarItem>
444
- </React.Fragment>
445
- );
446
-
447
- const leftAlignedItems = (
448
- <React.Fragment>
449
- {leftAlignedItemsDesktop}
450
- {leftAlignedItemsMobile}
451
- </React.Fragment>
452
- );
453
-
454
- const rightAlignedItemsDesktop = (
455
- <React.Fragment>
456
- <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>
457
- <Dropdown
458
- isOpen={externalExpanded}
459
- onOpenChange={(isOpen) => this.setState({ externalExpanded: isOpen })}
460
- onSelect={this.onExternalSelect}
461
- toggle={(toggleRef) => (
462
- <MenuToggle ref={toggleRef} isExpanded={externalExpanded} onClick={this.onExternalToggle}>
463
- External logs
464
- </MenuToggle>
465
- )}
466
- >
467
- <DropdownList>{externalDropdownItems}</DropdownList>
468
- </Dropdown>
469
- </ToolbarItem>
470
- <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>
471
- <Dropdown
472
- isOpen={downloadExpanded}
473
- onOpenChange={(isOpen) => this.setState({ downloadExpanded: isOpen })}
474
- onSelect={this.onDownloadSelect}
475
- toggle={(toggleRef) => (
476
- <MenuToggle ref={toggleRef} isExpanded={downloadExpanded} onClick={this.onDownloadToggle}>
477
- Download
478
- </MenuToggle>
479
- )}
480
- >
481
- <DropdownList>{downloadDropdownItems}</DropdownList>
482
- </Dropdown>
483
- </ToolbarItem>
484
- </React.Fragment>
485
- );
486
-
487
- const rightAlignedItemsMobile = (
488
- <React.Fragment>
489
- <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>
490
- <Tooltip position="top" content={<div>External logs</div>}>
491
- <Dropdown
492
- isOpen={externalExpandedMobile}
493
- onOpenChange={(isOpen) => this.setState({ externalExpandedMobile: isOpen })}
494
- onSelect={this.onExternalSelectMobile}
495
- toggle={(toggleRef) => (
496
- <MenuToggle
497
- ref={toggleRef}
498
- isExpanded={externalExpandedMobile}
499
- onClick={this.onExternalToggleMobile}
500
- icon={<ExternalLinkAltIcon />}
501
- aria-label="External logs"
502
- />
503
- )}
504
- >
505
- <DropdownList>{externalDropdownItems}</DropdownList>
506
- </Dropdown>
507
- </Tooltip>
508
- </ToolbarItem>
509
- <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>
510
- <Tooltip position="top" content={<div>Download</div>}>
511
- <Dropdown
512
- isOpen={downloadExpandedMobile}
513
- onOpenChange={(isOpen) => this.setState({ downloadExpandedMobile: isOpen })}
514
- onSelect={this.onDownloadSelectMobile}
515
- popperProps={{ position: 'right' }}
516
- toggle={(toggleRef) => (
517
- <MenuToggle
518
- ref={toggleRef}
519
- isExpanded={downloadExpandedMobile}
520
- onClick={this.onDownloadToggleMobile}
521
- icon={<DownloadIcon />}
522
- aria-label="Download"
523
- />
524
- )}
525
- >
526
- <DropdownList>{downloadDropdownItems}</DropdownList>
527
- </Dropdown>
528
- </Tooltip>
529
- </ToolbarItem>
530
- </React.Fragment>
531
- );
532
-
533
- const rightAlignedItems = (
534
- <React.Fragment>
535
- <ToolbarItem>{LogsSearchInput}</ToolbarItem>
536
- {rightAlignedItemsDesktop}
537
- {rightAlignedItemsMobile}
538
- <ToolbarItem>
539
- <Tooltip position="top" content={<div>Expand</div>}>
540
- <Button variant="plain" aria-label="expand">
541
- <ExpandIcon />
542
- </Button>
543
- </Tooltip>
544
- </ToolbarItem>
545
- </React.Fragment>
546
- );
547
-
548
- const items = (
549
- <React.Fragment>
550
- <ToolbarGroup align={{ default: 'alignLeft' }}>{leftAlignedItems}</ToolbarGroup>
551
- <ToolbarGroup align={{ default: 'alignRight' }}>{rightAlignedItems}</ToolbarGroup>
552
- </React.Fragment>
553
- );
554
-
555
- const toolbar = (
556
- <Toolbar
557
- id="log-viewer-toolbar"
558
- inset={{
559
- default: 'insetNone'
560
- }}
561
- >
562
- <ToolbarContent>{items}</ToolbarContent>
563
- </Toolbar>
564
- );
565
- return (
566
- <DashboardWrapper sidebarNavOpen={!mobileView} onPageResize={this.onPageResize}>
567
- <PageSection variant={PageSectionVariants.light}>{toolbar}</PageSection>
568
- </DashboardWrapper>
569
- );
570
- }
571
- }
21
+ ```js file="./examples/Toolbar/ConsoleLogViewerToolbar.tsx" isFullscreen
572
22
  ```
@@ -143,6 +143,12 @@ export const ConsoleLogViewerToolbar: React.FC = () => {
143
143
  console.log('Logs cleared!');
144
144
  };
145
145
 
146
+ const onClearLogsMobile = () => {
147
+ setOptionExpandedMobile(false);
148
+ // eslint-disable-next-line no-console
149
+ console.log('Logs cleared!');
150
+ };
151
+
146
152
  const onSearchChange = (_event: React.FormEvent<HTMLInputElement>, value: string) => {
147
153
  setSearchValue(value);
148
154
  setSearchResultsCount(3);
@@ -169,7 +175,10 @@ export const ConsoleLogViewerToolbar: React.FC = () => {
169
175
  });
170
176
  };
171
177
 
172
- const onPageResize = (_event: React.SyntheticEvent, { windowSize }: { windowSize: number }) => {
178
+ const onPageResize = (
179
+ _event: MouseEvent | TouchEvent | React.KeyboardEvent<Element>,
180
+ { windowSize }: { windowSize: number }
181
+ ) => {
173
182
  if (windowSize >= 1450) {
174
183
  setMobileView(false);
175
184
  } else {
@@ -210,23 +219,28 @@ export const ConsoleLogViewerToolbar: React.FC = () => {
210
219
  <SelectOption key="switch-2" hasCheckbox isSelected={secondSwitchChecked} onClick={handleSecondSwitchChange}>
211
220
  Wrap lines
212
221
  </SelectOption>
213
- <MenuFooter key="clear-log" onClick={onClearLogs}>
214
- <Button variant="link" isInline>
215
- Clear logs
216
- </Button>
217
- </MenuFooter>
218
222
  </>
219
223
  );
220
224
 
221
225
  const selectDropdownContent = (
222
- <SelectList>
223
- {Object.entries(firstOptions).map(([value, { type }]) => (
224
- <SelectOption key={value} hasCheckbox value={value} isSelected={containerSelected === value}>
225
- <Badge key={value}>{type}</Badge>
226
- {` ${value}`}
227
- </SelectOption>
228
- ))}
229
- </SelectList>
226
+ <>
227
+ <SelectList>
228
+ {Object.entries(firstOptions).map(([value, { type }]) => (
229
+ <SelectOption key={value} hasCheckbox value={value} isSelected={containerSelected === value}>
230
+ <Badge key={value}>{type}</Badge>
231
+ {` ${value}`}
232
+ </SelectOption>
233
+ ))}
234
+ </SelectList>
235
+ </>
236
+ );
237
+
238
+ const clearLogsFooter = (type: string) => (
239
+ <MenuFooter key="clear-log" onClick={type === 'mobile' ? onClearLogsMobile : onClearLogs}>
240
+ <Button variant="link" isInline>
241
+ Clear logs
242
+ </Button>
243
+ </MenuFooter>
230
244
  );
231
245
 
232
246
  const selectToggleContent = ({ showText }: { showText: boolean }) => {
@@ -261,6 +275,7 @@ export const ConsoleLogViewerToolbar: React.FC = () => {
261
275
  <React.Fragment>
262
276
  <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>
263
277
  <Select
278
+ role="menu"
264
279
  toggle={(toggleRef) => (
265
280
  <MenuToggle
266
281
  ref={toggleRef}
@@ -282,7 +297,9 @@ export const ConsoleLogViewerToolbar: React.FC = () => {
282
297
  <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>
283
298
  <Select
284
299
  isOpen={optionExpanded}
300
+ role="menu"
285
301
  onOpenChange={(isOpen) => setOptionExpanded(isOpen)}
302
+ onOpenChangeKeys={['Escape']}
286
303
  onSelect={onOptionSelect}
287
304
  toggle={(toggleRef) => (
288
305
  <MenuToggle ref={toggleRef} isExpanded={optionExpanded} onClick={onOptionToggle} icon={<CogIcon />}>
@@ -291,6 +308,7 @@ export const ConsoleLogViewerToolbar: React.FC = () => {
291
308
  )}
292
309
  >
293
310
  <SelectList>{optionSelectItems}</SelectList>
311
+ {clearLogsFooter('desktop')}
294
312
  </Select>
295
313
  </ToolbarItem>
296
314
  <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>
@@ -325,8 +343,10 @@ export const ConsoleLogViewerToolbar: React.FC = () => {
325
343
  <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>
326
344
  <Tooltip position="top" content={<div>Options</div>}>
327
345
  <Select
346
+ role="menu"
328
347
  isOpen={optionExpandedMobile}
329
348
  onOpenChange={(isOpen) => setOptionExpandedMobile(isOpen)}
349
+ onOpenChangeKeys={['Escape']}
330
350
  onSelect={onOptionSelectMobile}
331
351
  toggle={(toggleRef) => (
332
352
  <MenuToggle
@@ -339,6 +359,7 @@ export const ConsoleLogViewerToolbar: React.FC = () => {
339
359
  )}
340
360
  >
341
361
  <SelectList>{optionSelectItems}</SelectList>
362
+ {clearLogsFooter('mobile')}
342
363
  </Select>
343
364
  </Tooltip>
344
365
  </ToolbarItem>