2023-11-24 15:06:35 -05:00
|
|
|
use leptos::*;
|
2023-12-05 23:12:31 +00:00
|
|
|
use leptos_use::docs::demo_or_body;
|
|
|
|
use leptos_use::{use_display_media, UseDisplayMediaReturn};
|
2023-11-24 15:06:35 -05:00
|
|
|
|
|
|
|
#[component]
|
|
|
|
fn Demo() -> impl IntoView {
|
|
|
|
let video_ref = create_node_ref::<leptos::html::Video>();
|
|
|
|
|
2023-12-05 23:12:31 +00:00
|
|
|
let UseDisplayMediaReturn {
|
|
|
|
stream,
|
|
|
|
enabled,
|
|
|
|
set_enabled,
|
|
|
|
..
|
|
|
|
} = use_display_media();
|
|
|
|
|
|
|
|
create_effect(move |_| {
|
|
|
|
match stream.get() {
|
|
|
|
Some(Ok(s)) => {
|
|
|
|
video_ref.get().map(|v| v.set_src_object(Some(&s)));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
Some(Err(e)) => logging::error!("Failed to get media stream: {:?}", e),
|
|
|
|
None => logging::log!("No stream yet"),
|
2023-11-24 15:06:35 -05:00
|
|
|
}
|
2023-12-05 23:12:31 +00:00
|
|
|
|
|
|
|
video_ref.get().map(|v| v.set_src_object(None));
|
2023-11-24 15:06:35 -05:00
|
|
|
});
|
|
|
|
|
2023-12-05 23:12:31 +00:00
|
|
|
view! {
|
|
|
|
<div class="flex flex-col gap-4 text-center">
|
|
|
|
<div>
|
|
|
|
<button on:click=move |_| set_enabled(
|
|
|
|
!enabled(),
|
|
|
|
)>{move || if enabled() { "Stop" } else { "Start" }} sharing my screen</button>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div>
|
|
|
|
<video
|
|
|
|
node_ref=video_ref
|
|
|
|
controls=false
|
|
|
|
autoplay=true
|
|
|
|
muted=true
|
|
|
|
class="h-96 w-auto"
|
|
|
|
></video>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
}
|
2023-11-24 15:06:35 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
_ = console_log::init_with_level(log::Level::Debug);
|
|
|
|
console_error_panic_hook::set_once();
|
|
|
|
|
|
|
|
mount_to(demo_or_body(), || {
|
|
|
|
view! { <Demo/> }
|
|
|
|
})
|
|
|
|
}
|