Added scroll into view when when node selected
Reviewed By: lblasa Differential Revision: D41838165 fbshipit-source-id: 4b135f9bfaf3ac0dd536ab7250a22dc4e739aed6
This commit is contained in:
committed by
Facebook GitHub Bot
parent
d61f36a0d2
commit
2692476647
@@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {Id, UINode} from '../types';
|
import {Id, UINode} from '../types';
|
||||||
import React, {useEffect, useState} from 'react';
|
import React, {Ref, useEffect, useState} from 'react';
|
||||||
import {
|
import {
|
||||||
HighlightManager,
|
HighlightManager,
|
||||||
HighlightProvider,
|
HighlightProvider,
|
||||||
@@ -39,8 +39,20 @@ export function Tree2({
|
|||||||
|
|
||||||
const treeNodes = toTreeList(nodes, rootId, expandedNodes);
|
const treeNodes = toTreeList(nodes, rootId, expandedNodes);
|
||||||
|
|
||||||
|
const refs = treeNodes.map(() => React.createRef<HTMLLIElement>());
|
||||||
|
|
||||||
useKeyboardShortcuts(treeNodes, selectedNode, onSelectNode);
|
useKeyboardShortcuts(treeNodes, selectedNode, onSelectNode);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (selectedNode) {
|
||||||
|
const idx = treeNodes.findIndex((node) => node.id === selectedNode);
|
||||||
|
if (idx !== -1) {
|
||||||
|
refs[idx].current?.scrollIntoView({
|
||||||
|
block: 'nearest',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, [refs, selectedNode, treeNodes]);
|
||||||
return (
|
return (
|
||||||
<HighlightProvider
|
<HighlightProvider
|
||||||
text={searchTerm}
|
text={searchTerm}
|
||||||
@@ -49,8 +61,9 @@ export function Tree2({
|
|||||||
onMouseLeave={() => {
|
onMouseLeave={() => {
|
||||||
instance.uiState.hoveredNodes.set([]);
|
instance.uiState.hoveredNodes.set([]);
|
||||||
}}>
|
}}>
|
||||||
{treeNodes.map((treeNode) => (
|
{treeNodes.map((treeNode, index) => (
|
||||||
<TreeItemContainer
|
<TreeItemContainer
|
||||||
|
innerRef={refs[index]}
|
||||||
key={treeNode.id}
|
key={treeNode.id}
|
||||||
treeNode={treeNode}
|
treeNode={treeNode}
|
||||||
selectedNode={selectedNode}
|
selectedNode={selectedNode}
|
||||||
@@ -68,10 +81,12 @@ export type TreeNode = UINode & {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function TreeItemContainer({
|
function TreeItemContainer({
|
||||||
|
innerRef,
|
||||||
treeNode,
|
treeNode,
|
||||||
selectedNode,
|
selectedNode,
|
||||||
onSelectNode,
|
onSelectNode,
|
||||||
}: {
|
}: {
|
||||||
|
innerRef: Ref<any>;
|
||||||
treeNode: TreeNode;
|
treeNode: TreeNode;
|
||||||
selectedNode?: Id;
|
selectedNode?: Id;
|
||||||
hoveredNode?: Id;
|
hoveredNode?: Id;
|
||||||
@@ -81,6 +96,7 @@ function TreeItemContainer({
|
|||||||
const isHovered = useIsHovered(treeNode.id);
|
const isHovered = useIsHovered(treeNode.id);
|
||||||
return (
|
return (
|
||||||
<TreeItem
|
<TreeItem
|
||||||
|
ref={innerRef}
|
||||||
isSelected={treeNode.id === selectedNode}
|
isSelected={treeNode.id === selectedNode}
|
||||||
isHovered={isHovered}
|
isHovered={isHovered}
|
||||||
onMouseEnter={() => {
|
onMouseEnter={() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user