test: Add test for generic components
This commit is contained in:
1 parent
252f9343b8
commit
af8cd51258
1 file changed
+38
@@ -46,6 +46,9 @@ fn main() {
|
|||||||
/// This type alias specifies the type for you so you don't need to write "None as Option<()>"
|
/// This type alias specifies the type for you so you don't need to write "None as Option<()>"
|
||||||
const NONE_ELEMENT: Option<()> = None;
|
const NONE_ELEMENT: Option<()> = None;
|
||||||
|
|
||||||
|
use core::{fmt, str::FromStr};
|
||||||
|
use std::fmt::Display;
|
||||||
|
|
||||||
use baller::Baller;
|
use baller::Baller;
|
||||||
use dioxus::prelude::*;
|
use dioxus::prelude::*;
|
||||||
|
|
||||||
@@ -187,6 +190,15 @@ fn app(cx: Scope) -> Element {
|
|||||||
text: "using functionc all syntax"
|
text: "using functionc all syntax"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Components can be geneirc too
|
||||||
|
// This component takes i32 type to give you typed input
|
||||||
|
TypedInput::<TypedInputProps<i32>> {}
|
||||||
|
// Type inference can be used too
|
||||||
|
TypedInput { initial: 10.0 }
|
||||||
|
// geneircs with the `inline_props` macro
|
||||||
|
label(text: "hello geneirc world!")
|
||||||
|
label(text: 99.9)
|
||||||
|
|
||||||
// helper functions
|
// helper functions
|
||||||
// Single values must be wrapped in braces or `Some` to satisfy `IntoIterator`
|
// Single values must be wrapped in braces or `Some` to satisfy `IntoIterator`
|
||||||
[helper(&cx, "hello world!")]
|
[helper(&cx, "hello world!")]
|
||||||
@@ -227,9 +239,35 @@ pub fn Taller<'a>(cx: Scope<'a, TallerProps<'a>>) -> Element {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Props, PartialEq)]
|
||||||
|
pub struct TypedInputProps<T> {
|
||||||
|
#[props(optional, default)]
|
||||||
|
initial: Option<T>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
pub fn TypedInput<T>(_: Scope<TypedInputProps<T>>) -> Element
|
||||||
|
where
|
||||||
|
T: FromStr + fmt::Display,
|
||||||
|
<T as FromStr>::Err: std::fmt::Display,
|
||||||
|
{
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
#[inline_props]
|
#[inline_props]
|
||||||
fn with_inline<'a>(cx: Scope<'a>, text: &'a str) -> Element {
|
fn with_inline<'a>(cx: Scope<'a>, text: &'a str) -> Element {
|
||||||
cx.render(rsx! {
|
cx.render(rsx! {
|
||||||
p { "{text}" }
|
p { "{text}" }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// generic component with inline_props too
|
||||||
|
#[inline_props]
|
||||||
|
fn label<T>(cx: Scope, text: T) -> Element
|
||||||
|
where
|
||||||
|
T: Display,
|
||||||
|
{
|
||||||
|
cx.render(rsx! {
|
||||||
|
p { "{text}" }
|
||||||
|
})
|
||||||
|
}
|
||||||
Reference in new issue
Block a user