use leptos::{ IntoView, ev, html::{ElementChild, button}, prelude::{OnAttribute, Read, Show, ShowProps, ToChildren}, server::LocalResource, }; use crate::{media::audio, webrtc::WebRTC}; pub fn app() -> impl IntoView { let audio_stream = LocalResource::new(|| audio()); let offer_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::offer()); }) .child("Offer") .into_view() })) .fallback(|| button().child("Sad Offer Button")) .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)) }