Skip to content

Commit 825b75e

Browse files
committed
refactor(Dashboard): Add virtual scroll to widget layer tree
1 parent a71982b commit 825b75e

File tree

2 files changed

+17
-1
lines changed
  • frontend/src/app

2 files changed

+17
-1
lines changed

frontend/src/app/components/Tree/index.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { LoadingOutlined } from '@ant-design/icons';
22
import { Empty, Tree as AntTree, TreeProps as AntTreeProps } from 'antd';
33
import classnames from 'classnames';
4+
import { MutableRefObject } from 'react';
45
import styled from 'styled-components/macro';
56
import {
67
FONT_SIZE_BODY,
@@ -14,12 +15,19 @@ import {
1415

1516
interface TreeProps extends AntTreeProps {
1617
loading: boolean;
18+
wrapperRef?: MutableRefObject<HTMLDivElement> | null;
1719
}
1820

19-
export function Tree({ loading, treeData, ...treeProps }: TreeProps) {
21+
export function Tree({
22+
loading,
23+
wrapperRef,
24+
treeData,
25+
...treeProps
26+
}: TreeProps) {
2027
return (
2128
<Wrapper
2229
className={classnames({ container: loading || !treeData?.length })}
30+
{...(wrapperRef && { ref: wrapperRef })}
2331
>
2432
{loading ? (
2533
<LoadingOutlined />

frontend/src/app/pages/DashBoardPage/pages/BoardEditor/components/LayerPanel/LayerTree.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import { Tree } from 'app/components';
2020
import { renderIcon } from 'app/hooks/useGetVizIcon';
21+
import useResizeObserver from 'app/hooks/useResizeObserver';
2122
import { WidgetActionContext } from 'app/pages/DashBoardPage/components/ActionProvider/WidgetActionProvider';
2223
import widgetManager from 'app/pages/DashBoardPage/components/WidgetManager';
2324
import { FC, memo, useCallback, useContext } from 'react';
@@ -39,6 +40,11 @@ export const LayerTree: FC<{}> = memo(() => {
3940
const editingWidgetIds = useSelector(selectEditingWidgetIds);
4041
const selectedIds = useSelector(selectSelectedIds);
4142

43+
const { height, ref } = useResizeObserver({
44+
refreshMode: 'debounce',
45+
refreshRate: 200,
46+
});
47+
4248
const treeSelect = useCallback(
4349
(_, { node, nativeEvent }) => {
4450
onEditSelectWidget({
@@ -86,6 +92,8 @@ export const LayerTree: FC<{}> = memo(() => {
8692
onDrop={onDrop}
8793
treeData={treeData}
8894
selectedKeys={selectedIds ? selectedIds.split(',') : []}
95+
height={height}
96+
wrapperRef={ref}
8997
defaultExpandAll
9098
/>
9199
);

0 commit comments

Comments
 (0)