From e371ff748bb3d18508a64bfed9ea62334900971e Mon Sep 17 00:00:00 2001 From: Mitchell M Date: Wed, 12 Jun 2024 17:36:46 -0500 Subject: [PATCH] impl context --- src/controls/checkbox.rs | 9 +++------ src/controls/custom.rs | 4 ++-- src/controls/heading.rs | 6 ++---- src/controls/hidden.rs | 9 +++------ src/controls/mod.rs | 2 ++ src/controls/output.rs | 11 +++++------ src/controls/radio_buttons.rs | 9 +++------ src/controls/select.rs | 6 ++---- src/controls/slider.rs | 12 ++++-------- src/controls/spacer.rs | 9 +++------ src/controls/stepper.rs | 12 ++++-------- src/controls/submit.rs | 9 +++------ src/controls/text_area.rs | 6 ++---- src/controls/text_input.rs | 9 +++------ src/form_builder.rs | 14 +++++++------- 15 files changed, 48 insertions(+), 79 deletions(-) diff --git a/src/controls/checkbox.rs b/src/controls/checkbox.rs index 5955a4d..3a7e3fc 100644 --- a/src/controls/checkbox.rs +++ b/src/controls/checkbox.rs @@ -1,7 +1,6 @@ -use leptos::{Signal, View}; - -use super::{ControlBuilder, ControlData, ControlRenderData}; +use super::{BuilderFn, ControlBuilder, ControlData, ControlRenderData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; +use leptos::{Signal, View}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] pub struct CheckboxData { @@ -26,9 +25,7 @@ impl ControlData for CheckboxData { impl FormBuilder { pub fn checkbox( self, - builder: impl Fn( - ControlBuilder, - ) -> ControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_control(builder) } diff --git a/src/controls/custom.rs b/src/controls/custom.rs index 48dd601..f84e2d0 100644 --- a/src/controls/custom.rs +++ b/src/controls/custom.rs @@ -1,4 +1,4 @@ -use super::{ControlBuilder, ControlData}; +use super::{BuilderFn, ControlBuilder, ControlData}; use crate::{styles::FormStyle, FormBuilder, FormToolData}; impl FormBuilder { @@ -15,7 +15,7 @@ impl FormBuilder { pub fn custom_default( self, - builder: impl Fn(ControlBuilder) -> ControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_control(builder) } diff --git a/src/controls/heading.rs b/src/controls/heading.rs index 4a40770..9d765e0 100644 --- a/src/controls/heading.rs +++ b/src/controls/heading.rs @@ -1,4 +1,4 @@ -use super::{ControlRenderData, VanityControlBuilder, VanityControlData}; +use super::{BuilderFn, ControlRenderData, VanityControlBuilder, VanityControlData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; use leptos::View; @@ -20,9 +20,7 @@ impl VanityControlData for HeadingData { impl FormBuilder { pub fn heading( self, - builder: impl Fn( - VanityControlBuilder, - ) -> VanityControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_vanity(builder) } diff --git a/src/controls/hidden.rs b/src/controls/hidden.rs index e5da92c..a9074e8 100644 --- a/src/controls/hidden.rs +++ b/src/controls/hidden.rs @@ -1,7 +1,6 @@ -use leptos::{Signal, View}; - -use super::{ControlBuilder, ControlData, ControlRenderData}; +use super::{BuilderFn, ControlBuilder, ControlData, ControlRenderData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; +use leptos::{Signal, View}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] pub struct HiddenData; @@ -23,9 +22,7 @@ impl ControlData for HiddenData { impl FormBuilder { pub fn hidden( self, - builder: impl Fn( - ControlBuilder, - ) -> ControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_control(builder) } diff --git a/src/controls/mod.rs b/src/controls/mod.rs index 5d8c113..e1cb9a6 100644 --- a/src/controls/mod.rs +++ b/src/controls/mod.rs @@ -18,6 +18,7 @@ pub mod submit; pub mod text_area; pub mod text_input; +pub trait BuilderFn: Fn(B, &CX) -> B {} pub trait ValidationFn: Fn(&FDT) -> Result<(), String> + 'static {} pub trait ValidationCb: Fn() -> bool + 'static {} pub trait ParseFn: Fn(CR) -> Result + 'static {} @@ -30,6 +31,7 @@ pub trait RenderFn: } // implement the traits for all valid types +impl BuilderFn for T where T: Fn(B, &CX) -> B {} impl ValidationFn for T where T: Fn(&FDT) -> Result<(), String> + 'static {} impl ValidationCb for T where T: Fn() -> bool + 'static {} impl ParseFn for F where F: Fn(CR) -> Result + 'static {} diff --git a/src/controls/output.rs b/src/controls/output.rs index c68e779..797574b 100644 --- a/src/controls/output.rs +++ b/src/controls/output.rs @@ -1,7 +1,8 @@ -use leptos::{Signal, View}; - -use super::{ControlRenderData, GetterVanityControlData, VanityControlBuilder, VanityControlData}; +use super::{ + BuilderFn, ControlRenderData, GetterVanityControlData, VanityControlBuilder, VanityControlData, +}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; +use leptos::{Signal, View}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] pub struct OutputData; @@ -20,9 +21,7 @@ impl GetterVanityControlData for OutputData {} impl FormBuilder { pub fn output( self, - builder: impl Fn( - VanityControlBuilder, - ) -> VanityControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_vanity(builder) } diff --git a/src/controls/radio_buttons.rs b/src/controls/radio_buttons.rs index 7866b8d..2cd2a1c 100644 --- a/src/controls/radio_buttons.rs +++ b/src/controls/radio_buttons.rs @@ -1,7 +1,6 @@ -use leptos::{Signal, View}; - -use super::{ControlBuilder, ControlData, ControlRenderData, ValidatedControlData}; +use super::{BuilderFn, ControlBuilder, ControlData, ControlRenderData, ValidatedControlData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; +use leptos::{Signal, View}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] pub struct RadioButtonsData { @@ -28,9 +27,7 @@ impl ValidatedControlData for RadioButtonsData {} impl FormBuilder { pub fn radio_buttons( self, - builder: impl Fn( - ControlBuilder, - ) -> ControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_control(builder) } diff --git a/src/controls/select.rs b/src/controls/select.rs index 5b63aea..46b404a 100644 --- a/src/controls/select.rs +++ b/src/controls/select.rs @@ -1,4 +1,4 @@ -use super::{ControlBuilder, ControlData, ControlRenderData, ValidatedControlData}; +use super::{BuilderFn, ControlBuilder, ControlData, ControlRenderData, ValidatedControlData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; use leptos::{Signal, View}; @@ -30,9 +30,7 @@ impl ValidatedControlData for SelectData {} impl FormBuilder { pub fn select( self, - builder: impl Fn( - ControlBuilder, - ) -> ControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_control(builder) } diff --git a/src/controls/slider.rs b/src/controls/slider.rs index e333777..b73fbe7 100644 --- a/src/controls/slider.rs +++ b/src/controls/slider.rs @@ -1,9 +1,7 @@ -use std::ops::RangeInclusive; - -use leptos::{Signal, View}; - -use super::{ControlBuilder, ControlData, ControlRenderData}; +use super::{BuilderFn, ControlBuilder, ControlData, ControlRenderData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; +use leptos::{Signal, View}; +use std::ops::RangeInclusive; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SliderData { @@ -41,9 +39,7 @@ impl ControlData for SliderData { impl FormBuilder { pub fn slider( self, - builder: impl Fn( - ControlBuilder, - ) -> ControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_control(builder) } diff --git a/src/controls/spacer.rs b/src/controls/spacer.rs index 0b665f5..979fd7d 100644 --- a/src/controls/spacer.rs +++ b/src/controls/spacer.rs @@ -1,7 +1,6 @@ -use leptos::{prelude::Signal, View}; - -use super::{ControlRenderData, VanityControlBuilder, VanityControlData}; +use super::{BuilderFn, ControlRenderData, VanityControlBuilder, VanityControlData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; +use leptos::{prelude::Signal, View}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] pub struct SpacerData { @@ -21,9 +20,7 @@ impl VanityControlData for SpacerData { impl FormBuilder { pub fn spacer( self, - builder: impl Fn( - VanityControlBuilder, - ) -> VanityControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_vanity(builder) } diff --git a/src/controls/stepper.rs b/src/controls/stepper.rs index 008b12c..9904f25 100644 --- a/src/controls/stepper.rs +++ b/src/controls/stepper.rs @@ -1,9 +1,7 @@ -use std::ops::RangeInclusive; - -use leptos::{Signal, View}; - -use super::{ControlBuilder, ControlData, ControlRenderData, ValidatedControlData}; +use super::{BuilderFn, ControlBuilder, ControlData, ControlRenderData, ValidatedControlData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; +use leptos::{Signal, View}; +use std::ops::RangeInclusive; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] pub struct StepperData { @@ -32,9 +30,7 @@ impl ValidatedControlData for StepperData {} impl FormBuilder { pub fn stepper( self, - builder: impl Fn( - ControlBuilder, - ) -> ControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_control(builder) } diff --git a/src/controls/submit.rs b/src/controls/submit.rs index d6f706e..5a8c8e5 100644 --- a/src/controls/submit.rs +++ b/src/controls/submit.rs @@ -1,7 +1,6 @@ -use leptos::{prelude::Signal, View}; - -use super::{ControlRenderData, VanityControlBuilder, VanityControlData}; +use super::{BuilderFn, ControlRenderData, VanityControlBuilder, VanityControlData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; +use leptos::{prelude::Signal, View}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] pub struct SubmitData { @@ -21,9 +20,7 @@ impl VanityControlData for SubmitData { impl FormBuilder { pub fn submit( self, - builder: impl Fn( - VanityControlBuilder, - ) -> VanityControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_vanity(builder) } diff --git a/src/controls/text_area.rs b/src/controls/text_area.rs index 804f3dc..94a93e6 100644 --- a/src/controls/text_area.rs +++ b/src/controls/text_area.rs @@ -1,4 +1,4 @@ -use super::{ControlBuilder, ControlData, ControlRenderData, ValidatedControlData}; +use super::{BuilderFn, ControlBuilder, ControlData, ControlRenderData, ValidatedControlData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; use leptos::{Signal, View}; @@ -26,9 +26,7 @@ impl ValidatedControlData for TextAreaData {} impl FormBuilder { pub fn text_area( self, - builder: impl Fn( - ControlBuilder, - ) -> ControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_control(builder) } diff --git a/src/controls/text_input.rs b/src/controls/text_input.rs index 61fb3d9..dfe34cc 100644 --- a/src/controls/text_input.rs +++ b/src/controls/text_input.rs @@ -1,7 +1,6 @@ -use leptos::{Signal, View}; - -use super::{ControlBuilder, ControlData, ControlRenderData, ValidatedControlData}; +use super::{BuilderFn, ControlBuilder, ControlData, ControlRenderData, ValidatedControlData}; use crate::{form::FormToolData, form_builder::FormBuilder, styles::FormStyle}; +use leptos::{Signal, View}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct TextInputData { @@ -42,9 +41,7 @@ impl ValidatedControlData for TextInputData {} impl FormBuilder { pub fn text_input( self, - builder: impl Fn( - ControlBuilder, - ) -> ControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { self.new_control(builder) } diff --git a/src/form_builder.rs b/src/form_builder.rs index 81e57d1..b9340b5 100644 --- a/src/form_builder.rs +++ b/src/form_builder.rs @@ -1,8 +1,8 @@ use crate::{ controls::{ - BuiltControlData, BuiltVanityControlData, ControlBuilder, ControlData, ControlRenderData, - FieldSetter, ParseFn, RenderFn, ValidationCb, ValidationFn, VanityControlBuilder, - VanityControlData, + BuilderFn, BuiltControlData, BuiltVanityControlData, ControlBuilder, ControlData, + ControlRenderData, FieldSetter, ParseFn, RenderFn, ValidationCb, ValidationFn, + VanityControlBuilder, VanityControlData, }, form::{Form, FormToolData, FormValidator}, styles::FormStyle, @@ -52,20 +52,20 @@ impl FormBuilder { pub(crate) fn new_vanity( mut self, - builder: impl Fn(VanityControlBuilder) -> VanityControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { let vanity_builder = VanityControlBuilder::new(C::default()); - let control = builder(vanity_builder); + let control = builder(vanity_builder, &self.cx); self.add_vanity(control); self } pub(crate) fn new_control( mut self, - builder: impl Fn(ControlBuilder) -> ControlBuilder, + builder: impl BuilderFn, CX>, ) -> Self { let control_builder = ControlBuilder::new(C::default()); - let control = builder(control_builder); + let control = builder(control_builder, &self.cx); self.add_control(control); self }