leptos-use/examples/use_broadcast_channel/src/main.rs

64 lines
1.8 KiB
Rust
Raw Normal View History

2024-01-29 19:15:18 +00:00
use leptos::*;
use leptos_use::docs::demo_or_body;
2024-01-29 21:29:39 +00:00
use leptos_use::utils::FromToStringCodec;
use leptos_use::{use_broadcast_channel, UseBroadcastChannelReturn};
2024-01-29 19:15:18 +00:00
#[component]
fn Demo() -> impl IntoView {
2024-01-29 21:29:39 +00:00
let UseBroadcastChannelReturn {
is_supported,
message,
post,
error,
..
} = use_broadcast_channel::<String, FromToStringCodec>("leptos-use-demo-channel");
2024-01-29 19:15:18 +00:00
2024-01-29 21:29:39 +00:00
let (input_value, set_input_value) = create_signal(String::new());
2024-01-29 19:15:18 +00:00
2024-01-29 21:29:39 +00:00
view! {
<p>Please open this page in at least two tabs</p>
<Show
when=move || is_supported()
fallback=move || view! { <p>"BroadcastChannel not supported"</p> }
>
<form on:submit={
let post = post.clone();
move |ev: web_sys::SubmitEvent| {
ev.prevent_default();
let value = input_value();
post(&value);
}
}>
<input
value=input_value
on:input=move |event| {
set_input_value(event_target_value(&event));
}
type="text"
/>
<button type="submit">Send Message</button>
</form>
<Show when=move || message().is_some()>
<p>"Received message: " {move || message().as_ref().unwrap().to_string()}</p>
</Show>
<Show when=move || error().is_some()>
<p>"Error: " {move || format!("{:?}", error().as_ref().unwrap())}</p>
</Show>
</Show>
}
2024-01-29 19:15:18 +00:00
}
fn main() {
_ = console_log::init_with_level(log::Level::Debug);
console_error_panic_hook::set_once();
mount_to(demo_or_body(), || {
view! { <Demo/> }
})
}