1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//! The flagship [`DirectoryTreeView`] Dioxus component.
use *;
use DirectoryTree;
use crateDirectoryTreeEvent;
use crateTreeRow;
use cratestyle as s;
/// A lazy-loading, filterable directory-tree explorer widget for Dioxus.
///
/// # Props
///
/// | Prop | Type | Description |
/// |---|---|---|
/// | `tree` | `Signal<DirectoryTree>` | The tree state, typically created with `use_signal`. |
/// | `on_event` | `EventHandler<DirectoryTreeEvent>` | Receives every interaction. |
///
/// # Wiring
///
/// ```no_run
/// # use dioxus::prelude::*;
/// # use dioxus_swdir_tree::{DirectoryTreeView, DirectoryTreeEvent, use_scan_driver};
/// # use dioxus_swdir_tree_core::{DirectoryTree, ThreadExecutor};
/// # use std::sync::Arc;
/// fn app() -> Element {
/// let mut tree = use_signal(|| DirectoryTree::new("/home"));
/// let scans = use_scan_driver(tree, Arc::new(ThreadExecutor));
///
/// let on_event = move |ev: DirectoryTreeEvent| match ev {
/// DirectoryTreeEvent::Toggled(path) => {
/// if let Some(req) = tree.write().on_toggled(&path) {
/// scans.send(req);
/// }
/// }
/// DirectoryTreeEvent::Selected { path, is_dir, mode } => {
/// tree.write().on_selected(&path, is_dir, mode);
/// }
/// };
///
/// rsx! {
/// div { style: "width: 280px; height: 100vh;",
/// DirectoryTreeView { tree, on_event }
/// }
/// }
/// }
/// ```
///
/// # Styling
///
/// The component applies `dx-swdir-*` CSS classes (see [`crate::style`]).
/// A minimal baseline stylesheet is injected when the `default-style`
/// feature is enabled (default). Disable it to theme from scratch.