dioxus_web/events/
before_input.rs1use 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}