Skip to content

Commit

Permalink
Update H key event on directory selected to close parent directory
Browse files Browse the repository at this point in the history
  • Loading branch information
panarch committed Aug 27, 2024
1 parent b10a6a1 commit 2922016
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 47 deletions.
37 changes: 27 additions & 10 deletions core/src/state/notebook.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ impl NotebookState {
vec![
"[Esc] Menu",
"[L] Toggle",
"[H] Close",
"[H] Close parent directory",
"[J] Select next",
"[K] Select previous",
"[M] More actions",
Expand Down Expand Up @@ -197,24 +197,41 @@ pub async fn consume(glues: &mut Glues, event: Event) -> Result<NotebookTransiti
directory::open(db, state, directory_id).await
}
(Key(KeyEvent::L) | Key(KeyEvent::Right), DirectorySelected) => {
let directory_id = &state.get_selected_directory()?.id;
let directory_item = state.root.find(directory_id).ok_or(Error::Wip(
"[Key::L] failed to find parent directory".to_owned(),
let directory = state.get_selected_directory()?.clone();
let directory_item = state.root.find(&directory.id).ok_or(Error::Wip(
"[Key::L] failed to find the target directory".to_owned(),
))?;

if directory_item.children.is_none() {
directory::open(db, state, directory_id.clone()).await
directory::open(db, state, directory.id.clone()).await
} else {
directory::close(state, directory_id.clone())
directory::close(state, directory)
}
}
(Notebook(CloseDirectory(directory_id)), DirectorySelected | NoteSelected) => {
directory::close(state, directory_id)
let directory = state
.root
.find(&directory_id)
.ok_or(Error::Wip(
"[CloseDirectory] failed to find target directory".to_owned(),
))?
.directory
.clone();

directory::close(state, directory)
}
(Key(KeyEvent::H) | Key(KeyEvent::Left), DirectorySelected) => {
let directory_id = state.get_selected_directory()?.id.clone();
let directory = state.get_selected_directory()?;
if state.root.directory.id == directory.id {
return Ok(NotebookTransition::None);
}

let parent_item = state.root.find(&directory.parent_id).ok_or(Error::Wip(
"[Key::H] failed to find parent directory".to_owned(),
))?;
let parent = parent_item.directory.clone();

directory::close(state, directory_id)
directory::close(state, parent)
}
(Key(KeyEvent::H) | Key(KeyEvent::Left), NoteSelected) => {
let directory_id = &state.get_selected_note()?.directory_id;
Expand All @@ -223,7 +240,7 @@ pub async fn consume(glues: &mut Glues, event: Event) -> Result<NotebookTransiti
))?;
let directory = directory_item.directory.clone();

directory::close_by_note(state, directory)
directory::close(state, directory)
}
(Key(KeyEvent::J), DirectorySelected | NoteSelected) => traverse::select_next(state),
(Key(KeyEvent::K), DirectorySelected | NoteSelected) => traverse::select_prev(state),
Expand Down
26 changes: 7 additions & 19 deletions core/src/state/notebook/consume/directory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,34 +41,22 @@ pub async fn open(
})
}

pub fn close(state: &mut NotebookState, directory_id: DirectoryId) -> Result<NotebookTransition> {
pub fn close(state: &mut NotebookState, directory: Directory) -> Result<NotebookTransition> {
state
.root
.find_mut(&directory_id)
.ok_or(Error::Wip("todo: asdfasdf".to_owned()))?
.find_mut(&directory.id)
.ok_or(Error::Wip(format!(
"[directory::close] failed to find directory '{}'",
directory.name
)))?
.children = None;

Ok(NotebookTransition::CloseDirectory {
directory_id: directory_id.clone(),
by_note: false,
})
}

pub fn close_by_note(
state: &mut NotebookState,
directory: Directory,
) -> Result<NotebookTransition> {
close(state, directory.id.clone())?;

let directory_id = directory.id.clone();

state.selected = SelectedItem::Directory(directory);
state.inner_state = InnerState::DirectorySelected;

Ok(NotebookTransition::CloseDirectory {
directory_id,
by_note: true,
})
Ok(NotebookTransition::CloseDirectory(directory_id))
}

pub fn show_actions_dialog(
Expand Down
5 changes: 1 addition & 4 deletions core/src/transition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,7 @@ pub enum NotebookTransition {
notes: Vec<Note>,
directories: Vec<DirectoryItem>,
},
CloseDirectory {
directory_id: DirectoryId,
by_note: bool,
},
CloseDirectory(DirectoryId),

RenameNote(Note),
RenameDirectory(Directory),
Expand Down
5 changes: 1 addition & 4 deletions tui/src/transitions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,7 @@ fn handle_notebook_transition(siv: &mut Cursive, transition: NotebookTransition)
} => {
open_directory(siv, id, notes, directories);
}
NotebookTransition::CloseDirectory {
directory_id,
by_note,
} => close_directory(siv, directory_id, by_note),
NotebookTransition::CloseDirectory(directory_id) => close_directory(siv, directory_id),
NotebookTransition::OpenNote { note, content } => {
open_note(siv, note, content);
}
Expand Down
18 changes: 8 additions & 10 deletions tui/src/transitions/notebook/close_directory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use {
glues_core::types::DirectoryId,
};

pub fn close_directory(siv: &mut Cursive, directory_id: DirectoryId, by_note: bool) {
pub fn close_directory(siv: &mut Cursive, directory_id: DirectoryId) {
let directory_node = Node::notebook().note_tree().directory(&directory_id);

directory_node.caret().find(siv).set_content("▸ ");
Expand All @@ -14,13 +14,11 @@ pub fn close_directory(siv: &mut Cursive, directory_id: DirectoryId, by_note: bo
container.remove_child(1);
}

if by_note {
siv.focus_on_next_tick(
Node::notebook()
.note_tree()
.directory(&directory_id)
.name_button()
.name(),
);
}
siv.focus_on_next_tick(
Node::notebook()
.note_tree()
.directory(&directory_id)
.name_button()
.name(),
);
}

0 comments on commit 2922016

Please sign in to comment.