Skip to main content

dioxus_web/events/
before_input.rs

1use dioxus_html::{HasBeforeInputData, InputType};
2use web_sys::{Element, InputEvent};
3
4use super::WebEventExt;
5
6pub(crate) struct WebBeforeInputData {
7    element: Element,
8    event: InputEvent,
9}
10
11impl WebBeforeInputData {
12    pub fn new(element: Element, event: InputEvent) -> Self {
13        Self { element, event }
14    }
15}
16
17impl HasBeforeInputData for WebBeforeInputData {
18    fn input_type(&self) -> InputType {
19        InputType::from(self.event.input_type().as_str())
20    }
21
22    fn data(&self) -> Option<String> {
23        self.event.data()
24    }
25
26    fn is_composing(&self) -> bool {
27        self.event.is_composing()
28    }
29
30    fn value(&self) -> String {
31        super::editable_element_value(&self.element).unwrap_or_default()
32    }
33
34    fn as_any(&self) -> &dyn std::any::Any {
35        &self.event as &dyn std::any::Any
36    }
37}
38
39impl WebEventExt for dioxus_html::BeforeInputData {
40    type WebEvent = web_sys::InputEvent;
41
42    #[inline(always)]
43    fn try_as_web_event(&self) -> Option<Self::WebEvent> {
44        self.downcast::<web_sys::InputEvent>().cloned()
45    }
46}