refactor(BlockSelectionState): Refactored so selection of blocks in 2x2 grids is more intuitive and added left() and right() methods to aid this effort.

This commit is contained in:
2024-11-30 12:22:46 -07:00
parent 9b2040059d
commit f7c96d81e9
27 changed files with 472 additions and 387 deletions
@@ -91,7 +91,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for AddMovieHandler<'a,
.unwrap()
.root_folder_list
.scroll_up(),
ActiveRadarrBlock::AddMoviePrompt => self.app.data.radarr_data.selected_block.previous(),
ActiveRadarrBlock::AddMoviePrompt => self.app.data.radarr_data.selected_block.up(),
_ => (),
}
}
@@ -142,7 +142,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for AddMovieHandler<'a,
.unwrap()
.root_folder_list
.scroll_down(),
ActiveRadarrBlock::AddMoviePrompt => self.app.data.radarr_data.selected_block.next(),
ActiveRadarrBlock::AddMoviePrompt => self.app.data.radarr_data.selected_block.down(),
_ => (),
}
}
@@ -360,7 +360,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for AddMovieHandler<'a,
.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into());
self.app.data.radarr_data.add_movie_modal = Some((&self.app.data.radarr_data).into());
self.app.data.radarr_data.selected_block =
BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS);
BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS);
}
}
ActiveRadarrBlock::AddMoviePrompt => {
@@ -380,8 +380,8 @@ mod tests {
#[rstest]
fn test_add_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) {
let mut app = App::default();
app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.next();
app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.down();
AddMovieHandler::with(key, &mut app, ActiveRadarrBlock::AddMoviePrompt, None).handle();
@@ -402,8 +402,8 @@ mod tests {
fn test_add_movie_prompt_scroll_no_op_when_not_ready(#[values(Key::Up, Key::Down)] key: Key) {
let mut app = App::default();
app.is_loading = true;
app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.next();
app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.down();
AddMovieHandler::with(key, &mut app, ActiveRadarrBlock::AddMoviePrompt, None).handle();
@@ -1170,12 +1170,12 @@ mod tests {
let mut app = App::default();
app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into());
app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS);
app
.data
.radarr_data
.selected_block
.set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1);
.set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1);
AddMovieHandler::with(
SUBMIT_KEY,
@@ -1196,12 +1196,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into());
app.data.radarr_data.prompt_confirm = true;
app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS);
app
.data
.radarr_data
.selected_block
.set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1);
.set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1);
AddMovieHandler::with(
SUBMIT_KEY,
@@ -1227,7 +1227,7 @@ mod tests {
#[case(ActiveRadarrBlock::AddMovieTagsInput, 4)]
fn test_add_movie_prompt_selected_block_submit(
#[case] selected_block: ActiveRadarrBlock,
#[case] index: usize,
#[case] y_index: usize,
) {
let mut app = App::default();
app.push_navigation_stack(
@@ -1237,8 +1237,8 @@ mod tests {
)
.into(),
);
app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.set_index(index);
app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.set_index(0, y_index);
AddMovieHandler::with(
SUBMIT_KEY,
@@ -1594,12 +1594,12 @@ mod tests {
app.data.radarr_data.add_movie_modal = Some(AddMovieModal::default());
app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into());
app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS);
app
.data
.radarr_data
.selected_block
.set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1);
.set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1);
AddMovieHandler::with(
DEFAULT_KEYBINDINGS.confirm.key,
@@ -45,13 +45,13 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for DeleteMovieHandler<'
fn handle_scroll_up(&mut self) {
if self.active_radarr_block == ActiveRadarrBlock::DeleteMoviePrompt {
self.app.data.radarr_data.selected_block.previous();
self.app.data.radarr_data.selected_block.up();
}
}
fn handle_scroll_down(&mut self) {
if self.active_radarr_block == ActiveRadarrBlock::DeleteMoviePrompt {
self.app.data.radarr_data.selected_block.next();
self.app.data.radarr_data.selected_block.down();
}
}
@@ -21,9 +21,8 @@ mod tests {
#[rstest]
fn test_delete_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) {
let mut app = App::default();
app.data.radarr_data.selected_block =
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.next();
app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.down();
DeleteMovieHandler::with(key, &mut app, ActiveRadarrBlock::DeleteMoviePrompt, None).handle();
@@ -46,9 +45,8 @@ mod tests {
) {
let mut app = App::default();
app.is_loading = true;
app.data.radarr_data.selected_block =
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.next();
app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.down();
DeleteMovieHandler::with(key, &mut app, ActiveRadarrBlock::DeleteMoviePrompt, None).handle();
@@ -94,13 +92,12 @@ mod tests {
let mut app = App::default();
app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into());
app.data.radarr_data.selected_block =
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
app
.data
.radarr_data
.selected_block
.set_index(DELETE_MOVIE_SELECTION_BLOCKS.len() - 1);
.set_index(0, DELETE_MOVIE_SELECTION_BLOCKS.len() - 1);
app.data.radarr_data.delete_movie_files = true;
app.data.radarr_data.add_list_exclusion = true;
@@ -127,13 +124,12 @@ mod tests {
app.data.radarr_data.prompt_confirm = true;
app.data.radarr_data.delete_movie_files = true;
app.data.radarr_data.add_list_exclusion = true;
app.data.radarr_data.selected_block =
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
app
.data
.radarr_data
.selected_block
.set_index(DELETE_MOVIE_SELECTION_BLOCKS.len() - 1);
.set_index(0, DELETE_MOVIE_SELECTION_BLOCKS.len() - 1);
DeleteMovieHandler::with(
SUBMIT_KEY,
@@ -187,8 +183,7 @@ mod tests {
fn test_delete_movie_toggle_delete_files_submit() {
let current_route = ActiveRadarrBlock::DeleteMoviePrompt.into();
let mut app = App::default();
app.data.radarr_data.selected_block =
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into());
DeleteMovieHandler::with(
@@ -263,13 +258,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into());
app.data.radarr_data.delete_movie_files = true;
app.data.radarr_data.add_list_exclusion = true;
app.data.radarr_data.selected_block =
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
app
.data
.radarr_data
.selected_block
.set_index(DELETE_MOVIE_SELECTION_BLOCKS.len() - 1);
.set_index(0, DELETE_MOVIE_SELECTION_BLOCKS.len() - 1);
DeleteMovieHandler::with(
DEFAULT_KEYBINDINGS.confirm.key,
@@ -65,7 +65,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditMovieHandler<'a,
.unwrap()
.quality_profile_list
.scroll_up(),
ActiveRadarrBlock::EditMoviePrompt => self.app.data.radarr_data.selected_block.previous(),
ActiveRadarrBlock::EditMoviePrompt => self.app.data.radarr_data.selected_block.up(),
_ => (),
}
}
@@ -90,7 +90,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditMovieHandler<'a,
.unwrap()
.quality_profile_list
.scroll_down(),
ActiveRadarrBlock::EditMoviePrompt => self.app.data.radarr_data.selected_block.next(),
ActiveRadarrBlock::EditMoviePrompt => self.app.data.radarr_data.selected_block.down(),
_ => (),
}
}
@@ -146,8 +146,8 @@ mod tests {
fn test_edit_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) {
let mut app = App::default();
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default());
app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.next();
app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.down();
EditMovieHandler::with(key, &mut app, ActiveRadarrBlock::EditMoviePrompt, None).handle();
@@ -169,8 +169,8 @@ mod tests {
let mut app = App::default();
app.is_loading = true;
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default());
app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.next();
app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.down();
EditMovieHandler::with(key, &mut app, ActiveRadarrBlock::EditMoviePrompt, None).handle();
@@ -621,12 +621,12 @@ mod tests {
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default());
app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::EditMoviePrompt.into());
app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS);
app
.data
.radarr_data
.selected_block
.set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
.set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
EditMovieHandler::with(
SUBMIT_KEY,
@@ -647,12 +647,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::EditMoviePrompt.into());
app.data.radarr_data.prompt_confirm = true;
app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS);
app
.data
.radarr_data
.selected_block
.set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
.set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
EditMovieHandler::with(
SUBMIT_KEY,
@@ -704,7 +704,7 @@ mod tests {
));
let mut app = App::default();
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default());
app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS);
app.push_navigation_stack(current_route);
EditMovieHandler::with(
@@ -755,7 +755,7 @@ mod tests {
#[case(ActiveRadarrBlock::EditMovieTagsInput, 4)]
fn test_edit_movie_prompt_selected_block_submit(
#[case] selected_block: ActiveRadarrBlock,
#[case] index: usize,
#[case] y_index: usize,
) {
let mut app = App::default();
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default());
@@ -766,8 +766,8 @@ mod tests {
)
.into(),
);
app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.set_index(index);
app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.set_index(0, y_index);
EditMovieHandler::with(
SUBMIT_KEY,
@@ -792,7 +792,7 @@ mod tests {
#[rstest]
fn test_edit_movie_prompt_selected_block_submit_no_op_when_not_ready(
#[values(1, 2, 3, 4)] index: usize,
#[values(1, 2, 3, 4)] y_index: usize,
) {
let mut app = App::default();
app.is_loading = true;
@@ -804,8 +804,8 @@ mod tests {
)
.into(),
);
app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.set_index(index);
app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.set_index(0, y_index);
EditMovieHandler::with(
SUBMIT_KEY,
@@ -1061,12 +1061,12 @@ mod tests {
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default());
app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::EditMoviePrompt.into());
app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS);
app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS);
app
.data
.radarr_data
.selected_block
.set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
.set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
EditMovieHandler::with(
DEFAULT_KEYBINDINGS.confirm.key,
@@ -375,7 +375,7 @@ mod tests {
);
assert_eq!(
app.data.radarr_data.selected_block.blocks,
&DELETE_MOVIE_SELECTION_BLOCKS
DELETE_MOVIE_SELECTION_BLOCKS
);
}
+2 -2
View File
@@ -194,7 +194,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for LibraryHandler<'a, '
.app
.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into());
self.app.data.radarr_data.selected_block =
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
}
}
@@ -342,7 +342,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for LibraryHandler<'a, '
);
self.app.data.radarr_data.edit_movie_modal = Some((&self.app.data.radarr_data).into());
self.app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS);
BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS);
}
_ if key == DEFAULT_KEYBINDINGS.add.key => {
self
@@ -447,7 +447,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for MovieDetailsHandler<
);
self.app.data.radarr_data.edit_movie_modal = Some((&self.app.data.radarr_data).into());
self.app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS);
BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS);
}
_ if key == DEFAULT_KEYBINDINGS.update.key => {
self