rust_webrtc/client/src/gui.rs

42 lines
1.3 KiB
Rust
Raw Normal View History

2025-04-02 03:27:59 +03:00
use leptos::{
IntoView, ev,
html::{ElementChild, button},
prelude::{OnAttribute, Read, Show, ShowProps, ToChildren},
2025-04-02 03:27:59 +03:00
server::LocalResource,
};
use crate::{media::audio, webrtc::WebRTC};
2025-04-02 03:27:59 +03:00
pub fn app() -> impl IntoView {
let audio_stream = LocalResource::new(|| audio());
let offer_props = ShowProps::builder()
2025-04-02 03:27:59 +03:00
.when(move || audio_stream.read().is_some())
.children(ToChildren::to_children(move || {
button()
.on(ev::click, move |_| {
WebRTC::init(Some(audio_stream), None, None);
LocalResource::new(|| WebRTC::offer());
2025-04-02 03:27:59 +03:00
})
.child("Offer")
2025-04-02 03:27:59 +03:00
.into_view()
}))
.fallback(|| button().child("Sad Offer Button"))
2025-04-02 03:27:59 +03:00
.build();
let answer_props = ShowProps::builder()
.when(move || audio_stream.read().is_some())
.children(ToChildren::to_children(move || {
button()
.on(ev::click, move |_| {
WebRTC::init(Some(audio_stream), None, None);
LocalResource::new(|| WebRTC::answer());
})
.child("Answer")
.into_view()
}))
.fallback(|| button().child("Sad Answer Button"))
.build();
(Show(offer_props), Show(answer_props))
2025-04-02 03:27:59 +03:00
}