Add ability to expand/collapse directories using the project_panel::Open
action (#6914)
#6910 I changed the `open_file` symbol to `open`, because this is more consistent with the original intention Release Notes: - Added the ability to expand/collapse directories using the `project_panel::Open` action.
This commit is contained in:
parent
2c834c24a3
commit
5f4dd36a1a
1 changed files with 50 additions and 4 deletions
|
@ -561,10 +561,12 @@ impl ProjectPanel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn open_file(&mut self, _: &Open, cx: &mut ViewContext<Self>) {
|
fn open(&mut self, _: &Open, cx: &mut ViewContext<Self>) {
|
||||||
if let Some((_, entry)) = self.selected_entry(cx) {
|
if let Some((_, entry)) = self.selected_entry(cx) {
|
||||||
if entry.is_file() {
|
if entry.is_file() {
|
||||||
self.open_entry(entry.id, true, cx);
|
self.open_entry(entry.id, true, cx);
|
||||||
|
} else {
|
||||||
|
self.toggle_expanded(entry.id, cx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1476,7 +1478,7 @@ impl Render for ProjectPanel {
|
||||||
.on_action(cx.listener(Self::expand_selected_entry))
|
.on_action(cx.listener(Self::expand_selected_entry))
|
||||||
.on_action(cx.listener(Self::collapse_selected_entry))
|
.on_action(cx.listener(Self::collapse_selected_entry))
|
||||||
.on_action(cx.listener(Self::collapse_all_entries))
|
.on_action(cx.listener(Self::collapse_all_entries))
|
||||||
.on_action(cx.listener(Self::open_file))
|
.on_action(cx.listener(Self::open))
|
||||||
.on_action(cx.listener(Self::confirm))
|
.on_action(cx.listener(Self::confirm))
|
||||||
.on_action(cx.listener(Self::cancel))
|
.on_action(cx.listener(Self::cancel))
|
||||||
.on_action(cx.listener(Self::copy_path))
|
.on_action(cx.listener(Self::copy_path))
|
||||||
|
@ -2576,7 +2578,7 @@ mod tests {
|
||||||
|
|
||||||
toggle_expand_dir(&panel, "src/test", cx);
|
toggle_expand_dir(&panel, "src/test", cx);
|
||||||
select_path(&panel, "src/test/first.rs", cx);
|
select_path(&panel, "src/test/first.rs", cx);
|
||||||
panel.update(cx, |panel, cx| panel.open_file(&Open, cx));
|
panel.update(cx, |panel, cx| panel.open(&Open, cx));
|
||||||
cx.executor().run_until_parked();
|
cx.executor().run_until_parked();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
visible_entries_as_strings(&panel, 0..10, cx),
|
visible_entries_as_strings(&panel, 0..10, cx),
|
||||||
|
@ -2604,7 +2606,7 @@ mod tests {
|
||||||
ensure_no_open_items_and_panes(&workspace, cx);
|
ensure_no_open_items_and_panes(&workspace, cx);
|
||||||
|
|
||||||
select_path(&panel, "src/test/second.rs", cx);
|
select_path(&panel, "src/test/second.rs", cx);
|
||||||
panel.update(cx, |panel, cx| panel.open_file(&Open, cx));
|
panel.update(cx, |panel, cx| panel.open(&Open, cx));
|
||||||
cx.executor().run_until_parked();
|
cx.executor().run_until_parked();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
visible_entries_as_strings(&panel, 0..10, cx),
|
visible_entries_as_strings(&panel, 0..10, cx),
|
||||||
|
@ -2810,6 +2812,50 @@ mod tests {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[gpui::test]
|
||||||
|
async fn test_dir_toggle_collapse(cx: &mut gpui::TestAppContext) {
|
||||||
|
init_test_with_editor(cx);
|
||||||
|
|
||||||
|
let fs = FakeFs::new(cx.executor().clone());
|
||||||
|
fs.insert_tree(
|
||||||
|
"/project_root",
|
||||||
|
json!({
|
||||||
|
"dir_1": {
|
||||||
|
"nested_dir": {
|
||||||
|
"file_a.py": "# File contents",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"file_1.py": "# File contents",
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let project = Project::test(fs.clone(), ["/project_root".as_ref()], cx).await;
|
||||||
|
let workspace = cx.add_window(|cx| Workspace::test_new(project.clone(), cx));
|
||||||
|
let cx = &mut VisualTestContext::from_window(*workspace, cx);
|
||||||
|
let panel = workspace
|
||||||
|
.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx))
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
panel.update(cx, |panel, cx| panel.open(&Open, cx));
|
||||||
|
cx.executor().run_until_parked();
|
||||||
|
select_path(&panel, "project_root/dir_1", cx);
|
||||||
|
panel.update(cx, |panel, cx| panel.open(&Open, cx));
|
||||||
|
select_path(&panel, "project_root/dir_1/nested_dir", cx);
|
||||||
|
panel.update(cx, |panel, cx| panel.open(&Open, cx));
|
||||||
|
panel.update(cx, |panel, cx| panel.open(&Open, cx));
|
||||||
|
cx.executor().run_until_parked();
|
||||||
|
assert_eq!(
|
||||||
|
visible_entries_as_strings(&panel, 0..10, cx),
|
||||||
|
&[
|
||||||
|
"v project_root",
|
||||||
|
" v dir_1",
|
||||||
|
" > nested_dir <== selected",
|
||||||
|
" file_1.py",
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[gpui::test]
|
#[gpui::test]
|
||||||
async fn test_collapse_all_entries(cx: &mut gpui::TestAppContext) {
|
async fn test_collapse_all_entries(cx: &mut gpui::TestAppContext) {
|
||||||
init_test_with_editor(cx);
|
init_test_with_editor(cx);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue