From 5ed116b060c317e4ed657e2f592fb927b514a54c Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 22 Sep 2023 09:24:00 -0500 Subject: [PATCH] fix bounds on generated element extensions --- examples/spread.rs | 30 ++++++++++++++++++++++--- packages/html-internal-macro/src/lib.rs | 4 ++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/examples/spread.rs b/examples/spread.rs index 76b324f28..0458ef08d 100644 --- a/examples/spread.rs +++ b/examples/spread.rs @@ -9,7 +9,11 @@ use dioxus::{ }; fn main() { - dioxus_desktop::launch(app); + let mut dom = VirtualDom::new(app); + dom.rebuild(); + let html = dioxus_ssr::render(&dom); + + println!("{}", html); } fn app(cx: Scope) -> Element { @@ -36,7 +40,8 @@ fn app(cx: Scope) -> Element { bump: __cx.bump(), attributes: Vec::new(), } - .width("hello"), + .width(10) + .height("100px"), "Component", )]), dynamic_attrs: __cx.bump().alloc([]), @@ -72,5 +77,24 @@ impl<'a> HasAttributesBox<'a, Props<'a>> for Props<'a> { impl ExtendedGlobalAttributesMarker for Props<'_> {} fn Component<'a>(cx: Scope<'a, Props<'a>>) -> Element<'a> { - todo!() + let attributes = &cx.props.attributes; + render! { + // rsx! { + // audio { + // ...attributes, + // } + // } + ::dioxus::core::LazyNodes::new(move |__cx: &::dioxus::core::ScopeState| -> ::dioxus::core::VNode { + static TEMPLATE: ::dioxus::core::Template = ::dioxus::core::Template { name: concat!(file!(), ":", line!(), ":", column!(), ":", "123" ), roots: &[::dioxus::core::TemplateNode::Element { tag: dioxus_elements::audio::TAG_NAME, namespace: dioxus_elements::audio::NAME_SPACE, attrs: &[::dioxus::core::TemplateAttribute::Dynamic { id: 0usize }], children: &[] }], node_paths: &[], attr_paths: &[&[0u8]] }; + let attrs = vec![(&**attributes).into()]; + ::dioxus::core::VNode { + parent: None, + key: None, + template: std::cell::Cell::new(TEMPLATE), + root_ids: dioxus::core::exports::bumpalo::collections::Vec::new_in(__cx.bump()).into(), + dynamic_nodes: __cx.bump().alloc([]), + dynamic_attrs: __cx.bump().alloc(attrs), + } + }) + } } diff --git a/packages/html-internal-macro/src/lib.rs b/packages/html-internal-macro/src/lib.rs index 1a1d22d08..4b7d23ad5 100644 --- a/packages/html-internal-macro/src/lib.rs +++ b/packages/html-internal-macro/src/lib.rs @@ -56,7 +56,7 @@ impl ToTokens for ImplExtensionAttributes { let defs = self.attrs.iter().map(|ident| { quote! { - fn #ident(self, value: impl IntoAttributeValue<'a> + 'static) -> Self; + fn #ident(self, value: impl IntoAttributeValue<'a>) -> Self; } }); let impls = self.attrs.iter().map(|ident| { @@ -66,7 +66,7 @@ impl ToTokens for ImplExtensionAttributes { quote! { <#impl_name as #name>::#ident } }; quote! { - fn #ident(self, value: impl IntoAttributeValue<'a> + 'static) -> Self { + fn #ident(self, value: impl IntoAttributeValue<'a>) -> Self { let d = #d; self.push_attribute(d.0, d.1, value, d.2) }