use crate::prelude::*;
use beet_core::prelude::*;
use beet_dom::prelude::*;
pub(crate) fn mount_client_only(
query: Populated<
(Entity, &ClientOnlyDirective),
Added<ClientOnlyDirective>,
>,
mut diff: DomDiff,
) -> Result {
for (entity, directive) in query.iter() {
let root = web_sys::window()
.unwrap()
.document()
.unwrap()
.get_element_by_id(&directive.root_id)
.ok_or_else(|| {
bevyhow!(
"Client Only: Root Element with id '{}' not found",
&directive.root_id
)
})?;
diff.diff_children(entity, &root)?;
}
Ok(())
}
#[cfg(test)]
mod test {
use crate::prelude::*;
use beet_core::prelude::*;
#[test]
fn works() {
App::new()
.add_plugins(ApplyDirectivesPlugin)
.add_systems(Startup, setup)
.set_runner(ReactiveApp::runner)
.run();
}
fn setup(mut commands: Commands) {
commands.spawn(rsx! { <Counter client:only initial=7 /> });
}
#[template]
#[derive(Reflect)]
fn Counter(initial: u32) -> impl Bundle {
let (get, set) = signal(initial);
rsx! {
<p>Count: {get}</p>
<button onclick=move || set(get() + 1)>Increment</button>
}
}
}