use std::sync::Arc;
use eframe::egui::{self, mutex::RwLock, Align2, Color32, Frame, Label, Stroke, TextEdit, Vec2};
use egui_flex::{item, Flex};
use crate::tabs::classrooms::{classroom_name, get_classrooms, ClassRoom};
use super::{act_classrooms, filtered_classrooms};
pub fn set_classrooms_filter() {
let f = classroom_name().read();
let f = &*f.to_uppercase();
let tchrs = get_classrooms()
.read()
.clone()
.into_iter()
.filter(|l| l.1.name.to_uppercase().contains(&f));
*filtered_classrooms().write() = tchrs.map(|t| t.1.clone()).collect();
filtered_classrooms()
.write()
.sort_by(|a, b| a.name.cmp(&b.name));
}
pub fn select_classroom_ui(ui: &mut egui::Ui) {
ui.vertical(|ui| {
Frame::none()
.stroke(Stroke::new(1., Color32::BLACK))
.rounding(1.)
.inner_margin(10.0)
.outer_margin(10.0)
.show(ui, |ui| {
ui.label("Derslik(ler)i Seçin ");
if ui
.add(
TextEdit::singleline(&mut *classroom_name().write())
.hint_text("Derslikleri Filtrele"),
)
.changed()
{
set_classrooms_filter()
};
ui.add_space(5.);
Flex::horizontal()
.wrap(true)
.align_items(egui_flex::FlexAlign::Center)
.show(ui, |flex| {
let teachers = filtered_classrooms().read();
for teacher in &*teachers {
let is_selected =
act_classrooms().read().iter().any(|i| teacher.id == i.id);
let stroke = Stroke::new(
if is_selected { 1.0 } else { 0.5 },
if is_selected {
Color32::BLUE
} else {
Color32::GRAY
},
);
let _frame = egui::Frame::default()
.stroke(stroke)
.rounding(5.)
.inner_margin(5.);
flex.add_flex(
item(),
Flex::horizontal().align_items_content(Align2::CENTER_TOP),
|flex| {
if flex
.add_ui(item(), |ui| {
ui.add_sized(
Vec2::new(30., 15.),
Label::new(&teacher.name),
)
})
.inner
.on_hover_cursor(egui::CursorIcon::PointingHand)
.clicked()
{
select_classroom(teacher.clone(), is_selected);
};
},
);
}
});
});
});
}
fn select_classroom(cl: ClassRoom, del: bool) {
let teachers = act_classrooms();
std::thread::spawn(move || {
let classrooms: Arc<RwLock<Vec<ClassRoom>>> = Arc::clone(teachers);
if del {
classrooms.write().retain(|t| &t.id != &cl.id);
} else {
classrooms.write().push(cl.clone());
}
});
}