@patternfly/react-core 5.4.0-prerelease.2 → 5.4.0-prerelease.3
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 +6 -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/DualListSelector/package.json +1 -1
- package/dist/dynamic/next/components/Modal/package.json +1 -1
- package/dist/dynamic/next/components/package.json +1 -1
- package/dist/dynamic/styles/package.json +1 -1
- package/dist/dynamic-modules.json +772 -0
- package/dist/esm/components/TreeView/TreeView.d.ts +13 -0
- package/dist/esm/components/TreeView/TreeView.d.ts.map +1 -1
- package/dist/esm/components/TreeView/TreeView.js +2 -2
- package/dist/esm/components/TreeView/TreeView.js.map +1 -1
- package/dist/esm/components/TreeView/TreeViewList.d.ts +13 -0
- package/dist/esm/components/TreeView/TreeViewList.d.ts.map +1 -1
- package/dist/esm/components/TreeView/TreeViewList.js +2 -2
- package/dist/esm/components/TreeView/TreeViewList.js.map +1 -1
- package/dist/esm/components/TreeView/TreeViewListItem.d.ts.map +1 -1
- package/dist/esm/components/TreeView/TreeViewListItem.js +8 -8
- package/dist/esm/components/TreeView/TreeViewListItem.js.map +1 -1
- package/dist/js/components/TreeView/TreeView.d.ts +13 -0
- package/dist/js/components/TreeView/TreeView.d.ts.map +1 -1
- package/dist/js/components/TreeView/TreeView.js +2 -2
- package/dist/js/components/TreeView/TreeView.js.map +1 -1
- package/dist/js/components/TreeView/TreeViewList.d.ts +13 -0
- package/dist/js/components/TreeView/TreeViewList.d.ts.map +1 -1
- package/dist/js/components/TreeView/TreeViewList.js +2 -2
- package/dist/js/components/TreeView/TreeViewList.js.map +1 -1
- package/dist/js/components/TreeView/TreeViewListItem.d.ts.map +1 -1
- package/dist/js/components/TreeView/TreeViewListItem.js +8 -8
- package/dist/js/components/TreeView/TreeViewListItem.js.map +1 -1
- package/dist/umd/react-core.min.js +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/TreeView/TreeView.tsx +23 -1
- package/src/components/TreeView/TreeViewList.tsx +24 -1
- package/src/components/TreeView/TreeViewListItem.tsx +13 -7
- package/src/components/TreeView/__tests__/__snapshots__/TreeViewList.test.tsx.snap +2 -0
- package/src/components/TreeView/__tests__/__snapshots__/TreeViewListItem.test.tsx.snap +2 -0
- package/src/components/TreeView/examples/TreeView.md +12 -2
- package/src/components/TreeView/examples/TreeViewCompact.tsx +1 -1
- package/src/components/TreeView/examples/TreeViewCompactNoBackground.tsx +1 -1
- package/src/components/TreeView/examples/TreeViewGuides.tsx +1 -1
- package/src/components/TreeView/examples/TreeViewMultiselectable.tsx +86 -0
- package/src/components/TreeView/examples/TreeViewSelectionExpansion.tsx +9 -1
- package/src/components/TreeView/examples/{TreeViewDefault.tsx → TreeViewSingleSelectable.tsx} +8 -2
- package/src/components/TreeView/examples/TreeViewWithActionItems.tsx +8 -1
- package/src/components/TreeView/examples/TreeViewWithBadges.tsx +9 -1
- package/src/components/TreeView/examples/TreeViewWithCheckboxes.tsx +1 -1
- package/src/components/TreeView/examples/TreeViewWithCustomBadges.tsx +9 -1
- package/src/components/TreeView/examples/TreeViewWithIcons.tsx +1 -0
- package/src/components/TreeView/examples/TreeViewWithMemoization.tsx +8 -1
- package/src/components/TreeView/examples/TreeViewWithSearch.tsx +1 -0
package/helpers/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"5.4.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"5.4.0-prerelease.2","private":true}
|
package/layouts/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"5.4.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"5.4.0-prerelease.2","private":true}
|
package/next/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"5.4.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"5.4.0-prerelease.2","private":true}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "5.4.0-prerelease.
|
|
3
|
+
"version": "5.4.0-prerelease.3",
|
|
4
4
|
"description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
|
|
5
5
|
"main": "dist/js/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"react": "^17 || ^18",
|
|
72
72
|
"react-dom": "^17 || ^18"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "75849b05bb14b3d8f50535a92a65136b4a2cb13b"
|
|
75
75
|
}
|
|
@@ -46,6 +46,14 @@ export interface TreeViewProps {
|
|
|
46
46
|
* internal state.
|
|
47
47
|
*/
|
|
48
48
|
allExpanded?: boolean;
|
|
49
|
+
/** A text string that sets the accessible name of the tree view list. Either this or the aria-labelledby property must
|
|
50
|
+
* be passed in.
|
|
51
|
+
*/
|
|
52
|
+
'aria-label'?: string;
|
|
53
|
+
/** A space separated list of element id's that sets the accessible name of the tree view list. Either
|
|
54
|
+
* this or the aria-label property must be passed in.
|
|
55
|
+
*/
|
|
56
|
+
'aria-labelledby'?: string;
|
|
49
57
|
/** Class to add if not passed a parentItem property. */
|
|
50
58
|
className?: string;
|
|
51
59
|
/** Comparison function for determining active items. */
|
|
@@ -72,6 +80,11 @@ export interface TreeViewProps {
|
|
|
72
80
|
icon?: React.ReactNode;
|
|
73
81
|
/** ID of the tree view. */
|
|
74
82
|
id?: string;
|
|
83
|
+
/** Flag indicating whether multiple nodes can be selected in the tree view. This will also set the
|
|
84
|
+
* aria-multiselectable attribute on the tree view list which is required to be true when multiple selection is intended.
|
|
85
|
+
* Can only be applied to the root tree view list.
|
|
86
|
+
*/
|
|
87
|
+
isMultiSelectable?: boolean;
|
|
75
88
|
/** Callback for item checkbox selection. */
|
|
76
89
|
onCheck?: (event: React.ChangeEvent<HTMLInputElement>, item: TreeViewDataItem, parentItem: TreeViewDataItem) => void;
|
|
77
90
|
/** Callback for item selection. */
|
|
@@ -104,6 +117,7 @@ export const TreeView: React.FunctionComponent<TreeViewProps> = ({
|
|
|
104
117
|
defaultAllExpanded = false,
|
|
105
118
|
allExpanded,
|
|
106
119
|
icon,
|
|
120
|
+
isMultiSelectable = false,
|
|
107
121
|
expandedIcon,
|
|
108
122
|
parentItem,
|
|
109
123
|
onSelect,
|
|
@@ -115,10 +129,18 @@ export const TreeView: React.FunctionComponent<TreeViewProps> = ({
|
|
|
115
129
|
compareItems = (item, itemToCheck) => item.id === itemToCheck.id,
|
|
116
130
|
className,
|
|
117
131
|
useMemo,
|
|
132
|
+
'aria-label': ariaLabel,
|
|
133
|
+
'aria-labelledby': ariaLabelledby,
|
|
118
134
|
...props
|
|
119
135
|
}: TreeViewProps) => {
|
|
120
136
|
const treeViewList = (
|
|
121
|
-
<TreeViewList
|
|
137
|
+
<TreeViewList
|
|
138
|
+
isNested={isNested}
|
|
139
|
+
toolbar={toolbar}
|
|
140
|
+
isMultiSelectable={isMultiSelectable}
|
|
141
|
+
aria-label={ariaLabel}
|
|
142
|
+
aria-labelledby={ariaLabelledby}
|
|
143
|
+
>
|
|
122
144
|
{data.map((item) => (
|
|
123
145
|
<TreeViewListItem
|
|
124
146
|
key={item.id?.toString() || item.name?.toString()}
|
|
@@ -10,12 +10,28 @@ export interface TreeViewListProps extends React.HTMLProps<HTMLUListElement> {
|
|
|
10
10
|
isNested?: boolean;
|
|
11
11
|
/** Toolbar to display above the tree view. */
|
|
12
12
|
toolbar?: React.ReactNode;
|
|
13
|
+
/** Flag indicating whether multiple nodes can be selected in the tree view. This will also set the
|
|
14
|
+
* aria-multiselectable attribute on the tree view list which is required to be true when multiple selection is intended.
|
|
15
|
+
* Can only be applied to the root tree view list.
|
|
16
|
+
*/
|
|
17
|
+
isMultiSelectable?: boolean;
|
|
18
|
+
/** A text string that sets the accessible name of the tree view list. Either this or the aria-labelledby property must
|
|
19
|
+
* be passed in.
|
|
20
|
+
*/
|
|
21
|
+
'aria-label'?: string;
|
|
22
|
+
/** A space separated list of element id's that sets the accessible name of the tree view list. Either
|
|
23
|
+
* this or the aria-label property must be passed in.
|
|
24
|
+
*/
|
|
25
|
+
'aria-labelledby'?: string;
|
|
13
26
|
}
|
|
14
27
|
|
|
15
28
|
export const TreeViewList: React.FunctionComponent<TreeViewListProps> = ({
|
|
16
29
|
isNested = false,
|
|
30
|
+
isMultiSelectable = false,
|
|
17
31
|
toolbar,
|
|
18
32
|
children,
|
|
33
|
+
'aria-label': ariaLabel,
|
|
34
|
+
'aria-labelledby': ariaLabelledby,
|
|
19
35
|
...props
|
|
20
36
|
}: TreeViewListProps) => (
|
|
21
37
|
<>
|
|
@@ -25,7 +41,14 @@ export const TreeViewList: React.FunctionComponent<TreeViewListProps> = ({
|
|
|
25
41
|
<Divider />
|
|
26
42
|
</React.Fragment>
|
|
27
43
|
)}
|
|
28
|
-
<ul
|
|
44
|
+
<ul
|
|
45
|
+
className={css(`${styles.treeView}__list`)}
|
|
46
|
+
role={isNested ? 'group' : 'tree'}
|
|
47
|
+
aria-multiselectable={isNested ? undefined : isMultiSelectable}
|
|
48
|
+
aria-label={ariaLabel}
|
|
49
|
+
aria-labelledby={ariaLabelledby}
|
|
50
|
+
{...props}
|
|
51
|
+
>
|
|
29
52
|
{children}
|
|
30
53
|
</ul>
|
|
31
54
|
</>
|
|
@@ -143,6 +143,8 @@ const TreeViewListItemBase: React.FunctionComponent<TreeViewListItemProps> = ({
|
|
|
143
143
|
</span>
|
|
144
144
|
</ToggleComponent>
|
|
145
145
|
);
|
|
146
|
+
|
|
147
|
+
const isCheckboxChecked = checkProps.checked === null ? false : checkProps.checked;
|
|
146
148
|
const renderCheck = (randomId: string) => (
|
|
147
149
|
<span className={css(styles.treeViewNodeCheck)}>
|
|
148
150
|
<input
|
|
@@ -151,7 +153,7 @@ const TreeViewListItemBase: React.FunctionComponent<TreeViewListItemProps> = ({
|
|
|
151
153
|
onClick={(evt) => evt.stopPropagation()}
|
|
152
154
|
ref={(elem) => elem && (elem.indeterminate = checkProps.checked === null)}
|
|
153
155
|
{...checkProps}
|
|
154
|
-
checked={
|
|
156
|
+
checked={isCheckboxChecked}
|
|
155
157
|
id={randomId}
|
|
156
158
|
tabIndex={-1}
|
|
157
159
|
/>
|
|
@@ -194,6 +196,13 @@ const TreeViewListItemBase: React.FunctionComponent<TreeViewListItemProps> = ({
|
|
|
194
196
|
)}
|
|
195
197
|
</>
|
|
196
198
|
);
|
|
199
|
+
|
|
200
|
+
const isSelected =
|
|
201
|
+
(!children || isSelectable) &&
|
|
202
|
+
activeItems &&
|
|
203
|
+
activeItems.length > 0 &&
|
|
204
|
+
activeItems.some((item) => compareItems && item && compareItems(item, itemData));
|
|
205
|
+
|
|
197
206
|
return (
|
|
198
207
|
<li
|
|
199
208
|
id={id}
|
|
@@ -201,6 +210,8 @@ const TreeViewListItemBase: React.FunctionComponent<TreeViewListItemProps> = ({
|
|
|
201
210
|
aria-expanded={internalIsExpanded}
|
|
202
211
|
role="treeitem"
|
|
203
212
|
tabIndex={-1}
|
|
213
|
+
{...(hasCheckbox && { 'aria-checked': isCheckboxChecked })}
|
|
214
|
+
{...(!hasCheckbox && { 'aria-selected': isSelected })}
|
|
204
215
|
>
|
|
205
216
|
<div className={css(styles.treeViewContent)}>
|
|
206
217
|
<GenerateId prefix={isSelectable ? 'selectable-id' : 'checkbox-id'}>
|
|
@@ -209,12 +220,7 @@ const TreeViewListItemBase: React.FunctionComponent<TreeViewListItemProps> = ({
|
|
|
209
220
|
className={css(
|
|
210
221
|
styles.treeViewNode,
|
|
211
222
|
children && (isSelectable || hasCheckbox) && styles.modifiers.selectable,
|
|
212
|
-
|
|
213
|
-
activeItems &&
|
|
214
|
-
activeItems.length > 0 &&
|
|
215
|
-
activeItems.some((item) => compareItems && item && compareItems(item, itemData))
|
|
216
|
-
? styles.modifiers.current
|
|
217
|
-
: ''
|
|
223
|
+
isSelected && styles.modifiers.current
|
|
218
224
|
)}
|
|
219
225
|
onClick={(evt: React.MouseEvent) => {
|
|
220
226
|
if (!hasCheckbox) {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
exports[`Matches snapshot by default 1`] = `
|
|
4
4
|
<DocumentFragment>
|
|
5
5
|
<ul
|
|
6
|
+
aria-multiselectable="false"
|
|
6
7
|
class="pf-v5-c-tree-view__list"
|
|
7
8
|
role="tree"
|
|
8
9
|
>
|
|
@@ -20,6 +21,7 @@ exports[`Matches snapshot when toolbar is passed 1`] = `
|
|
|
20
21
|
class="pf-v5-c-divider"
|
|
21
22
|
/>
|
|
22
23
|
<ul
|
|
24
|
+
aria-multiselectable="false"
|
|
23
25
|
class="pf-v5-c-tree-view__list"
|
|
24
26
|
role="tree"
|
|
25
27
|
>
|
|
@@ -4,6 +4,7 @@ exports[`Matches snapshot with children 1`] = `
|
|
|
4
4
|
<DocumentFragment>
|
|
5
5
|
<li
|
|
6
6
|
aria-expanded="false"
|
|
7
|
+
aria-selected="false"
|
|
7
8
|
class="pf-v5-c-tree-view__list-item"
|
|
8
9
|
role="treeitem"
|
|
9
10
|
tabindex="-1"
|
|
@@ -56,6 +57,7 @@ exports[`Matches snapshot without children 1`] = `
|
|
|
56
57
|
<DocumentFragment>
|
|
57
58
|
<li
|
|
58
59
|
aria-expanded="false"
|
|
60
|
+
aria-selected="false"
|
|
59
61
|
class="pf-v5-c-tree-view__list-item"
|
|
60
62
|
role="treeitem"
|
|
61
63
|
tabindex="-1"
|
|
@@ -9,9 +9,17 @@ import { FolderIcon, FolderOpenIcon, EllipsisVIcon, ClipboardIcon, HamburgerIcon
|
|
|
9
9
|
|
|
10
10
|
## Examples
|
|
11
11
|
|
|
12
|
-
###
|
|
12
|
+
### Single selectable
|
|
13
13
|
|
|
14
|
-
```ts file='./
|
|
14
|
+
```ts file='./TreeViewSingleSelectable.tsx'
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Multiselectable
|
|
19
|
+
|
|
20
|
+
A tree view can be setup to allow multiple nodes to be selected. When a tree view is intended to allow multiple selection, the `isMultiSelectable` property must be passed.
|
|
21
|
+
|
|
22
|
+
```ts file='./TreeViewMultiselectable.tsx'
|
|
15
23
|
|
|
16
24
|
```
|
|
17
25
|
|
|
@@ -25,6 +33,8 @@ The `hasSelectableNodes` modifier will separate the expansion and selection beha
|
|
|
25
33
|
|
|
26
34
|
### With search
|
|
27
35
|
|
|
36
|
+
A search input can be used to filter tree view items. It is recommended that a tree view with more than 7 nodes includes a search input.
|
|
37
|
+
|
|
28
38
|
```ts file='./TreeViewWithSearch.tsx'
|
|
29
39
|
|
|
30
40
|
```
|
|
@@ -55,5 +55,5 @@ export const TreeViewCompactNoBackground: React.FunctionComponent = () => {
|
|
|
55
55
|
]
|
|
56
56
|
}
|
|
57
57
|
];
|
|
58
|
-
return <TreeView data={options} variant="compactNoBackground" />;
|
|
58
|
+
return <TreeView aria-label="Tree View compact no background example" data={options} variant="compactNoBackground" />;
|
|
59
59
|
};
|
|
@@ -61,5 +61,5 @@ export const GuidesTreeView: React.FunctionComponent = () => {
|
|
|
61
61
|
children: [{ name: 'Application 5', id: 'example8-App5' }]
|
|
62
62
|
}
|
|
63
63
|
];
|
|
64
|
-
return <TreeView data={options} hasGuides={true} />;
|
|
64
|
+
return <TreeView aria-label="Tree View guides example" data={options} hasGuides={true} />;
|
|
65
65
|
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TreeView, TreeViewDataItem } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const TreeViewMultiselectable: React.FunctionComponent = () => {
|
|
5
|
+
const [activeItems, setActiveItems] = React.useState<TreeViewDataItem[]>([]);
|
|
6
|
+
|
|
7
|
+
const onSelect = (_event: React.MouseEvent, treeViewItem: TreeViewDataItem) => {
|
|
8
|
+
// Ignore folders for selection
|
|
9
|
+
if (treeViewItem && !treeViewItem.children) {
|
|
10
|
+
setActiveItems((prevActiveItems) => [...prevActiveItems, treeViewItem]);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const options = [
|
|
15
|
+
{
|
|
16
|
+
name: 'Application launcher',
|
|
17
|
+
id: 'multiselectExample-AppLaunch',
|
|
18
|
+
children: [
|
|
19
|
+
{
|
|
20
|
+
name: 'Application 1',
|
|
21
|
+
id: 'multiselectExample-App1',
|
|
22
|
+
children: [
|
|
23
|
+
{ name: 'Settings', id: 'multiselectExample-App1Settings' },
|
|
24
|
+
{ name: 'Current', id: 'multiselectExample-App1Current' }
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'Application 2',
|
|
29
|
+
id: 'multiselectExample-App2',
|
|
30
|
+
children: [
|
|
31
|
+
{ name: 'Settings', id: 'multiselectExample-App2Settings' },
|
|
32
|
+
{
|
|
33
|
+
name: 'Loader',
|
|
34
|
+
id: 'multiselectExample-App2Loader',
|
|
35
|
+
children: [
|
|
36
|
+
{ name: 'Loading App 1', id: 'multiselectExample-LoadApp1' },
|
|
37
|
+
{ name: 'Loading App 2', id: 'multiselectExample-LoadApp2' },
|
|
38
|
+
{ name: 'Loading App 3', id: 'multiselectExample-LoadApp3' }
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
defaultExpanded: true
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Cost management',
|
|
48
|
+
id: 'multiselectExample-Cost',
|
|
49
|
+
children: [
|
|
50
|
+
{
|
|
51
|
+
name: 'Application 3',
|
|
52
|
+
id: 'multiselectExample-App3',
|
|
53
|
+
children: [
|
|
54
|
+
{ name: 'Settings', id: 'multiselectExample-App3Settings' },
|
|
55
|
+
{ name: 'Current', id: 'multiselectExample-App3Current' }
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Sources',
|
|
62
|
+
id: 'multiselectExample-Sources',
|
|
63
|
+
children: [
|
|
64
|
+
{
|
|
65
|
+
name: 'Application 4',
|
|
66
|
+
id: 'multiselectExample-App4',
|
|
67
|
+
children: [{ name: 'Settings', id: 'multiselectExample-App4Settings' }]
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'Really really really long folder name that overflows the container it is in',
|
|
73
|
+
id: 'multiselectExample-Long',
|
|
74
|
+
children: [{ name: 'Application 5', id: 'multiselectExample-App5' }]
|
|
75
|
+
}
|
|
76
|
+
];
|
|
77
|
+
return (
|
|
78
|
+
<TreeView
|
|
79
|
+
aria-label="Tree View multiselectable example"
|
|
80
|
+
isMultiSelectable
|
|
81
|
+
data={options}
|
|
82
|
+
activeItems={activeItems}
|
|
83
|
+
onSelect={onSelect}
|
|
84
|
+
/>
|
|
85
|
+
);
|
|
86
|
+
};
|
|
@@ -71,5 +71,13 @@ export const TreeViewSelectableNodes: React.FunctionComponent = () => {
|
|
|
71
71
|
children: [{ name: 'Application 5', id: 'SelNodesTreeView-App5' }]
|
|
72
72
|
}
|
|
73
73
|
];
|
|
74
|
-
return
|
|
74
|
+
return (
|
|
75
|
+
<TreeView
|
|
76
|
+
aria-label="Tree View separate selection and expansion example"
|
|
77
|
+
hasSelectableNodes
|
|
78
|
+
data={options}
|
|
79
|
+
activeItems={activeItems}
|
|
80
|
+
onSelect={onSelect}
|
|
81
|
+
/>
|
|
82
|
+
);
|
|
75
83
|
};
|
package/src/components/TreeView/examples/{TreeViewDefault.tsx → TreeViewSingleSelectable.tsx}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { TreeView, Button, TreeViewDataItem } from '@patternfly/react-core';
|
|
3
3
|
|
|
4
|
-
export const
|
|
4
|
+
export const TreeViewSingleSelectable: React.FunctionComponent = () => {
|
|
5
5
|
const [activeItems, setActiveItems] = React.useState<TreeViewDataItem[]>();
|
|
6
6
|
const [allExpanded, setAllExpanded] = React.useState<boolean>();
|
|
7
7
|
|
|
@@ -81,7 +81,13 @@ export const TreeViewDefault: React.FunctionComponent = () => {
|
|
|
81
81
|
{allExpanded && 'Collapse all'}
|
|
82
82
|
{!allExpanded && 'Expand all'}
|
|
83
83
|
</Button>
|
|
84
|
-
<TreeView
|
|
84
|
+
<TreeView
|
|
85
|
+
aria-label="Tree View single selectable example"
|
|
86
|
+
data={options}
|
|
87
|
+
activeItems={activeItems}
|
|
88
|
+
onSelect={onSelect}
|
|
89
|
+
allExpanded={allExpanded}
|
|
90
|
+
/>
|
|
85
91
|
</React.Fragment>
|
|
86
92
|
);
|
|
87
93
|
};
|
|
@@ -136,5 +136,12 @@ export const TreeViewWithActionItems: React.FunctionComponent = () => {
|
|
|
136
136
|
children: [{ name: 'Application 5', id: 'example7-App5' }]
|
|
137
137
|
}
|
|
138
138
|
];
|
|
139
|
-
return
|
|
139
|
+
return (
|
|
140
|
+
<TreeView
|
|
141
|
+
aria-label="Tree View with actions example"
|
|
142
|
+
data={options}
|
|
143
|
+
activeItems={activeItems}
|
|
144
|
+
onSelect={onSelect}
|
|
145
|
+
/>
|
|
146
|
+
);
|
|
140
147
|
};
|
|
@@ -75,5 +75,13 @@ export const TreeViewBadges: React.FunctionComponent = () => {
|
|
|
75
75
|
}
|
|
76
76
|
];
|
|
77
77
|
|
|
78
|
-
return
|
|
78
|
+
return (
|
|
79
|
+
<TreeView
|
|
80
|
+
aria-label="Tree View with badges example"
|
|
81
|
+
data={options}
|
|
82
|
+
activeItems={activeItems}
|
|
83
|
+
onSelect={onSelect}
|
|
84
|
+
hasBadges
|
|
85
|
+
/>
|
|
86
|
+
);
|
|
79
87
|
};
|
|
@@ -194,5 +194,5 @@ export const TreeViewWithCheckboxes: React.FunctionComponent = () => {
|
|
|
194
194
|
}
|
|
195
195
|
};
|
|
196
196
|
const mapped = options.map((item) => mapTree(item));
|
|
197
|
-
return <TreeView data={mapped} onCheck={onCheck} hasCheckboxes />;
|
|
197
|
+
return <TreeView aria-label="Tree View with checkboxes example" data={mapped} onCheck={onCheck} hasCheckboxes />;
|
|
198
198
|
};
|
|
@@ -82,5 +82,13 @@ export const TreeViewCustomBadges: React.FunctionComponent = () => {
|
|
|
82
82
|
children: [{ name: 'Application 5', id: 'example6-App5' }]
|
|
83
83
|
}
|
|
84
84
|
];
|
|
85
|
-
return
|
|
85
|
+
return (
|
|
86
|
+
<TreeView
|
|
87
|
+
aria-label="Tree View with custom badges example"
|
|
88
|
+
data={options}
|
|
89
|
+
activeItems={activeItems}
|
|
90
|
+
onSelect={onSelect}
|
|
91
|
+
hasBadges
|
|
92
|
+
/>
|
|
93
|
+
);
|
|
86
94
|
};
|
|
@@ -50,7 +50,14 @@ export const TreeViewWithMemoization: React.FunctionComponent = () => {
|
|
|
50
50
|
options.push({ name: 'Option ' + i, id: i.toString(), children: childOptions });
|
|
51
51
|
}
|
|
52
52
|
const tree = (
|
|
53
|
-
<TreeView
|
|
53
|
+
<TreeView
|
|
54
|
+
aria-label="Tree View with memoization example"
|
|
55
|
+
data={options}
|
|
56
|
+
activeItems={activeItems}
|
|
57
|
+
onSelect={onSelect}
|
|
58
|
+
allExpanded={allExpanded}
|
|
59
|
+
useMemo
|
|
60
|
+
/>
|
|
54
61
|
);
|
|
55
62
|
|
|
56
63
|
return (
|