use leptos::*;
use leptos_use::docs::demo_or_body;
use leptos_use::{use_service_worker, use_window};
use web_sys::HtmlMetaElement;
#[component]
fn Demo() -> impl IntoView {
let build = load_meta_element("version")
.map(|meta| meta.content())
.expect("'version' meta element");
let sw = use_service_worker();
view! {
"Current build: "{build}
"registration: "{move || format!("{:#?}", sw.registration.get())}
"installing: "{move || sw.installing.get()}
"waiting: "{move || sw.waiting.get()}
"active: "{move || sw.active.get()}
"Send skipWaiting event"
}
}
fn main() {
_ = console_log::init_with_level(log::Level::Debug);
console_error_panic_hook::set_once();
mount_to(demo_or_body(), || {
view! { }
})
}
fn load_meta_element>(name: S) -> Result {
use wasm_bindgen::JsCast;
use_window()
.as_ref()
.ok_or_else(|| "No window instance!".to_owned())
.and_then(|window| {
window
.document()
.ok_or_else(|| "No document instance!".to_owned())
})
.and_then(|document| {
document
.query_selector(format!("meta[name=\"{}\"]", name.as_ref()).as_str())
.ok()
.flatten()
.ok_or_else(|| format!("Unable to find meta element with name 'version'."))
})
.and_then(|element| {
element.dyn_into::().map_err(|err| {
format!("Unable to cast element to HtmlMetaElement. Err: '{err:?}'.")
})
})
}