mirror of
https://github.com/adoyle0/thaw.git
synced 2025-02-09 19:03:10 -05:00
✨ feat: add if component
This commit is contained in:
parent
10f5403826
commit
a6e30e38a0
3 changed files with 52 additions and 2 deletions
34
src/components/if_comp.rs
Normal file
34
src/components/if_comp.rs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
use leptos::*;
|
||||||
|
use super::Fallback;
|
||||||
|
|
||||||
|
#[slot]
|
||||||
|
pub struct Then {
|
||||||
|
children: ChildrenFn,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[slot]
|
||||||
|
pub struct ElseIf {
|
||||||
|
cond: MaybeSignal<bool>,
|
||||||
|
children: ChildrenFn,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[component]
|
||||||
|
pub fn If(
|
||||||
|
cx: Scope,
|
||||||
|
cond: MaybeSignal<bool>,
|
||||||
|
then: Then,
|
||||||
|
#[prop(default=vec![])] else_if: Vec<ElseIf>,
|
||||||
|
#[prop(optional)] fallback: Option<Fallback>,
|
||||||
|
) -> impl IntoView {
|
||||||
|
move || {
|
||||||
|
if cond.get() {
|
||||||
|
(then.children)(cx).into_view(cx)
|
||||||
|
} else if let Some(else_if) = else_if.iter().find(|i| i.cond.get()) {
|
||||||
|
(else_if.children)(cx).into_view(cx)
|
||||||
|
} else if let Some(fallback) = &fallback {
|
||||||
|
(fallback.children)(cx).into_view(cx)
|
||||||
|
} else {
|
||||||
|
().into_view(cx)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,11 @@
|
||||||
|
mod if_comp;
|
||||||
mod option_comp;
|
mod option_comp;
|
||||||
|
|
||||||
|
pub use if_comp::*;
|
||||||
|
use leptos::*;
|
||||||
pub use option_comp::*;
|
pub use option_comp::*;
|
||||||
|
|
||||||
|
#[slot]
|
||||||
|
pub struct Fallback {
|
||||||
|
children: ChildrenFn,
|
||||||
|
}
|
||||||
|
|
|
@ -1,13 +1,21 @@
|
||||||
|
use super::Fallback;
|
||||||
use leptos::*;
|
use leptos::*;
|
||||||
|
|
||||||
#[component]
|
#[component]
|
||||||
pub fn OptionComp<T, VF, IV>(cx: Scope, value: Option<T>, view: VF) -> impl IntoView
|
pub fn OptionComp<T, VF, IV>(
|
||||||
|
cx: Scope,
|
||||||
|
value: Option<T>,
|
||||||
|
view: VF,
|
||||||
|
#[prop(optional)] fallback: Option<Fallback>,
|
||||||
|
) -> impl IntoView
|
||||||
where
|
where
|
||||||
VF: Fn(Scope, T) -> IV + 'static,
|
VF: Fn(Scope, T) -> IV + 'static,
|
||||||
IV: IntoView,
|
IV: IntoView,
|
||||||
{
|
{
|
||||||
if let Some(value) = value {
|
if let Some(value) = value {
|
||||||
view(cx, value).into_view(cx)
|
view(cx, value).into_view(cx)
|
||||||
|
} else if let Some(fallback) = &fallback {
|
||||||
|
(fallback.children)(cx).into_view(cx)
|
||||||
} else {
|
} else {
|
||||||
().into_view(cx)
|
().into_view(cx)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue