use leptos::{
IntoView,
html::{ElementChild, button, label},
logging::log,
prelude::{OnAttribute, Read, Show, ShowProps, ToChildren},
server::LocalResource,
};
use wasm_bindgen_futures::spawn_local;
use crate::{media::audio, signal::wait_until_communication_is_ready, webrtc::WebRTC};
pub fn app() -> impl IntoView {
let audio_stream = LocalResource::new(|| audio());
let wait_until_communication_is_ready =
LocalResource::new(|| wait_until_communication_is_ready());
let props = ShowProps::builder()
.when(move || {
audio_stream.read().is_some() && wait_until_communication_is_ready.read().is_some()
})
.children(ToChildren::to_children(move || {
let audio_stream = audio_stream.read();
let audio_stream = audio_stream.as_deref().unwrap().clone();
let webrtc = WebRTC::new(Some(audio_stream), None, None).unwrap();
let webrtc_offer = webrtc.clone();
let offer_button = button()
.on(leptos::ev::click, move |_| {
let webrtc_offer = webrtc_offer.clone();
log!("{:#?}", webrtc_offer.get_status());
spawn_local(async move {
let offer_result = webrtc_offer.offer().await;
log!("Offer Result Is = {:#?}", offer_result);
});
})
.child("Offer");
let webrtc_answer = webrtc.clone();
let answer_button = button()
.on(leptos::ev::click, move |_| {
let webrtc_answer = webrtc_answer.clone();
spawn_local(async move {
let answer_result = webrtc_answer.answer().await;
log!("Answer Result Is = {:#?}", answer_result);
});
})
.child("Answer");
(offer_button, answer_button)
}))
.fallback(|| label().child("NOOOOOOOOOOOO"))
.build();
Show(props)
}