Added sorting to the main library table

This commit is contained in:
2024-02-13 23:00:35 -07:00
parent a982f610cb
commit 6cd24be5e4
13 changed files with 707 additions and 117 deletions
@@ -270,6 +270,7 @@ pub enum ActiveRadarrBlock {
MovieHistory,
#[default]
Movies,
MoviesSortPrompt,
RootFolders,
System,
SystemLogs,
@@ -289,8 +290,9 @@ pub enum ActiveRadarrBlock {
ViewMovieOverview,
}
pub static LIBRARY_BLOCKS: [ActiveRadarrBlock; 6] = [
pub static LIBRARY_BLOCKS: [ActiveRadarrBlock; 7] = [
ActiveRadarrBlock::Movies,
ActiveRadarrBlock::MoviesSortPrompt,
ActiveRadarrBlock::SearchMovie,
ActiveRadarrBlock::SearchMovieError,
ActiveRadarrBlock::FilterMovies,
@@ -256,8 +256,9 @@ mod tests {
#[test]
fn test_library_blocks_contents() {
assert_eq!(LIBRARY_BLOCKS.len(), 6);
assert_eq!(LIBRARY_BLOCKS.len(), 7);
assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::Movies));
assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::MoviesSortPrompt));
assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::SearchMovie));
assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::SearchMovieError));
assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::FilterMovies));
+7 -1
View File
@@ -218,8 +218,14 @@ where
}
pub fn apply_sorting(&mut self) {
self.apply_sorting_toggle(true);
}
pub fn apply_sorting_toggle(&mut self, toggle_dir: bool) {
if let Some(sort_options) = &mut self.sort {
self.sort_asc = !self.sort_asc;
if toggle_dir {
self.sort_asc = !self.sort_asc;
}
let selected_sort_option = sort_options.current_selection();
let mut items = self.filtered_items.as_ref().unwrap_or(&self.items).clone();
if let Some(cmp_fn) = selected_sort_option.cmp_fn {
+51 -12
View File
@@ -268,18 +268,18 @@ mod tests {
}
#[test]
fn test_stateful_table_apply_sorting_no_op_no_sort_options() {
fn test_stateful_table_apply_sorting_toggle_no_op_no_sort_options() {
let mut stateful_table = create_test_stateful_table();
let expected_items = stateful_table.items.clone();
stateful_table.apply_sorting();
stateful_table.apply_sorting_toggle(true);
assert_eq!(stateful_table.items, expected_items);
assert!(!stateful_table.sort_asc);
}
#[test]
fn test_stateful_table_apply_sorting_no_op_no_cmp_fn() {
fn test_stateful_table_apply_sorting_toggle_no_op_no_cmp_fn() {
let mut stateful_table = create_test_stateful_table();
stateful_table.sorting(vec![SortOption {
name: "Test 1",
@@ -287,14 +287,14 @@ mod tests {
}]);
let expected_items = stateful_table.items.clone();
stateful_table.apply_sorting();
stateful_table.apply_sorting_toggle(true);
assert_eq!(stateful_table.items, expected_items);
assert!(stateful_table.sort_asc);
}
#[test]
fn test_filtered_stateful_table_apply_sorting_no_op_no_cmp_fn() {
fn test_filtered_stateful_table_apply_sorting_toggle_no_op_no_cmp_fn() {
let mut filtered_stateful_table = create_test_filtered_stateful_table();
filtered_stateful_table.sorting(vec![SortOption {
name: "Test 1",
@@ -306,7 +306,7 @@ mod tests {
.unwrap()
.clone();
filtered_stateful_table.apply_sorting();
filtered_stateful_table.apply_sorting_toggle(true);
assert_eq!(
*filtered_stateful_table.filtered_items.as_ref().unwrap(),
@@ -316,7 +316,7 @@ mod tests {
}
#[test]
fn test_stateful_table_apply_sorting() {
fn test_stateful_table_apply_sorting_toggles_direction() {
let mut stateful_table = create_test_stateful_table();
stateful_table.sorting(vec![SortOption {
name: "Test 1",
@@ -325,12 +325,12 @@ mod tests {
let mut expected_items = stateful_table.items.clone();
expected_items.sort();
stateful_table.apply_sorting();
stateful_table.apply_sorting_toggle(true);
assert_eq!(stateful_table.items, expected_items);
assert!(stateful_table.sort_asc);
stateful_table.apply_sorting();
stateful_table.apply_sorting_toggle(true);
expected_items.reverse();
assert_eq!(stateful_table.items, expected_items);
@@ -338,7 +338,46 @@ mod tests {
}
#[test]
fn test_filtered_stateful_table_apply_sorting() {
fn test_stateful_table_apply_sorting_toggle() {
let mut stateful_table = create_test_stateful_table();
stateful_table.sorting(vec![SortOption {
name: "Test 1",
cmp_fn: Some(|a, b| a.cmp(b)),
}]);
let mut expected_items = stateful_table.items.clone();
expected_items.sort();
stateful_table.apply_sorting_toggle(true);
assert_eq!(stateful_table.items, expected_items);
assert!(stateful_table.sort_asc);
stateful_table.apply_sorting_toggle(true);
expected_items.reverse();
assert_eq!(stateful_table.items, expected_items);
assert!(!stateful_table.sort_asc);
}
#[test]
fn test_stateful_table_apply_sorting_toggle_false_doesnt_toggle_direction() {
let mut stateful_table = create_test_stateful_table();
stateful_table.sorting(vec![SortOption {
name: "Test 1",
cmp_fn: Some(|a, b| a.cmp(b)),
}]);
let mut expected_items = stateful_table.items.clone();
expected_items.sort();
expected_items.reverse();
stateful_table.apply_sorting_toggle(false);
assert_eq!(stateful_table.items, expected_items);
assert!(!stateful_table.sort_asc);
}
#[test]
fn test_filtered_stateful_table_apply_sorting_toggle() {
let mut filtered_stateful_table = create_test_filtered_stateful_table();
filtered_stateful_table.sorting(vec![SortOption {
name: "Test 1",
@@ -351,7 +390,7 @@ mod tests {
.clone();
expected_items.sort();
filtered_stateful_table.apply_sorting();
filtered_stateful_table.apply_sorting_toggle(true);
assert_eq!(
*filtered_stateful_table.filtered_items.as_ref().unwrap(),
@@ -359,7 +398,7 @@ mod tests {
);
assert!(filtered_stateful_table.sort_asc);
filtered_stateful_table.apply_sorting();
filtered_stateful_table.apply_sorting_toggle(true);
expected_items.reverse();
assert_eq!(