Skip to content

Commit c85f24a

Browse files
authored
Merge pull request #473 from mashmatrix/support-slds-2-tree-tree-node
Update `Tree` and `TreeNode` for SLDS2
2 parents 2116765 + d4cb683 commit c85f24a

File tree

2 files changed

+51
-16
lines changed

2 files changed

+51
-16
lines changed

src/scripts/Tree.tsx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import React, { HTMLAttributes, createContext, FC, useMemo } from 'react';
1+
import React, {
2+
useId,
3+
HTMLAttributes,
4+
createContext,
5+
FC,
6+
useMemo,
7+
} from 'react';
28
import classnames from 'classnames';
39
import { TreeNodeProps } from './TreeNode';
410

@@ -37,7 +43,7 @@ export const Tree: FC<TreeProps> = (props) => {
3743
onNodeToggle,
3844
...rprops
3945
} = props;
40-
const treeClassNames = classnames(className, 'slds-tree-container');
46+
const treeClassNames = classnames(className, 'slds-tree_container');
4147
const ctx = useMemo(
4248
() => ({
4349
toggleOnNodeClick,
@@ -47,10 +53,19 @@ export const Tree: FC<TreeProps> = (props) => {
4753
}),
4854
[toggleOnNodeClick, onNodeClick, onNodeLabelClick, onNodeToggle]
4955
);
56+
const id = useId();
5057
return (
51-
<div className={treeClassNames} role='application' {...rprops}>
52-
{label ? <h4 className='slds-text-heading_label'>{label}</h4> : null}
53-
<ul className='slds-tree' role='tree'>
58+
<div className={treeClassNames} {...rprops}>
59+
{label ? (
60+
<h4 className='slds-tree__group-header' id={id}>
61+
{label}
62+
</h4>
63+
) : null}
64+
<ul
65+
aria-labelledby={label ? id : undefined}
66+
className='slds-tree'
67+
role='tree'
68+
>
5469
<TreeContext.Provider value={ctx}>{children}</TreeContext.Provider>
5570
</ul>
5671
</div>

src/scripts/TreeNode.tsx

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export type TreeNodeProps = {
2828
leaf?: boolean;
2929
loading?: boolean;
3030
level?: number;
31+
disabled?: boolean;
3132
children?: ReactNode;
3233
onClick?: (e: React.MouseEvent) => void;
3334
onLabelClick?: (e: React.MouseEvent) => void;
@@ -83,7 +84,7 @@ const TreeNodeItem: FC<TreeNodeProps & { icon?: string }> = (props) => {
8384
)}
8485
{!leaf ? (
8586
<Button
86-
className='slds-m-right_small'
87+
className='slds-m-right_x-small'
8788
aria-controls=''
8889
type='icon-bare'
8990
icon={icon}
@@ -93,14 +94,15 @@ const TreeNodeItem: FC<TreeNodeProps & { icon?: string }> = (props) => {
9394
style={loading ? { opacity: 0, pointerEvents: 'none' } : undefined}
9495
/>
9596
) : null}
96-
<a
97-
className='slds-truncate'
98-
tabIndex={-1}
99-
role='presentation'
100-
onClick={onLabelClick}
101-
>
102-
{ItemRender ? <ItemRender {...props} /> : label}
103-
</a>
97+
<span className='slds-has-flexi-truncate'>
98+
<a
99+
className='slds-tree__item-label slds-truncate'
100+
onClick={onLabelClick}
101+
title={typeof label === 'string' ? label : undefined}
102+
>
103+
{ItemRender ? <ItemRender {...props} /> : label}
104+
</a>
105+
</span>
104106
{leaf ? children : null}
105107
</div>
106108
);
@@ -114,6 +116,8 @@ export const TreeNode: FC<TreeNodeProps> = (props) => {
114116
defaultOpened,
115117
opened: opened_,
116118
leaf,
119+
selected,
120+
disabled,
117121
children,
118122
onClick: onClick_,
119123
onToggle: onToggle_,
@@ -153,15 +157,31 @@ export const TreeNode: FC<TreeNodeProps> = (props) => {
153157
'slds-show': opened,
154158
'slds-hide': !opened,
155159
});
160+
const labelText =
161+
typeof rprops.label === 'string' ? rprops.label : 'Tree Branch';
162+
const ariaLabel = !leaf ? labelText : undefined;
156163
return (
157164
<li
158165
role='treeitem'
159166
aria-level={level}
160-
{...(leaf ? {} : { 'aria-expanded': opened })}
167+
aria-expanded={!leaf ? opened : undefined}
168+
aria-label={ariaLabel}
169+
aria-selected={selected || undefined}
170+
aria-disabled={disabled || undefined}
161171
>
162172
<TreeNodeItem
163173
{...rprops}
164-
{...{ leaf, opened, level, children, onClick, onLabelClick, onToggle }}
174+
{...{
175+
leaf,
176+
opened,
177+
level,
178+
selected,
179+
disabled,
180+
children,
181+
onClick,
182+
onLabelClick,
183+
onToggle,
184+
}}
165185
/>
166186
{!leaf ? (
167187
<ul className={grpClassNames} role='group'>

0 commit comments

Comments
 (0)