Added navigation to top/bottom, normalized toplevel node parent to root node
This commit is contained in:
parent
8192f49558
commit
e276e6d156
3 changed files with 54 additions and 11 deletions
|
|
@ -123,7 +123,7 @@ class Tree extends Component {
|
|||
// The root node isn't supposed to be shown in the tree.
|
||||
if (node.UUID === ROOT_NODE)
|
||||
continue
|
||||
if (node.ParentUUID === '')
|
||||
if (node.ParentUUID === ROOT_NODE)
|
||||
this.treeTrunk.push(node)
|
||||
}
|
||||
this.forceUpdate()
|
||||
|
|
@ -203,6 +203,16 @@ class Tree extends Component {
|
|||
this.setNodeExpanded(n.UUID, !expanded)
|
||||
break
|
||||
|
||||
case 'g':
|
||||
case 'Home':
|
||||
this.navigateTop()
|
||||
break
|
||||
|
||||
case 'G':
|
||||
case 'End':
|
||||
this.navigateBottom()
|
||||
break
|
||||
|
||||
case 'j':
|
||||
case 'ArrowDown':
|
||||
await this.navigateDown(this.selectedNode)
|
||||
|
|
@ -234,6 +244,9 @@ class Tree extends Component {
|
|||
}
|
||||
}//}}}
|
||||
async navigateLeft(n) {//{{{
|
||||
if (n === null)
|
||||
return
|
||||
|
||||
const expanded = this.getNodeExpanded(n.UUID)
|
||||
if (expanded && n.hasChildren()) {
|
||||
this.setNodeExpanded(n.UUID, false)
|
||||
|
|
@ -256,6 +269,9 @@ class Tree extends Component {
|
|||
await _notes2.current.goToNode(n.getSiblingBefore()?.UUID, true, true)
|
||||
}//}}}
|
||||
async navigateRight(n) {//{{{
|
||||
if (n === null)
|
||||
return
|
||||
|
||||
const siblingAfter = n.getSiblingAfter()
|
||||
const expanded = this.getNodeExpanded(n.UUID)
|
||||
|
||||
|
|
@ -278,6 +294,9 @@ class Tree extends Component {
|
|||
await _notes2.current.goToNode(n.getSiblingAfter()?.UUID, true, true)
|
||||
}//}}}
|
||||
async navigateUp(n) {//{{{
|
||||
if (n === null)
|
||||
return
|
||||
|
||||
let parent = null
|
||||
const siblingBefore = n.getSiblingBefore()
|
||||
let siblingExpanded = false
|
||||
|
|
@ -303,14 +322,15 @@ class Tree extends Component {
|
|||
}
|
||||
}//}}}
|
||||
async navigateDown(n) {//{{{
|
||||
if (n === null)
|
||||
return
|
||||
|
||||
const nodeExpanded = this.getNodeExpanded(n.UUID)
|
||||
|
||||
// Last node, not expanded, so it matters not whether it has children or not.
|
||||
// Traverse upward to nearest parent with next sibling.
|
||||
if (!nodeExpanded && n.isLastSibling()) {
|
||||
const wantedNode = this.getParentWithNextSibling(n)
|
||||
if (wantedNode?.UUID === ROOT_NODE)
|
||||
return
|
||||
await _notes2.current.goToNode(wantedNode?.UUID, true, true)
|
||||
return
|
||||
}
|
||||
|
|
@ -320,11 +340,10 @@ class Tree extends Component {
|
|||
await _notes2.current.goToNode(wantedNode?.UUID, true, true)
|
||||
return
|
||||
}
|
||||
|
||||
// Node not expanded. Go to this node's next sibling.
|
||||
// GoToNode will abort if given null.
|
||||
if (!nodeExpanded || !n.hasChildren()) {
|
||||
if (n.getSiblingAfter()?.UUID === ROOT_NODE)
|
||||
return
|
||||
await _notes2.current.goToNode(n.getSiblingAfter()?.UUID, true, true)
|
||||
return
|
||||
}
|
||||
|
|
@ -336,6 +355,26 @@ class Tree extends Component {
|
|||
return
|
||||
}
|
||||
}//}}}
|
||||
async navigateTop() {//{{{
|
||||
const root = await nodeStore.get(ROOT_NODE)
|
||||
if (root.Children.length === 0)
|
||||
return
|
||||
await _notes2.current.goToNode(root.Children[0]?.UUID, true, true)
|
||||
}//}}}
|
||||
async navigateBottom() {//{{{
|
||||
const root = await nodeStore.get(ROOT_NODE)
|
||||
if (root.Children.length === 0)
|
||||
return
|
||||
|
||||
const toplevel = root.Children[root.Children.length - 1]
|
||||
const toplevelExpanded = this.getNodeExpanded(toplevel?.UUID)
|
||||
|
||||
if (toplevelExpanded) {
|
||||
const lastnode = this.getLastExpandedNode(toplevel)
|
||||
await _notes2.current.goToNode(lastnode?.UUID, true, true)
|
||||
} else
|
||||
await _notes2.current.goToNode(root.Children[root.Children.length - 1]?.UUID, true, true)
|
||||
}//}}}
|
||||
}
|
||||
|
||||
class TreeNode extends Component {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue