8000 feat: add expand · Create-Peace/light-vue-tree@4f433e5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 4f433e5

Browse files
committed
feat: add expand
1 parent d8a955c commit 4f433e5

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

src/components/Tree.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// import { construct } from "core-js/fn/reflect"
22

3-
const TREE_DATA = {selected: false, partialSelected: false}
3+
const TREE_DATA = {selected: false, partialSelected: false, expanded: false}
44
class TreeData{
55
constructor(data){
66
this.data = {...TREE_DATA, ...data}
@@ -16,6 +16,9 @@ class TreeData{
1616
isSelected(){
1717
return this?.data?.selected ?? false
1818
}
19+
isExpanded() {
20+
return this?.data?.expanded ?? false
21+
}
1922
isPartialSelected(){
2023
return this?.data?.partialSelected ?? false
2124
}
@@ -167,6 +170,15 @@ export default {
167170
}
168171
})
169172
},
173+
refreshExpandedDown(node) {
174+< 10000 div class="diff-text-inner"> // eslint-disable-next-line no-debugger
175+
// debugger
176+
const expanded = node.isExpanded()
177+
node?.children.forEach((child) => {
178+
Object.assign(child.data, {expanded})
179+
this.refreshExpandedDown(child)
180+
})
181+
},
170182
refreshUp({parent}){
171183
if (!parent) return
172184
const toState = parent.isAllChildrenSelected()
@@ -176,7 +188,7 @@ export default {
176188
this.refreshUp(parent)
177189
},
178190
refreshDown(node){
179-
const toState = node.isSelected()
191+
const toState = node.isSelected() // 这里的名称需要换掉 nodeData 避免混淆
180192
node?.children.forEach((child) => {
181193
const fromState = child.isSelected()
182194
if(fromState === toState){

src/components/TreeNode.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,25 +42,34 @@ export default {
4242
this.tree.refreshDown(node)
4343
},
4444
nodeView (node, level) {
45-
const {name, selected, disabled, partialSelected} = node?.data ?? {}
46-
return (name && <div style={`margin-left: ${level * 10}px; display: inline-block`}>
45+
const {name, selected, disabled, partialSelected, expanded} = node?.data ?? {}
46+
return (name && <div style={`margin-left: ${level * 10}px; margin-bottom: 6px; display: inline-block;`}>
47+
{node.children && node.children.length? expanded ? <span onClick={() => this.toggleFold(node)} style="padding: 2px; background: #eee; cursor: pointer"></span> : <span onClick={() => this.toggleFold(node)} style="padding: 2px; background: #eee; cursor: pointer"></span> : null}
4748
{ partialSelected && `-`}
4849
<input type='checkbox' disabled={disabled} checked={selected} onClick={() => this.selectToggle(node)} />
4950
{name}
5051
</div>)
51-
}
52+
},
53+
toggleFold(node) {
54+
Object.assign(node.data, {expanded: !node.data.expanded})
55+
if (!node.data.expanded) {
56+
this.tree.refreshExpandedDown(node)
57+
}
58+
},
59+
5260
},
5361

5462
render () {
5563
const { node, level } = this
64+
console.log(node)
5665
const currentNode = this.nodeView(node, level)
5766
return (<div>
5867
{currentNode}
5968
{
60-
node.children?.map(subNode => {
69+
node?.data?.expanded && node.children?.map(subNode => {
6170
return (<TreeNode node={subNode} level={level + 1} />)
6271
})
6372
}
6473
</div>)
6574
}
66-
}
75+
}

0 commit comments

Comments
 (0)
0