use crate::config::profile::ProfileEntry;
#[derive(Debug, Clone, Default)]
pub struct ProfilesDialogState {
pub filter: String,
pub selected_index: usize,
pub scroll_offset: u16,
pub profiles: Vec<ProfileEntry>,
pub active_profile: String,
pub action: ProfileAction,
pub input_buffer: String,
pub input_buffer_2: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub enum ProfileAction {
#[default]
None,
ConfirmDelete(String),
CreateName,
CreateDesc,
MigrateFrom,
MigrateTo,
}
impl ProfilesDialogState {
pub fn reset(&mut self) {
self.filter.clear();
self.selected_index = 0;
self.scroll_offset = 0;
self.action = ProfileAction::None;
self.input_buffer.clear();
self.input_buffer_2.clear();
}
}
pub fn matching<'a>(profiles: &'a [ProfileEntry], query: &str) -> Vec<&'a ProfileEntry> {
if query.is_empty() {
return profiles.iter().collect();
}
let q = query.to_lowercase();
profiles
.iter()
.filter(|p| p.name.to_lowercase().contains(&q))
.collect()
}