Partially working filtering logic
This commit is contained in:
+50
-1
@@ -40,7 +40,7 @@ impl<T> Default for StatefulTable<T> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Clone> StatefulTable<T> {
|
||||
impl<T: Clone + PartialEq + Eq> StatefulTable<T> {
|
||||
pub fn set_items(&mut self, items: Vec<T>) {
|
||||
let items_len = items.len();
|
||||
self.items = items;
|
||||
@@ -69,6 +69,55 @@ impl<T: Clone> StatefulTable<T> {
|
||||
pub fn select_index(&mut self, index: Option<usize>) {
|
||||
self.state.select(index);
|
||||
}
|
||||
|
||||
pub fn scroll_up_with_filter<F>(&mut self, filter: F)
|
||||
where
|
||||
F: FnMut(&&T) -> bool,
|
||||
{
|
||||
let filtered_list: Vec<&T> = self.items.iter().filter(filter).collect();
|
||||
|
||||
let element_position = filtered_list
|
||||
.iter()
|
||||
.position(|&item| item == self.current_selection())
|
||||
.unwrap();
|
||||
|
||||
if element_position == 0 {
|
||||
let selected_index = self
|
||||
.items
|
||||
.iter()
|
||||
.position(|item| item == filtered_list[filtered_list.len()]);
|
||||
self.select_index(selected_index);
|
||||
} else {
|
||||
let selected_index = self
|
||||
.items
|
||||
.iter()
|
||||
.position(|item| item == filtered_list[element_position - 1]);
|
||||
self.select_index(selected_index)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn scroll_down_with_filter<F>(&mut self, filter: F)
|
||||
where
|
||||
F: FnMut(&&T) -> bool,
|
||||
{
|
||||
let filtered_list: Vec<&T> = self.items.iter().filter(filter).collect();
|
||||
|
||||
let element_position = filtered_list
|
||||
.iter()
|
||||
.position(|&item| item == self.current_selection())
|
||||
.unwrap();
|
||||
|
||||
if element_position + 1 > filtered_list.len() {
|
||||
let selected_index = self.items.iter().position(|item| item == filtered_list[0]);
|
||||
self.select_index(selected_index);
|
||||
} else {
|
||||
let selected_index = self
|
||||
.items
|
||||
.iter()
|
||||
.position(|item| item == filtered_list[element_position + 1]);
|
||||
self.select_index(selected_index)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Scrollable for StatefulTable<T> {
|
||||
|
||||
@@ -19,7 +19,7 @@ pub struct SystemStatus {
|
||||
pub start_time: DateTime<Utc>,
|
||||
}
|
||||
|
||||
#[derive(Derivative, Deserialize, Debug, Clone)]
|
||||
#[derive(Derivative, Deserialize, Debug, Clone, PartialEq, Eq)]
|
||||
#[derivative(Default)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct Movie {
|
||||
@@ -48,7 +48,7 @@ pub struct Movie {
|
||||
pub collection: Option<Collection>,
|
||||
}
|
||||
|
||||
#[derive(Derivative, Deserialize, Debug, Clone)]
|
||||
#[derive(Derivative, Deserialize, Debug, Clone, PartialEq, Eq)]
|
||||
#[derivative(Default)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct CollectionMovie {
|
||||
@@ -62,7 +62,7 @@ pub struct CollectionMovie {
|
||||
pub ratings: RatingsList,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Derivative, Clone, Debug)]
|
||||
#[derive(Deserialize, Derivative, Clone, Debug, PartialEq, Eq)]
|
||||
#[derivative(Default)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct Collection {
|
||||
@@ -75,7 +75,7 @@ pub struct Collection {
|
||||
pub movies: Option<Vec<CollectionMovie>>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Derivative, Debug, Clone)]
|
||||
#[derive(Deserialize, Derivative, Debug, Clone, PartialEq, Eq)]
|
||||
#[derivative(Default)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct MovieFile {
|
||||
@@ -85,7 +85,7 @@ pub struct MovieFile {
|
||||
pub media_info: MediaInfo,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Derivative, Debug, Clone)]
|
||||
#[derive(Deserialize, Derivative, Debug, Clone, PartialEq, Eq)]
|
||||
#[derivative(Default)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct MediaInfo {
|
||||
@@ -109,7 +109,7 @@ pub struct MediaInfo {
|
||||
pub scan_type: String,
|
||||
}
|
||||
|
||||
#[derive(Default, Deserialize, Debug, Clone)]
|
||||
#[derive(Default, Deserialize, Debug, Clone, PartialEq, Eq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct RatingsList {
|
||||
pub imdb: Option<Rating>,
|
||||
@@ -117,7 +117,7 @@ pub struct RatingsList {
|
||||
pub rotten_tomatoes: Option<Rating>,
|
||||
}
|
||||
|
||||
#[derive(Derivative, Deserialize, Debug, Clone)]
|
||||
#[derive(Derivative, Deserialize, Debug, Clone, PartialEq, Eq)]
|
||||
#[derivative(Default)]
|
||||
pub struct Rating {
|
||||
#[derivative(Default(value = "Number::from(0)"))]
|
||||
@@ -189,7 +189,7 @@ pub enum CreditType {
|
||||
Crew,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Clone, Debug)]
|
||||
#[derive(Deserialize, Clone, Debug, PartialEq, Eq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct Credit {
|
||||
pub person_name: String,
|
||||
|
||||
Reference in New Issue
Block a user