use std::sync::{Arc, OnceLock};
use eframe::egui::{self, mutex::RwLock, Align2, Color32, Frame, Label, Stroke, TextEdit, Vec2};
use egui_flex::{item, Flex};
use crate::tabs::classes::{class_name, get_classes, Class};
use super::{act_classes, filtered_classes};
fn filter_classes() -> &'static Arc<RwLock<String>> {
static LECTURES: OnceLock<Arc<RwLock<String>>> = OnceLock::new();
LECTURES.get_or_init(|| Arc::new(RwLock::new("".to_string())))
}
pub fn set_classes_filter() {
let f = class_name().read();
let f = &*f.to_uppercase();
let lecs = get_classes()
.read()
.clone()
.into_iter()
.filter(|l| l.1.name.to_uppercase().contains(&f));
*filtered_classes().write() = lecs.map(|c| c.1.clone()).collect();
}
pub fn select_classes_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("Sınıfları Seçin");
if ui
.add(
TextEdit::singleline(&mut *filter_classes().write())
.hint_text("Sınıfları Filtrele"),
)
.changed()
{
set_classes_filter()
};
ui.add_space(5.);
Flex::horizontal()
.wrap(true)
.align_items(egui_flex::FlexAlign::Center)
.show(ui, |flex| {
let classes = filtered_classes().read();
for class in &classes[..] {
let is_selected = act_classes().read().iter().any(|i| class.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([30., 15.], Label::new(&class.name))
})
.inner
.on_hover_cursor(egui::CursorIcon::PointingHand)
.clicked()
{
select_class(class.clone(), is_selected);
};
},
);
}
});
});
});
}
fn select_class(class: Class, del: bool) {
let clss = act_classes();
std::thread::spawn(move || {
let clss = Arc::clone(clss);
if del {
clss.write().retain(|c| &c.id != &class.id);
} else {
clss.write().push(class.clone());
}
});
}