generated from mitchell/rust_template
Add context #27
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn checkbox<FDT: Clone + PartialEq + 'static>(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
ControlBuilder<FD, FS, CheckboxData, FDT>,
|
||||
) -> ControlBuilder<FD, FS, CheckboxData, FDT>,
|
||||
builder: impl BuilderFn<ControlBuilder<FD, FS, CheckboxData, FDT>, CX>,
|
||||
) -> Self {
|
||||
self.new_control(builder)
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
use super::{ControlBuilder, ControlData};
|
||||
use super::{BuilderFn, ControlBuilder, ControlData};
|
||||
use crate::{styles::FormStyle, FormBuilder, FormToolData};
|
||||
|
||||
impl<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
@ -15,7 +15,7 @@ impl<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
|
||||
pub fn custom_default<CC: Default + ControlData, FDT: Clone + PartialEq + 'static>(
|
||||
self,
|
||||
builder: impl Fn(ControlBuilder<FD, FS, CC, FDT>) -> ControlBuilder<FD, FS, CC, FDT>,
|
||||
builder: impl BuilderFn<ControlBuilder<FD, FS, CC, FDT>, CX>,
|
||||
) -> Self {
|
||||
self.new_control(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn heading(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
VanityControlBuilder<FD, FS, HeadingData>,
|
||||
) -> VanityControlBuilder<FD, FS, HeadingData>,
|
||||
builder: impl BuilderFn<VanityControlBuilder<FD, FS, HeadingData>, CX>,
|
||||
) -> Self {
|
||||
self.new_vanity(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn hidden<FDT: Clone + PartialEq + 'static>(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
ControlBuilder<FD, FS, HiddenData, FDT>,
|
||||
) -> ControlBuilder<FD, FS, HiddenData, FDT>,
|
||||
builder: impl BuilderFn<ControlBuilder<FD, FS, HiddenData, FDT>, CX>,
|
||||
) -> Self {
|
||||
self.new_control(builder)
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@ pub mod submit;
|
||||
pub mod text_area;
|
||||
pub mod text_input;
|
||||
|
||||
pub trait BuilderFn<B, CX>: Fn(B, &CX) -> B {}
|
||||
pub trait ValidationFn<FDT>: Fn(&FDT) -> Result<(), String> + 'static {}
|
||||
pub trait ValidationCb: Fn() -> bool + 'static {}
|
||||
pub trait ParseFn<CR, FDT>: Fn(CR) -> Result<FDT, String> + 'static {}
|
||||
@ -30,6 +31,7 @@ pub trait RenderFn<FS, FD>:
|
||||
}
|
||||
|
||||
// implement the traits for all valid types
|
||||
impl<B, CX, T> BuilderFn<B, CX> for T where T: Fn(B, &CX) -> B {}
|
||||
impl<FDT, T> ValidationFn<FDT> for T where T: Fn(&FDT) -> Result<(), String> + 'static {}
|
||||
impl<T> ValidationCb for T where T: Fn() -> bool + 'static {}
|
||||
impl<CR, FDT, F> ParseFn<CR, FDT> for F where F: Fn(CR) -> Result<FDT, String> + 'static {}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn output(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
VanityControlBuilder<FD, FS, OutputData>,
|
||||
) -> VanityControlBuilder<FD, FS, OutputData>,
|
||||
builder: impl BuilderFn<VanityControlBuilder<FD, FS, OutputData>, CX>,
|
||||
) -> Self {
|
||||
self.new_vanity(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn radio_buttons<FDT: Clone + PartialEq + 'static>(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
ControlBuilder<FD, FS, RadioButtonsData, FDT>,
|
||||
) -> ControlBuilder<FD, FS, RadioButtonsData, FDT>,
|
||||
builder: impl BuilderFn<ControlBuilder<FD, FS, RadioButtonsData, FDT>, CX>,
|
||||
) -> Self {
|
||||
self.new_control(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn select<FDT: Clone + PartialEq + 'static>(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
ControlBuilder<FD, FS, SelectData, FDT>,
|
||||
) -> ControlBuilder<FD, FS, SelectData, FDT>,
|
||||
builder: impl BuilderFn<ControlBuilder<FD, FS, SelectData, FDT>, CX>,
|
||||
) -> Self {
|
||||
self.new_control(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn slider<FDT: Clone + PartialEq + 'static>(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
ControlBuilder<FD, FS, SliderData, FDT>,
|
||||
) -> ControlBuilder<FD, FS, SliderData, FDT>,
|
||||
builder: impl BuilderFn<ControlBuilder<FD, FS, SliderData, FDT>, CX>,
|
||||
) -> Self {
|
||||
self.new_control(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn spacer(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
VanityControlBuilder<FD, FS, SpacerData>,
|
||||
) -> VanityControlBuilder<FD, FS, SpacerData>,
|
||||
builder: impl BuilderFn<VanityControlBuilder<FD, FS, SpacerData>, CX>,
|
||||
) -> Self {
|
||||
self.new_vanity(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn stepper<FDT: Clone + PartialEq + 'static>(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
ControlBuilder<FD, FS, StepperData, FDT>,
|
||||
) -> ControlBuilder<FD, FS, StepperData, FDT>,
|
||||
builder: impl BuilderFn<ControlBuilder<FD, FS, StepperData, FDT>, CX>,
|
||||
) -> Self {
|
||||
self.new_control(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn submit(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
VanityControlBuilder<FD, FS, SubmitData>,
|
||||
) -> VanityControlBuilder<FD, FS, SubmitData>,
|
||||
builder: impl BuilderFn<VanityControlBuilder<FD, FS, SubmitData>, CX>,
|
||||
) -> Self {
|
||||
self.new_vanity(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn text_area<FDT: Clone + PartialEq + 'static>(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
ControlBuilder<FD, FS, TextAreaData, FDT>,
|
||||
) -> ControlBuilder<FD, FS, TextAreaData, FDT>,
|
||||
builder: impl BuilderFn<ControlBuilder<FD, FS, TextAreaData, FDT>, CX>,
|
||||
) -> Self {
|
||||
self.new_control(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
pub fn text_input<FDT: Clone + PartialEq + 'static>(
|
||||
self,
|
||||
builder: impl Fn(
|
||||
ControlBuilder<FD, FS, TextInputData, FDT>,
|
||||
) -> ControlBuilder<FD, FS, TextInputData, FDT>,
|
||||
builder: impl BuilderFn<ControlBuilder<FD, FS, TextInputData, FDT>, CX>,
|
||||
) -> Self {
|
||||
self.new_control(builder)
|
||||
}
|
||||
|
||||
@ -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<FD: FormToolData, FS: FormStyle, CX: 'static> FormBuilder<FD, FS, CX> {
|
||||
|
||||
pub(crate) fn new_vanity<C: VanityControlData + Default>(
|
||||
mut self,
|
||||
builder: impl Fn(VanityControlBuilder<FD, FS, C>) -> VanityControlBuilder<FD, FS, C>,
|
||||
builder: impl BuilderFn<VanityControlBuilder<FD, FS, C>, 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<C: ControlData + Default, FDT: Clone + PartialEq + 'static>(
|
||||
mut self,
|
||||
builder: impl Fn(ControlBuilder<FD, FS, C, FDT>) -> ControlBuilder<FD, FS, C, FDT>,
|
||||
builder: impl BuilderFn<ControlBuilder<FD, FS, C, FDT>, 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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user