in src/tree-view/tree-node.tsx [45:125]
render() {
const {
indentGuides,
node,
getId,
onToggle,
overrides = {},
renderAll,
selectedNodeId,
onKeyDown,
onFocus,
onBlur,
addRef,
removeRef,
isFocusVisible,
} = this.props;
const { children, isExpanded, label } = node;
const hasChildren = children && children.length !== 0;
const {
TreeItemList: TreeItemListOverride,
TreeItem: TreeItemOverride,
TreeLabel: TreeLabelOverride,
} = overrides;
const TreeItemList = getOverride(TreeItemListOverride) || StyledTreeItemList;
const TreeItem = getOverride(TreeItemOverride) || StyledTreeItem;
const TreeLabel = getOverride(TreeLabelOverride) || StyledTreeLabel;
return (
<TreeItem
role="treeitem"
ref={this.treeItemRef}
data-nodeid={getId(node)}
tabIndex={selectedNodeId === getId(node) ? 0 : -1}
onKeyDown={(e: KeyboardEvent) => onKeyDown && onKeyDown(e, node)}
onBlur={onBlur}
onFocus={this.onFocus}
aria-expanded={isExpanded}
$isLeafNode={!hasChildren}
{...getOverrideProps(TreeItemOverride)}
>
<TreeLabel
onClick={this.onToggle}
node={node}
hasChildren={hasChildren}
isExpanded={isExpanded}
isSelected={selectedNodeId === getId(node)}
isFocusVisible={isFocusVisible}
label={label}
overrides={overrides}
{...getOverrideProps(TreeLabelOverride)}
/>
{children && (isExpanded || renderAll) && (
<TreeItemList
role="group"
$indentGuides={!!indentGuides}
$isChildNode={true}
$expanded={!!isExpanded}
{...getOverrideProps(TreeItemListOverride)}
>
{children.map((node, index) => (
<TreeNode
indentGuides={!!indentGuides}
renderAll={renderAll}
key={index}
node={node}
getId={getId}
onToggle={onToggle}
overrides={overrides}
selectedNodeId={selectedNodeId}
onKeyDown={onKeyDown}
onFocus={onFocus}
onBlur={onBlur}
addRef={addRef}
removeRef={removeRef}
isFocusVisible={isFocusVisible}
/>
))}
</TreeItemList>
)}
</TreeItem>
);
}