Fix partially formatted if chains in attributes (#2999)
This commit is contained in:
1 parent
d64df87aba
commit
a693ddffa3
2 files changed
+28
No files matched your search
@@ -0,0 +1,13 @@
|
|||||||
|
use dioxus::prelude::*;
|
||||||
|
|
||||||
|
/// Make sure that rsx! handles conditional attributes with one formatted branch correctly
|
||||||
|
/// Regression test for https://github.com/DioxusLabs/dioxus/issues/2997
|
||||||
|
#[test]
|
||||||
|
fn partially_formatted_conditional_attribute() {
|
||||||
|
let width = "1px";
|
||||||
|
_ = rsx! {
|
||||||
|
div {
|
||||||
|
width: if true { "{width}" } else { "100px" }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -615,6 +615,20 @@ impl IfAttributeValue {
|
|||||||
then_value,
|
then_value,
|
||||||
else_value,
|
else_value,
|
||||||
} = self;
|
} = self;
|
||||||
|
|
||||||
|
// Quote an attribute value and convert the value to a string if it is formatted
|
||||||
|
// We always quote formatted segments as strings inside if statements so they have a consistent type
|
||||||
|
// This fixes https://github.com/DioxusLabs/dioxus/issues/2997
|
||||||
|
fn quote_attribute_value_string(value: &AttributeValue) -> TokenStream2 {
|
||||||
|
if matches!(value, AttributeValue::AttrLiteral(HotLiteral::Fmted(_))) {
|
||||||
|
quote! { #value.to_string() }
|
||||||
|
} else {
|
||||||
|
value.to_token_stream()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let then_value = quote_attribute_value_string(then_value);
|
||||||
|
|
||||||
let then_value = if terminated {
|
let then_value = if terminated {
|
||||||
quote! { #then_value }
|
quote! { #then_value }
|
||||||
}
|
}
|
||||||
@@ -630,6 +644,7 @@ impl IfAttributeValue {
|
|||||||
tokens
|
tokens
|
||||||
}
|
}
|
||||||
Some(other) => {
|
Some(other) => {
|
||||||
|
let other = quote_attribute_value_string(other);
|
||||||
if terminated {
|
if terminated {
|
||||||
quote! { #other }
|
quote! { #other }
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in new issue
Block a user