fix spreading attributes

This commit is contained in:
Evan Almloff committed 2024-01-16 11:04:37 -06:00
1 parent d44b0b34c8
commit 8d14671520
5 files changed
+8 -55

No files matched your search

+2 -2
View File
@@ -38,8 +38,8 @@ impl AttributeType {
impl ToTokens for AttributeType {
fn to_tokens(&self, tokens: &mut TokenStream2) {
match self {
AttributeType::Named(n) => tokens.append_all(quote! { #n }),
AttributeType::Spread(e) => tokens.append_all(quote! { (&#e).into() }),
AttributeType::Named(n) => tokens.append_all(quote! { Box::new([#n]) }),
AttributeType::Spread(e) => tokens.append_all(quote! { #e.into_boxed_slice() }),
}
}
}
-48
View File
@@ -243,54 +243,6 @@ Like so:
}
}
impl ToTokens for Element {
fn to_tokens(&self, tokens: &mut TokenStream2) {
let name = &self.name;
let children = &self.children;
let key = match &self.key {
Some(ty) => quote! { Some(#ty) },
None => quote! { None },
};
let listeners = self.merged_attributes.iter().filter(|f| {
matches!(
f,
AttributeType::Named(ElementAttrNamed {
attr: ElementAttr {
value: ElementAttrValue::EventTokens { .. },
..
},
..
})
)
});
let attr = self.merged_attributes.iter().filter(|f| {
!matches!(
f,
AttributeType::Named(ElementAttrNamed {
attr: ElementAttr {
value: ElementAttrValue::EventTokens { .. },
..
},
..
})
)
});
tokens.append_all(quote! {
dioxus_core::Element::new(
#name,
vec![ #(#listeners),* ],
vec![ #(#attr),* ],
vec![ #(#children),* ],
#key,
)
});
}
}
#[derive(PartialEq, Eq, Clone, Debug, Hash)]
pub enum ElementName {
Ident(Ident),
+1 -1
View File
@@ -257,7 +257,7 @@ impl<'a> ToTokens for TemplateRenderer<'a> {
#key_tokens,
TEMPLATE,
Box::new([ #( #node_printer),* ]),
Box::new([ #( Box::new([ #( #dyn_attr_printer),* ]) ),* ]),
Box::new([ #( #(#dyn_attr_printer),* ),* ]),
)
});
}
+3 -1
View File
@@ -139,7 +139,9 @@ impl Parse for BodyNode {
impl ToTokens for BodyNode {
fn to_tokens(&self, tokens: &mut TokenStream2) {
match &self {
BodyNode::Element(el) => el.to_tokens(tokens),
BodyNode::Element(_) => {
unimplemented!("Elements are statically created in the template")
}
BodyNode::Component(comp) => comp.to_tokens(tokens),
BodyNode::Text(txt) => tokens.append_all(quote! {
dioxus_core::DynamicNode::Text(dioxus_core::VText::new(#txt))