@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.
- package/CHANGELOG.md +8 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/Chip/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/DragDrop/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/Text/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/Tile/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
- package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
- package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
- package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
- package/dist/dynamic/deprecated/components/Select/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/favorites/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/next/components/package.json +1 -1
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +2 -2
- package/src/components/Button/examples/Button.md +1 -1
- package/src/demos/Toolbar.md +1 -551
- package/src/demos/examples/Toolbar/ConsoleLogViewerToolbar.tsx +35 -14
package/src/demos/Toolbar.md
CHANGED
|
@@ -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 = (
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
<
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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>
|