Merge pull request #128 from DioxusLabs/jk/optional-tag

feat: add "optional" flag for props
This commit is contained in:
Jonathan Kelley 2022-01-16 20:28:14 -05:00 committed by GitHub
commit c08d04449f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 1 deletions

View file

@ -1,3 +1,5 @@
#![allow(non_snake_case)]
//! Example: README.md showcase //! Example: README.md showcase
//! //!
//! The example from the README.md. //! The example from the README.md.
@ -14,6 +16,7 @@ fn app(cx: Scope) -> Element {
a: "asd".to_string(), a: "asd".to_string(),
c: Some("asd".to_string()), c: Some("asd".to_string()),
d: "asd".to_string(), d: "asd".to_string(),
e: "asd".to_string(),
} }
}) })
} }
@ -30,8 +33,19 @@ struct ButtonProps {
#[props(default, strip_option)] #[props(default, strip_option)]
d: Option<String>, d: Option<String>,
#[props(optional)]
e: Option<String>,
} }
fn Button(cx: Scope<ButtonProps>) -> Element { fn Button(cx: Scope<ButtonProps>) -> Element {
todo!() cx.render(rsx! {
button {
"{cx.props.a}"
"{cx.props.b:?}"
"{cx.props.c:?}"
"{cx.props.d:?}"
"{cx.props.e:?}"
}
})
} }

View file

@ -364,6 +364,14 @@ mod field_info {
Some(syn::parse(quote!(Default::default()).into()).unwrap()); Some(syn::parse(quote!(Default::default()).into()).unwrap());
Ok(()) Ok(())
} }
"optional" => {
self.default =
Some(syn::parse(quote!(Default::default()).into()).unwrap());
self.strip_option = true;
Ok(())
}
_ => { _ => {
macro_rules! handle_fields { macro_rules! handle_fields {
( $( $flag:expr, $field:ident, $already:expr; )* ) => { ( $( $flag:expr, $field:ident, $already:expr; )* ) => {