Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8ab1b50310 | ||
|
|
ede1b8497f | ||
|
|
cc88f3c325 | ||
|
|
e4c0094f34 |
Generated
+1
-1
@@ -345,7 +345,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cnats"
|
name = "cnats"
|
||||||
version = "0.3.0"
|
version = "0.3.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-nats",
|
"async-nats",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "cnats"
|
name = "cnats"
|
||||||
version = "0.3.0"
|
version = "0.3.2"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
# Maintainer: Bendik Aagaard Lynghaug <bendik.lynghaug@gmail.com>
|
# Maintainer: Bendik Aagaard Lynghaug <bendik.lynghaug@gmail.com>
|
||||||
pkgname=cnats
|
pkgname=cnats
|
||||||
pkgver=0.3.0
|
pkgver=0.3.1
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Web chat over NATS subjects with Kanidm SSO (Leptos SSR)"
|
pkgdesc="Web chat over NATS subjects with Kanidm SSO (Leptos SSR)"
|
||||||
arch=('x86_64' 'aarch64')
|
arch=('x86_64' 'aarch64')
|
||||||
|
|||||||
+25
-7
@@ -472,19 +472,30 @@ fn CallPanel(room: Memo<String>, me: String) -> impl IntoView {
|
|||||||
}
|
}
|
||||||
.into_any()
|
.into_any()
|
||||||
}
|
}
|
||||||
// Must mirror the hydrate branch's default (not-in-call) markup exactly -
|
// Must mirror the hydrate branch's default (not-in-call) markup AND its
|
||||||
// hydration reconciles this SSR output against what the hydrate branch
|
// node structure exactly. The hydrate branch puts the button inside a
|
||||||
// above expects to find, and an empty div here (vs. the button hydrate
|
// dynamic child (`{move || ...}`), which serializes hydration-marker
|
||||||
// wants) is a hydration mismatch that panics and traps the whole wasm
|
// comments around it; if SSR emits a plain static button instead, the
|
||||||
// instance, killing all reactivity on the page.
|
// hydrate walk can't find the dynamic node, so it never attaches
|
||||||
|
// `on:click` - the call button is dead on the first lobby load until a
|
||||||
|
// client-side nav re-renders the subtree. So: same `{move || ...}` wrapper,
|
||||||
|
// and only the attributes the hydrate button actually serializes to
|
||||||
|
// (class/title/aria-label; `on:click` is a JS listener, not HTML). No
|
||||||
|
// `disabled` here - the hydrate button has none and hydration won't clear
|
||||||
|
// a stray SSR-only attribute.
|
||||||
#[cfg(not(feature = "hydrate"))]
|
#[cfg(not(feature = "hydrate"))]
|
||||||
{
|
{
|
||||||
let _ = (room, me);
|
let _ = (room, me);
|
||||||
view! {
|
view! {
|
||||||
<div class="call-panel">
|
<div class="call-panel">
|
||||||
<button class="call-join" title="join call" aria-label="join call" disabled=true>
|
{move || {
|
||||||
|
view! {
|
||||||
|
<button class="call-join" title="join call" aria-label="join call">
|
||||||
"☎"
|
"☎"
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
|
.into_any()
|
||||||
|
}}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
.into_any()
|
.into_any()
|
||||||
@@ -660,6 +671,7 @@ fn CallActive(call_state: crate::webrtc::CallState) -> impl IntoView {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
.into_any()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "hydrate")]
|
#[cfg(feature = "hydrate")]
|
||||||
@@ -729,10 +741,15 @@ fn CallIcon(kind: CallIconKind, off: Signal<bool>) -> impl IntoView {
|
|||||||
</Show>
|
</Show>
|
||||||
</svg>
|
</svg>
|
||||||
}
|
}
|
||||||
|
.into_any()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// One participant's tile: the `<video>` plus a name label and mic/cam/
|
/// One participant's tile: the `<video>` plus a name label and mic/cam/
|
||||||
/// screen badges. Click pins it as the stage; double-click goes
|
/// screen badges. Returns `AnyView` (as do `CallIcon` and `CallActive`):
|
||||||
|
/// left generic, every tile's `Show`s and icons inline into one enormous
|
||||||
|
/// `hydrate_async` type for the whole call subtree, and the release build
|
||||||
|
/// dies with "queries overflow the depth limit" - the same wall
|
||||||
|
/// `CallPanel` hit in 0.2.1. Click pins it as the stage; double-click goes
|
||||||
/// fullscreen (handy for reading a shared screen). A child component so
|
/// fullscreen (handy for reading a shared screen). A child component so
|
||||||
/// each tile owns its `NodeRef`/effect pair instead of the parent juggling
|
/// each tile owns its `NodeRef`/effect pair instead of the parent juggling
|
||||||
/// a `Vec` of node refs by hand.
|
/// a `Vec` of node refs by hand.
|
||||||
@@ -825,6 +842,7 @@ fn VideoTile(
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
.into_any()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Bridges `/call-sse/{room}` into `CallState::handle_signal`. A separate
|
/// Bridges `/call-sse/{room}` into `CallState::handle_signal`. A separate
|
||||||
|
|||||||
Reference in New Issue
Block a user