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(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(); }