1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
use atomic_hooks::StateAccess; use seed::prelude::*; pub trait StateAccessEventHandlers<T> where T: 'static, { fn input_ev<F: FnOnce(&mut T, String) -> () + 'static + Clone,Ms : 'static,>( &self, event: Ev, func: F, ) -> seed::EventHandler<Ms>; fn mouse_ev< F: FnOnce(&mut T, web_sys::MouseEvent) -> () + 'static + Clone, Ms : 'static, >( &self, event: Ev, func: F, ) -> seed::EventHandler<Ms>; fn on_click< F: FnOnce(&mut T) -> () + 'static + Clone, Ms : 'static, >( &self, func: F, ) -> seed::EventHandler<Ms>; fn on_input< F: FnOnce(&mut T, String) -> () + 'static + Clone, Ms : 'static, >( &self, func: F, ) -> seed::EventHandler<Ms>; } impl<T> StateAccessEventHandlers<T> for StateAccess<T> where T: 'static, { fn input_ev<F: FnOnce(&mut T, String) -> () + 'static + Clone ,Ms : 'static,>( &self, event: Ev, func: F, ) -> seed::EventHandler<Ms> { let accessor = *self; input_ev(event, move |text| { accessor.update(|val| func(val, text)); }) } fn mouse_ev< F: FnOnce(&mut T, web_sys::MouseEvent) -> () + 'static + Clone, Ms : 'static, >( &self, event: Ev, func: F, ) -> seed::EventHandler<Ms> { let accessor = *self; mouse_ev(event, move |m_ev| { accessor.update(|val| func(val, m_ev)); }) } fn on_click< F: FnOnce(&mut T) -> () + 'static + Clone, Ms : 'static, >( &self, func: F, ) -> seed::EventHandler<Ms> { let accessor = *self; mouse_ev(Ev::Click, move |_| { accessor.update(|val| func(val)); }) } fn on_input<F: FnOnce(&mut T, String) -> () + 'static + Clone ,Ms : 'static,>( &self, func: F, ) -> seed::EventHandler<Ms> { let accessor = *self; input_ev(Ev::Input, move |text| { accessor.update(|val| func(val, text)); }) } }