This commit is contained in:
Mikhail Kilin
2026-01-21 21:20:18 +03:00
parent 0a9ae8b448
commit 1ef341d907
9 changed files with 326 additions and 95 deletions

View File

@@ -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) ||