material_dioxus/text_inputs/
mod.rs1#[cfg(feature = "textfield")]
2mod textfield;
3#[cfg(feature = "textfield")]
4pub use textfield::*;
5
6#[cfg(any(feature = "textfield", feature = "textarea"))]
7pub(crate) mod validity_state;
8#[cfg(any(feature = "textfield", feature = "textarea"))]
9pub use validity_state::ValidityState;
10
11#[cfg(any(feature = "textfield", feature = "textarea"))]
12pub(crate) mod text_field_type;
13#[cfg(any(feature = "textfield", feature = "textarea"))]
14pub use text_field_type::*;
15
16#[cfg(feature = "textarea")]
17mod textarea;
18#[cfg(feature = "textarea")]
19pub use textarea::*;
20
21#[cfg(any(feature = "textfield", feature = "textarea"))]
22pub use web_sys::ValidityState as NativeValidityState;
23
24use std::rc::Rc;
25
26use gloo::events::EventListener;
27use wasm_bindgen::JsValue;
28use web_sys::Event;
29
30use crate::StaticCallback;
31
32#[cfg(any(feature = "textfield", feature = "textarea"))]
33pub(crate) type ValidityTransformFn = dyn Fn(String, NativeValidityState) -> ValidityState;
34
35#[cfg(any(feature = "textfield", feature = "textarea"))]
36#[derive(Clone)]
37pub struct ValidityTransform(pub(crate) Rc<ValidityTransformFn>);
39
40#[cfg(any(feature = "textfield", feature = "textarea"))]
41impl ValidityTransform {
42 pub fn new<F: Fn(String, NativeValidityState) -> ValidityState + 'static>(
43 func: F,
44 ) -> ValidityTransform {
45 ValidityTransform(Rc::new(func))
46 }
47}
48
49impl PartialEq for ValidityTransform {
50 #[allow(clippy::vtable_address_comparisons)]
51 fn eq(&self, other: &Self) -> bool {
52 Rc::ptr_eq(&self.0, &other.0)
53 }
54}
55
56fn set_on_input_handler(
57 target: &web_sys::Element,
58 callback: StaticCallback<String>,
59 convert: impl Fn((Event, JsValue)) -> String + 'static,
60) -> EventListener {
61 EventListener::new(target, "input", move |event: &Event| {
62 let js_value = JsValue::from(event);
63
64 callback.call(convert((event.clone(), js_value)))
65 })
66}