Skip to content

Commit a0e4d12

Browse files
committed
wip!: refactor frender-html
1 parent 436ef07 commit a0e4d12

File tree

56 files changed

+843
-914
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+843
-914
lines changed

packages/frender-common/src/reactive_value/non_reactive.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,29 @@ pub trait CachedNonReactiveValue<VK: ?Sized + ValueKind> {
9090

9191
fn into_cache_and_render_init(self) -> (Self::Cache, Self::RenderInit);
9292

93+
/// Always render
9394
fn update_into_cache_and_render<Out>(
9495
self,
9596
renderer: impl FnOnce(VK::Value<'_>) -> Out,
9697
cache: &mut Self::Cache,
9798
) -> Out;
99+
100+
/// Doesn't render if self matches cache
101+
#[must_use]
102+
fn maybe_update_into_cache_and_render<Out>(
103+
self,
104+
renderer: impl FnOnce(VK::Value<'_>) -> Out,
105+
cache: &mut Self::Cache,
106+
) -> Option<Out>
107+
where
108+
Self: Sized,
109+
{
110+
if Self::match_cache(&self, cache) {
111+
None
112+
} else {
113+
Some(self.update_into_cache_and_render(renderer, cache))
114+
}
115+
}
98116
}
99117

100118
pub trait CachedNonReactiveValueRenderInit<VK: ?Sized + ValueKind, Cache> {

packages/frender-common/src/reactive_value/non_reactive/cached.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ impl<T: CachedNonReactiveValue<VK>, VK: ?Sized + ValueKind> ReactiveValue<VK> fo
3636
renderer: impl FnOnce(VK::Value<'_>) -> Out,
3737
super::State(::core::marker::PhantomData, cache): &mut Self::PinnedState,
3838
) -> Option<Out> {
39-
if T::match_cache(&self, cache) {
40-
None
41-
} else {
42-
Some(self.update_into_cache_and_render(renderer, cache))
43-
}
39+
T::maybe_update_into_cache_and_render(self, renderer, cache)
4440
}
4541
}

packages/frender-dom/src/script.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
#[cfg(feature = "csr")]
2-
mod csr;
3-
#[cfg(feature = "csr")]
42
pub use csr::{CsrScriptContent, ScriptInnerTextCsrOnly};
3+
#[cfg(feature = "ssr")]
4+
pub use ssr::{ScriptInnerTextWronglyEncoded, SsrScriptContent};
5+
6+
use frender_common::Empty;
57

8+
#[cfg(feature = "csr")]
9+
mod csr;
610
#[cfg(feature = "ssr")]
711
mod ssr;
8-
#[cfg(feature = "ssr")]
9-
pub use ssr::{ScriptInnerTextWronglyEncoded, SsrScriptContent};
12+
13+
pub trait ScriptContent {}
14+
15+
impl ScriptContent for Empty {}

packages/frender-dom/src/script/csr.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ use frender_common::reactive_value::ReactiveValueWithKind;
22

33
use crate::{csr::render_from::str::ValueKindForStr, Empty};
44

5+
use super::ScriptContent;
6+
57
mod no_inner_text;
68

7-
pub trait CsrScriptContent {
9+
pub trait CsrScriptContent: ScriptContent {
810
type IntoScriptInnerText: ReactiveValueWithKind<ReactiveValueKind: ValueKindForStr>;
911
fn into_script_inner_text(this: Self) -> Self::IntoScriptInnerText;
1012
}
@@ -22,6 +24,11 @@ pub struct ScriptInnerTextCsrOnly<S: ReactiveValueWithKind<ReactiveValueKind: Va
2224
pub S,
2325
);
2426

27+
impl<S: ReactiveValueWithKind<ReactiveValueKind: ValueKindForStr>> ScriptContent
28+
for ScriptInnerTextCsrOnly<S>
29+
{
30+
}
31+
2532
impl<S: ReactiveValueWithKind<ReactiveValueKind: ValueKindForStr>> CsrScriptContent
2633
for ScriptInnerTextCsrOnly<S>
2734
{

packages/frender-dom/src/script/ssr.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ use async_str_iter::any_str::IterAnyStr;
22
use frender_common::{strings::SsrStr, IntoStaticStr};
33
use frender_ssr::html::assert;
44

5-
pub trait SsrScriptContent {
5+
use super::ScriptContent;
6+
7+
pub trait SsrScriptContent: ScriptContent {
68
type IntoScriptContent: assert::ScriptContent;
79
fn into_script_content(this: Self) -> Self::IntoScriptContent;
810
}
@@ -19,6 +21,8 @@ impl SsrScriptContent for crate::Empty {
1921
/// Use [`ScriptInnerTextCsrOnly`](super::ScriptInnerTextCsrOnly) for just csr.
2022
pub struct ScriptInnerTextWronglyEncoded<S: SsrStr>(pub S);
2123

24+
impl<S: SsrStr> ScriptContent for ScriptInnerTextWronglyEncoded<S> {}
25+
2226
impl<S: SsrStr> SsrScriptContent for ScriptInnerTextWronglyEncoded<S> {
2327
type IntoScriptContent =
2428
frender_ssr::html::script::IterScriptInnerTextWronglyEncoded<IterAnyStr<S::StaticStr>>;

packages/frender-form-control/src/input.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
mod value_kind;
22
pub use value_kind::InputValueKind;
3+
#[cfg(feature = "csr")]
4+
pub use value_kind::InputValueKindCsr;
5+
#[cfg(feature = "ssr")]
6+
pub use value_kind::InputValueKindSsr;
37

48
mod checked;
59
mod r#type;

packages/frender-form-control/src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@ pub mod textarea;
44
mod known_str;
55

66
mod value;
7-
pub use value::FormControlValueKind;
7+
pub use value::{FormControlValueKind, KindOfChecked, KindOfValue, KindOfValueAsNumber};
88

99
pub mod values;
1010

1111
#[cfg(feature = "csr")]
1212
pub mod csr {
1313
pub(crate) mod element;
14+
pub use element::FormControlElement;
15+
1416
pub(crate) mod value;
17+
pub use value::{FormControlValue, FormControlValueStateKind, HandleFormControlValue};
1518
}
1619

1720
#[cfg(feature = "ssr")]

packages/frender-html/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ features = [
107107
[features]
108108
macros_not_expanded = []
109109
components = []
110-
csr = []
111-
ssr = ["dep:frender-ssr"]
110+
csr = ["frender-dom/csr", "frender-form-control/csr"]
111+
ssr = ["dep:frender-ssr", "frender-dom/ssr", "frender-form-control/ssr"]
112112
web = [
113113
"frender-style/web",
114114
"frender-dom/web",
@@ -128,7 +128,7 @@ either = [
128128
]
129129
ElementProxyAttrs = ["dep:ref-cast"]
130130
# Enables frender-form-control/chrono
131-
# Also requires ssr
131+
# Also requires ssr or csr
132132
chrono = ["frender-form-control/chrono"]
133133
# Also requires csr
134134
experimental = []

packages/frender-html/src/attr.rs

Lines changed: 0 additions & 5 deletions
This file was deleted.

packages/frender-html/src/attr/remove_with_dom_api.rs

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)