ratatui_toolkit/widgets/file_system_tree/methods/
expand_directory.rs1use anyhow::Result;
2
3use crate::primitives::tree_view::TreeNode;
4use crate::widgets::file_system_tree::{FileSystemEntry, FileSystemTree, FileSystemTreeConfig};
5
6impl<'a> FileSystemTree<'a> {
7 pub fn expand_directory(&mut self, path: &[usize]) -> Result<()> {
8 fn find_and_expand(
9 nodes: &mut [TreeNode<FileSystemEntry>],
10 path: &[usize],
11 config: &FileSystemTreeConfig,
12 ) -> Result<()> {
13 if path.is_empty() {
14 return Ok(());
15 }
16
17 if path.len() == 1 {
18 if let Some(node) = nodes.get_mut(path[0]) {
19 if node.data.is_dir && node.children.is_empty() {
20 node.children = FileSystemTree::load_directory(&node.data.path, config)?;
21 }
22 }
23 return Ok(());
24 }
25
26 if let Some(node) = nodes.get_mut(path[0]) {
27 find_and_expand(&mut node.children, &path[1..], config)?;
28 }
29
30 Ok(())
31 }
32
33 find_and_expand(&mut self.nodes, path, &self.config)
34 }
35}