fix: create cleanup handlers for lists
This commit is contained in:
1 parent
22d2c96520
commit
5f6e0edab2
3 files changed
+23
-5
No files matched your search
@@ -93,6 +93,12 @@ pub fn use_selectable_list(
|
|||||||
|
|
||||||
validation_context.validators.update(|list| list.push(validator.clone()));
|
validation_context.validators.update(|list| list.push(validator.clone()));
|
||||||
|
|
||||||
|
on_cleanup(move || {
|
||||||
|
validation_context.validators.update(|list| {
|
||||||
|
list.retain(|v| *v.get_untracked().input_name != *validator.get_untracked().input_name)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
ListController {
|
ListController {
|
||||||
|
|||||||
@@ -96,13 +96,19 @@ pub fn RadioList(
|
|||||||
dirty.get() && matches!(error.get(), ValidationState::Invalid(_))
|
dirty.get() && matches!(error.get(), ValidationState::Invalid(_))
|
||||||
});
|
});
|
||||||
|
|
||||||
let input_state = InputState::new(
|
let input_state = RwSignal::new(InputState::new(
|
||||||
data_member.get_untracked(),
|
data_member.get_untracked(),
|
||||||
error.clone(),
|
error.clone(),
|
||||||
dirty.clone()
|
dirty.clone()
|
||||||
);
|
));
|
||||||
|
|
||||||
validation_context.validators.update(|list| list.push(RwSignal::new(input_state)));
|
validation_context.validators.update(|list| list.push(input_state));
|
||||||
|
|
||||||
|
on_cleanup(move || {
|
||||||
|
validation_context.validators.update(|list| {
|
||||||
|
list.retain(|v| *v.get_untracked().input_name != *input_state.get_untracked().input_name)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
//#region Render Logic
|
//#region Render Logic
|
||||||
|
|||||||
@@ -53,12 +53,18 @@ pub fn Select(
|
|||||||
let dirty = RwSignal::new(false);
|
let dirty = RwSignal::new(false);
|
||||||
let show_errors = Signal::derive(move || dirty.get() && matches!(error.get(), ValidationState::Invalid(_)));
|
let show_errors = Signal::derive(move || dirty.get() && matches!(error.get(), ValidationState::Invalid(_)));
|
||||||
|
|
||||||
let input_state = InputState::new(data_member.get(), error.clone(), dirty.clone());
|
let input_state = RwSignal::new(InputState::new(data_member.get(), error.clone(), dirty.clone()));
|
||||||
|
|
||||||
let validation_context = use_validation_context()
|
let validation_context = use_validation_context()
|
||||||
.expect("Could not find FormValidationRegistry context");
|
.expect("Could not find FormValidationRegistry context");
|
||||||
|
|
||||||
validation_context.validators.update(|list| list.push(RwSignal::new(input_state)));
|
validation_context.validators.update(|list| list.push(input_state));
|
||||||
|
|
||||||
|
on_cleanup(move || {
|
||||||
|
validation_context.validators.update(|list| {
|
||||||
|
list.retain(|v| *v.get_untracked().input_name != *input_state.get_untracked().input_name)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
//#region Event Logic
|
//#region Event Logic
|
||||||
|
|||||||
Reference in new issue
Block a user