minor fixes

This commit is contained in:
Mitchell Marino 2024-04-19 17:29:18 -05:00
parent 40dc1d8cdc
commit bc1216ef26
2 changed files with 10 additions and 7 deletions

View File

@ -11,13 +11,13 @@ pub mod text_input;
// TODO: change to returning an Option<String> // TODO: change to returning an Option<String>
pub trait ValidationFn<FDT>: Fn(&FDT) -> Result<(), String> + 'static {} pub trait ValidationFn<FDT>: Fn(&FDT) -> Result<(), String> + 'static {}
pub trait ParseFn<CR, FDT>: Fn(&CR) -> Result<FDT, String> + 'static {} pub trait ParseFn<CR, FDT>: Fn(CR) -> Result<FDT, String> + 'static {}
pub trait UnparseFn<CR, FDT>: Fn(&FDT) -> CR + 'static {} pub trait UnparseFn<CR, FDT>: Fn(&FDT) -> CR + 'static {}
pub trait FieldFn<FD, FDT>: Fn(&mut FD) -> &mut FDT + 'static {} pub trait FieldFn<FD, FDT>: Fn(&mut FD) -> &mut FDT + 'static {}
// implement the traits for all valid types // implement the traits for all valid types
impl<FDT, T> ValidationFn<FDT> for T where T: Fn(&FDT) -> Result<(), String> + 'static {} impl<FDT, T> ValidationFn<FDT> for T where T: Fn(&FDT) -> Result<(), String> + 'static {}
impl<CR, FDT, F> ParseFn<CR, FDT> for F where F: Fn(&CR) -> Result<FDT, String> + 'static {} impl<CR, FDT, F> ParseFn<CR, FDT> for F where F: Fn(CR) -> Result<FDT, String> + 'static {}
impl<CR, FDT, F> UnparseFn<CR, FDT> for F where F: Fn(&FDT) -> CR + 'static {} impl<CR, FDT, F> UnparseFn<CR, FDT> for F where F: Fn(&FDT) -> CR + 'static {}
impl<FD, FDT, F> FieldFn<FD, FDT> for F where F: Fn(&mut FD) -> &mut FDT + 'static {} impl<FD, FDT, F> FieldFn<FD, FDT> for F where F: Fn(&mut FD) -> &mut FDT + 'static {}

View File

@ -231,7 +231,7 @@ impl<FD: FormData, FS: FormStyle> FormBuilder<FD, FS> {
let fd = builder.fd.clone(); let fd = builder.fd.clone();
let value_setter = move |value| { let value_setter = move |value| {
// TODO: also do this on a submit somehow // TODO: also do this on a submit somehow
let parsed = match parse_fn(&value) { let parsed = match parse_fn(value) {
Ok(p) => p, Ok(p) => p,
Err(e) => { Err(e) => {
validation_signal_set.set(Err(e)); validation_signal_set.set(Err(e));
@ -242,14 +242,17 @@ impl<FD: FormData, FS: FormStyle> FormBuilder<FD, FS> {
// parse succeeded, update value and validate // parse succeeded, update value and validate
let field_fn = field_fn.clone(); // move let field_fn = field_fn.clone(); // move
let validation_fn = validation_fn.clone(); // move let validation_fn = validation_fn.clone(); // move
// TODO: change this to a get then set, so that if the validation fails,
// The value is not actually updated
fd.update(move |fd| { fd.update(move |fd| {
let field = field_fn(fd); let field = field_fn(fd);
*field = parsed; *field = parsed;
validation_fn if let Some(ref validation_fn) = validation_fn {
.as_ref() let validation_result = (validation_fn)(fd);
.and_then(|vfn| vfn(fd).err()) validation_signal_set.set(validation_result);
.map(|e| validation_signal_set.set(Err(e))); }
}); });
}; };
let value_setter = Box::new(value_setter); let value_setter = Box::new(value_setter);