Skip to main content

orbital_base_components/form/rules/
switch.rs

1use std::ops::Deref;
2
3use leptos::prelude::*;
4
5use super::{FieldValidationState, Rule};
6
7#[derive(Debug, Default, PartialEq, Clone, Copy)]
8pub enum SwitchRuleTrigger {
9    #[default]
10    Change,
11}
12
13pub struct SwitchRule(Rule<bool, SwitchRuleTrigger>);
14
15impl SwitchRule {
16    pub fn validator(
17        f: impl Fn(&bool, Signal<Option<String>>) -> Result<(), FieldValidationState>
18            + Send
19            + Sync
20            + 'static,
21    ) -> Self {
22        Self(Rule::validator(f))
23    }
24
25    pub fn with_trigger(self, trigger: SwitchRuleTrigger) -> Self {
26        Self(Rule::with_trigger(self.0, trigger))
27    }
28}
29
30impl Deref for SwitchRule {
31    type Target = Rule<bool, SwitchRuleTrigger>;
32
33    fn deref(&self) -> &Self::Target {
34        &self.0
35    }
36}