ratatui_toolkit/widgets/file_system_tree/methods/
expand_directory.rs

1use 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}