@patternfly/react-docs 7.6.0-prerelease.6 → 7.6.0-prerelease.8
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 +4 -0
- package/package.json +12 -13
- package/patternfly-docs/generated/components/about-modal/react.js +149 -0
- package/patternfly-docs/generated/components/accordion/react.js +262 -0
- package/patternfly-docs/generated/components/action-list/react.js +144 -0
- package/patternfly-docs/generated/components/alert/react-demos.js +56 -0
- package/patternfly-docs/generated/components/alert/react.js +1433 -0
- package/patternfly-docs/generated/components/avatar/react.js +166 -0
- package/patternfly-docs/generated/components/back-to-top/react-demos.js +60 -0
- package/patternfly-docs/generated/components/back-to-top/react.js +77 -0
- package/patternfly-docs/generated/components/backdrop/react.js +64 -0
- package/patternfly-docs/generated/components/background-image/react.js +62 -0
- package/patternfly-docs/generated/components/badge/react.js +97 -0
- package/patternfly-docs/generated/components/banner/react-demos.js +57 -0
- package/patternfly-docs/generated/components/banner/react.js +148 -0
- package/patternfly-docs/generated/components/brand/react.js +142 -0
- package/patternfly-docs/generated/components/breadcrumb/react.js +206 -0
- package/patternfly-docs/generated/components/button/react-demos.js +57 -0
- package/patternfly-docs/generated/components/button/react.js +826 -0
- package/patternfly-docs/generated/components/card/react-demos.js +201 -0
- package/patternfly-docs/generated/components/card/react.js +1015 -0
- package/patternfly-docs/generated/components/charts/area-chart/-Victory.js +1350 -0
- package/patternfly-docs/generated/components/charts/bar-chart/-Victory.js +1334 -0
- package/patternfly-docs/generated/components/charts/box-plot-chart/-Victory.js +1282 -0
- package/patternfly-docs/generated/components/charts/bullet-chart/-Victory.js +848 -0
- package/patternfly-docs/generated/components/charts/colors-for-charts/-Victory.js +192 -0
- package/patternfly-docs/generated/components/charts/donut-chart/-Victory.js +426 -0
- package/patternfly-docs/generated/components/charts/donut-utilization-chart/-Victory.js +804 -0
- package/patternfly-docs/generated/components/charts/legends/-Victory.js +3230 -0
- package/patternfly-docs/generated/components/charts/line-chart/-Victory.js +1178 -0
- package/patternfly-docs/generated/components/charts/line-chart/ECharts.js +525 -0
- package/patternfly-docs/generated/components/charts/patterns/-Victory.js +3382 -0
- package/patternfly-docs/generated/components/charts/pie-chart/-Victory.js +377 -0
- package/patternfly-docs/generated/components/charts/resize-observer/-Victory.js +2475 -0
- package/patternfly-docs/generated/components/charts/sankey-chart/ECharts.js +538 -0
- package/patternfly-docs/generated/components/charts/scatter-chart/-Victory.js +1551 -0
- package/patternfly-docs/generated/components/charts/skeletons/-Victory.js +4115 -0
- package/patternfly-docs/generated/components/charts/sparkline-chart/-Victory.js +955 -0
- package/patternfly-docs/generated/components/charts/stack-chart/-Victory.js +1173 -0
- package/patternfly-docs/generated/components/charts/threshold-chart/-Victory.js +1166 -0
- package/patternfly-docs/generated/components/charts/tooltips/-Victory.js +413 -0
- package/patternfly-docs/generated/components/chip/react-deprecated.js +323 -0
- package/patternfly-docs/generated/components/clipboard-copy/react.js +373 -0
- package/patternfly-docs/generated/components/code-block/react.js +148 -0
- package/patternfly-docs/generated/components/code-editor/react.js +659 -0
- package/patternfly-docs/generated/components/compass/react-demos.js +147 -0
- package/patternfly-docs/generated/components/compass/react.js +440 -0
- package/patternfly-docs/generated/components/content/react.js +248 -0
- package/patternfly-docs/generated/components/data-list/react-demos.js +90 -0
- package/patternfly-docs/generated/components/data-list/react.js +709 -0
- package/patternfly-docs/generated/components/date-and-time/calendar-month/react.js +283 -0
- package/patternfly-docs/generated/components/date-and-time/date-and-time-picker/react-demos.js +64 -0
- package/patternfly-docs/generated/components/date-and-time/date-picker/react-demos.js +83 -0
- package/patternfly-docs/generated/components/date-and-time/date-picker/react.js +395 -0
- package/patternfly-docs/generated/components/date-and-time/time-picker/react.js +241 -0
- package/patternfly-docs/generated/components/description-list/react-demos.js +58 -0
- package/patternfly-docs/generated/components/description-list/react.js +743 -0
- package/patternfly-docs/generated/components/divider/react.js +126 -0
- package/patternfly-docs/generated/components/drag-and-drop/react-demos.js +351 -0
- package/patternfly-docs/generated/components/drag-and-drop/react-deprecated.js +184 -0
- package/patternfly-docs/generated/components/drag-and-drop/react.js +137 -0
- package/patternfly-docs/generated/components/drawer/react.js +598 -0
- package/patternfly-docs/generated/components/dual-list-selector/react-deprecated.js +772 -0
- package/patternfly-docs/generated/components/dual-list-selector/react.js +594 -0
- package/patternfly-docs/generated/components/empty-state/react.js +199 -0
- package/patternfly-docs/generated/components/expandable-section/react-demos.js +65 -0
- package/patternfly-docs/generated/components/expandable-section/react.js +408 -0
- package/patternfly-docs/generated/components/file-upload/multiple-file-upload/react-demos.js +52 -0
- package/patternfly-docs/generated/components/file-upload/multiple-file-upload/react.js +398 -0
- package/patternfly-docs/generated/components/file-upload/simple-file-upload/react.js +749 -0
- package/patternfly-docs/generated/components/forms/checkbox/react.js +222 -0
- package/patternfly-docs/generated/components/forms/form/react.js +1106 -0
- package/patternfly-docs/generated/components/forms/form-select/react.js +208 -0
- package/patternfly-docs/generated/components/forms/radio/react.js +212 -0
- package/patternfly-docs/generated/components/forms/text-area/react.js +160 -0
- package/patternfly-docs/generated/components/forms/text-input/react.js +216 -0
- package/patternfly-docs/generated/components/helper-text/react-demos.js +180 -0
- package/patternfly-docs/generated/components/helper-text/react.js +164 -0
- package/patternfly-docs/generated/components/hero/react.js +88 -0
- package/patternfly-docs/generated/components/hint/react.js +169 -0
- package/patternfly-docs/generated/components/icon/react.js +215 -0
- package/patternfly-docs/generated/components/input-group/react.js +182 -0
- package/patternfly-docs/generated/components/jump-links/react-demos.js +154 -0
- package/patternfly-docs/generated/components/jump-links/react.js +212 -0
- package/patternfly-docs/generated/components/label/react-demos.js +57 -0
- package/patternfly-docs/generated/components/label/react.js +417 -0
- package/patternfly-docs/generated/components/list/react.js +175 -0
- package/patternfly-docs/generated/components/login-page/react.js +587 -0
- package/patternfly-docs/generated/components/masthead/react-demos.js +79 -0
- package/patternfly-docs/generated/components/masthead/react.js +291 -0
- package/patternfly-docs/generated/components/menus/application-launcher/react-demos.js +769 -0
- package/patternfly-docs/generated/components/menus/context-selector/react-demos.js +665 -0
- package/patternfly-docs/generated/components/menus/custom-menus/react-demos.js +187 -0
- package/patternfly-docs/generated/components/menus/dropdown/react-templates.js +163 -0
- package/patternfly-docs/generated/components/menus/dropdown/react.js +998 -0
- package/patternfly-docs/generated/components/menus/menu/react.js +1540 -0
- package/patternfly-docs/generated/components/menus/menu-toggle/react.js +747 -0
- package/patternfly-docs/generated/components/menus/options-menu/react-demos.js +508 -0
- package/patternfly-docs/generated/components/menus/select/react-templates.js +257 -0
- package/patternfly-docs/generated/components/menus/select/react.js +998 -0
- package/patternfly-docs/generated/components/modal/react-deprecated.js +554 -0
- package/patternfly-docs/generated/components/modal/react.js +597 -0
- package/patternfly-docs/generated/components/navigation/react-demos.js +356 -0
- package/patternfly-docs/generated/components/navigation/react.js +409 -0
- package/patternfly-docs/generated/components/notification-badge/react.js +196 -0
- package/patternfly-docs/generated/components/notification-drawer/react-demos.js +107 -0
- package/patternfly-docs/generated/components/notification-drawer/react.js +394 -0
- package/patternfly-docs/generated/components/number-input/react.js +210 -0
- package/patternfly-docs/generated/components/overflow-menu/react.js +274 -0
- package/patternfly-docs/generated/components/page/react-demos.js +149 -0
- package/patternfly-docs/generated/components/page/react.js +1352 -0
- package/patternfly-docs/generated/components/pagination/react.js +492 -0
- package/patternfly-docs/generated/components/panel/react.js +236 -0
- package/patternfly-docs/generated/components/popover/react.js +390 -0
- package/patternfly-docs/generated/components/progress/react-demos.js +59 -0
- package/patternfly-docs/generated/components/progress/react.js +283 -0
- package/patternfly-docs/generated/components/progress-stepper/react-demos.js +45 -0
- package/patternfly-docs/generated/components/progress-stepper/react.js +219 -0
- package/patternfly-docs/generated/components/search-input/react-demos.js +113 -0
- package/patternfly-docs/generated/components/search-input/react.js +263 -0
- package/patternfly-docs/generated/components/sidebar/react.js +236 -0
- package/patternfly-docs/generated/components/simple-list/react.js +200 -0
- package/patternfly-docs/generated/components/skeleton/react-demos.js +44 -0
- package/patternfly-docs/generated/components/skeleton/react.js +122 -0
- package/patternfly-docs/generated/components/skip-to-content/react.js +73 -0
- package/patternfly-docs/generated/components/slider/react.js +309 -0
- package/patternfly-docs/generated/components/spinner/react.js +111 -0
- package/patternfly-docs/generated/components/switch/react.js +163 -0
- package/patternfly-docs/generated/components/table/react-demos.js +355 -0
- package/patternfly-docs/generated/components/table/react-deprecated.js +1350 -0
- package/patternfly-docs/generated/components/table/react.js +3241 -0
- package/patternfly-docs/generated/components/tabs/react-demos.js +108 -0
- package/patternfly-docs/generated/components/tabs/react.js +1359 -0
- package/patternfly-docs/generated/components/text-input-group/react-demos.js +152 -0
- package/patternfly-docs/generated/components/text-input-group/react.js +278 -0
- package/patternfly-docs/generated/components/tile/react-deprecated.js +242 -0
- package/patternfly-docs/generated/components/timestamp/react.js +283 -0
- package/patternfly-docs/generated/components/title/react.js +94 -0
- package/patternfly-docs/generated/components/toggle-group/react.js +299 -0
- package/patternfly-docs/generated/components/toolbar/react-demos.js +66 -0
- package/patternfly-docs/generated/components/toolbar/react.js +932 -0
- package/patternfly-docs/generated/components/tooltip/react.js +241 -0
- package/patternfly-docs/generated/components/tree-view/react.js +429 -0
- package/patternfly-docs/generated/components/truncate/react.js +211 -0
- package/patternfly-docs/generated/components/wizard/react-demos.js +87 -0
- package/patternfly-docs/generated/components/wizard/react-deprecated.js +788 -0
- package/patternfly-docs/generated/components/wizard/react.js +986 -0
- package/patternfly-docs/generated/developer-guides/open-ui-automation/react.js +285 -0
- package/patternfly-docs/generated/foundations-and-styles/layouts/bullseye/react.js +70 -0
- package/patternfly-docs/generated/foundations-and-styles/layouts/flex/react.js +506 -0
- package/patternfly-docs/generated/foundations-and-styles/layouts/gallery/react.js +94 -0
- package/patternfly-docs/generated/foundations-and-styles/layouts/grid/react.js +272 -0
- package/patternfly-docs/generated/foundations-and-styles/layouts/level/react.js +87 -0
- package/patternfly-docs/generated/foundations-and-styles/layouts/split/react.js +124 -0
- package/patternfly-docs/generated/foundations-and-styles/layouts/stack/react.js +112 -0
- package/patternfly-docs/generated/index.js +1769 -0
- package/patternfly-docs/generated/patterns/card-view/react-demos.js +78 -0
- package/patternfly-docs/generated/patterns/filters/react-demos.js +141 -0
- package/patternfly-docs/generated/patterns/password-generator/react-demos.js +51 -0
- package/patternfly-docs/generated/patterns/password-strength/react-demos.js +61 -0
- package/patternfly-docs/generated/patterns/primary-detail/react-demos.js +124 -0
- package/patternfly-docs/generated/patterns/right-to-left/react-demos.js +81 -0
- package/LICENSE +0 -21
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AutoLinkHeader, Example, Link as PatternflyThemeLink } from '@patternfly/documentation-framework/components';
|
|
3
|
+
import '../../../../../react-core/src/components/ToggleGroup/examples/./toggleGroup.css';
|
|
4
|
+
import { useRef, useState } from 'react';
|
|
5
|
+
import { ToggleGroup, ToggleGroupItem, Button, Stack, StackItem } from '@patternfly/react-core';
|
|
6
|
+
import UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';
|
|
7
|
+
import RhUiCopyFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-copy-fill-icon';
|
|
8
|
+
import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';
|
|
9
|
+
const pageData = {
|
|
10
|
+
"id": "Toggle group",
|
|
11
|
+
"section": "components",
|
|
12
|
+
"subsection": "",
|
|
13
|
+
"deprecated": false,
|
|
14
|
+
"template": false,
|
|
15
|
+
"beta": false,
|
|
16
|
+
"demo": false,
|
|
17
|
+
"newImplementationLink": false,
|
|
18
|
+
"source": "react",
|
|
19
|
+
"tabName": null,
|
|
20
|
+
"slug": "/components/toggle-group/react",
|
|
21
|
+
"sourceLink": "https://github.com/patternfly/patternfly-react/blob/main/packages/react-core/src/components/ToggleGroup/examples/ToggleGroup.md",
|
|
22
|
+
"relPath": "packages/react-core/src/components/ToggleGroup/examples/ToggleGroup.md",
|
|
23
|
+
"propComponents": [
|
|
24
|
+
{
|
|
25
|
+
"name": "ToggleGroup",
|
|
26
|
+
"description": "",
|
|
27
|
+
"props": [
|
|
28
|
+
{
|
|
29
|
+
"name": "areAllGroupsDisabled",
|
|
30
|
+
"type": "boolean",
|
|
31
|
+
"description": "Disable all toggle group items under this component.",
|
|
32
|
+
"defaultValue": "false"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "aria-label",
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "Accessible label for the toggle group"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "children",
|
|
41
|
+
"type": "React.ReactNode",
|
|
42
|
+
"description": "Content rendered inside the toggle group"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "className",
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "Additional classes added to the toggle group"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "isCompact",
|
|
51
|
+
"type": "boolean",
|
|
52
|
+
"description": "Modifies the toggle group to include compact styling.",
|
|
53
|
+
"defaultValue": "false"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "isFill",
|
|
57
|
+
"type": "boolean",
|
|
58
|
+
"description": "Modifies the toggle group items to fill the available space.",
|
|
59
|
+
"defaultValue": "false"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "ToggleGroupItem",
|
|
65
|
+
"description": "",
|
|
66
|
+
"props": [
|
|
67
|
+
{
|
|
68
|
+
"name": "aria-label",
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "required when icon is used with no supporting text"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "buttonId",
|
|
74
|
+
"type": "string",
|
|
75
|
+
"description": "Optional id for the button within the toggle group item"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"name": "className",
|
|
79
|
+
"type": "string",
|
|
80
|
+
"description": "Additional classes added to the toggle group item"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "icon",
|
|
84
|
+
"type": "React.ReactNode",
|
|
85
|
+
"description": "Icon rendered inside the toggle group item"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "iconPosition",
|
|
89
|
+
"type": "'start' | 'end'",
|
|
90
|
+
"description": "Sets position of the icon when text is also passed in",
|
|
91
|
+
"defaultValue": "'start'"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "isDisabled",
|
|
95
|
+
"type": "boolean",
|
|
96
|
+
"description": "Flag indicating if the toggle group item is disabled",
|
|
97
|
+
"defaultValue": "false"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"name": "isSelected",
|
|
101
|
+
"type": "boolean",
|
|
102
|
+
"description": "Flag indicating if the toggle group item is selected",
|
|
103
|
+
"defaultValue": "false"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"name": "onChange",
|
|
107
|
+
"type": "(event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent, selected: boolean) => void",
|
|
108
|
+
"description": "A callback for when the toggle group item selection changes.",
|
|
109
|
+
"defaultValue": "() => {}"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"name": "text",
|
|
113
|
+
"type": "React.ReactNode",
|
|
114
|
+
"description": "Text rendered inside the toggle group item"
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"cssPrefix": [
|
|
120
|
+
"pf-v6-c-toggle-group"
|
|
121
|
+
],
|
|
122
|
+
"examples": [
|
|
123
|
+
"Single select toggle group",
|
|
124
|
+
"Multi select toggle group",
|
|
125
|
+
"With icons",
|
|
126
|
+
"With text and icons",
|
|
127
|
+
"Compact toggle group",
|
|
128
|
+
"Full-width toggle group"
|
|
129
|
+
]
|
|
130
|
+
};
|
|
131
|
+
pageData.liveContext = {
|
|
132
|
+
useRef,
|
|
133
|
+
useState,
|
|
134
|
+
ToggleGroup,
|
|
135
|
+
ToggleGroupItem,
|
|
136
|
+
Button,
|
|
137
|
+
Stack,
|
|
138
|
+
StackItem,
|
|
139
|
+
UndoIcon,
|
|
140
|
+
RhUiCopyFillIcon,
|
|
141
|
+
ShareSquareIcon
|
|
142
|
+
};
|
|
143
|
+
pageData.relativeImports = "import 'react-core/src/components/ToggleGroup/examples/./toggleGroup.css';,import { useRef, useState } from 'react';"
|
|
144
|
+
pageData.examples = {
|
|
145
|
+
'Single select toggle group': props =>
|
|
146
|
+
<Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';\n\nexport const ToggleGroupDefaultSingle: React.FunctionComponent = () => {\n const [isSelected, setIsSelected] = useState('');\n const handleItemClick = (event, _isSelected: boolean) => {\n const id = event.currentTarget.id;\n // Allow toggling off if clicking the already selected item\n setIsSelected(isSelected === id ? '' : id);\n };\n return (\n <ToggleGroup aria-label=\"Default with single selectable\">\n <ToggleGroupItem\n text=\"Option 1\"\n buttonId=\"toggle-group-single-1\"\n isSelected={isSelected === 'toggle-group-single-1'}\n onChange={handleItemClick}\n />\n <ToggleGroupItem\n text=\"Option 2\"\n buttonId=\"toggle-group-single-2\"\n isSelected={isSelected === 'toggle-group-single-2'}\n onChange={handleItemClick}\n />\n <ToggleGroupItem\n text=\"Option 3\"\n buttonId=\"toggle-group-single-3\"\n isSelected={isSelected === 'toggle-group-single-3'}\n onChange={handleItemClick}\n />\n </ToggleGroup>\n );\n};\n","title":"Single select toggle group","lang":"ts","className":""}}>
|
|
147
|
+
|
|
148
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
149
|
+
{`A single select toggle group allows users to toggle between multiple items.`}
|
|
150
|
+
</p>
|
|
151
|
+
|
|
152
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
153
|
+
{`To indicate whether a `}
|
|
154
|
+
|
|
155
|
+
<code {...{"className":"ws-code "}}>
|
|
156
|
+
{`<ToggleGroupItem>`}
|
|
157
|
+
</code>
|
|
158
|
+
{` is selected or not, use the `}
|
|
159
|
+
|
|
160
|
+
<code {...{"className":"ws-code "}}>
|
|
161
|
+
{`isSelected`}
|
|
162
|
+
</code>
|
|
163
|
+
{` property.`}
|
|
164
|
+
</p>
|
|
165
|
+
</Example>,
|
|
166
|
+
'Multi select toggle group': props =>
|
|
167
|
+
<Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { ToggleGroup, ToggleGroupItem, Button, Stack, StackItem } from '@patternfly/react-core';\n\nexport const ToggleGroupDefaultMultiple: React.FunctionComponent = () => {\n const [isSelected, setIsSelected] = useState({\n 'toggle-group-multiple-1': false,\n 'toggle-group-multiple-2': false\n });\n const [disableAll, setDisableAll] = useState(false);\n const handleItemClick = (event, isSelected: boolean) => {\n const id = event.currentTarget.id;\n setIsSelected((prevIsSelected) => ({ ...prevIsSelected, [id]: isSelected }));\n };\n const disableAllClick = () => {\n setDisableAll(!disableAll);\n };\n return (\n <Stack hasGutter>\n <StackItem>\n <ToggleGroup areAllGroupsDisabled={disableAll} aria-label=\"Default with multiple selectable\">\n <ToggleGroupItem\n text=\"Option 1\"\n key={0}\n buttonId=\"toggle-group-multiple-1\"\n isSelected={isSelected['toggle-group-multiple-1']}\n onChange={handleItemClick}\n />\n <ToggleGroupItem\n text=\"Option 2\"\n key={1}\n buttonId=\"toggle-group-multiple-2\"\n isSelected={isSelected['toggle-group-multiple-2']}\n onChange={handleItemClick}\n />\n <ToggleGroupItem text=\"Option 3\" key={2} isDisabled />\n </ToggleGroup>\n </StackItem>\n <StackItem>\n <Button onClick={disableAllClick}>{disableAll ? 'Enable back' : 'Disable all'}</Button>\n </StackItem>\n </Stack>\n );\n};\n","title":"Multi select toggle group","lang":"ts","className":""}}>
|
|
168
|
+
|
|
169
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
170
|
+
{`A multi select toggle group allows users to select multiple items at once.`}
|
|
171
|
+
</p>
|
|
172
|
+
|
|
173
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
174
|
+
{`When a toggle item is disabled it cannot be selected. Click the "Disable all" button in the following example to see this in action.`}
|
|
175
|
+
</p>
|
|
176
|
+
</Example>,
|
|
177
|
+
'With icons': props =>
|
|
178
|
+
<Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';\nimport UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';\nimport RhUiCopyFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-copy-fill-icon';\nimport ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';\n\nexport const ToggleGroupIcon: React.FunctionComponent = () => {\n const [isSelected, setIsSelected] = useState({\n 'toggle-group-icons-1': false,\n 'toggle-group-icons-2': false,\n 'toggle-group-icons-3': true\n });\n const handleItemClick = (event, isSelected: boolean) => {\n const id = event.currentTarget.id;\n setIsSelected((prevIsSelected) => ({ ...prevIsSelected, [id]: isSelected }));\n };\n return (\n <ToggleGroup aria-label=\"Icon variant toggle group\">\n <ToggleGroupItem\n icon={<RhUiCopyFillIcon />}\n aria-label=\"copy\"\n buttonId=\"toggle-group-icons-1\"\n isSelected={isSelected['toggle-group-icons-1']}\n onChange={handleItemClick}\n />\n <ToggleGroupItem\n icon={<UndoIcon />}\n aria-label=\"undo\"\n buttonId=\"toggle-group-icons-2\"\n isSelected={isSelected['toggle-group-icons-2']}\n onChange={handleItemClick}\n />\n <ToggleGroupItem\n icon={<ShareSquareIcon />}\n aria-label=\"share square\"\n buttonId=\"toggle-group-icons-3\"\n isSelected={isSelected['toggle-group-icons-3']}\n onChange={handleItemClick}\n />\n </ToggleGroup>\n );\n};\n","title":"With icons","lang":"ts","className":""}}>
|
|
179
|
+
|
|
180
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
181
|
+
{`You can use a recognizable icon as a toggle item label.`}
|
|
182
|
+
</p>
|
|
183
|
+
|
|
184
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
185
|
+
{`To do this, pass an imported icon to the `}
|
|
186
|
+
|
|
187
|
+
<code {...{"className":"ws-code "}}>
|
|
188
|
+
{`icon`}
|
|
189
|
+
</code>
|
|
190
|
+
{` property of a `}
|
|
191
|
+
|
|
192
|
+
<code {...{"className":"ws-code "}}>
|
|
193
|
+
{`<ToggleGroupItem>`}
|
|
194
|
+
</code>
|
|
195
|
+
{`.`}
|
|
196
|
+
</p>
|
|
197
|
+
</Example>,
|
|
198
|
+
'With text and icons': props =>
|
|
199
|
+
<Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';\nimport UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';\nimport RhUiCopyFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-copy-fill-icon';\nimport ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';\n\nexport const ToggleGroupIcon: React.FunctionComponent = () => {\n const [isSelected, setIsSelected] = useState({\n 'text-icons-1': false,\n 'text-icons-2': false,\n 'text-icons-3': true\n });\n const handleItemClick = (event, isSelected: boolean) => {\n const id = event.currentTarget.id;\n setIsSelected((prevIsSelected) => ({ ...prevIsSelected, [id]: isSelected }));\n };\n return (\n <>\n <ToggleGroup aria-label=\"Text and icon toggle group with icons at start\">\n <ToggleGroupItem\n icon={<RhUiCopyFillIcon />}\n text=\"Copy\"\n buttonId=\"toggle-group-text-icons-1\"\n isSelected={isSelected['toggle-group-text-icons-1']}\n onChange={handleItemClick}\n />\n <ToggleGroupItem\n icon={<UndoIcon />}\n text=\"Undo\"\n buttonId=\"toggle-group-text-icons-2\"\n isSelected={isSelected['toggle-group-text-icons-2']}\n onChange={handleItemClick}\n />\n <ToggleGroupItem\n icon={<ShareSquareIcon />}\n text=\"Share\"\n buttonId=\"toggle-group-text-icons-3\"\n isSelected={isSelected['toggle-group-text-icons-3']}\n onChange={handleItemClick}\n />\n </ToggleGroup>\n <br />\n <ToggleGroup aria-label=\"Text and icon toggle group with icons at end\">\n <ToggleGroupItem\n icon={<RhUiCopyFillIcon />}\n iconPosition=\"end\"\n text=\"Copy\"\n buttonId=\"toggle-group-text-icons-4\"\n isSelected={isSelected['toggle-group-text-icons-4']}\n onChange={handleItemClick}\n />\n <ToggleGroupItem\n icon={<UndoIcon />}\n iconPosition=\"end\"\n text=\"Undo\"\n buttonId=\"toggle-group-text-icons-5\"\n isSelected={isSelected['toggle-group-text-icons-5']}\n onChange={handleItemClick}\n />\n <ToggleGroupItem\n icon={<ShareSquareIcon />}\n iconPosition=\"end\"\n text=\"Share\"\n buttonId=\"toggle-group-text-icons-6\"\n isSelected={isSelected['toggle-group-text-icons-6']}\n onChange={handleItemClick}\n />\n </ToggleGroup>\n </>\n );\n};\n","title":"With text and icons","lang":"ts","className":""}}>
|
|
200
|
+
|
|
201
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
202
|
+
{`Adding text to a toggle item with an icon helps clarify the button's function.`}
|
|
203
|
+
</p>
|
|
204
|
+
|
|
205
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
206
|
+
{`To do this, pass a descriptive label to the `}
|
|
207
|
+
|
|
208
|
+
<code {...{"className":"ws-code "}}>
|
|
209
|
+
{`text`}
|
|
210
|
+
</code>
|
|
211
|
+
{` property of a `}
|
|
212
|
+
|
|
213
|
+
<code {...{"className":"ws-code "}}>
|
|
214
|
+
{`<ToggleGroupItem>`}
|
|
215
|
+
</code>
|
|
216
|
+
{`.`}
|
|
217
|
+
</p>
|
|
218
|
+
|
|
219
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
220
|
+
{`When passing both `}
|
|
221
|
+
|
|
222
|
+
<code {...{"className":"ws-code "}}>
|
|
223
|
+
{`text`}
|
|
224
|
+
</code>
|
|
225
|
+
{` and `}
|
|
226
|
+
|
|
227
|
+
<code {...{"className":"ws-code "}}>
|
|
228
|
+
{`icon`}
|
|
229
|
+
</code>
|
|
230
|
+
{` properties to a `}
|
|
231
|
+
|
|
232
|
+
<code {...{"className":"ws-code "}}>
|
|
233
|
+
{`<ToggleGroupItem>`}
|
|
234
|
+
</code>
|
|
235
|
+
{`, you can also pass in `}
|
|
236
|
+
|
|
237
|
+
<code {...{"className":"ws-code "}}>
|
|
238
|
+
{`iconPosition`}
|
|
239
|
+
</code>
|
|
240
|
+
{` to determine whether the icon is rendered at the start or end of the item.`}
|
|
241
|
+
</p>
|
|
242
|
+
</Example>,
|
|
243
|
+
'Compact toggle group': props =>
|
|
244
|
+
<Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';\n\nexport const ToggleGroupCompact: React.FunctionComponent = () => {\n const [isSelected, setIsSelected] = useState({\n 'toggle-group-compact-1': false,\n 'toggle-group-compact-2': false\n });\n const handleItemClick = (event, isSelected: boolean) => {\n const id = event.currentTarget.id;\n setIsSelected((prevIsSelected) => ({ ...prevIsSelected, [id]: isSelected }));\n };\n return (\n <ToggleGroup isCompact aria-label=\"Compact variant toggle group\">\n <ToggleGroupItem\n text=\"Option 1\"\n buttonId=\"toggle-group-compact-1\"\n isSelected={isSelected['toggle-group-compact-1']}\n onChange={handleItemClick}\n />\n <ToggleGroupItem\n text=\"Option 2\"\n buttonId=\"toggle-group-compact-2\"\n isSelected={isSelected['toggle-group-compact-2']}\n onChange={handleItemClick}\n />\n <ToggleGroupItem text=\"Option 3\" isDisabled />\n </ToggleGroup>\n );\n};\n","title":"Compact toggle group","lang":"ts","className":""}}>
|
|
245
|
+
|
|
246
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
247
|
+
{`When space in a UI is limited, you can use a compact toggle group.`}
|
|
248
|
+
</p>
|
|
249
|
+
|
|
250
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
251
|
+
{`To apply compact styling to a `}
|
|
252
|
+
|
|
253
|
+
<code {...{"className":"ws-code "}}>
|
|
254
|
+
{`<ToggleGroup>`}
|
|
255
|
+
</code>
|
|
256
|
+
{`, use `}
|
|
257
|
+
|
|
258
|
+
<code {...{"className":"ws-code "}}>
|
|
259
|
+
{`isCompact`}
|
|
260
|
+
</code>
|
|
261
|
+
{`.`}
|
|
262
|
+
</p>
|
|
263
|
+
</Example>,
|
|
264
|
+
'Full-width toggle group': props =>
|
|
265
|
+
<Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';\n\nexport const ToggleGroupFill: React.FunctionComponent = () => {\n const [isSelectedBasic, setIsSelectedBasic] = useState('toggle-group-fill-1');\n const [isSelectedMulti, setIsSelectedMulti] = useState({\n 'toggle-group-fill-multi-1': false,\n 'toggle-group-fill-multi-2': false,\n 'toggle-group-fill-multi-3': false\n });\n const [isSelectedDisabled, setIsSelectedDisabled] = useState('toggle-group-fill-disabled-1');\n\n const handleItemClickBasic = (event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {\n const id = event.currentTarget.id;\n setIsSelectedBasic(id);\n };\n\n const handleItemClickMulti = (\n event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent,\n isSelected: boolean\n ) => {\n const id = event.currentTarget.id;\n setIsSelectedMulti((prevIsSelected) => ({ ...prevIsSelected, [id]: isSelected }));\n };\n\n const handleItemClickDisabled = (event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {\n const id = event.currentTarget.id;\n setIsSelectedDisabled(id);\n };\n\n return (\n <>\n <ToggleGroup isFill aria-label=\"Full width toggle group\">\n <ToggleGroupItem\n text=\"Option 1\"\n buttonId=\"toggle-group-fill-1\"\n isSelected={isSelectedBasic === 'toggle-group-fill-1'}\n onChange={handleItemClickBasic}\n />\n <ToggleGroupItem\n text=\"Option 2\"\n buttonId=\"toggle-group-fill-2\"\n isSelected={isSelectedBasic === 'toggle-group-fill-2'}\n onChange={handleItemClickBasic}\n />\n <ToggleGroupItem\n text=\"Option 3\"\n buttonId=\"toggle-group-fill-3\"\n isSelected={isSelectedBasic === 'toggle-group-fill-3'}\n onChange={handleItemClickBasic}\n />\n </ToggleGroup>\n <br />\n <ToggleGroup isFill aria-label=\"Full width multi-select toggle group\">\n <ToggleGroupItem\n text=\"Option 1\"\n buttonId=\"toggle-group-fill-multi-1\"\n isSelected={isSelectedMulti['toggle-group-fill-multi-1']}\n onChange={handleItemClickMulti}\n />\n <ToggleGroupItem\n text=\"Option 2\"\n buttonId=\"toggle-group-fill-multi-2\"\n isSelected={isSelectedMulti['toggle-group-fill-multi-2']}\n onChange={handleItemClickMulti}\n />\n <ToggleGroupItem\n text=\"Option 3\"\n buttonId=\"toggle-group-fill-multi-3\"\n isSelected={isSelectedMulti['toggle-group-fill-multi-3']}\n onChange={handleItemClickMulti}\n />\n </ToggleGroup>\n <br />\n <ToggleGroup isFill aria-label=\"Full width toggle group with disabled item\">\n <ToggleGroupItem\n text=\"Option 1\"\n buttonId=\"toggle-group-fill-disabled-1\"\n isSelected={isSelectedDisabled === 'toggle-group-fill-disabled-1'}\n onChange={handleItemClickDisabled}\n />\n <ToggleGroupItem\n text=\"Option 2\"\n buttonId=\"toggle-group-fill-disabled-2\"\n isSelected={isSelectedDisabled === 'toggle-group-fill-disabled-2'}\n onChange={handleItemClickDisabled}\n />\n <ToggleGroupItem text=\"Option 3\" isDisabled />\n </ToggleGroup>\n </>\n );\n};\n","title":"Full-width toggle group","lang":"ts","className":""}}>
|
|
266
|
+
|
|
267
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
268
|
+
{`To make toggle group items fill the available horizontal space, use `}
|
|
269
|
+
|
|
270
|
+
<code {...{"className":"ws-code "}}>
|
|
271
|
+
{`isFill`}
|
|
272
|
+
</code>
|
|
273
|
+
{` on a `}
|
|
274
|
+
|
|
275
|
+
<code {...{"className":"ws-code "}}>
|
|
276
|
+
{`<ToggleGroup>`}
|
|
277
|
+
</code>
|
|
278
|
+
{`. The following example shows full-width toggle groups for a single-select, multi-select, and single-select with disabled item.`}
|
|
279
|
+
</p>
|
|
280
|
+
</Example>
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
const Component = () => (
|
|
284
|
+
<React.Fragment>
|
|
285
|
+
<AutoLinkHeader {...{"id":"examples","headingLevel":"h2","className":"ws-title ws-h2"}}>
|
|
286
|
+
{`Examples`}
|
|
287
|
+
</AutoLinkHeader>
|
|
288
|
+
{React.createElement(pageData.examples["Single select toggle group"])}
|
|
289
|
+
{React.createElement(pageData.examples["Multi select toggle group"])}
|
|
290
|
+
{React.createElement(pageData.examples["With icons"])}
|
|
291
|
+
{React.createElement(pageData.examples["With text and icons"])}
|
|
292
|
+
{React.createElement(pageData.examples["Compact toggle group"])}
|
|
293
|
+
{React.createElement(pageData.examples["Full-width toggle group"])}
|
|
294
|
+
</React.Fragment>
|
|
295
|
+
);
|
|
296
|
+
Component.displayName = 'ComponentsToggleGroupReactDocs';
|
|
297
|
+
Component.pageData = pageData;
|
|
298
|
+
|
|
299
|
+
export default Component;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AutoLinkHeader, Example, Link as PatternflyThemeLink } from '@patternfly/documentation-framework/components';
|
|
3
|
+
import { Fragment, useState } from 'react';
|
|
4
|
+
import PauseIcon from '@patternfly/react-icons/dist/esm/icons/pause-icon';
|
|
5
|
+
import PlayIcon from '@patternfly/react-icons/dist/esm/icons/play-icon';
|
|
6
|
+
import ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-icon';
|
|
7
|
+
import RhMicronsExternalLinkIcon from '@patternfly/react-icons/dist/esm/icons/rh-microns-external-link-icon';
|
|
8
|
+
import DownloadIcon from '@patternfly/react-icons/dist/esm/icons/download-icon';
|
|
9
|
+
import RhUiSettingsFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-settings-fill-icon';
|
|
10
|
+
import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
|
|
11
|
+
import RhMicronsCloseIcon from '@patternfly/react-icons/dist/esm/icons/rh-microns-close-icon';
|
|
12
|
+
import { DashboardWrapper } from '@patternfly/react-core/dist/js/demos/DashboardWrapper';
|
|
13
|
+
import srcImportconsolelogviewertoolbardemo from './react-demos/console-log-viewer-toolbar-demo.png';
|
|
14
|
+
const pageData = {
|
|
15
|
+
"id": "Toolbar",
|
|
16
|
+
"section": "components",
|
|
17
|
+
"subsection": "",
|
|
18
|
+
"deprecated": false,
|
|
19
|
+
"template": false,
|
|
20
|
+
"beta": false,
|
|
21
|
+
"demo": false,
|
|
22
|
+
"newImplementationLink": false,
|
|
23
|
+
"source": "react-demos",
|
|
24
|
+
"tabName": null,
|
|
25
|
+
"slug": "/components/toolbar/react-demos",
|
|
26
|
+
"sourceLink": "https://github.com/patternfly/patternfly-react/blob/main/packages/react-core/src/demos/Toolbar.md",
|
|
27
|
+
"relPath": "packages/react-core/src/demos/Toolbar.md",
|
|
28
|
+
"fullscreenExamples": [
|
|
29
|
+
"Console log viewer toolbar demo"
|
|
30
|
+
]
|
|
31
|
+
};
|
|
32
|
+
pageData.liveContext = {
|
|
33
|
+
Fragment,
|
|
34
|
+
useState,
|
|
35
|
+
PauseIcon,
|
|
36
|
+
PlayIcon,
|
|
37
|
+
ExpandIcon,
|
|
38
|
+
RhMicronsExternalLinkIcon,
|
|
39
|
+
DownloadIcon,
|
|
40
|
+
RhUiSettingsFillIcon,
|
|
41
|
+
SearchIcon,
|
|
42
|
+
RhMicronsCloseIcon,
|
|
43
|
+
DashboardWrapper
|
|
44
|
+
};
|
|
45
|
+
pageData.examples = {
|
|
46
|
+
'Console log viewer toolbar demo': props =>
|
|
47
|
+
<Example {...pageData} {...props} thumbnail={srcImportconsolelogviewertoolbardemo} {...{"code":"import { Fragment, useState } from 'react';\nimport {\n Badge,\n Button,\n MenuToggle,\n SearchInput,\n Select,\n SelectList,\n SelectOption,\n PageSection,\n Toolbar,\n ToolbarContent,\n ToolbarGroup,\n ToolbarItem,\n ToolbarToggleGroup,\n Tooltip,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuFooter\n} from '@patternfly/react-core';\nimport { DashboardWrapper } from '@patternfly/react-core/dist/js/demos/DashboardWrapper';\nimport PauseIcon from '@patternfly/react-icons/dist/esm/icons/pause-icon';\nimport PlayIcon from '@patternfly/react-icons/dist/esm/icons/play-icon';\nimport ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-icon';\nimport RhMicronsExternalLinkIcon from '@patternfly/react-icons/dist/esm/icons/rh-microns-external-link-icon';\nimport DownloadIcon from '@patternfly/react-icons/dist/esm/icons/download-icon';\nimport SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';\n\nexport const ConsoleLogViewerToolbar: React.FC = () => {\n const firstOptions = {\n 'container-sample-1': { type: 'C' },\n 'container-sample-2': { type: 'D' },\n 'container-sample-3': { type: 'E' }\n };\n\n const [containerExpanded, setContainerExpanded] = useState(false);\n const [containerExpandedMobile, setContainerExpandedMobile] = useState(false);\n const [containerSelected, setContainerSelected] = useState(Object.keys(firstOptions)[0]);\n const [optionExpanded, setOptionExpanded] = useState(false);\n const [optionExpandedMobile, setOptionExpandedMobile] = useState(false);\n const [isPaused, setIsPaused] = useState(false);\n const [firstSwitchChecked, setFirstSwitchChecked] = useState(true);\n const [secondSwitchChecked, setSecondSwitchChecked] = useState(false);\n const [searchValue, setSearchValue] = useState('');\n const [searchResultsCount, setSearchResultsCount] = useState(3);\n const [currentSearchResult, setCurrentSearchResult] = useState(1);\n const [externalExpanded, setExternalExpanded] = useState(false);\n const [externalExpandedMobile, setExternalExpandedMobile] = useState(false);\n const [downloadExpanded, setDownloadExpanded] = useState(false);\n const [downloadExpandedMobile, setDownloadExpandedMobile] = useState(false);\n const [mobileView, setMobileView] = useState(window.innerWidth >= 1450 ? false : true);\n\n const onContainerToggle = () => {\n setContainerExpanded((prevState) => !prevState);\n };\n\n const onContainerToggleMobile = () => {\n setContainerExpandedMobile((prevState) => !prevState);\n };\n\n const onContainerSelect = (_event: React.MouseEvent | undefined, selection: string | number | undefined) => {\n setContainerSelected(selection as string);\n setContainerExpanded(false);\n };\n\n const onContainerSelectMobile = (_event: React.MouseEvent | undefined, selection: string | number | undefined) => {\n setContainerSelected(selection as string);\n setContainerExpandedMobile(false);\n };\n\n const onOptionSelect = (_event: React.MouseEvent | undefined) => {};\n\n const onOptionSelectMobile = (_event: React.MouseEvent | undefined) => {};\n\n const onOptionToggle = () => {\n setOptionExpanded((prevState) => !prevState);\n };\n\n const onOptionToggleMobile = () => {\n setOptionExpandedMobile((prevState) => !prevState);\n };\n\n const onExternalToggle = () => {\n setExternalExpanded((prevState) => !prevState);\n };\n\n const onExternalToggleMobile = () => {\n setExternalExpandedMobile((prevState) => !prevState);\n };\n\n const onExternalSelect = () => {\n setExternalExpanded(false);\n };\n\n const onExternalSelectMobile = () => {\n setExternalExpandedMobile(false);\n };\n\n const onDownloadToggle = () => {\n setDownloadExpanded((prevState) => !prevState);\n };\n\n const onDownloadToggleMobile = () => {\n setDownloadExpandedMobile((prevState) => !prevState);\n };\n\n const onDownloadSelect = () => {\n setDownloadExpanded(false);\n };\n\n const onDownloadSelectMobile = () => {\n setDownloadExpandedMobile(false);\n };\n\n const onExternalClick = (_event: React.MouseEvent<HTMLButtonElement>) => {\n // eslint-disable-next-line no-console\n console.log('External logs opened!');\n };\n\n const onDownloadClick = (_event: React.MouseEvent<HTMLButtonElement>) => {\n // eslint-disable-next-line no-console\n console.log('Download action clicked!');\n };\n\n const pauseOrStart = (_event: React.MouseEvent<HTMLButtonElement>) => {\n setIsPaused((prevState) => !prevState);\n };\n\n const handleFirstSwitchChange = () => {\n setFirstSwitchChecked((prevState) => !prevState);\n };\n\n const handleSecondSwitchChange = () => {\n setSecondSwitchChecked((prevState) => !prevState);\n };\n\n const onClearLogs = () => {\n setOptionExpanded(false);\n // eslint-disable-next-line no-console\n console.log('Logs cleared!');\n };\n\n const onClearLogsMobile = () => {\n setOptionExpandedMobile(false);\n // eslint-disable-next-line no-console\n console.log('Logs cleared!');\n };\n\n const onSearchChange = (_event: React.FormEvent<HTMLInputElement>, value: string) => {\n setSearchValue(value);\n setSearchResultsCount(3);\n };\n\n const onSearchClear = (_event: React.SyntheticEvent<HTMLButtonElement, Event>) => {\n setSearchValue('');\n setSearchResultsCount(0);\n setCurrentSearchResult(1);\n };\n\n const onSearchNext = (_event: React.SyntheticEvent<HTMLButtonElement, Event>) => {\n setCurrentSearchResult((prevState) => {\n const newCurrentResult = prevState + 1;\n\n return newCurrentResult <= searchResultsCount ? newCurrentResult : searchResultsCount;\n });\n };\n\n const onSearchPrevious = (_event: React.SyntheticEvent<HTMLButtonElement, Event>) => {\n setCurrentSearchResult((prevState) => {\n const newCurrentResult = prevState - 1;\n return newCurrentResult > 0 ? newCurrentResult : 1;\n });\n };\n\n const onPageResize = (\n _event: MouseEvent | TouchEvent | React.KeyboardEvent<Element>,\n { windowSize }: { windowSize: number }\n ) => {\n if (windowSize >= 1450) {\n setMobileView(false);\n } else {\n setMobileView(true);\n }\n };\n\n const externalDropdownItems = (\n <>\n <DropdownItem key=\"action-1\" onClick={onExternalClick}>\n External logs 1\n </DropdownItem>\n <DropdownItem key=\"action-2\" onClick={onExternalClick}>\n External logs 2\n </DropdownItem>\n <DropdownItem key=\"action-3\" onClick={onExternalClick}>\n External logs 3\n </DropdownItem>\n </>\n );\n\n const downloadDropdownItems = (\n <>\n <DropdownItem key=\"action-4\" onClick={onDownloadClick}>\n Current container logs\n </DropdownItem>\n <DropdownItem key=\"action-5\" onClick={onDownloadClick}>\n All container logs\n </DropdownItem>\n </>\n );\n\n const optionSelectItems = (\n <>\n <SelectOption key=\"switch-1\" hasCheckbox isSelected={firstSwitchChecked} onClick={handleFirstSwitchChange}>\n Display timestamp\n </SelectOption>\n <SelectOption key=\"switch-2\" hasCheckbox isSelected={secondSwitchChecked} onClick={handleSecondSwitchChange}>\n Wrap lines\n </SelectOption>\n </>\n );\n\n const selectDropdownContent = (\n <>\n <SelectList>\n {Object.entries(firstOptions).map(([value, { type }]) => (\n <SelectOption key={value} hasCheckbox value={value} isSelected={containerSelected === value}>\n <Badge key={value}>{type}</Badge>\n {` ${value}`}\n </SelectOption>\n ))}\n </SelectList>\n </>\n );\n\n const clearLogsFooter = (type: string) => (\n <MenuFooter key=\"clear-log\" onClick={type === 'mobile' ? onClearLogsMobile : onClearLogs}>\n <Button variant=\"link\" isInline>\n Clear logs\n </Button>\n </MenuFooter>\n );\n\n const selectToggleContent = ({ showText }: { showText: boolean }) => {\n if (!containerSelected) {\n return 'Select';\n }\n return (\n <Fragment>\n <Badge>{firstOptions[containerSelected].type}</Badge>\n {showText && ` ${containerSelected}`}\n </Fragment>\n );\n };\n\n const LogsSearchInput = (\n <ToolbarToggleGroup toggleIcon={<SearchIcon />} breakpoint=\"lg\">\n <ToolbarItem>\n <SearchInput\n placeholder=\"Search logs\"\n value={searchValue}\n onChange={onSearchChange}\n onClear={onSearchClear}\n resultsCount={`${currentSearchResult} / ${searchResultsCount}`}\n onNextClick={onSearchNext}\n onPreviousClick={onSearchPrevious}\n />\n </ToolbarItem>\n </ToolbarToggleGroup>\n );\n\n const leftAlignedItemsDesktop = (\n <Fragment>\n <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>\n <Select\n role=\"menu\"\n toggle={(toggleRef) => (\n <MenuToggle\n ref={toggleRef}\n onClick={onContainerToggle}\n isExpanded={containerExpanded}\n style={{ width: '250px' }}\n >\n {selectToggleContent({ showText: true })}\n </MenuToggle>\n )}\n onSelect={onContainerSelect}\n onOpenChange={(isOpen) => setContainerExpanded(isOpen)}\n selected={containerSelected}\n isOpen={containerExpanded}\n >\n {selectDropdownContent}\n </Select>\n </ToolbarItem>\n <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>\n <Select\n isOpen={optionExpanded}\n role=\"menu\"\n onOpenChange={(isOpen) => setOptionExpanded(isOpen)}\n onOpenChangeKeys={['Escape']}\n onSelect={onOptionSelect}\n toggle={(toggleRef) => (\n <MenuToggle ref={toggleRef} isExpanded={optionExpanded} onClick={onOptionToggle} isSettings>\n Options\n </MenuToggle>\n )}\n >\n <SelectList>{optionSelectItems}</SelectList>\n {clearLogsFooter('desktop')}\n </Select>\n </ToolbarItem>\n <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>\n <Button\n variant={isPaused ? 'plain' : 'link'}\n onClick={pauseOrStart}\n icon={isPaused ? <PlayIcon /> : <PauseIcon />}\n >\n {isPaused ? ` Resume Log` : ` Pause Log`}\n </Button>\n </ToolbarItem>\n </Fragment>\n );\n\n const leftAlignedItemsMobile = (\n <Fragment>\n <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>\n <Tooltip position=\"top\" content={<div>Select container</div>}>\n <Select\n role=\"menu\"\n toggle={(toggleRef) => (\n <MenuToggle ref={toggleRef} onClick={onContainerToggleMobile} isExpanded={containerExpandedMobile}>\n {selectToggleContent({ showText: false })}\n </MenuToggle>\n )}\n onSelect={onContainerSelectMobile}\n onOpenChange={(isOpen) => setContainerExpandedMobile(isOpen)}\n selected={containerSelected}\n isOpen={containerExpandedMobile}\n >\n {selectDropdownContent}\n </Select>\n </Tooltip>\n </ToolbarItem>\n <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>\n <Tooltip position=\"top\" content={<div>Options</div>}>\n <Select\n role=\"menu\"\n isOpen={optionExpandedMobile}\n onOpenChange={(isOpen) => setOptionExpandedMobile(isOpen)}\n onOpenChangeKeys={['Escape']}\n onSelect={onOptionSelectMobile}\n toggle={(toggleRef) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={optionExpandedMobile}\n onClick={onOptionToggleMobile}\n isSettings\n aria-label=\"Options\"\n />\n )}\n >\n <SelectList>{optionSelectItems}</SelectList>\n {clearLogsFooter('mobile')}\n </Select>\n </Tooltip>\n </ToolbarItem>\n <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>\n <Tooltip position=\"top\" content={<div>{isPaused ? 'Resume log' : 'Pause log'}</div>}>\n <Button\n variant=\"plain\"\n onClick={pauseOrStart}\n aria-label={isPaused ? 'Play' : 'Paused'}\n icon={isPaused ? <PlayIcon /> : <PauseIcon />}\n />\n </Tooltip>\n </ToolbarItem>\n </Fragment>\n );\n\n const leftAlignedItems = (\n <Fragment>\n {leftAlignedItemsDesktop}\n {leftAlignedItemsMobile}\n </Fragment>\n );\n\n const rightAlignedItemsDesktop = (\n <Fragment>\n <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>\n <Dropdown\n isOpen={externalExpanded}\n onOpenChange={(isOpen) => setExternalExpanded(isOpen)}\n onSelect={onExternalSelect}\n toggle={(toggleRef) => (\n <MenuToggle ref={toggleRef} isExpanded={externalExpanded} onClick={onExternalToggle}>\n External logs\n </MenuToggle>\n )}\n >\n <DropdownList>{externalDropdownItems}</DropdownList>\n </Dropdown>\n </ToolbarItem>\n <ToolbarItem visibility={{ default: 'hidden', '2xl': 'visible' }}>\n <Dropdown\n isOpen={downloadExpanded}\n onOpenChange={(isOpen) => setDownloadExpanded(isOpen)}\n onSelect={onDownloadSelect}\n toggle={(toggleRef) => (\n <MenuToggle ref={toggleRef} isExpanded={downloadExpanded} onClick={onDownloadToggle}>\n Download\n </MenuToggle>\n )}\n >\n <DropdownList>{downloadDropdownItems}</DropdownList>\n </Dropdown>\n </ToolbarItem>\n </Fragment>\n );\n\n const rightAlignedItemsMobile = (\n <Fragment>\n <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>\n <Tooltip position=\"top\" content={<div>External logs</div>}>\n <Dropdown\n isOpen={externalExpandedMobile}\n onOpenChange={(isOpen) => setExternalExpandedMobile(isOpen)}\n onSelect={onExternalSelectMobile}\n toggle={(toggleRef) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={externalExpandedMobile}\n onClick={onExternalToggleMobile}\n icon={<RhMicronsExternalLinkIcon />}\n aria-label=\"External logs\"\n />\n )}\n >\n <DropdownList>{externalDropdownItems}</DropdownList>\n </Dropdown>\n </Tooltip>\n </ToolbarItem>\n <ToolbarItem visibility={{ default: 'visible', '2xl': 'hidden' }}>\n <Tooltip position=\"top\" content={<div>Download</div>}>\n <Dropdown\n isOpen={downloadExpandedMobile}\n onOpenChange={(isOpen) => setDownloadExpandedMobile(isOpen)}\n onSelect={onDownloadSelectMobile}\n popperProps={{ position: 'right' }}\n toggle={(toggleRef) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={downloadExpandedMobile}\n onClick={onDownloadToggleMobile}\n icon={<DownloadIcon />}\n aria-label=\"Download\"\n />\n )}\n >\n <DropdownList>{downloadDropdownItems}</DropdownList>\n </Dropdown>\n </Tooltip>\n </ToolbarItem>\n </Fragment>\n );\n\n const rightAlignedItems = (\n <Fragment>\n <ToolbarItem>{LogsSearchInput}</ToolbarItem>\n {rightAlignedItemsDesktop}\n {rightAlignedItemsMobile}\n <ToolbarItem>\n <Tooltip position=\"top\" content={<div>Expand</div>}>\n <Button variant=\"plain\" aria-label=\"expand\" icon={<ExpandIcon />} />\n </Tooltip>\n </ToolbarItem>\n </Fragment>\n );\n\n const items = (\n <Fragment>\n <ToolbarGroup align={{ default: 'alignStart' }}>{leftAlignedItems}</ToolbarGroup>\n <ToolbarGroup align={{ default: 'alignEnd' }}>{rightAlignedItems}</ToolbarGroup>\n </Fragment>\n );\n\n return (\n <DashboardWrapper sidebarNavOpen={!mobileView} onPageResize={onPageResize}>\n <PageSection aria-label=\"Log viewer controls\">\n <Toolbar id=\"log-viewer-toolbar\" inset={{ default: 'insetNone' }}>\n <ToolbarContent>{items}</ToolbarContent>\n </Toolbar>\n </PageSection>\n </DashboardWrapper>\n );\n};\n","title":"Console log viewer toolbar demo","lang":"ts","isFullscreen":true,"className":""}}>
|
|
48
|
+
|
|
49
|
+
<p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
|
|
50
|
+
{`This is an example of toolbar usage in log viewer.`}
|
|
51
|
+
</p>
|
|
52
|
+
</Example>
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const Component = () => (
|
|
56
|
+
<React.Fragment>
|
|
57
|
+
<AutoLinkHeader {...{"id":"demos","headingLevel":"h2","className":"ws-title ws-h2"}}>
|
|
58
|
+
{`Demos`}
|
|
59
|
+
</AutoLinkHeader>
|
|
60
|
+
{React.createElement(pageData.examples["Console log viewer toolbar demo"])}
|
|
61
|
+
</React.Fragment>
|
|
62
|
+
);
|
|
63
|
+
Component.displayName = 'ComponentsToolbarReactDemosDocs';
|
|
64
|
+
Component.pageData = pageData;
|
|
65
|
+
|
|
66
|
+
export default Component;
|