commit
This commit is contained in:
@@ -22,8 +22,8 @@ pub struct App {
|
||||
pub current_messages: Vec<MessageInfo>,
|
||||
pub message_input: String,
|
||||
pub message_scroll_offset: usize,
|
||||
pub folders: Vec<String>,
|
||||
pub selected_folder: usize,
|
||||
/// None = All (основной список), Some(id) = папка с id
|
||||
pub selected_folder_id: Option<i32>,
|
||||
pub is_loading: bool,
|
||||
// Search state
|
||||
pub is_searching: bool,
|
||||
@@ -49,8 +49,7 @@ impl App {
|
||||
current_messages: Vec::new(),
|
||||
message_input: String::new(),
|
||||
message_scroll_offset: 0,
|
||||
folders: vec!["All".to_string()],
|
||||
selected_folder: 0,
|
||||
selected_folder_id: None, // None = All
|
||||
is_loading: true,
|
||||
is_searching: false,
|
||||
search_query: String::new(),
|
||||
@@ -58,12 +57,13 @@ impl App {
|
||||
}
|
||||
|
||||
pub fn next_chat(&mut self) {
|
||||
if self.chats.is_empty() {
|
||||
let filtered = self.get_filtered_chats();
|
||||
if filtered.is_empty() {
|
||||
return;
|
||||
}
|
||||
let i = match self.chat_list_state.selected() {
|
||||
Some(i) => {
|
||||
if i >= self.chats.len() - 1 {
|
||||
if i >= filtered.len() - 1 {
|
||||
0
|
||||
} else {
|
||||
i + 1
|
||||
@@ -75,13 +75,14 @@ impl App {
|
||||
}
|
||||
|
||||
pub fn previous_chat(&mut self) {
|
||||
if self.chats.is_empty() {
|
||||
let filtered = self.get_filtered_chats();
|
||||
if filtered.is_empty() {
|
||||
return;
|
||||
}
|
||||
let i = match self.chat_list_state.selected() {
|
||||
Some(i) => {
|
||||
if i == 0 {
|
||||
self.chats.len() - 1
|
||||
filtered.len() - 1
|
||||
} else {
|
||||
i - 1
|
||||
}
|
||||
@@ -92,8 +93,9 @@ impl App {
|
||||
}
|
||||
|
||||
pub fn select_current_chat(&mut self) {
|
||||
let filtered = self.get_filtered_chats();
|
||||
if let Some(i) = self.chat_list_state.selected() {
|
||||
if let Some(chat) = self.chats.get(i) {
|
||||
if let Some(chat) = filtered.get(i) {
|
||||
self.selected_chat_id = Some(chat.id);
|
||||
}
|
||||
}
|
||||
@@ -134,12 +136,20 @@ impl App {
|
||||
}
|
||||
|
||||
pub fn get_filtered_chats(&self) -> Vec<&ChatInfo> {
|
||||
let folder_filtered: Vec<&ChatInfo> = match self.selected_folder_id {
|
||||
None => self.chats.iter().collect(), // All - показываем все
|
||||
Some(folder_id) => self.chats
|
||||
.iter()
|
||||
.filter(|c| c.folder_ids.contains(&folder_id))
|
||||
.collect(),
|
||||
};
|
||||
|
||||
if self.search_query.is_empty() {
|
||||
self.chats.iter().collect()
|
||||
folder_filtered
|
||||
} else {
|
||||
let query = self.search_query.to_lowercase();
|
||||
self.chats
|
||||
.iter()
|
||||
folder_filtered
|
||||
.into_iter()
|
||||
.filter(|c| {
|
||||
// Поиск по названию чата
|
||||
c.title.to_lowercase().contains(&query) ||
|
||||
|
||||
Reference in New Issue
Block a user