Skip to content

Commit fec4122

Browse files
Michael BüßemeyerMichael Büßemeyer
authored andcommitted
use forwardRef for scrollable virtualized tree
1 parent 73e0be8 commit fec4122

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

frontend/javascripts/oxalis/view/right-border-tabs/scrollable_virtualized_tree.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Tree as AntdTree, type TreeProps } from "antd";
22
import type { BasicDataNode } from "antd/es/tree";
33
import { throttle } from "lodash";
4-
import { useCallback, useRef } from "react";
4+
import { forwardRef, useCallback, useRef } from "react";
55
import type RcTree from "rc-tree";
66

77
const MIN_SCROLL_SPEED = 30;
@@ -10,8 +10,10 @@ const MIN_SCROLL_AREA_HEIGHT = 60;
1010
const SCROLL_AREA_RATIO = 10; // 1/10th of the container height
1111
const THROTTLE_TIME = 25;
1212

13-
function ScrollableVirtualizedTree<T extends BasicDataNode>(
14-
props: TreeProps<T> & { ref: React.RefObject<RcTree> },
13+
// React.forwardRef does not support generic types, so we need to define the type of the ref separately.
14+
function ScrollableVirtualizedTreeInner<T extends BasicDataNode>(
15+
props: TreeProps<T>,
16+
ref: React.Ref<RcTree>,
1517
) {
1618
const wrapperRef = useRef<HTMLDivElement>(null);
1719
// biome-ignore lint/correctness/useExhaustiveDependencies: biome is not smart enough to notice that the function needs to be re-created when wrapperRef changes.
@@ -56,9 +58,15 @@ function ScrollableVirtualizedTree<T extends BasicDataNode>(
5658

5759
return (
5860
<div ref={wrapperRef}>
59-
<AntdTree {...props} onDragOver={onDragOver} />
61+
<AntdTree {...props} onDragOver={onDragOver} ref={ref} />
6062
</div>
6163
);
6264
}
6365

66+
const ScrollableVirtualizedTree = forwardRef(ScrollableVirtualizedTreeInner) as <
67+
T extends BasicDataNode,
68+
>(
69+
props: TreeProps<T> & { ref?: React.Ref<RcTree> },
70+
) => ReturnType<typeof ScrollableVirtualizedTreeInner>;
71+
6472
export default ScrollableVirtualizedTree;

frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segments_view.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1904,7 +1904,7 @@ class SegmentsView extends React.Component<Props, State> {
19041904
overflow: "hidden",
19051905
}}
19061906
>
1907-
<ScrollableVirtualizedTree<SegmentHierarchyNode>
1907+
<ScrollableVirtualizedTree
19081908
allowDrop={this.allowDrop}
19091909
onDrop={this.onDrop}
19101910
onSelect={this.onSelectTreeItem}

0 commit comments

Comments
 (0)