11import { Menu , Tree , Trigger } from '@arco-design/web-react' ;
22import { IconDown , IconPlus } from '@arco-design/web-react/icon' ;
3- import React , { useState } from 'react' ;
3+ import React from 'react' ;
44import {
55 generateDefaultNode ,
66 WebsiteTreeNode ,
@@ -11,6 +11,17 @@ import styled from 'styled-components';
1111import { ClearWebsiteBtn } from './ClearWebsiteBtn' ;
1212import { stopPropagation } from '../utils/dom' ;
1313
14+ const Root = styled . div `
15+ display: flex;
16+ flex-direction: column;
17+ height: 100%;
18+
19+ > .tree {
20+ flex: 1;
21+ overflow: auto;
22+ }
23+ ` ;
24+
1425const StyledTree = styled ( Tree ) `
1526 margin-top: 0.5rem;
1627
@@ -68,81 +79,83 @@ export const SideTree: React.FC = React.memo(() => {
6879 } = useTreeStore ( ) ;
6980
7081 return (
71- < div >
82+ < Root >
7283 < Row >
7384 < AddWebsiteBtn />
7485 < ClearWebsiteBtn />
7586 </ Row >
7687
77- < StyledTree
78- draggable = { true }
79- blockNode = { true }
80- selectedKeys = { selectedNode ? [ selectedNode . key ] : [ ] }
81- expandedKeys = { expandedKeys }
82- onExpand = { ( expandedKeys ) => {
83- setExpandedKeys ( expandedKeys ) ;
84- } }
85- treeData = { treeData }
86- icons = { {
87- switcherIcon : < IconDown /> ,
88- } }
89- renderTitle = { ( props ) => (
90- < Trigger
91- position = "br"
92- popupAlign = { {
93- right : [ 20 , 20 ] ,
94- } }
95- popup = { ( ) => (
96- < StyledMenu >
97- < Menu . Item
98- key = "del"
99- onClick = { ( e ) => {
100- stopPropagation ( e ) ;
101- if ( props . dataRef && props . dataRef . key ) {
102- deleteTreeNode ( props . dataRef . key ) ;
103- }
104- } }
105- >
106- Delete
107- </ Menu . Item >
108- </ StyledMenu >
109- ) }
110- trigger = { 'contextMenu' }
111- >
112- < div > { props . title } </ div >
113- </ Trigger >
114- ) }
115- onSelect = { ( _ , extra ) => {
116- const nodeData = extra . node . props . dataRef ;
117- if ( nodeData ) {
118- setSelectedNode ( nodeData as WebsiteTreeNode ) ;
119- }
120- } }
121- renderExtra = { ( node ) => {
122- return (
123- < IconPlus
124- className = "add-icon"
125- onClick = { ( ) => {
126- if ( ! node . dataRef ) {
127- return ;
128- }
129-
130- const key = node . dataRef . key ;
131- if ( ! key ) {
132- return ;
133- }
134-
135- setExpandedKeys ( [ ...expandedKeys , key ] ) ;
136- addTreeNodeChildren ( key , generateDefaultNode ( ) ) ;
88+ < div className = "tree" >
89+ < StyledTree
90+ draggable = { true }
91+ blockNode = { true }
92+ selectedKeys = { selectedNode ? [ selectedNode . key ] : [ ] }
93+ expandedKeys = { expandedKeys }
94+ onExpand = { ( expandedKeys ) => {
95+ setExpandedKeys ( expandedKeys ) ;
96+ } }
97+ treeData = { treeData }
98+ icons = { {
99+ switcherIcon : < IconDown /> ,
100+ } }
101+ renderTitle = { ( props ) => (
102+ < Trigger
103+ position = "br"
104+ popupAlign = { {
105+ right : [ 20 , 20 ] ,
137106 } }
138- />
139- ) ;
140- } }
141- onDrop = { ( { dragNode, dropNode, dropPosition } ) => {
142- moveTreeNode ( dragNode , dropNode , dropPosition ) ;
143- } }
144- />
145- </ div >
107+ popup = { ( ) => (
108+ < StyledMenu >
109+ < Menu . Item
110+ key = "del"
111+ onClick = { ( e ) => {
112+ stopPropagation ( e ) ;
113+ if ( props . dataRef && props . dataRef . key ) {
114+ deleteTreeNode ( props . dataRef . key ) ;
115+ }
116+ } }
117+ >
118+ Delete
119+ </ Menu . Item >
120+ </ StyledMenu >
121+ ) }
122+ trigger = { 'contextMenu' }
123+ >
124+ < div > { props . title } </ div >
125+ </ Trigger >
126+ ) }
127+ onSelect = { ( _ , extra ) => {
128+ const nodeData = extra . node . props . dataRef ;
129+ if ( nodeData ) {
130+ setSelectedNode ( nodeData as WebsiteTreeNode ) ;
131+ }
132+ } }
133+ renderExtra = { ( node ) => {
134+ return (
135+ < IconPlus
136+ className = "add-icon"
137+ onClick = { ( ) => {
138+ if ( ! node . dataRef ) {
139+ return ;
140+ }
141+
142+ const key = node . dataRef . key ;
143+ if ( ! key ) {
144+ return ;
145+ }
146+
147+ setExpandedKeys ( [ ...expandedKeys , key ] ) ;
148+ addTreeNodeChildren ( key , generateDefaultNode ( ) ) ;
149+ } }
150+ />
151+ ) ;
152+ } }
153+ onDrop = { ( { dragNode, dropNode, dropPosition } ) => {
154+ moveTreeNode ( dragNode , dropNode , dropPosition ) ;
155+ } }
156+ />
157+ </ div >
158+ </ Root >
146159 ) ;
147160} ) ;
148161SideTree . displayName = 'SideTree' ;
0 commit comments