46 lines
1.2 KiB
Rust
46 lines
1.2 KiB
Rust
use gloo::{timers::callback::Timeout, utils::document};
|
|
use web_sys::Element;
|
|
|
|
use crate::utils::{by_id, selector_and_clone, SelectorExt};
|
|
|
|
pub enum Level {
|
|
Success,
|
|
Error,
|
|
Info,
|
|
Warning,
|
|
}
|
|
|
|
const TIME_DISPLAYED: u32 = 10_000; // [ms].
|
|
|
|
pub fn show_message(level: Level, message: &str) {
|
|
let toast_element = document().get_element_by_id("toast").unwrap();
|
|
toast_element.set_inner_html(message);
|
|
toast_element.set_class_name("show");
|
|
|
|
Timeout::new(TIME_DISPLAYED, move || {
|
|
toast_element.set_class_name("");
|
|
})
|
|
.forget();
|
|
}
|
|
|
|
pub fn show_element(level: Level, selector: &str) {
|
|
show_element_and_initialize(level, selector, |_| {})
|
|
}
|
|
|
|
pub fn show_element_and_initialize<T>(level: Level, selector: &str, initializer: T)
|
|
where
|
|
T: Fn(Element),
|
|
{
|
|
let toast_element = document().get_element_by_id("toast").unwrap();
|
|
|
|
let element: Element = selector_and_clone(selector);
|
|
toast_element.set_inner_html("");
|
|
toast_element.append_child(&element).unwrap();
|
|
initializer(element.clone());
|
|
toast_element.set_class_name("show");
|
|
|
|
Timeout::new(TIME_DISPLAYED, move || {
|
|
toast_element.set_class_name("");
|
|
})
|
|
.forget();
|
|
}
|